在许多情况下,lsof
它没有安装在我必须使用的机器上,但lsof
非常需要它的“功能”(例如在 AIX 上)。 :\
lsof
非 Windows 世界中是否有类似的应用程序?
例如,我需要知道哪些进程使用该/home/username
目录?
答案1
我知道fuser
,查看它在您的系统上是否可用。
答案2
这Unix 罗塞塔石碑是解答此类问题的好资源。它提到了一些替代方案拉索夫(见下文)。但请注意,lsof 是其功能的事实上的标准应用程序。
如果您只想查找打开特定文件的进程 ID,那么您可以使用fuser
在任何符合 POSIX 标准的系统上。
在具有目录的操作系统上/proc
,您可以lsof
通过/proc
.一些操作系统有这样的命令:
- 系统:
procfiles
随系统一起提供(自 AIX 5.2 起)。也可以看看AIX 5.2 性能工具更新和lsof、pfiles、procfiles 命令的用法和示例。 - 索拉里斯:
pfiles
(现存的从2.5开始)。
答案3
如果您碰巧运行 Solaris,则lsof
可以使用pfiles
.
例如:
pfiles /proc/*
答案4
这应该可以解决问题。它将提供所有文件描述符映射,但以下内容除外:
- 您无权查看,或者
- 适用于包含字符串“权限被拒绝”的文件
( find /proc -mindepth 1 -maxdepth 1 \
| grep -E [0-9]+ | xargs -n 1 -I% find %/fd \
| xargs ls -l \
| grep -v "Permission denied" ) 2>/dev/null \
| cut -d' ' -f12- | less
如果您已经知道您只关心某些程序的映射,那么您可以使用更多类似的内容:
exec=sshd
pgrep "$exec" | xargs -n 1 ps -p
pgrep "$exec" | xargs -n 1 -I% find /proc/%/fd | xargs ls -l | cut -d' ' -f12- | less