链接是平时很常用的东西,它可以快速定位到文件真正的所在位置。运行起来也跟运行真正的所在文件一般无二,Linux下的链接分为软链接和硬(实体)链接。但是介绍链接之前,我们需要对inode号有一定的了解,我们先开看看inode是什么吧!
Linux的EXT文件系统可以分为以下三部分:
- data block (数据区块)
- inode table (inode 表格)
- Superblock (超级区块)
一个文件/目录一旦被创建,就有相关信息存在(权限信息,属主属组、创建日期等等)——我们称为元数据,而这些元数据,就存放于inode block中。
可以这么说:一个文件,具有两种信息,一种是文件数据,另一个是元数据。 每当创建一个文件,就会分配一个inode编号,inode号指向每一个文件。
命令 | 作用 |
---|---|
Ls -I [路径] | 查看inode_block |
df -I | 查看inode信息(inode编号) |
软链接
链接的源文件必须写成能找到该链接文件的路径,这样,才能形成链接。我们可以把Linux下的软链接视为Widows的快捷方式,其作用也相似。
命令 | |
---|---|
Ln -s [源文件] [链接文件] | 创建软链接,等同于快捷方式。 |
软链接有以下特点:
- 修改源文件,链接文件里面的内容会更改,反之亦然
- 删除链接文件,对源文件没影响;删改源文件,链接文件会失效。
- 软链接是指向文件名的
- 软链接的源文件和所创建的链接文件inode号并不相同。
Ln命令参数
- 注意 -s 参数的介绍: 如果没有添加s参数,默认是创建硬连接
硬链接
从上面 ln 命令中的 -s 参数,我们知道了还有硬链接这么一个东东,我们可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。
我们每添加一个硬链接,该文件的inode连接数就会增加1;而且只有当该文件的inode连接数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件inode的指针,因此即便原始文件被删除,依然可以通过其他硬链接文件来访问。
- 可以发现该文件的硬连接数为2,证明我们创建的是硬连接
硬连接的特点:
- 硬链接的源文件和所创建的链接文件inode号相同
- 修改源文件,链接文件里面的内容会更改,反之亦然
- 删除链接文件,对源文件没影响;删改源文件,对链接文件也无影响。
这么看来,硬连接好像比软链接强很多,有一句话这么说:存在即合理。所以啊,其实硬连接是有他的不到之处的,比如:不能跨文件系统创建、不能链接目录。
所以日常生活中,软链接使用的频率不低于硬链接,我们可以从需求的角度思考,使用什么方式的链接比较好。