linux中使用ll
或ls -l
命令中文件属性为l
的文件为软链接文件。链接文件分为2种类型,分别为硬链接(hard link)和软链接(symbolic link)。
linux系统读取文件时会先读取inode信息,然后根据inode信息到指定的硬盘位置读取具体的数据。inode相当于C语言中的指针,指向文件数据具体存放的位置。
硬链接是直接新建一个inode信息,这个inode信息直接指向目标文件对应的存放位置。也就是说进行硬链接时对原文件没有任何变化,只是新增了一个指向该位置的inode。但是硬链接有2个限制,第1它不能链接目录。第2它不能跨文件系统链接。
软链接是新建一个文件,当读取这个文件时会将读取的行为转发到目标文件上。如果删除了目标文件那么链接文件还是存在的,但是这个软链接文件将无法打开。如果删除软链接文件那么对于目标文件是没有任何影响的。软链接文件是一个独立的文件,只是操作系统对于读取该文件的方式与普通文件有所区别。并且目标文件可以是软链接文件,操作系统对递归查看最后的目标文件。
使用如下命令创建链接文件
ln test test_link
其中test文件为目标文件,test_link为链接文件。
如果像上面的命令一样不加-s
则创建的链接文件为硬链接。创建了硬链接文件后,即使删除了原文件也不会对链接文件有什么影响,因为硬链接文件也保有一份inode用于指向文件所处的实际数据。就相当于同一个文件有2个文件名,只要修改了文件那么另外一个文件也就修改了。表面上看起来的2个文件实际上指向的是同一个硬盘位置。
但是如果加了-s
参数创建了软链接,那么删除目标文件后,软链接也就失效了。
网友评论