bash - 如何使用 lsof 查找未打开的文件

标签 bash ubuntu lsof

比如说,我有一个特定的任务来查找 的文件。未开 .我了解如何使用 lsof ( lsof +D ) 获取打开文件的列表。此外,我只需要在所谓的第一级子目录中找到它们。为此,我使用 find带有 maxdepth 1 的命令操作数。

像这样:find -maxdepth 1 -type d -ls >dirlist
然后,在一个 while 循环中,我尝试使用 lsof 检查 的目录列表(父级和 1 级子级)未打开 文件,但我完全不喜欢 bash。假设我可能能够获得 OPEN 文件的列表,但这不是我需要的。欢迎任何想法。

谢谢你的帮助-

干杯

更新:awk据我了解,可能会有所帮助。还有caseshift也许?

更新 1:我刚才发现我应该为 lsof 调用(使用,调用,不确定哪个词是正确的)只有一次,这就是为什么我的while循环不是一个合适的解决方案。此外,我需要标准输出具有 的目录列表。没有打开的文件 ,每一个都在一个单独的行中。这并不难,我有点工作,只是想弄清楚 tsak 是什么。问题是我不知道如何将目录列表重定向到 lsof没有 while环形。
像这样的东西不能按我想要的方式工作:file="path"; name=$(cat "$file")

最佳答案

给定 lsof 返回的文件列表,您想从 dirlist 中删除那些并打印其余部分。

lsof +D . | grep -vFxf - dirlist

如果 lsof将目录下移到更深的级别并查找不在 dirlist 中的文件,唯一的效果是 grep无法找到并删除那些,因此除了轻微的低效率之外,应该是无害的。
grep -F表示搜索表达式是精确的字符串,而不是正则表达式; -x说匹配需要是一整行; -v说要删除匹配项;和 -f -表示从标准输入中读取搜索模式。

关于bash - 如何使用 lsof 查找未打开的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47740675/

相关文章:

java - 查找哪个线程导致打开文件过多问题以及为什么在 lsof 输出中出现重复的节点 ID

linux - BASH 后台进程打印消失提示行

python - python程序中的Bash

ubuntu - 为 Nimrod 安装 Babel 时遇到问题

php - 为什么 PHP 错误显示在终端中,而不是在 ubuntu 的浏览器中显示

linux - lsof 没有为 bash 内置读取提供 o/p

linux - 在 bash 的特定行中删除换行符(将两行合并为一行)

bash - 为什么我的 bash 函数无法解析可选参数?

java - 在ubuntu 14.04LTS上安装webstorm但找不到jdk

c - lsof 总是报告偏移量等于 OSX 中的文件大小