• 文件系统之软连接、硬链接的区别/文件删除与空间的联系/df和du的区别


    目录

    1、软连接

    2、硬链接

    3、硬链接和软连接的异同点

    4、删除文件与空间的联系

    5、du和df的区别


    文件系统中的软连接和硬链接。

    每个文件创建好之后,都会维护两个计数器:i_count和i_nlink。

    • i_count:记录了有多少个程序在使用这个文件(记录了程序打开文件的数量)。
    • i_nlink:记录这个文件的硬链接数(目录项指向)。

    1、软连接

    软连接:相当于一个快捷方式。是完全的备份soft_disk.sh,inode号都不一样。创建自己的inode号指向自己的inode号,它里面的data不会放具体的数据,然后找到自己的data。(最后一个data存放之前指向文件的指针,通过指针找到inode号,找到inode号之后,最后找到data)它只认之前文件的路径,如果删除文件,就是删除文件的目录项,文件名没有了,如果创建同名的文件名,这个连接又生效,因为它只认文件的文件路径名。

    创建方式为:ln -s 源文件 链接文件

    1. [root@localhost soft-hard]# ln -s aa aa_soft 创建连接文件(创建aa的连接文件aa_soft)
    2. [root@localhost soft-hard]# ls
    3. aa aa_soft
    1. [root@localhost soft-hard]# ls -ld
    2. drwxr-xr-x 2 root root 46 6月 14 21:33 .
    3. [root@localhost soft-hard]# touch bb
    4. [root@localhost soft-hard]# ls -ld
    5. drwxr-xr-x 2 root root 56 6月 14 22:59 .
    6. [root@localhost soft-hard]# mkdir subsoft
    7. [root@localhost soft-hard]# ls -ld
    8. drwxr-xr-x 3 root root 71 6月 14 22:59 .
    9. [root@localhost soft-hard]# ls -ld .
    10. drwxr-xr-x 3 root root 71 6月 14 22:59 .
    11. [root@localhost soft-hard]# ls -ld subsoft
    12. drwxr-xr-x 2 root root 6 6月 14 22:59 subsoft
    13. [root@localhost soft-hard]# ls -al subsoft/
    14. 总用量 0
    15. drwxr-xr-x 2 root root 6 6月 14 22:59 .
    16. drwxr-xr-x 3 root root 71 6月 14 22:59 ..

    2、硬链接

    不同的目录项指向inode1。hard_disk.sh 新的目录项指向同一个inode,创建新的目录项,硬链接不能跨文件系统。

    创建方式为:ln 源文件 链接文件

    1. [root@localhost soft-hard]# ln aa aa_soft
    2. ln: 无法创建硬链接"aa_soft": 文件已存在
    3. [root@localhost soft-hard]# ls -al
    4. 总用量 4
    5. drwxr-xr-x 2 root root 31 6月 14 20:47 .
    6. drwxr-xr-x. 20 root root 4096 6月 14 20:42 ..
    7. -rw-r--r-- 1 root root 0 6月 14 20:47 aa
    8. lrwxrwxrwx 1 root root 2 6月 14 20:47 aa_soft -> aa

    查看i_node号:ls -i 文件名

    1. [root@localhost soft-hard]# ls -i aa
    2. 1137852 aa
    3. [root@localhost soft-hard]# ls -i aa_hard 查看i_node号
    4. 1137852 aa_hard
    5. [root@localhost soft-hard]# ls -i aa_soft
    6. 1137853 aa_soft

    3、硬链接和软连接的异同点

    1、创建方式不同。软硬链接都是通过ln创建文件,如果接-s就是创建软链接,如果不接就是创建硬链接。

    2、现象:删除原文件两个链接文件的区别。

    最大的现象是:删除原文件的时候,软连接就失效了,但是硬链接不受影响,还能正常使用。

    硬链接删除原文件,链接文件还能正常使用;软连接删除原文件,链接文件就看不到了,硬链接只是新建目录项。

    3、原理:硬链接其实就是新建目录项和原文件指向同一个inode。

                    软链接:新建了一个文件,只是这个文件的data数据指向原文件的路径。

    因为硬链接连接其实就是创建一个新的目录项,指向同一个inode,所以删除原文件的时候,就是删除原文件的目录项信息,但是硬链接指向的inode号还在那里的,所以还能访问得到

    对于软连接,如果删除软链接,软链接是从头到尾生成一个全新的文件,这个文件里面的内容指向的还是以前的源文件的目录、路径,源文件的被删除之后就获取不到了,源文件的目录项被删除之后,软链接就获取不到数据了。

    4、区别:

    ①硬链接:不能跨文件系统创建(每个文件系统都有自己独立的inode)

                    不能对目录进行链接。

    • 硬链接新建了一个目录项,指向同一个inode,所以不同的文件系统有不同的inode,属于自己的inode,不能跨文件系统去创建硬链接。

    软链接:软链接只关注路径,所以是可以跨文件系统的。

    ② 硬链接不能对目录进行链接,只能对文件进行链接。

        软链接没有这个要求,可以链接文件也可以链接文件夹。

    硬链接:

    相当于起了个别名。不会创建新的inode号,链接文件和源文件共用一个inode号,只是源文件的引用数加一;

    如果删除源文件,链接文件仍然可以使用 ;

    链接文件和源文件的文件类型相同;

    硬链接不能跨文件系统,软链接可以;

    不可以对不存在的文件和目录创建硬链接;

    软链接:

    相当于Windows桌面上的快捷方式。会创建新的inode号,源文件和链接文件的inode号不相同;

    源文件的链接数不变,链接文件的链接数为1(不会被上一层引用);

    源文件和链接文件的文件类型不同,软链接文件权限为777,文件属性有标识,访问权限真正取决于源文件权限;

    删除源文件,链接文件就访问不了了;

    可以对不存在的文件和目录创建软链接;

    4、删除文件与空间的联系

    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写新文件的时候,与进程相关的需要重新加载服务或者重启进程。

    5、du和df的区别

    du是查看目录的大小,而df是查看磁盘的使用情况。

    常见的df和du查看结果不一致情况是文件删除造成的。

    du(disk usage):是通过搜索文件来计算每个文件的大小然后累加得到的,du能看到的文件只是一些当前存在的,没有被删除的。当一个文件被删除之后,在文件系统目录中已经不可见了,所以du就不会再统计它了。

    df(disk free):通过磁盘来快速获取空间大小的信息,文件被删除之后,i_link变为0,但是如果这个时候进程(i_count)持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除, 超级块中的信息就不会被更改。这样df仍然会统计这个被删除的文件。因此找到还持有被删除文件句柄的进程,然后关闭进程或者杀掉进程用以释放空间。它比du强的地方就是能够看到已经删除了的文件,而且计算大小的时候,把这一部分的空间也加上了,更加精确了(程序看到统计的)。当文件熙然也确定删除了改文件之后(重新加载或重启服务),这个时候du和df就一致了。可以用lsof |grep delelted查看哪些文件删了但是仍然在占用资源。

  • 相关阅读:
    STM32F4_I2C(从机EEPROM/MPU-6050)协议详解
    Apache Shiro反序列化(CVE-2016-4437)漏洞复现
    非线性化改进的KP-Detector模型在人体姿态识别中的应用
    分享500道我在“金九银十”收集的Java架构面试题
    Linux内核中的一个list实现的理解
    Linux磁盘管理
    [linux] 由创建用户开始
    探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty
    OpenCL编程指南-10.1C++包装器API
    分布式事务----seata
  • 原文地址:https://blog.csdn.net/m0_52165864/article/details/126472859