参考资料:
http://www.ruanyifeng.com/blog/2011/12/inode.html
https://www.cnblogs.com/llife/p/11470668.html
在学习软链接和硬链接之前,有几个重要的概念需要先理解一下:inode索引节点,文件的存储方式。
linux操作系统中,使用的文件管理系统是ext4文件系统,ext4文件系统会把分区分成两大部分:1)小部分用于保存文件的inode信息(i节点),也叫索引节点编号;2)剩余的大部分用于保存block信息。
1. inode
inode也叫文件索引,是计算机中文件的标示。
打开一个文件test.txt,常规的想法是:通过文件名test.txt找到文件的存储位置。其实,在linux文件系统中,并不是这样,在文件系统中,是以inode来标示一个文件。也就是说,打开一个文件,需要通过文件名找到文件的inode文件索引,在通过inode文件索引查找到文件的真实数据。
文件的存储分2个部分:文件元信息和数据。
文件的元信息存储在inode中,包括:文件属主、文件属组、文件修改时间、文件描述、文件最后修改时间、文件大小等。除了文件名外,关于文件的描述信息都在inode中。
可以通过stat来查看文件的inode存储的详细信息,也可通过-i来查看文件的inode号:
stat test.txt
ls -lai test.txt # 得到的信息中,第一列就是文件的inode号
文件的存储方式是:扇区sector,块block。
在整个文件系统中,怎样存储inode和文件数据?信息分配在不同的扇区sector,一个扇区是512KB(0.5M),在读取数据的时候,并不会一个一个扇区的读取,而是会读取多个连续的扇区,多个连续的扇区即块block。在磁盘格式化的时候,块和inode依次分配,比如1KB或2KB的块,会分配一个inode号。
注意:
- 文件是以inode号存在于文件系统中,那么当修改文件名等操作时,并不会修改文件的inode号;
- 如果磁盘没有空间分配inode号,那么文件将创建失败。
2. 硬链接和软链接
2.1 为什么需要有软硬链接
当需要在不同的目录,用到相同的文件时,不需要在每一个目录,都放相同的文件,只需要在固定的位置放上文件,然后在其他的目录下,用ln命令链接它就可以,不必重复占用磁盘空间。
链接有硬链接和软链接。
具体用法:
ln 源文件 目标文件 # 硬链接
ln -s 源文件 目标文件 # 软链接
硬链接没有参数-s,会在选定的位置上生成一个和源文件同样大小的文件;软链接会在选定的位置上生成一个镜像文件,不会占用磁盘空间。无论是软链接还是硬链接,文件都保存同步变化。
2.2 硬链接和软链接
硬链接,如下图:
多个文件名指向同一个inode节点,当文件数据发生变化,会同时影响多个文件。其中一个文件的删除,并不会影响另外的文件,硬链接数减1,如果硬链接数为0,系统会回收空间。在这里,多个文件名指向同一个inode,即为硬链接。
对于目录文件,建立一个目录,会默认有.和..两个目录,其中.是当前目录的inode号,..是父目录的inode号,所以目录文件的硬链接数是2加上新加的硬链接数。
硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以通过对重要文件建立硬链接,防止误删重要文件。只有当文件的所有硬链接数均被删除以后,才会删除文件的数据。
软链接,如下图:
查看A的文件,会发现指向的是B文件,如果删除B文件,再次打开A文件,会提示“File not exists”。软链接是一个普通文件,只是文件的数据内容比较特殊,是另一个文件的路径名的指向,通过这种方式,可以快速定位到软链接所指向的源文件的实体。
软链接,类似于windows的快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录。
2.3 区别
- 硬链接创建的条件:
1)不允许给目录创建硬链接;
2)只有在同一文件系统中的文件,才能创建硬链接,因为在不同的文件系统中,inode号是重新计算;
3)而且只有超级用户才有创建硬链接权限。
- 软链接没有以上2个限制,甚至可以跨越不同机器,不同网络对文件进行链接。软链接的缺点在与:
1)因文件中需要有源文件的路径,如源文件更换目录位置,在访问链接文件,系统就找不到了;
2)软链接的源文件必须写成是绝对路径,硬链接没有此要求。