文件删除原理

本文介绍了Linux中文件删除的原理,涉及i_count和i_link的计数机制,以及如何通过ls-ihl、fuser、rm-rf、fuser-ukv、ps-ef、kill和lsof等命令查询和删除文件,包括处理硬链接和确保文件无进程占用的情况。
摘要由CSDN通过智能技术生成

一、删除原理

Linux通过link数量控制文件删除的,只有当一个文件i_count和i_link都为0,文件才被删除。
i_count为当前文件被调用的数量(内存引用计数器,被进程调用时增加);
i_link为介质连接数量(磁盘引用计数器,创建硬链接时增加)。
rm删除文件改变的是i_link数。

二、查询方法
 
1、i_link命令:
查看i_link方法:

 
ls -ihl


举例:
 
[root@localhost shell_22_num]# ls -ihl
total 24K
103188844 drwxr-xr-x. 2 root root    6 Feb  1 23:26 directory
103188836 -rw-r--r--. 1 root root 2.4K Jan 31 22:37 num+.sh
103188841 -rw-r--r--. 1 root root  168 Jan 31 22:28 test1.sh


上面三个文件的i_count数量依次为2,1,1。
2、i_count命令:
查看文件被进程调用数情况:

 
fuser -uv [绝对路径文件名]

查看i_count方法说白了就是确认有哪些进程调用该文件。所以通过查询文件被使用情况便可知晓。-u指在每个进程后显示所属的用户名,-v指详细模式。
举例
 
[root@localhost shell_22_num]# fuser -uv /opt/shell/sexboy.txt
                            USER       PID         ACCESS         COMMAND
/opt/shell//sexboy.txt:     root       6266     f....         (root)sh

如上,可以看出该文件目前被root用户使用的进程sh调用,PID为6266。

三、文件删除方法

1、删除这个文件所有相关的硬链接 ——删除文件所有的入口 
rm -rf [文件名]			//所有硬链接及源文件文件
2、这个文件的进程调用数也为0 ——没有进程调用该文件
方法1:
fuser -ukv [绝对路径文件名]        //-k代表杀死访问指定文件的所有进程

该方法有一个问题,就是在运行shell脚本(长ping 1000个包)时,使用该命令,成功关闭sh进程却不能取消整个Ping进程。。。我怀疑是我仅仅杀死了运行该ping命令的shell脚本的进程sh,而ping无影响。所以关闭进程方法推荐使用kill命令:
ps -ef|grep ping
kill -9 [进程PID]
方法2:
lsof |grep [文件路径]


lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
  使用该命令后,可以查看到调用该文件的程序名、PID,再通过kill命令关闭即可。
满足:
1、硬链接数=0;
2、进程调用数=0。

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值