我正在使用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的评论)某些编辑器会加载文件并立即关闭它们,并且只是在保存文件时重新打开文件。这样,我们只能在他们仍然打开一个大文件时看到它(因为你有时间在打开时观察它)并且在此之后它会立即消失。
答案 0 :(得分:13)
lsof
输出中显示的行是打开的文件。如果您的文件不存在,则表示它未打开。其中列是PID(打开文件的程序的进程ID)和FD(与打开文件关联的文件描述符)。这些没有特别的值表示打开/关闭。如果它出现,则表示它已打开。
结帐http://linux.die.net/man/8/lsof并搜索文字contains the first nine characters