查找已读取或写入的文件

查找已读取或写入的文件

我想查看哪些文件被读取或写入。

有没有什么程序或命令可以实现这个功能?我记得几年前我使用 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”可能有助于减少非常繁忙的系统上的一些噪音。

相关内容