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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 文件系统之软连接、硬链接的区别/文件删除与空间的联系/df和du的区别

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

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

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

1、软连接

软连接:相当于一个快捷方式。是完全的备份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 ..

2、硬链接

不同的目录项指向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

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查看哪些文件删了但是仍然在占用资源。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
搜索推荐 Unix Linux
深入了解ln命令:创建硬链接和符号链接的实用指南
深入了解ln命令:创建硬链接和符号链接的实用指南
304 0
|
6月前
|
Linux
linux(二十八)磁盘管理类命令df、du和free查看磁盘和目录空间占用
linux(二十八)磁盘管理类命令df、du和free查看磁盘和目录空间占用
138 0
|
3月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
7天前
|
存储 Linux Shell
文件系统与目录
本文介绍了Linux文件系统的基本概念及其组成部分。文件系统是磁盘上的特定格式区域,用于保存和管理文件。常见的Linux文件系统有Ext3、Ext4和XFS,其中XFS是RHEL 7的默认文件系统,支持高达18EB的存储容量。文件系统通过inode记录文件的属性,如权限、所有者、大小和时间戳等。此外,文章还介绍了虚拟文件系统(VFS)的概念,以及Linux文件系统的目录结构和权限管理机制。通过`chmod`命令,可以使用数字表示法或文字表示法修改文件权限。
22 2
|
5月前
|
Linux 数据处理 数据安全/隐私保护
探索Linux命令lchfn:更改文件或目录的硬链接数
在Linux中,`ln`命令用于创建硬链接,而非`lchfn`。硬链接指向文件的inode,多条目共享相同数据。了解硬链接有助于理解文件系统行为。使用`ln 源文件 目标链接名`创建硬链接,`ls -li`查看硬链接数。直接修改硬链接数风险高,应谨慎操作,区别硬链接和软链接,确保数据安全,并常查阅`man ln`。
|
IDE Unix Linux
linux中的tar打包、压缩多个文件、磁盘查看和分区类、du查看文件和目录占用的磁盘空间、df查看磁盘空间使用情况、lsblk查看设备挂载情况、fdisk分区、mount/umount挂载/卸载、设置开机自动挂载
tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的 文件格式.tar.gz)du 目录/文件 (功能描述:显示目录下每个子目录的磁盘使用情况)du: disk usage 磁盘占用情况。详细的请看我之前发的博客。linux常用命令下。linux常用命令中。linux常用命令上。...............对于Linux用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根 目录、一个独立且唯一的文件结构。Linux中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做“挂载”的处理 方法,它整个文件系统中包含了一整套的文件和目录,并将一
417 1
linux中的tar打包、压缩多个文件、磁盘查看和分区类、du查看文件和目录占用的磁盘空间、df查看磁盘空间使用情况、lsblk查看设备挂载情况、fdisk分区、mount/umount挂载/卸载、设置开机自动挂载
|
程序员 Linux 芯片
fat文件系统查找、删除、创建目录
fat文件系统查找、删除、创建目录
404 0
|
Linux
Linux:df查看磁盘大小、du查看文件夹大小
Linux:df查看磁盘大小、du查看文件夹大小
157 0
|
Linux
10.5 Linux du命令:统计目录或文件所占磁盘空间大小
du 是统计目录或文件所占磁盘空间大小的命令。
323 0
10.5 Linux du命令:统计目录或文件所占磁盘空间大小