linux之删除文件

1、用df命令查看磁盘空间发现:总空间大于已用空间 + 剩余空间,剩余的3G空间没有了。造成应用程序无法启动。

   df -h
  Filesystem            Size  Used Avail Use% Mounted on
  /dev/sda2              60G   21G   36G  37% /

  根分区是ext3文件类型,ext3文件系统会默认保留5%的空间作为预留空间。

2、du得到到的根路径文件空间占用情况应当与df得到的文件系统磁盘占用的情况是一直的或者说相差无几。但是在某些情况下却会出现du得到的空间占用情况要远小于df得到的。

后通过查询,发现问题出现在deleted文件上。

root下lsof | grep deleted会发现多多少少有些文件状态出于deleted状态。

[root@eb152 ~]# lsof /data | grep -i delete

进程名   PID       USER    FD   文件类型        大小(字节)  索引节点  文件名  [(状态)]

java       3311    AuSP    8w      REG              253,0         778   10879268 ***.log (deleted)

状态为deleted为标记被删除,其实该文件并没有从磁盘中删除,类似windows下的回收站状态。

据称当有其他进程打开某文件时文件被删除,就会将该文件标记为deleted,并删除其目录节点。使用du查看时,因为没有该删除状态文件的节点信息,所以就不做统计,从而导致与df的结果不一致。

若要将deleted状态文件删除,则根据pid直接kill调相应进程即可。如kill -9 pid



Linux中彻底删除文件


我们知道在Linux中删除文件一般使用rm, 但是rm命令并不会真的清空保存该文件的数据块的内容,而只是释放了该文件所占用的索引节点和数据块。因此用rm删除的文件是可以通过一些方法恢复的(比如可以用debugfs恢复,具体方法Google之)。


有些时候我们要彻底删除一些文件,可以使用shred命令来实现,shred是coreutils的一部分,所以Linux中基本都会有这个命令。


shred彻底删除文件的方法:

$ shred -u file

shred会用一些随机内容覆盖文件所在的节点和数据块,并删除文件(-u参数)。

如果想清除的更彻底一点可以加-z 参数,意思是先用随机数据填充,最后再用0填充。

$ shred -u -z file

另外shred还可以清除整个分区或磁盘,比如想彻底清除/dev/sdb1分区的内容可以这样:

$ shred /dev/sdb1   (注意不要加-u参数)

shred的详细参数:

-f, --force   更改权限允许写入(如有必要)

-n, --iterations=N   重写N次,默认为3次

--random-source=FILE 从指定文件读取数据

-s, --size=N  将文件粉碎为固定大小 (可使用后缀如K、M、C等)

-u, --remove   重写后截短并移除文件

-v, --verbose   显示进度

-z, --zero - add  用0覆盖数据

–help  显示帮助

–version   显示版本信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章