用lsof检查文件是否打开

时间:2013-06-26 13:48:51

标签: linux bash file

我正在使用linux mint 13 xfce,我有一个名为wv.gold的文件,如果它被任何程序打开,我试图检查bash(例如,我在sublime-text中打开它和gedit

在许多论坛中,人们会说如果我运行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

因此,我得到了它所在目录的路径,但不是文件的路径(那里有其他文件),只有gedit进程,而不是sublime-text进程。< / p>

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

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

1 个答案:

答案 0 :(得分:13)

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

结帐http://linux.die.net/man/8/lsof并搜索文字contains the first nine characters