几年中,在我的$HOME
目录中出现了许多隐藏的文件和目录。
我想不断删除不需要的。
我如何找出哪些应用程序创建了这些隐藏的文件和目录。
如何确定删除隐藏文件和目录的安全性,并且重要的内容不会丢失,并且依赖它们的所有内容也不会停止工作?
几年中,在我的$HOME
目录中出现了许多隐藏的文件和目录。
我想不断删除不需要的。
我如何找出哪些应用程序创建了这些隐藏的文件和目录。
如何确定删除隐藏文件和目录的安全性,并且重要的内容不会丢失,并且依赖它们的所有内容也不会停止工作?
Answers:
您可以临时替换它们。
cd ~
mkdir .trash
find . ! -name . -prune ! -type d -atime +365 -exec \
sh -c 'touch -a -- "$@"
mv -- "$@" ~/.trash
' -- {} +
这样将查找$HOME
目录中的所有文件-无需递归到子目录-已有一年没有被访问过。它将所有用户的访问时间更新为现在,然后将所有用户移动到名为的目录中.trash
。如果在运行该文件与决定开始删除旧文件的时间之间遇到任何问题,~/.trash
则可以尝试将其中的一些文件移回原位,以查看是否是您放入垃圾箱的原因。
relatime
改为使用。from man mount
::relatime
更新与修改或更改时间相关的inode访问时间。仅当先前的访问时间早于当前的修改或更改时间时,才更新访问时间。(类似于noatime
,但是它不会中断,mutt
或者其他应用程序需要知道自上次修改文件以来是否已读取文件。)无论如何,请使用modtime -m
并-mtime
使其正常工作。或任何你喜欢的。
如果您是系统的超级用户,则可以使用审核内核功能来获得有关谁/何时/什么方式访问/创建/修改文件的最大信息。有关debian风格的示例,请参见本教程
如果没有root用户访问权限,则可以使用crontab或具有无限循环+睡眠的脚本在homedir中运行lsof和grep文件。请参见lsof的联机帮助页。但是,它仅显示启动lsof时打开了filedescriptor的应用程序。如果应用程序打开文件,对其进行编辑然后将其关闭,您将不会在lsof中看到此更改。
像这样的单线工作: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'
另一种方法是使用inotify 内核API来检查何时访问文件。las,这是一个异步系统,您将没有诸如“什么应用程序”,“准确何时”,“什么用户”之类的详细信息。您只会收到有关“此文件已被修改/访问...”的回调。一些应用程序(Inotify,FAM,gamin)可让您轻松访问api
inotify
触发器来触发lsof
。系统实在太快了,无法实现这个想法:在运行lsof之前,该过程经常消失或关闭了文件。在某些情况下,这可能仍然有效,但可能很少。