1、软链接文件
软链接文件和硬链接文件都属于链接文件。软链接类似于 windows 的快捷方式。
见下图例子,
上图红色框框中的 /bin 就是一个软链接文件,真正指代的是 usr/bin 。所以命令其实应该是写成 ls -l /usr/bin ,/bin/ls 其实就是 /usr/bin/ls ,几个命令都可以执行,结果也是一样的。
软链接说白了,就是在一个文件里存放另一个文件的路径,软链接的大小和路径是有关系的,路径越长,软链接占用的内存越大。来看一下在哪个文件下面软链接比较多。见下图,
这些粉绿色的文件就是软链接文件,它真正的文件就是后面指代的文件。软链接在拷贝文件的时候比较好用,可以大量节省空间。见下图,
将目录 /tmp/ 下的文件 yum.log 做个软链接到目录 /root/111/yum.log ,一开始显示权限不够,是因为有 i 或 a 权限,使用 chattr 命令将 i 和 a 权限去掉以后,就可以执行命令 ln -s /tmp/yum.log /root/111/yum.log ,将文件 /tmp/yum.log 做软链接到 /root/111/yum.log ,执行命令 ls -l /root/111/ ,就可以查看到文件 yum.log 的软链接文件和后面指代的真正文件。
综上,软链接命令就是, ln -s + 源文件 + 软链接文件 。
软链接不仅可以链接文件,也可以链接目录。见下图,
上图中,粉绿色的目录就是软链接目录,后面指代的真正目录比较特殊,是绝对路径,以根 / 开头。跟上面查看的目录 /lib64/ 不一样,目录 /lib64/ 里面的路径都是相对路径。
现在做一个实验,把 yum.log 文件做一个软链接,命名为 lyslinux.log 。见下图,
上图中的软链接就是相对路径,设置的这个软链接仅仅是在当前目录下,不过这样做会有一些弊端,如果换一台服务器之后,这个相对路径就会失效,软链接文件会打不开。所以,工作中要尽量使用绝对路径来设置软链接。
来举个例子,见下图,
上图中创建了一个 root 下不存在的文件 lyslinux.log ,然后设置软链接,查看的时候,文件变成红色的,还一直在闪,这说明这个文件是不存在的。因为这个软链接文件是当前目录下不存在的文件,见下图,
红色就是不存在的文件,接着用命令 touch 在目录 123 下面新建一个 yum.log 文件,再来查看,就恢复正常了,lyslinux.log 就变成软链接文件了。
以上,就是为了说明,做软链接的时候,要使用绝对路径。
有个工作中经常用到的例子,见下图,
df -h 这个命令是用来查看磁盘分区的,以后会讲到。现在来假设 /boot/ 磁盘的空间即将使用完全,如果空间不足,会造成很多问题,也会导致系统不能正常使用。现在就需要清理空间,才可以继续正常使用。我们可以把即将装满的磁盘 /boot/ 上的日志或文件移动到其他内存较大且使用量很少的磁盘上去,比如 / 根。但是这个操作是有前提的,不能动这个文件的路径。
我们的思路是:先将文件内容拷贝到空间较大的磁盘目录里,然后将原目录下的文件删除,这样就可以释放原目录的磁盘空间,接着做一个软链接操作将拷贝的文件软链接到原目录下,这样一来,服务在执行的时候,还是将内容写到原目录下的,但实际上是软链接到拷贝的目录上去。磁盘空间得到有效释放。
2、硬链接文件
上图中红色框框内的数字,表示有几个文件使用了和这个文件相同的 inode 号。一般文件的话,通常这个数字都是 1 ,说明没有另外一个文件使用相同的 inode 号。但是目录比较特殊,下面会有子目录,包括目录 . 和目录 .. ,这些目录的数量就是红色框框里面的数字。
现在要介绍的硬链接和目录没有关系,也就是说硬链接不支持目录,只支持文件。现在对文件 1.txt 做硬链接和软链接,见下图,
上图中,我们是对文件 1.txt 做硬链接和软链接,软链接上面说过了,可以看到软链接占用的空间非常小,才 5 KB,而硬链接占用的内存 65 KB,且和原文件 1.txt 的空间大小是一样的,创建时间也是一样的。再看一下他们俩的 inode 号,都是 33582997 。也可以看到这俩文件前面的数字都是 2 ,这说明有两个文件使用了同一个 inode 号,但实际上这个不太好区分。想找一个文件的硬链接文件不好找,除非是自己创建的,不过不好找不代表找不到,使用 find 这个命令可以找出来,后面会说。
简单来说,就是创建一个文件,这个文件和另外一个文件的 inode 号一样,这两个文件相互为硬链接文件。这两个文件是一样的,没有像软链接那样有原文件和快捷方式之分。而软链接的原文件是不能删除的,否则软链接文件就失效了。硬链接呢?见下图例子,
上图把文件 1.txt 删除掉,再查看,可以看到软链接文件显示红色,软链接后面指代的真正文件显示红色并且在闪。说明软链接文件失效,只剩下路径了。而硬链接文件还在,不受影响,只不过文件前面的 inode 号变成 1 了。所以,硬链接删不删原文件是不受影响的。
我们可以理解为,硬链接的文件名只是一个门面,真正保存信息的文件在 inode 上,见下图,
inode 是文件系统里的特殊存在,它会记录文件的属性。所以硬链接实际上就是多一个文件指向 inode ,真正的文件在 inode 里面。而且硬链接不会多占空间,因为 inode 就一个。真正占内存的就是 inode ,硬链接只是显示 inode 的一个存在,多几个都不会有什么影响。
不能对目录做硬链接,来试一下,见下图,
硬链接只能针对文件,也是有前提的,不能跨分区,见下图,
上图中的解释是,这两个分区存在相同的 inode 文件。
总结:
1、可以对文件做硬链接,不能对目录做硬链接;
2、不能跨分区做硬链接,因为每个分区都存在相同的 inode 文件。
3、硬链接可以删除,因为还有其他的文件使用了一样的 inode ,但是不能把所有相同 inode 的文件都删除掉,总要留一份的。