“ lsof”命令的替代方案?


20

在许多情况下,我必须使用的机器上未安装“ lsof”,但是非常需要lsof的“功能”(例如,在AIX上)。:\

非Windows世界中是否有类似“ lsof”的应用程序?

更新:例如:我需要知道哪些进程使用“ / home / username”目录?


1
请您更具体一点吗?除了AIX(肯定由lsof支持)之外,您还要考虑什么系统?还是您只想到lsof的一种特定使用类型?通常:为什么不使用 lsof?
rozcietrzewiacz

我正在使用Linux 2.6.18-92.el5 GNU,但我没有lsof,也没有使用lsof的能力:(
SSH

Answers:


20

我知道fuser,看看您的系统上是否可用。


我必须给定影器作为参数以列出系统上所有打开的文件吗?:O ty!
LanceBaynes

2
该命令sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | less可以显示在上挂载的文件系统上具有打开文件的所有进程/。有关特定帮助,请参见手册页。
enzotib

TY!它提供这样的输出:pastebin.com/raw.php? i = 2z19g6Rk-我用它搜索了一下,但是我找不到任何输出方法,例如:“ gnome-screensaver”,而不是“ gnome-screensav”-所以如何使用宽命令名称输出?:O
LanceBaynes

它为以下内容提供相同的输出:pastebin.com/raw.php?
i=Fe3EJvUv

像这样的东西:sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | while read user pid flags rest; do printf '%10s %10s %10s %s\n' $user $pid $flags "$(</proc/$pid/cmdline)"; done | less
enzotib

15

Unix的罗塞塔石碑是这样的问题,一个很好的资源。它提到了lsof的一些替代方案(请参见下文)。但请注意,lsof实际上是其功能的标准应用程序。

如果只需要查找打开了特定文件的进程ID,则可以fuser在任何符合POSIX的系统上使用。

在具有/proc目录的操作系统上,您可以通过中的信息查询某个进程打开的文件(与lsof最常见的操作模式相反)/proc。某些操作系统具有用于以下目的的命令:


8

如果您恰巧运行Solaris,lsof则默认情况下未安装,而ZFS可能会阻塞它的替代方法是pfiles

例如:

pfiles /proc/*


2

我的版本,只有很少的实用程序运行:

for proc_pid in $(find /proc -maxdepth 1 -name "[0-9]*"); do \
    ls -l ${proc_pid}/fd 2>/dev/null \
    | grep -q "$search_term" \
    && echo "${proc_pid#/proc/}"; \
done

诚然,它可能无法处理所有极端情况,但可以在我的用例中使用。


0

这应该可以解决问题。除了以下内容外,它将提供所有文件描述符映射:

  • 您无权查看,或
  • 用于包含字符串“权限被拒绝”的文件
( 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

-2

有时lsof是安装在/usr/sbin

如果/usr/sbin不是您的一部分,您$PATH甚至可能错过了安装的命令。

用它检查

whereis lsof
lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz

OP表示尚未安装lsof,并要求替代方案...
Jeff Schaller
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.