Linux中软连接和硬链接是什么意思

106次阅读
没有评论

共计 3149 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章主要为大家展示了“Linux 中软连接和硬链接是什么意思”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“Linux 中软连接和硬链接是什么意思”这篇文章吧。

  简介

我们现代的操作系统需要防止程序崩溃导致信息丢失,需要将信息存储在文件之中。而且文件能够被多个进程同时读取。在 Linux 中所以的资源,外设都抽象成了文件,所以就有了 Linux 中“一切皆文件”的特性。当然有文件,肯定是不够的,总不能把所有的文件放在一起管理,实在是太乱,不易管理维护。Linux 就引入了目录的概念,在 Windows 中可以称之为文件夹。目录的引入就会让 Linux 的根文件系统外观上变成了一个层次分明的目录树。如下图:

目录是什么?

在 Linux 中“一切皆文件”,所以这个问题很好回答:目录也是文件。目录中记录的是目录下文件名。那既然是文件,如果在创建目录的时候,与当前目录下的文件或目录重名,就肯定会创建失败。

好了,既然搞清楚了目录的概念,我们接着往下看。

硬链接和软连接区别?

在 Linux 中表示一个文件的方式是通过两个部分来分别表示的:用户数据 (user data) 与元数据(meta  data)。什么是用户数据呢? 用户数据就是记录真实文件内容的数据,这些数据是存放在一个个大小相等的文件数据块中(data block)。

元数据呢? 其实就是这个文件的附加信息属性,例如:创建时间,文件大小等等这类信息。我们用索引号 (inode) 来表示每一个不同文件的元数据(当然 inode 也是元数据的一部分)。在 Linux 中,inode 才是表示文件的 *** 标识,而不是文件名。下图展示了怎样通过文件名来找到文件内容的。注意:元数据中并不包含文件名。文件名只是为了方便用户识别和记忆罢了。

使用什么命令可以查看 inode 号?

可以使用 stat 和 ls -i 命令查看,如下图所示:

什么是硬链接?

硬链接是指通过索引节点来进行连接。也就是存在多个文件名指向同一个 inode。这样就可以将重要的文件建立硬链接,来防止“误删”的操作。

命令:

link oldfile newfile

可以创建硬链接。硬链接的 inode 是相同的,但是文件名不同,所以它有一些特性:

鸿蒙官方战略合作共建——HarmonyOS 技术社区

文件有相同的 inode 和 data blocks;

不能对不存在的文件创建硬链接

不能跨文件系统创建(因为在各自文件系统下 inode 是 *** 的,当跨文件系统就会出现 inode 重复的情况发生)

不能对目录创建,只能对文件进行创建

如果删除了一个硬链接文件,并不会影响其他的同 inode 文件(inode 中存在链接计数器,删除一个硬链接相当于计数器减一,反之加一。直到为 0,删除 inode)

例如:

# ls -li total 0 //  只能对已存在的文件创建硬连接  # link test.file test_hard.link link: cannot create link `test_hard.link  to `test.file : No such file or directory # echo  This is an original file    test.file # cat test.file This is an original file # stat test.file File: `test.file  Size: 25 Blocks: 8 IO Block: 4096 regular file Device: 807h/2055d Inode: 660650 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) ... //  文件有相同的  inode  号以及  data block # link test.file test_hard.link | ls -li total 8 660650 -rw-r--r-- 2 root root 25 Sep 1 17:44 test_hard.link 660650 -rw-r--r-- 2 root root 25 Sep 1 17:44 test.file //  不能交叉文件系统  # ln /dev/input/event5 /root/bfile.txt ln: failed to create test_hard link `/root/bfile.txt  =  `/dev/input/event5 : Invalid cross-device link //  不能对目录进行创建硬连接  # mkdir -p test.dir/test # ln test.dir/ test_hardlink.dir ln: `test.dir/ : test_hard link not allowed for directory # ls -iF 660650 test_hard.link 657948 test.dir/ 660650 test.file

具体的解释可以参考硬链接的 5 点特性。

什么是软链接?

软连接就和硬链接完全不同,软连接是用户数据 (data  blocks) 中记录的是另一个文件的路径名的指向。可以理解为软连接其实就是一个普通的文件,只是他的内容非常的特殊。所以软连接有他自己的 inode 号以及 data  blocks。那我总结下软连接的特性:

鸿蒙官方战略合作共建——HarmonyOS 技术社区

软连接有自己的文件属性

可以对不存在的文件创建

软链接可以跨文件系统

软链接可以对目录创建

软链接创建不会造成链接计数器增加,因为就不是同一个 inode

若链接的文件被删除了,该链接就是没有意义了,但是也可以重新创建。

下图展示下软链接的访问过程:

例如:

# ls -li total 0 //  可对不存在的文件创建软链接  # ln -s test.file test_soft.link # ls -liF total 0 789467 lrwxrwxrwx 1 root root 8 Sep 1 18:00 test_soft.link -  test.file //  由于被指向的文件不存在,此时的软链接  test_soft.link  就是死链接  # cat test_soft.link cat: test_soft.link: No such file or directory //  创建被指向的文件  test.file,test_soft.link  恢复成正常的软链接  # echo  This is an original file_A    test.file # cat test_soft.link This is an original file_A //  对不存在的目录创建软链接  # ln -s test.dir test_soft.link.dir # mkdir -p test.dir/test # tree . -F --inodes . ├── [ 789497] test.dir/ │ └── [ 789498] test/ ├── [ 789495] test.file ├── [ 789495] test_soft.link -  test.file └── [ 789497] test_soft.link.dir -  test.dir/

以上是“Linux 中软连接和硬链接是什么意思”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计3149字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)