几年间,在我的$HOME
目录中出现了很多隐藏的文件和目录。
我想不断地删除不需要的。
我如何找出哪些应用程序创建了这些隐藏文件和目录。
我如何确保删除隐藏文件和目录是安全的,并且不会丢失任何重要的内容,并且依赖于它们的任何内容都不会停止工作?
答案1
你可以暂时取代它们。
cd ~
mkdir .trash
find . ! -name . -prune ! -type d -atime +365 -exec \
sh -c 'touch -a -- "$@"
mv -- "$@" ~/.trash
' -- {} +
这将找到您$HOME
目录中的所有文件 - 不会递归到子目录 - 这些文件已经一年没有被访问过。它将把所有这些的访问时间更新为现在,然后将它们全部移动到名为 的目录中.trash
。如果您在运行它和决定开始删除旧文件之间遇到任何问题,~/.trash
那么您可以尝试将其中一些文件移回原处,看看是否有任何您放入垃圾箱的文件是导致问题的原因。
答案2
如果您是系统的 root,则可以使用审计内核功能具有有关谁/何时/什么访问/创建/修改文件的最大信息。请参阅本教程以获取 Debian 风格的示例
如果没有 root 访问权限,您可以使用 crontab 或具有无限循环+睡眠的脚本来运行拉索夫& grep 文件在你的 homedir 中。请参阅 lsof 的联机帮助页。但是,它只会显示在启动 lsof 时打开了文件描述符的应用程序。如果应用程序打开一个文件,编辑它,然后关闭它,您将不会在 lsof 中看到此更改。
像这样的单行应该可以完成这项工作:lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'
另一种方法是使用inotify 内核API检查文件何时被访问。唉,这是一个异步系统,你不会有“什么应用程序”、“具体时间”、“什么用户”等详细信息。您只会收到有关“此文件已修改/访问...”的回调。一些应用(Inotify、FAM、gamin)为您提供对 api 的简单访问