Linux中的硬连接、软连接
1. 基础知识
目录/文件的存储都分为元数据和真实数据,分别存储在inode和数据块中。
inode的元数据:记录文件的属性信息,但并不包括目录名和文件名信息(该细节可能因流派、版本而有区别)。
数据块:实际的数据;目录的数据块中记录其下目录、文件的inode,目录名,文件名等信息。
目录和文件关系的建立:目录中的数据块信息,/目录记录其下目录、文件的inode信息,/etc目录记录也如此,循环向下,建立起文件系统。
2. 原理
硬连接:只能针对一个文件系统内的文件建立硬连接。
建立后,连接文件所在目录增加一条原文件的文件关联数据(猜测为:文件<--->inode对应关系),并不分配新的inode和块给建立的连接文件,不要求分配新空间。
同时,原文件的inode会增加一条指向该inode的记录,数量上加1。(猜测,通过建立n个硬连接时,ls得到n+1的连接数推断。)
软连接:可针对目录或文件建立软连接。
建立一个文件,文件内容记录要指向的目录/文件。建立文件需分配inode和块,文件大小为建立连接时ln -s src dst中src的大小,如src为:/home/ap/patrol,则大小为15个字节。
3. 建立方法
硬连接:ln 原文件 硬连接文件
软连接:ln -s 原文件 软连接文件
4. 显示输出
主要通过ls命令查看。
ls -l中的第二项会显示目录\文件的直接子目录数(d,-,l中属性为d的)或硬连接数,目前还没有想明白如何统一该项的含义。
为目录时:该项为etc下所有子目录的数量,可通过计算ls -al /etc下所有属性开头为d的目录数量(包括. 和 ..目录)获得。
为文件时:该项为硬连接数,即为指向该文件inode的连接数量。