Linux删除文件后,被删除文件所占用的空间未被释放,问题原因以及解决

        使用df -h查看磁盘空间使用情况,记住剩余空间大小。

        rm 掉一个大文件(能够在df命令下引起容量的变化的大小)。

        rm掉后,再次使用df -h查看磁盘空间使用情况,发现剩余空间没有变化。

        思考原因,可能某个进程正在使用这个文件,或者加载到内存里,导致删除后,空间仍然不能释放。(就像window正在占用的文件删除时,会提示不能删除。比如excel打开的文件,做删除操作时会提示被占用)Linux不会提示,直到占用的进程结束后才会释放该空间。

        当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除。当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间。

        可以使用lsof命令来查看是否什么进程在占用该文件。

        比如,查看rm掉但是仍被占用的文件的列表,使用如下命令:

        lsof |grep -i deleted

        这时,能看到rm掉但是仍被占用的文件列表,其中包含pid。        

        当linux打开一个文件的时候,Linux内核会为每个进程在/proc/ 『/proc/nnnn/fd/文件夹(nnnn为pid)』建立一个以其pid
为名的文件夹用来保存进程的相关信息,而其子文件夹fd保存的是该进程打开的全部文件的fd(fd:file descriptor)。

        kill进程是通过截断proc文件系统中的文件能够强制要求系统回收分配给正在使用的的文件。这是一项高风险技术,仅到管理员确定不会对执行中的进程造成影响时使用。应用程序对这样的方式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题。

        kill pid号。(不推荐,造成各种隐患)

        此时通常可以选择重启占用该文件的服务。

        重启后,再次使用lsof命令查看,之前被占用的文件已经不再被重启的进程服务占用了。

        此时也可以使用df -h来查看磁盘使用情况,发现rm掉的文件占用的空间已经被释放了。

 

 

        对解决该case过程中使用到的  lsof 命令进行 简单总结。

        list opened files。显示打开的文件,linux环境中,不论什么事物都是文件,设备是文件,文件夹是文件,甚至sockets也是文件。所以,lsof命令的使用是身份重要的。

        lsof通常的输出格式为:


        COMMAND     PID   USER   FD      TYPE     DEVICE     SIZE       NODE NAME

        

        常见包含例如以下几个字段

       1、COMMAND
       默认以9个字符长度显示的命令名称。可使用+c參数指定显示的宽度,若+c后跟的參数为零,则显示命令的全名
       2、PID:进程的ID号
       3、PPID
       父进程的IP号,默认不显示,当使用-R參数可打开。
        4、PGID
       进程组的ID编号,默认也不会显示,当使用-g參数时可打开。
       5、USER
       命令的执行UID或系统中登陆的username称。默认显示为username,当使用-l參数时,可显示UID。
       6、FD
       是文件的File Descriptor number。

 

      常常使用场景:

      1.显示开启某个文件的进程。

       lsof  /文件路径/文件名

      2.显示某个端口正在执行什么进程。比如查看ssh服务的默认端口22端口

       lsof -i:22      

      3.显示init超级进程如今打开的文件。

       lsof -c init

      4.显示进程号为x的进程打开了哪些文件。

       lsof -p x

       

       
 

 

        

 

 

        

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值