使用 lsof 查找单个打开文件的最快方法是什么?
我正在尝试测试单个文件是否使用 lsof 打开。还有比这更快的方法吗?
$result = exec('lsof | grep filename | wc -l');
if($result > 0) {
//file is open
}
我认为如果您知道文件名,它们一定是一种仅测试一个文件的方法。我真正需要的只是真或假。
I'm trying to test a single file if it is open using lsof. Is there a faster way than this?
$result = exec('lsof | grep filename | wc -l');
if($result > 0) {
//file is open
}
I'm thinking their must be a way to just test for one file if you know the filename. All I really need is a true or false.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我找到了一个更好的方法。使用lsof(在4.63版本上测试),可以直接查询特定文件:
I found a much better way. With lsof (tested on version 4.63), you can directly query a specific file:
那么,您可以跳过
wc
并使用 grep 的返回值(如果 grep 检测到模式,则返回 0(即成功);如果没有检测到模式,则返回 1(即不成功)):您可以通过使用 grep 的
-l
标志来改进这一点:这告诉 grep 一旦检测到第一个匹配就停止查找。
Well, you can skip
wc
and use the return value of grep (grep returns 0 (i.e. success) if it detects the pattern and 1 (i.e. not-success) if it does not detect the pattern):You can improve this a bit by using grep's
-l
flag:This tells grep to stop looking once it detects it's first match.
不。当您尝试对结果执行任何操作时,答案可能会改变。相反,尝试对文件执行任何您想要执行的操作并处理“使用中”错误或“共享冲突”。
Don't. The answer might change by the time you try to do anything with the result. Instead, try to do whatever you intended to do with the file and handle the "in use" error or "sharing violation".
使用
定影器
。如果指定的任何文件正在使用,则返回非零;如果它们全部可用,则返回零。Use
fuser
. It returns non-zero if any of the files specified are in use, and zero if they're all available.