![](/img/trans.png)
[英]Using lsof to track files open by script that is run through the command line
[英]How to find NOT open files with lsof
说,我有一个特定的任务来查找未打开的文件。 我了解如何使用lsof( lsof +D
)获取打开文件的列表。 此外,我只需要在所谓的1级子目录中找到它们。 为此,我将find
命令与maxdepth 1
操作数一起使用。
像这样: find -maxdepth 1 -type d -ls >dirlist
然后,在一个while循环中,我尝试使用lsof检查目录列表(父级和1级子目录)中是否未打开文件,但我完全不满意bash。 说我也许能够得到OPEN文件的列表,但这不是我所需要的。 任何想法都欢迎。
谢谢你的帮助-
干杯
更新:据我了解, awk
可能会有所帮助。 也可能是case
和shift
?
更新1:我现在才知道应该只为lsof
调用一次(使用,调用,不确定哪个单词正确),这就是为什么while
循环不是合适的解决方案的原因。 而且,我需要stdout 没有打开文件的目录列表,每个目录都放在单独的行中。 这并不难,我只是想弄清楚tsak是什么,所以就可以了。 问题是我不知道如何在没有while
循环的情况下将目录列表重定向到lsof
。 像这样的东西无法按我想要的方式工作: file="path"; name=$(cat "$file")
file="path"; name=$(cat "$file")
给定lsof
返回的文件列表,您想从目录列表中删除dirlist
并打印其余文件。
lsof +D . | grep -vFxf - dirlist
如果lsof
将目录降级到更深的层次并找到不在dirlist
中的dirlist
,则唯一的效果就是grep
无法找到并删除这些文件,因此除了效率低下之外,这应该是无害的。
grep -F
表示搜索表达式是精确的字符串,而不是正则表达式; -x
表示匹配必须是整行; -v
表示删除匹配项; 和-f -
表示从标准输入中读取搜索模式。
使用查找命令
find -maxdepth 1 -type f | while read myfile ; do fuser -s $myfile || echo $myfile ; done
“查找-maxdepth 1 -type f” -在-maxdepth 1目录中查找所有文件
“在读取myfile的同时,执行fuser -s $ myfile || echo $ myfile;完成” -检查文件是否没有其进程(这意味着未使用文件),然后打印此文件名
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.