标签: lsof

尝试获取每个进程打开的文件数时与 lsof 命令的差异

我正在尝试获取每个进程的打开文件列表。我从PerlMonks运行了以下单行:

lsof | perl -lane '$x{"$F[0]:$F[1]"}++;
END { print "$x{$_}\t$_" for sort {$x{$a}<=>$x{$b}} keys %x}'
Run Code Online (Sandbox Code Playgroud)

它返回打开文件的总数,以及进程名称和 pid。结果按升序排列,最后一行如下:

1065702 java:15437
Run Code Online (Sandbox Code Playgroud)

所以当我运行时lsof -p 15437,我希望它返回相同的数字,但是我得到:

$ lsof -p 15437 | wc -l
403
Run Code Online (Sandbox Code Playgroud)

为什么会出现差异?

附录

差异的第三个来源:

$ cd /proc/15437/fd
$ ls -1 | wc -l
216
Run Code Online (Sandbox Code Playgroud)

lsof

5
推荐指数
1
解决办法
1689
查看次数

如何获得 Pid 到 Port 的映射?

我有一个需要在特定端口上运行的进程。我已经在那个端口上启动了一些其他进程,我需要终止它。

不幸的是,我不记得另一个进程的名称/pid,所以我需要一种快速的方法来找到与其关联的 PID。

我试过了,lsof -i :7080但没有任何回报。我可以,telnet localhost 7080所以我知道它正在运行。

作为参考,我正在运行 RHEL5

networking process lsof

4
推荐指数
1
解决办法
5803
查看次数

lsof:显示以读写方式打开的文件

当我尝试将分区重新挂载为 时read-only,出现错误/foo is busy。我可以列出所有文件打开/foo

lsof /foo
Run Code Online (Sandbox Code Playgroud)

但这并没有告诉我文件是打开的read-only还是read-write. 有没有办法只列出打开的文件read-write

lsof

4
推荐指数
1
解决办法
1万
查看次数

自定义 lsof 输出

我需要一个进程打开的文件、端口等的列表。现在,每当我使用时lsof -p <PID>,我都可以在 python 脚本中解析输出,但问题是有时我会得到一些空列。因此,我在解析输出时得到了不好的结果。

我知道我可以在 /proc 中为每个进程手动查找 FD,但这必须符合 POSIX 标准。所以我的问题是,有没有办法lsof打印打开文件的列表,而不打印其他内容?

我正在考虑类似用户特定ps命令(ps -eopid,user,comm,command),我们可以在其中指定输出中出现哪些命令。在本例中,我只想在输出中指定“名称”列lsof -p <PID>

python lsof posix

4
推荐指数
1
解决办法
3200
查看次数

可疑的网络活动:使用 lsof 显示 sshd 进程

我有一个运行 Debian Jessie 的 Raspberry Pi。我安装了 pi-hole 来阻止广告服务域 ( https://pi-hole.net )。通过查看日志,我注意到很多来自中文域的查询。

lsof -i显示了以下我认为可疑的列表:

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd  1742  root  3u  IPv4  16960  0t0  TCP raspberrypi:ssh->116.31.116.47:50600 (ESTABLISHED)
sshd  1743  sshd  3u  IPv4  16960  0t0  TCP raspberrypi:ssh->116.31.116.47:50600 (ESTABLISHED)
sshd  1774  root  3u  IPv4  16990  0t0  TCP raspberrypi:ssh->183.214.141.105:56265 (ESTABLISHED)
sshd  1775  sshd  3u  IPv4  16990  0t0  TCP raspberrypi:ssh->183.214.141.105:56265 (ESTABLISHED)
sshd  1869  root  3u  IPv4  17068  0t0  TCP raspberrypi:ssh->116.31.116.47:33525 (ESTABLISHED)
sshd  1870  sshd  3u  IPv4  17068  0t0 …
Run Code Online (Sandbox Code Playgroud)

security lsof sshd

4
推荐指数
1
解决办法
731
查看次数

“设备或资源繁忙”

我正在尝试使用删除目录

rm -rf dirName
Run Code Online (Sandbox Code Playgroud)

但我收到了一堆错误,例如:

rm: cannot remove 'deleteMe/icarus/.nfs0000001bcf11514a0000cd45': Device or resource busy
Run Code Online (Sandbox Code Playgroud)

当我尝试通过命令查找使用此文件的进程时

lsof deleteMe/icarus/.nfs0000001bcf11514a0000cd45
Run Code Online (Sandbox Code Playgroud)

没有输出。有什么建议么?

lsof delete

4
推荐指数
1
解决办法
5万
查看次数

查找在没有 lsof 或 fuser 的情况下打开文件的进程

我正在一台 Linux(Scientific Linux CERN SLC 版本 6.9 (Carbon))机器上工作,我无法在该机器上安装程序并且lsoffuser命令不可用。

我正在尝试删除这台机器上的 NFS 点文件,但我一直收到Device or resource busy错误消息,所以我想找出哪个进程(我怀疑它可能是我以前开始使用的进程nohup)仍然具有该文件的文件描述符。

我怎样才能做到这一点?

linux lsof files fuser

4
推荐指数
1
解决办法
1234
查看次数

lsof 输出中的文件偏移到底是什么?

lsof用来追踪仍然占用空间的已删除文件,我意识到我不太确定相对于文件的偏移量是什么。lsof的手册页在这方面没有多大帮助,四处搜索我无法清楚地了解它是什么。

什么是文件偏移量,为什么拥有这条信息很有用?

rhel centos lsof

3
推荐指数
2
解决办法
7874
查看次数

我应该关心 lsof 中的大(已删除)文件吗?

我们一直在努力清理/opt坐骑中的一些空间。空间消耗的一大罪魁祸首是我们运行的某些进程的日志文件(每个进程 2 到 12 GB)。

我们通过截断它们来清理它们。然而,这似乎使我们的输出从df -H.

/dev/mapper/Sys-opt     76G    72G      0 100% /opt
Run Code Online (Sandbox Code Playgroud)

du -sh *在此目录上运行时,大小不会相加。运行时lsof | grep log,我看到我们删除的许多文件仍然显示(deleted)在末尾。

我的问题是,(a) 我应该关心这个吗?(b) 有没有办法让我df -H恢复正常,而无需重新启动盒子/这些过程?重新启动进程是否会修复它(我看到相同日志的多个条目,这些条目来自我知道最近已重新启动的进程)?

linux disk-usage lsof

3
推荐指数
1
解决办法
2035
查看次数

按列分隔 lsof 输出

我在下面使用此命令并尝试分隔列我只想让 PID 在我的 python 脚本中使用它。

我可以轻松地逐行获取此行,但是如何以非 hacky 的方式将其分成几列?

我可以很容易地按空间分割,但让我们面对这是一个糟糕的主意,有什么建议吗?

root@python-VirtualBox:/var/python# lsof | grep TCP
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    3449 root    3u  IPv4  24248      0t0  TCP *:22 (LISTEN)
sshd    3449 root    4u  IPv6  24257      0t0  TCP *:22 (LISTEN)
Run Code Online (Sandbox Code Playgroud)

text-processing lsof

3
推荐指数
2
解决办法
7161
查看次数

lsof 中的“i”标志是什么意思?

我试图找出我的 Linux Ubuntu 机器上正在使用哪些端口。我正在阅读文章如何检查端口是否在 Linux 或 Unix 上使用,并看到其中一个命令是:

\n

sudo lsof -i -P -n | grep LISTEN

\n

我仍然对很多 Linux 命令不太熟悉,但我最近刚刚了解了如何lsof列出所有打开的文件,所以我想了解这些标志的用途。

\n

(-P 和 -n 标志是做什么用的?我已经看过手册,但它\xe2\x80\x99s 根本没有帮助。看来 -i 标志是这里最重要的标志。)

\n

我发现如果我在没有 -i 标志的情况下对“LISTEN”执行 grep,我得到的结果与使用的结果完全不同。

\n

在手册中,它是这样说的:

\n
\n

-i [i]\n此选项选择其 Internet 地址与 i 中指定的地址匹配的文件列表。如果未指定地址,则此选项将选择所有 Internet 和 x.25 (HP-UX) 网络文件的列表。

\n
\n

我真的不明白这意味着什么,并且绝对不明白它如何帮助我找出正在使用的端口。

\n

ubuntu lsof

3
推荐指数
1
解决办法
969
查看次数

已安装的设备正忙,因为 bash 正在使用该卷

如果我尝试卸载已安装的磁盘。它说我不能,因为它被另一个进程使用,这很奇怪,因为我找不到任何可以访问它的东西。所以我尝试使用 lsof 来查找正在使用它的内容。结果如下

在此处输入图片说明

我不能因为 bash。嗯,这是有史以来最通用的信息。我怎样才能找到具体使用它的内容?

mount lsof

0
推荐指数
1
解决办法
781
查看次数

是否可以避免打开文件?

当我们运行 lsof 来捕获已删除的文件时,

我们看到以下内容:(示例)

lsof +L1
java      193699  yarn 1760r   REG   8,16      719     0  93696130 /grid/sdb/hadoop/hdfs/data/current/PLP-428352611-43.21.3.46-1502127526112/current/path/nbt/dir37/blk_1186014689_112276769.meta (deleted)
Run Code Online (Sandbox Code Playgroud)

尽管文件已经删除,PID仍在运行是什么原因

lsof +L1 | awk '{print $2}' | sort | uniq
193699 
Run Code Online (Sandbox Code Playgroud)

是否有可能避免这种情况?

process rhel ps lsof files

0
推荐指数
1
解决办法
194
查看次数

标签 统计

lsof ×13

files ×2

linux ×2

process ×2

rhel ×2

centos ×1

delete ×1

disk-usage ×1

fuser ×1

mount ×1

networking ×1

posix ×1

ps ×1

python ×1

security ×1

sshd ×1

text-processing ×1

ubuntu ×1