文章目录
- 前言
- 硬链接
- 软链接
前言
在了解软硬链接之前,可以先来了解一下磁盘以及inode到底是什么
Linux文件管理—磁盘上文件如何管理(inode)
硬链接
什么是硬链接
在Linux下,系统标识文件的唯一方式就是inode号,而对于人来说,看数字来标识文件是极其困难的,所以就有了文件名,通过文件名与inode号的相互映射,我们人就能很方便的标识文件,而文件名与inode号的相互映射就叫做硬链接。
一个文件名只能映射一个inode号,但是一个inode号可以映射很多个文件名,而这里的inode号映射的文件名的数量就叫做硬链接数。
新创建的文件myfile.c
,此时只有一个文件名myfile.c
与inode号1179710建立了映射,所以此时的硬链接数为1。
创建硬链接
创建硬链接的方式:
ln 原文件名 新文件名
此时再创建两个硬链接:
可以发现,这三个文件的属性都写着该inode号对应的硬链接数为3。
删除硬链接
那么删除掉其中几个会怎么样呢?
删除链接的方式:
unlink 文件名
or
rm 文件名
能发现该文件仍然存在,所以结论就是:删除掉硬链接后,删除的只是inode映射的文件名。
inode结构里有一个变量,该变量记录了当前硬链接的数量,我们删除文件名的时候其实是将该数字减小,当该数字减为0后,该文件才真正被删除。该技术被称为引用计数,应用极其广泛。
.和…
在我们创建一个目录后,进去会发现有两个隐藏文件,分别名为.
和..
。
发现,mydir
的硬链接数为2,进去之后发现.
和..
的文件类型是d,也就是目录类型,硬链接数还分别为2和3。
这是不是说明.
和..
都是目录呢?还说明了.
和..
分别是别的目录的硬链接。
看上图中的inode与链接数也就能够发现了,.
是上级目录的硬链接,而..
是上级目录中.
和上上级目录的硬链接。
.
和..
是OS自己对目录创建的硬链接,OS是不支持用户给目录创建硬链接的,原因就是因为用户给目录创建硬链接很有可能会导致OS/用户在遍历目录树的时候陷入死循环。
软链接
什么是软链接
软链接就如同windos下的快捷方式,软链接是一个独立的文件,有自己的文件属性和文件内容,即拥有自己的inode。
创建软链接
创建软链接的方式:
ln -s 原文件名 新文件名
可以看到,软链接soft.link有自己的inode,并且文件类型为l,也就说明它是一个软链接。
软链接的标识方法
软链接有独立的inode,也就说明它是一个独立的文件,那么文件内容是什么?它的文件内容就是目标文件的路径,而该路径就是我们创建软链接时填的原文件名,其实真正创建软链接时,用的方法是下面这种:
ln -s 原文件的绝对路径/相对路径 新文件名
一般用绝对路径居多,因为用相对路径的话,该软链接只能在该目录下使用,而采用绝对路径,软链接的位置可以随意移动。
删除软链接/目标文件
与windos系统一样,删除快捷方式并不会影响原文件,那么在linux下删除软链接也不会影响软文件。
而如果删除的是目标文件,该软链接也就失效了。
假设此时再重新创建一个同名的新的文件
软链接重新生效,也证明了软链接的内容就是目标文件的路径,但注意:此时软链接的目标文件已经是新的文件了,并不是原来的文件。