如何理解Linux软链接和硬链接?

发布者:上海IT外包来源:http://www.lanmon.net点击数:1321

介绍
我们的现代操作系统需要防止程序崩溃导致信息丢失以及将信息存储在文件中的需要。并且可以通过多个进程同时读取文件。在Linux中,所有资源和外围设备都被抽象为文件,因此Linux中有“一切都是文件”的功能。当然,有文件,这绝对不够。将所有文档放在一起并管理它们是不可能的。它太混乱,难以管理和维护。 Linux引入了目录的概念,可以在Windows中将其称为文件夹。目录的引入将使Linux根文件系统看起来像分层目录树。如下所示:
什么是目录?
在Linux中,“一切都是文件”,所以这个问题非常好回答:目录也是一个文件。目录中的文件名记录在目录中。由于它是一个文件,如果您创建一个与当前目录中的文件或目录同名的目录,它肯定无法创建。
好了,现在我们已经找到了目录的概念,让我们往下看。
硬链接和软链接有什么区别?
在Linux中表示文件的方式由两部分表示:用户数据和元数据。什么是用户数据?用户数据是记录真实文件内容的数据。这些数据存储在相同大小的文件块中。
元数据?它实际上是此文件的附加信息属性,例如:创建时间,文件大小等。我们使用索引(inode)来表示每个不同文件的元数据(当然,inode也是元数据的一部分)。在Linux中,inode是文件的唯一标识符,而不是文件名。下图显示了如何按文件名查找文件的内容。注意:文件名不包含在元数据中。文件名只是为了方便用户识别和记忆。
我可以使用什么命令来查看inode编号?
可以使用stat和ls -i命令查看它,如下图所示:
什么是硬链接?
硬链接是通过inode的连接。也就是说,有多个文件名指向同一个inode。这使得可以创建到重要文件的硬链接以防止“错误删除”。命令:
链接oldfile newfile
您可以创建硬链接。硬链接的inode是相同的,但文件名不同,所以它有一些功能:
文件具有相同的inode和数据块;
无法创建指向不存在的文件的硬链接
无法跨文件系统创建(因为inode在各自的文件系统下是唯一的,因此跨文件系统会发生inode重复)
无法创建目录,只能创建文件
如果删除硬链接文件,它不会影响其他inode文件(链接计数器存在于inode中,删除硬链接相当于减去一个计数器,反之亦然。直到它为0,删除inode)
例如:
#ls -li
总计0
//只能创建指向现有文件的硬链接
#link test.file test_hard.link
链接:无法创建链接`test_hard.link'到`test.file':没有这样的文件或目录
#echo'这是一个原始文件'>
TEST.FILE
#cat test.file
这是一个原始文件
#stat test.file
文件:`test.file'
大小: 25块: 8 IO块: 4096常规文件
器件: 807h/2055d Inode: 660650链接: 2
访问:(0644/-rw-r  -  r--)Uid:(0/root)Gid:(0/root)
.
//文件具有相同的inode编号和数据块
#link test.file test_hard.link | ls -li
总计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:无法创建test_hard链接`/root/bfile.txt'=>
`/dev/input/event5':
跨设备链接无效
//无法创建到目录的硬连接
#mkdir -p test.dir/test
#ln test.dir/test_hardlink.dir
Ln:`test.dir /': test_hard链接不允许用于目录
#ls -iF
660650 test_hard.link 657948 test.dir/660650 test.file
具体说明可以参考硬链接的5点特征。
什么是软链接?
软连接与硬链接完全不同,硬链接是指向数据块中记录的另一个文件的路径名的指针。可以理解,软连接实际上是普通文件,但他的内容非常特殊。因此,软链接具有自己的inode编号和数据块。然后我总结了软连接的特点:
软链接具有自己的文件属性
可以创建不存在的文件
软链接可以跨文件系统
可以为目录创建软链接
软链接创建不会导致链接计数器增加,因为它不是相同的inode
如果链接文件被删除,则链接没有意义,但可以重新创建。
下图显示了下一个软链接的访问过程:
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部