![查找已读取或写入的文件](https://linux22.com/image/807931/%E6%9F%A5%E6%89%BE%E5%B7%B2%E8%AF%BB%E5%8F%96%E6%88%96%E5%86%99%E5%85%A5%E7%9A%84%E6%96%87%E4%BB%B6.png)
我想查看哪些文件被读取或写入。
有没有什么程序或命令可以实现这个功能?我记得几年前我使用 Windows 时就用过这种方法来查找病毒和恶意软件的隐藏位置。
答案1
该计划是lsof
(“列出打开的文件”)。
如果你只是打开终端并输入
lsof
,你会得到所有打开文件的巨大列表,而是通过执行以下操作将其限制为一个命令:lsof -c gnome-terminal
您还可以通过键入以下内容将搜索限制到特定目录
lsof -c gnome-terminal -a +D /tmp
或者列出某个特定目录中所有打开的文件,包括打开它的应用程序:
lsof /dev/urandom
请记住,有些进程是由超级用户启动的根,您可能需要将sudo
其放在命令前面以获取有关此类进程的打开文件的更多信息。
为了缩小搜索范围,您可以指定grep
特定的行,例如:
lsof /dev/urandom | grep chrome
输出
FD
的(文件描述符)列为您提供了有关打开文件的程序的目的的信息(不一定是此刻正在发生的事情):r
表示文件已打开并可读取w
表示文件已打开并可写入u
表示文件以读写方式打开
如需了解更多详情,请咨询手册页(man lsof
)。此外,如果您需要查找任何文件和目录,Linux 文件系统层次标准非常有帮助。
答案2
作为一个完全过度的选项,但是可以实时工作,你可以使用 inotify:
sudo inotifywait -m -r /
请注意,这将消耗大量内存,并需要很长时间才能完成设置。正如手册页所述:
-r, --recursive
Watch all subdirectories of any directories passed as arguments.
Watches will be set up recursively to an unlimited depth. Sym‐
bolic links are not traversed. Newly created subdirectories
will also be watched.
Warning: If you use this option while watching the root direc‐
tory of a large tree, it may take quite a while until all ino‐
tify watches are established, and events will not be received in
this time. Also, since one inotify watch will be established
per subdirectory, it is possible that the maximum amount of ino‐
tify watches per user will be reached. The default maximum is
8192; it can be increased by writing to /proc/sys/fs/ino‐
tify/max_user_watches.
这也不会告诉您哪个进程正在处理文件,但它可能有助于识别正在发生的更改。使用“-e open”可能有助于减少非常繁忙的系统上的一些噪音。