【发布时间】:2013-06-23 16:50:51
【问题描述】:
我正在使用 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 进程。
有没有一些简单的方法可以查看一个 txt 文件是否被其他程序打开?
编辑:事实证明(参见来自@mata 和@ctn 的cmets)一些编辑器加载文件并立即关闭它们,并且他们只是在保存文件时重新打开文件。这样,我们只有在他们还在打开一个大文件时才能看到它(因为你有时间在打开时观察它),然后它立即消失。
【问题讨论】:
-
从
psmisc尝试fuser。对于大多数发行版,应该以psmisc包的形式提供。请注意,许多文本编辑器不会为其打开的文件保留打开的文件句柄。他们读取文件,将其关闭并在保存时将其写回。 -
确保您以root用户身份运行lsof,否则显示的内容将受到严重限制