目录
文件系统中的软连接和硬链接。
每个文件创建好之后,都会维护两个计数器:i_count和i_nlink。
软连接:相当于一个快捷方式。是完全的备份soft_disk.sh,inode号都不一样。创建自己的inode号指向自己的inode号,它里面的data不会放具体的数据,然后找到自己的data。(最后一个data存放之前指向文件的指针,通过指针找到inode号,找到inode号之后,最后找到data)它只认之前文件的路径,如果删除文件,就是删除文件的目录项,文件名没有了,如果创建同名的文件名,这个连接又生效,因为它只认文件的文件路径名。
创建方式为:ln -s 源文件 链接文件
- [root@localhost soft-hard]# ln -s aa aa_soft 创建连接文件(创建aa的连接文件aa_soft)
- [root@localhost soft-hard]# ls
- aa aa_soft
- [root@localhost soft-hard]# ls -ld
- drwxr-xr-x 2 root root 46 6月 14 21:33 .
- [root@localhost soft-hard]# touch bb
- [root@localhost soft-hard]# ls -ld
- drwxr-xr-x 2 root root 56 6月 14 22:59 .
- [root@localhost soft-hard]# mkdir subsoft
- [root@localhost soft-hard]# ls -ld
- drwxr-xr-x 3 root root 71 6月 14 22:59 .
- [root@localhost soft-hard]# ls -ld .
- drwxr-xr-x 3 root root 71 6月 14 22:59 .
- [root@localhost soft-hard]# ls -ld subsoft
- drwxr-xr-x 2 root root 6 6月 14 22:59 subsoft
- [root@localhost soft-hard]# ls -al subsoft/
- 总用量 0
- drwxr-xr-x 2 root root 6 6月 14 22:59 .
- drwxr-xr-x 3 root root 71 6月 14 22:59 ..
不同的目录项指向inode1。hard_disk.sh 新的目录项指向同一个inode,创建新的目录项,硬链接不能跨文件系统。
创建方式为:ln 源文件 链接文件
- [root@localhost soft-hard]# ln aa aa_soft
- ln: 无法创建硬链接"aa_soft": 文件已存在
- [root@localhost soft-hard]# ls -al
- 总用量 4
- drwxr-xr-x 2 root root 31 6月 14 20:47 .
- drwxr-xr-x. 20 root root 4096 6月 14 20:42 ..
- -rw-r--r-- 1 root root 0 6月 14 20:47 aa
- lrwxrwxrwx 1 root root 2 6月 14 20:47 aa_soft -> aa
查看i_node号:ls -i 文件名
- [root@localhost soft-hard]# ls -i aa
- 1137852 aa
- [root@localhost soft-hard]# ls -i aa_hard 查看i_node号
- 1137852 aa_hard
- [root@localhost soft-hard]# ls -i aa_soft
- 1137853 aa_soft
1、创建方式不同。软硬链接都是通过ln创建文件,如果接-s就是创建软链接,如果不接就是创建硬链接。
2、现象:删除原文件两个链接文件的区别。
最大的现象是:删除原文件的时候,软连接就失效了,但是硬链接不受影响,还能正常使用。
硬链接删除原文件,链接文件还能正常使用;软连接删除原文件,链接文件就看不到了,硬链接只是新建目录项。
3、原理:硬链接其实就是新建目录项和原文件指向同一个inode。
软链接:新建了一个文件,只是这个文件的data数据指向原文件的路径。
因为硬链接连接其实就是创建一个新的目录项,指向同一个inode,所以删除原文件的时候,就是删除原文件的目录项信息,但是硬链接指向的inode号还在那里的,所以还能访问得到;
对于软连接,如果删除软链接,软链接是从头到尾生成一个全新的文件,这个文件里面的内容指向的还是以前的源文件的目录、路径,源文件的被删除之后就获取不到了,源文件的目录项被删除之后,软链接就获取不到数据了。
4、区别:
①硬链接:不能跨文件系统创建(每个文件系统都有自己独立的inode)
不能对目录进行链接。
软链接:软链接只关注路径,所以是可以跨文件系统的。
② 硬链接不能对目录进行链接,只能对文件进行链接。
软链接没有这个要求,可以链接文件也可以链接文件夹。
硬链接:
相当于起了个别名。不会创建新的inode号,链接文件和源文件共用一个inode号,只是源文件的引用数加一;
如果删除源文件,链接文件仍然可以使用 ;
链接文件和源文件的文件类型相同;
硬链接不能跨文件系统,软链接可以;
不可以对不存在的文件和目录创建硬链接;
软链接:
相当于Windows桌面上的快捷方式。会创建新的inode号,源文件和链接文件的inode号不相同;
源文件的链接数不变,链接文件的链接数为1(不会被上一层引用);
源文件和链接文件的文件类型不同,软链接文件权限为777,文件属性有标识,访问权限真正取决于源文件权限;
删除源文件,链接文件就访问不了了;
可以对不存在的文件和目录创建软链接;
i_count 记录程序打开这个文件的数量(fd);i_nlink 记录文件的硬链接数(目录项指向)
只有当i_count和i_nlink都为0,这个inode和data的空间才会被标记未使用,这部分磁盘空间才会被释放,有时候rm删除文件,但是空间不一定会被释放的。
rm删除文件只是删除目录项,i_nlink数减1,还需要关注i_count数,看有没有进程使用当前文件。
df查看磁盘满了,但是du查看单文件大小还没有那么大。删除某些日志文件,没有重新加载服务,日志文件不会被释放。
解决办法:
1、找到进程:lsof|grep del 查看已经删除但是仍占有资源的文件
2、重启服务
清空日志文件,在进程还运行的时候,不要用删除。
可以选择重定向覆盖清空:>access.log
/logrotate.d日志的轮转的时候如果需要往旧文件里面messages写新文件的时候,与进程相关的需要重新加载服务或者重启进程。
du是查看目录的大小,而df是查看磁盘的使用情况。
常见的df和du查看结果不一致情况是文件删除造成的。
du(disk usage):是通过搜索文件来计算每个文件的大小然后累加得到的,du能看到的文件只是一些当前存在的,没有被删除的。当一个文件被删除之后,在文件系统目录中已经不可见了,所以du就不会再统计它了。
df(disk free):通过磁盘来快速获取空间大小的信息,文件被删除之后,i_link变为0,但是如果这个时候进程(i_count)持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除, 超级块中的信息就不会被更改。这样df仍然会统计这个被删除的文件。因此找到还持有被删除文件句柄的进程,然后关闭进程或者杀掉进程用以释放空间。它比du强的地方就是能够看到已经删除了的文件,而且计算大小的时候,把这一部分的空间也加上了,更加精确了(程序看到统计的)。当文件熙然也确定删除了改文件之后(重新加载或重启服务),这个时候du和df就一致了。可以用lsof |grep delelted查看哪些文件删了但是仍然在占用资源。