从0开始linux(25)——链接文件
欢迎来到博主的专栏:从0开始linux
博主ID:代码小豪
文章目录
- 链接文件
- 软连接
- 硬链接
链接文件
我们可以在/lib
目录下看到这种形式的文件。
目录文件的属性描述符的第一个字符为r,而普通文件的属性描述符的第一个字符则为-。而该文件的属性描述符的第一个字符则为l,我们将这种文件称为链接文件。
根据文件链接方式的不同,我们将链接文件的方法分为软连接
和硬链接
,那么不同的链接方式到底有什么不同的特性呢?
软连接
使用ln -s [目标文件] [链接文件]
指令,可以生成一个以软链接方式链接目标文件的链接文件。ln是link的缩写。
比如我们当前目录下存在一个记录着“hello world”的文本文件log.txt。我们可以使用指令:
ln -s log.txt log.link
此时我们可以发现在该路径下出现了一个名叫log.link的链接文件,查看log.link的内容,与log.txt一致。
我们使用ls -li查看log.link与log.txt的inode号。
在前一篇博客中我们已经了解了,不同的文件,其inode号也不同,这说明软连接的链接文件,是一个独立的文件。但是我们可以发现log.link与log.txt的不同之处,即log.txt和log.link的内容是一样的,但是log.link的文件大小却为7字节,log.txt的大小则是12字节。这说明log.link的实际数据,其实并非是log.txt的拷贝,那么链接文件保存的数据是什么呢?
这里我们也不卖关子了,软链接的链接文件,其文件内容是目标文件的路径,当我们对链接文件进行访问操作时,会跳转到目标文件当中,这有点像windows的快捷方式,实际上,软连接的链接文件其实就是linux的快捷方式。
在前面的博客当中,博主提到,我们使用的ls指令,rm指令,其实都是保存在/usr/bin/
路径下的。保存在/usr/bin/路径下的程序,运行不需要带路径,如果我们想要执行自己写的程序也不需要带路径就能运行,那么我们可以将创建一个在/usr/bin/路径下的链接文件,该链接文件链接的目标文件则是我们的程序,这样我们下次运行该程序时,就不需要带路径了,其实就像是windows系统将快捷方式放在桌面一样。
我们可以写一个简单的代码。
接着我们将这个文件编译,生成code.exe程序。
然后我们要创建一个在/usr/bin/路径下名为code的链接文件,注意如果我们链接文件与目标文件不在同一个路径下,使用ln命令时,要目标文件和链接文件的路径补齐。
ln -s /home/lysb666/code/code-xiaohaos-warehouse/link_file/code.exe /usr/bin/code
要注意普通用户不能再/usr/bin路径下创建文件,因此使用root账号,或者sudo指令。
如果我们在/usr/bin/路径下生成了code.exe的链接文件,那么我们就可以不带路径就能运行code.exe文件了。
我们可以删除链接文件以取消链接,也可以使用unlink指令来取消链接,其指令如下:
unlink [目标文件]
比如我们如果不想要code这个链接文件了,我们就可以使用unlink /usr/bin/code的方式取消链接。要注意权限的问题,加上sudo或者root用户即可。
硬链接
硬链接的指令为ln [目标文件] [链接文件]
,比如我们继续链接log.txt文件,生成的链接文件叫做log.hardlink,只不过这次用的是硬链接方式。
ln log.txt log.hardlink
执行成功后,输入ls -li,查看文件属性与文件对应的inode号。
我们可以发现,软连接文件log.link,其文件属性会显示出是链接属性,但是硬链接的文件log.hardlink却不会显示,而且log.hardlink与log.txt的文件属性,甚至inode号,都是一模一样的,这是为什么呢?
在前一篇博客当中,我们了解了文件名与inode号其实是一种映射关系,这个映射关系会保存在目录文件当中。而硬链接的链接文件,其实是新建一个文件名与inode的映射关系,比如硬链接之前,2234354只有一个log.txt的映射,而硬链接之后,2234354不仅仅与log.txt存在映射关系,与log.hardlink也存在映射关系,由于新建了一个映射关系,因此我们可以删除掉log.txt,只保存log.hradlink链接文件,可以发现,即使删除掉了源文件,链接文件依然可用,因为只要inode号与文件名的映射关系还在,其文件数据就不会被删除。
而且我们要注意文件属性一个数据。
上图所展示的2,其实是该文件对应的inode号,到底与几个文件名构成映射关系,我们将这个属性称为链接数。一个文件,只要其链接数不为1,那么我们将其删除,其实只是删除了文件名与inode号的映射关系,而不是删除了数据,只有当链接数变为0时,文件的数据菜式真正的被删除了。
硬链接的主要作用是用来备份文件,与拷贝文件的方式不同,拷贝文件会将源文件的内容拷贝过来,而硬链接则是仅仅新建一个文件名与inode号的映射关系,因此如果我们担心某个重要的大型文件被误删,也不想拷贝它的数据,让自己的磁盘空间变得紧张,那么就可以考虑用硬链接的方式,将大型文件进行备份。