我怎样才能彻底删除所有核心文件?

我怎样才能彻底删除所有核心文件?

我工作用的电脑往往会生成过多的核心文件,这些文件对于调试很有用,但会慢慢占用电脑上的所有可用空间。我执行此命令删除所有以“core”开头的核心文件。

locate /core. | grep -v core.h | grep -v core.c | grep -v core.py \
  | grep -v core.xml | grep -v core.txt | grep -v .gz \
  | grep -v core.so | grep -v chrome |sudo xargs rm

这种方法虽然有效,但操作起来很麻烦,而且core.sh如果我的电脑上有这个文件,它就会被删除。我认为更好的方法是:

  1. 使用locate查找所有以“core”开头的文件。
  2. 将该列表输入到file
  3. 列出所有标明file是核心文件的文件。假设当且仅当 的输出file file_name包含短语“ELF 64 位 LSB 核心文件 x86-64”时,文件才是核心文件。
  4. 将其喂给sudo xargs rm

但我不知道如何执行该列表中的第三步。

答案1

自从 Hardy Heron 和我偶然发现这个一行脚本以来,我一直在使用 Linux,它可以干净安全地删除核心转储文件。我不记得我最初在哪里找到它,但它效果很好。当然,以超级用户身份输入以下行:

find / -type f -name core -atime +1 -exec rm {} \;

就是这样。非常简单,只要进行适当的替换,就可以删除 /tmp 和 /var/tmp 文件。-atime 属性是可变的,因此您可以决定要保留或不保留文件多少天。始终先尝试简单的解决方案。

答案2

我最终自己用 python 完成了这件事。

#!/usr/bin/env python2

from subprocess import PIPE, Popen

def is_core_file(filepath):
  ''' Use file command to determine if something is an actual core file.'''
  prog = Popen(["file", filepath], stdin=PIPE, stdout=PIPE)
  out = prog.communicate()[0]
  return "core file" in out

def main():
  prog = Popen(["sudo", "updatedb"], stdin=PIPE, stdout=PIPE)
  prog.communicate()
  prog = Popen(["locate", "/core."], stdin=PIPE, stdout=PIPE)
  cores = prog.communicate()[0].split('\n')
  for core in cores:
    if is_core_file(core):
      print("deleting " + core)
      prog = Popen(["sudo", "rm", "-f", core])

if __name__ == '__main__':
  main()

编辑以使用主要。

答案3

结合两个答案:

find / -type f -name core -atime  -exec file {} \; | grep "ELF 64-bit LSB core file x86-64".

相关内容