用lsof检查文件是否打开

raf*_*afa 15 linux bash file

我使用的是Linux Mint的13 Xfce和我有一个文件名为wv.gold我试图在bash,以检查它是否是由任何程序中打开(例如,我打开了它sublime-textgedit)

在很多论坛上,人们会说,如果我跑,lsof | grep filename我应该得到0它是否打开或者256(1)它是否关闭,但实际上如果我运行使用grep "wv.gold",我什么也得不到(空字符串),如果我使用它,我会得到一个小清单grep gold.

列表如下:

bash       2045  user   cwd   DIR   8,1     4096     658031 /home/user/path/to/dir
bash       2082  user   cwd   DIR   8,1     4096     658031 /home/user/path/to/dir
watch      4463  user   cwd   DIR   8,1     4096     658031 /home/user/path/to/dir
gedit     16679  user   cwd   DIR   8,1     4096     658031 /home/user/path/to/dir
lsof      20823  user   cwd   DIR   8,1     4096     658031 /home/user/path/to/dir
grep      20824  user   cwd   DIR   8,1     4096     658031 /home/user/path/to/dir
lsof      20825  user   cwd   DIR   8,1     4096     658031 /home/user/path/to/dir
Run Code Online (Sandbox Code Playgroud)

因此,我得到它所在目录的路径,但不是文件的路径(那里有其他文件),并且只有gedit处理方式,而不是sublime-text处理.

是否有一些简单的方法来查看任何其他程序是否打开了txt文件?

编辑:事实证明(参见@mata和@ctn的评论)一些编辑器加载文件并立即关闭它们,他们只是在保存时重新打开文件.这样,我们只能在他们仍然打开一个大文件时看到它(因为你有时间在打开时观察它),然后它会立即消失.

ctn*_*ctn 15

输出中出现的行lsof是打开的文件.如果您的文件不存在,则表示它未打开.其中列是PID(打开文件的程序的进程ID)和FD(与打开文件关联的文件描述符).这些没有特别的值表示打开/关闭.如果它出现,则意味着它是开放的.

查看http://linux.die.net/man/8/lsof并搜索文本contains the first nine characters

  • 正如mata对您的问题发表评论,编辑可以打开文件,将其完全读入内存并关闭文件. (2认同)
  • 如果你想查看gedit当前打开的进程,首先获取gedit的pid:`pgrep gedit`,然后打开文件列表:`ls -l/proc/<pid>/fd`.你应该看到形式为`4 - >/some/file.txt`的符号链接 (2认同)