使用 lsof 查找单个打开文件的最快方法是什么?

发布于 2024-08-26 22:36:00 字数 210 浏览 9 评论 0原文

我正在尝试测试单个文件是否使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

小红帽 2024-09-02 22:36:00

我找到了一个更好的方法。使用lsof(在4.63版本上测试),可以直接查询特定文件:

if lsof filename > /dev/null; then
    # file is open
fi

I found a much better way. With lsof (tested on version 4.63), you can directly query a specific file:

if lsof filename > /dev/null; then
    # file is open
fi
单身情人 2024-09-02 22:36:00

那么,您可以跳过 wc 并使用 grep 的返回值(如果 grep 检测到模式,则返回 0(即成功);如果没有检测到模式,则返回 1(即不成功)):

if lsof | grep filename > /dev/null; then
    # filename is in output of lsof
fi

您可以通过使用 grep 的 -l 标志来改进这一点:

if lsof | grep -l filename > /dev/null; then
...

这告诉 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):

if lsof | grep filename > /dev/null; then
    # filename is in output of lsof
fi

You can improve this a bit by using grep's -l flag:

if lsof | grep -l filename > /dev/null; then
...

This tells grep to stop looking once it detects it's first match.

半寸时光 2024-09-02 22:36:00

不。当您尝试对结果执行任何操作时,答案可能会改变。相反,尝试对文件执行任何您想要执行的操作并处理“使用中”错误或“共享冲突”。

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".

心奴独伤 2024-09-02 22:36:00

使用定影器。如果指定的任何文件正在使用,则返回非零;如果它们全部可用,则返回零。

Use fuser. It returns non-zero if any of the files specified are in use, and zero if they're all available.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文