一、Linux文件系统组成
Linux系统文件是由多个block块组成,1个block块通常是4kb,1block=8个扇区,所以说Linux存取文件的最小单位是块。
block由inode和date组成:
inode信息是元数据信息主要存放文件大小,权限等其他属性信息
date主要存放在date block中,也可以同过查看命令看到文件内容
硬链接
1、具有相同inode节点号的多个文件互为硬链接文件,硬链接文件就是文件的另一个入口。
2、只删除硬链接文件或源文件之一,文件实体并未被删除,只有同时删除硬链接文件和源文件,文件实体才会被被删除。
3、当所有硬链接文件和源文件被删除后在存放新的数据时会占用这个文件的空间,磁盘fsck检查
的时候删除的数据会被系统回收。
4、可以通过给文件设置硬链接文件,来防止重要文件被误删。
5、硬链接文件可以用rm命令删除。
6、对于静态文件(没有进程调用的文件)来说,当对应硬链接数位0(i_link),文件就被删除,(i_link查看方法(ls -l)结构的第三列就是)
软连接
1、软连接类似Windows的快捷方式(可以通过readlink查看其指向)。
2、软连接类似一个文本文件,里面存放的是源文件的路径,指向原文件实体。
3、删除源文件,软链接文件依然存在,但是无法访问指向的源文件路径内容。
4、软连接和源文件是不同文件,也是不同类型文件,inode号也不相同。
5、删除软连接文件可以用rm命令,失效时一般是红字白底闪烁提示。
二、文件删除原理
Linux是通过link数量来控制文件删的,只有当一个文件不存在任何link数量的时候,这个文件才会被删除,一般来说,每个文件都有2个link计数器:i_count、i_nlink 。
i_count是当前文件使用者(被调用)的数量,i_nlink是介质连接的数量(硬链接的数量),也可以理解为i_node是内存引用计数器,i_nlink是磁盘引用计数器。当一个文件被某个进程引用时,对应i_count数就会增加;当创建文件硬链接时对应i_nlinkk数就会增加。
对于删除命令而言,实际就是减少磁盘引用计数器i_nlink。如果一个文件正在被某个进程调用,而用户却执行rm命令把文件删除了,那么ls时就无法找到这个文件,但调用删除的文件进程却在继续正常执行,并且依然能够从中正确的读取及写入内容。这是因为rm命令只是将文件的i_nlink减少了,如果没有其它链接i_nlink就为0了但由于该文件依然被进程调用,因此,此时文件对应i_count并不为0,所以即使执行rm命令,系统并没有真正删除这个文件,只有当i_node、i_nlink都为0时,这个文件才被真正删除,也就是说还需要解除该进程对文件的调用。
比如:
通过 lsof 命令可以看到我们删除文件被哪些进程还占用着,这样我们可以通过停止这个进程来实现释放我们文件的 i_count 计数器,实现真正删除文件。kill -9 pid 实现强制性删除进程。