如何使用find命令获取文件的PID及其所在目录?
获取test1.out的PID及所在目录的方法
嘿,我来帮你搞定这个问题~首先得明确一点:find本身是用来查找文件系统中文件的工具,没法直接获取进程的PID(毕竟PID是运行中进程的属性),所以我们需要把find和进程查询工具配合起来用,下面分步骤说明:
1. 用find定位test1.out的所在目录
如果你不知道test1.out的具体位置,可以用find从根目录开始搜索(也可以指定你怀疑的路径缩小范围,比如/home),命令如下:
# 只输出文件所在目录 find / -name "test1.out" -type f -printf "%h\n"
参数解释:
/:搜索起始路径,换成具体路径能加快搜索速度-name "test1.out":指定要找的文件名-type f:确保我们找的是普通文件(排除同名目录或链接)-printf "%h\n":仅输出文件的所在目录(%h是find的格式化参数,代表文件的目录部分)
如果想同时看到文件的完整路径和所在目录,可以用这个命令:
find / -name "test1.out" -type f -printf "完整路径:%p\n所在目录:%h\n\n"
2. 获取该文件对应的进程PID
找到文件路径后,我们可以用lsof工具来查找正在使用这个文件的进程(比如正在运行它的进程)。假设find找到的路径是/home/morganc/test1.out,执行以下命令:
# 仅输出PID lsof -t /home/morganc/test1.out
参数-t的作用是让lsof只返回PID,输出更简洁。
如果想一步完成“找文件+查PID+列目录”,可以把find和lsof结合起来,这样即使找到多个同名文件也能分别处理:
find / -name "test1.out" -type f -exec sh -c ' echo "文件路径:{}" echo "关联PID:$(lsof -t {})" echo "所在目录:$(dirname {})" echo "---" ' \;
解释一下:
-exec:让find对每个找到的文件执行后面的shell命令dirname {}:提取文件的目录部分,和find的%h效果一致- 如果某个文件没有被任何进程使用,
lsof -t会返回空,这时候“关联PID”那行就会显示为空
另外,如果确定这个文件是作为可执行程序运行的,也可以用pgrep匹配进程名,但要注意:如果有其他同名进程,结果可能不准确:
pgrep test1.out
补充小提示
- 如果你的系统没有
lsof,可以用fuser替代,命令是:fuser -v /home/morganc/test1.out,它会显示PID和对应的进程信息 - 搜索系统目录或者查看其他用户的进程时,可能需要加上
sudo权限才能得到完整结果
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

