在了解了EXT2的构架后,我们来了解一下硬链接是什么:
说白了一个文件都有一个Inode和相应目录下的记录项,如果我们建立一个硬连接实际上是在目录下建立一个新的记录项
我们知道记录项中包含了 Inode的编号,新的记录项实际也是指向原有的Inode
我们来考虑如下:
gaopeng@bogon:~/stu/part3$ ln testkl testkl1
gaopeng@bogon:~/stu/part3$ stat testkl
File: ‘testkl’
Size: 8861 Blocks: 40 IO Block: 4096 regular file
Device: 1bh/27d Inode: 396425 Links: 2
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ gaopeng) Gid: ( 1000/ gaopeng)
Access: 2016-01-25 12:26:09.749519495 +0800
Modify: 2016-01-25 11:16:42.721510371 +0800
Change: 2016-01-25 12:26:22.909519524 +0800
Birth: -
gaopeng@bogon:~/stu/part3$ stat testkl1
File: ‘testkl1’
Size: 8861 Blocks: 40 IO Block: 4096 regular file
Device: 1bh/27d Inode: 396425 Links: 2
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ gaopeng) Gid: ( 1000/ gaopeng)
Access: 2016-01-25 12:26:09.749519495 +0800
Modify: 2016-01-25 11:16:42.721510371 +0800
Change: 2016-01-25 12:26:22.909519524 +0800
Birth: -
注意这里的 Inode: 396425硬链接和原有的文件是一致的。那么我们就考虑他们实际上通过一个Inode来指向它实际的数据块
如果要删除一个文件实际上要等到记录项都删除后才会删除。
如下:
gaopeng@bogon:~/stu/part3$ ls -l testkl
-rwxrwxr-x 2 gaopeng gaopeng 8861 Jan 25 11:16 testkl
gaopeng@bogon:~/stu/part3$ ls -l testkl1
-rwxrwxr-x 2 gaopeng gaopeng 8861 Jan 25 11:16 testkl1
可以看到这里的testkl 和已经连接testkl1 的硬连接 硬连接计数都是2
如果删除一份原有的testkl
gaopeng@bogon:~/stu/part3$ rm -rf testkl
gaopeng@bogon:~/stu/part3$ ls -l testkl1
-rwxrwxr-x 1 gaopeng gaopeng 8861 Jan 25 11:16 testkl1
而删除实际上就是删除记录项和硬连接计数-1
发现硬连接计数已经为1了,如果这里硬连接计数为0这个文件才是完全删除了。
如果存在任何一个硬连接存在换句话说一个记录项存在,文件就存在。
对于硬连接,除了RM 使用unlink 也可以达到rm 的目的,实际上rm 也是调用了unlink 函数
而软连接 就是一个快捷方式,并不需要在目录中有记录项,如果删除文件
连接就失效了,硬连接是如果存在一个连接文件及存在。
1、硬连接不允许跨文件系统
2、硬连接不允许目录,避免死循环
说白了一个文件都有一个Inode和相应目录下的记录项,如果我们建立一个硬连接实际上是在目录下建立一个新的记录项
我们知道记录项中包含了 Inode的编号,新的记录项实际也是指向原有的Inode
我们来考虑如下:
gaopeng@bogon:~/stu/part3$ ln testkl testkl1
gaopeng@bogon:~/stu/part3$ stat testkl
File: ‘testkl’
Size: 8861 Blocks: 40 IO Block: 4096 regular file
Device: 1bh/27d Inode: 396425 Links: 2
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ gaopeng) Gid: ( 1000/ gaopeng)
Access: 2016-01-25 12:26:09.749519495 +0800
Modify: 2016-01-25 11:16:42.721510371 +0800
Change: 2016-01-25 12:26:22.909519524 +0800
Birth: -
gaopeng@bogon:~/stu/part3$ stat testkl1
File: ‘testkl1’
Size: 8861 Blocks: 40 IO Block: 4096 regular file
Device: 1bh/27d Inode: 396425 Links: 2
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ gaopeng) Gid: ( 1000/ gaopeng)
Access: 2016-01-25 12:26:09.749519495 +0800
Modify: 2016-01-25 11:16:42.721510371 +0800
Change: 2016-01-25 12:26:22.909519524 +0800
Birth: -
注意这里的 Inode: 396425硬链接和原有的文件是一致的。那么我们就考虑他们实际上通过一个Inode来指向它实际的数据块
如果要删除一个文件实际上要等到记录项都删除后才会删除。
如下:
gaopeng@bogon:~/stu/part3$ ls -l testkl
-rwxrwxr-x 2 gaopeng gaopeng 8861 Jan 25 11:16 testkl
gaopeng@bogon:~/stu/part3$ ls -l testkl1
-rwxrwxr-x 2 gaopeng gaopeng 8861 Jan 25 11:16 testkl1
可以看到这里的testkl 和已经连接testkl1 的硬连接 硬连接计数都是2
如果删除一份原有的testkl
gaopeng@bogon:~/stu/part3$ rm -rf testkl
gaopeng@bogon:~/stu/part3$ ls -l testkl1
-rwxrwxr-x 1 gaopeng gaopeng 8861 Jan 25 11:16 testkl1
而删除实际上就是删除记录项和硬连接计数-1
发现硬连接计数已经为1了,如果这里硬连接计数为0这个文件才是完全删除了。
如果存在任何一个硬连接存在换句话说一个记录项存在,文件就存在。
对于硬连接,除了RM 使用unlink 也可以达到rm 的目的,实际上rm 也是调用了unlink 函数
而软连接 就是一个快捷方式,并不需要在目录中有记录项,如果删除文件
连接就失效了,硬连接是如果存在一个连接文件及存在。
1、硬连接不允许跨文件系统
2、硬连接不允许目录,避免死循环