Linux 把每个文件的权限与属性记录在 inode("索引节点:index node ") 中,而且每个文件占用一个独立的 inode 表格,该表格的默认大小为 128 字节。里面记录着如下信息 :
1 文件的访问权限(read、write、execute)
2 该文件的所有者与所属组(owner、group)
3 该文件的大小(size)
4 该文件的创建或内容修改时间(ctime)
5 该文件的最后一次访问时间(atime)
6 该文件的修改时间(mtime)
7 文件的特殊权限(SUID、SGID、SBIT)
8 该文件的真实数据地址(point)。
软连接
类似windows下的“快捷方式”,占有独立的inode和文件。是个独立的文件,文件类型为l。 即软链接。能链接目录,也能跨文件系统链接,源文件删除后,软链接失效。
~/test$ ls -li
总用量 4
22829571 lrwxrwxrwx 1 huatai sztozed 8 12月 22 17:28 testSoftLink -> test.txt
22829568 -rw-r--r-- 1 huatai sztozed 22 12月 22 17:27 test.txt
如图可以看到,软连接的inode(第一列),和源文件的inode是不一样的,这表明,软连接是个独立的文件,它本质上是个文本文件,其中包含源文件的位置信息。因此,删除软连接,对源文件不会有影响,但是,删除源文件,软连接也会失效。
~/test$ cat testSoftLink
This is file test.txt
~/test$ rm test.txt
~/test$ cat testSoftLink
cat: testSoftLink: 没有那个文件或目录
硬链接
指向源文件inode的指针,系统不会为它单独分配inode和文件。所以硬链接和源文件实际是同一个文件,只是名字不同。
~/test$ ls -li
总用量 8
22829571 -rw-r--r-- 2 huatai sztozed 22 12月 22 17:42 testHardLink
22829571 -rw-r--r-- 2 huatai sztozed 22 12月 22 17:42 test.txt
可以看到,硬连接和源文件的inode一致,这表明,硬链接不是一个文件,他和源文件一样,只是指向文件inode的指针。所以,删除源文件或者硬连接后,文件内容依旧可以访问。因为,Linux中,只有inode连接数为0,它才会被彻底删除。
如下,可通过stat指令查看文件inode信息
~/test$ stat test.txt
文件:test.txt
大小:22 块:8 IO 块:4096 普通文件
设备:35h/53d Inode:22829571 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 1004/ huatai) Gid:( 1001/ sztozed)
最近访问:2021-12-22 17:42:31.987541210 +0800
最近更改:2021-12-22 17:42:31.987541210 +0800
最近改动:2021-12-22 17:42:50.843323950 +0800
创建时间:-
可以看到,硬连接数为2,因此可以把文件名,也理解为硬连接。此时删除源文件,硬连接数变为1。依旧可以通过硬连接访问文件内容。
~/test$ rm test.txt
~/test$ stat testHardLink
文件:testHardLink
大小:22 块:8 IO 块:4096 普通文件
设备:35h/53d Inode:22829571 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1004/ huatai) Gid:( 1001/ sztozed)
最近访问:2021-12-22 17:42:31.987541210 +0800
最近更改:2021-12-22 17:42:31.987541210 +0800
最近改动:2021-12-22 17:49:56.950390580 +0800
创建时间:-
~/test$ cat testHardLink
This is file test.txt
可以理解为,文件名和硬连接都是两个指向文件inode的指针,删除任何一个,都可以通过另一个访问文件内容,两个都删除,文件内容被彻底删除。