lsof 是一个很棒的实用程序,现在才开始使用它。
lsof -i | grep smtp => 这给出了以下结果。
httpd.pl 212548 global 3u IPv4 893092369 0t0 TCP server07.host...blah...
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,httpd.pl是 perl 脚本,它发送垃圾邮件。
我怎么知道命令的完整路径。即在上面的结果中,我想知道的完整路径httpd.pl
我尝试在主目录中搜索,该文件httpd.pl不存在。而且,我尝试过lsof -p PID,这也没有给出它的路径。
有什么办法,我可以得到那个文件的完整路径吗?
注意:这种问题在共享主机环境中很常见。因此,它对于共享主机或任何 Web 服务器管理员都非常有用。
考虑这个简单的场景:
vim在一个终端中打开一个文本文件 ~/textfile.txt (尝试使用编辑和只读模式)。/usr/sbin/lsof ~/textfile.txt
没有结果
为什么?
我正在尝试在我的 Solaris 10 上运行命令 lsof |grep services 以查找任何包含占用磁盘空间的大文件的进程,但我收到了一堆行说:
lsof:没有 UID 105 的密码条目
我查看了 /etc/passwd 但没有 UID 为 105 的用户(我认为该用户已被删除)。
上面的 lsof 行表示什么?
我编写了一个基于 lsof 的脚本来监视特定应用程序的每个进程使用的套接字(每个进程一个套接字)。当我指定 -i 选项将打开的文件列表限制为套接字时,某些进程会丢失。
令 pid_list 为常量且格式正确的逗号分隔列表,包含 136 个进程。为什么结果有时小于136?
$ lsof -p $pid_list -a -i -nP -FpcnT | grep ^p | wc -l
135
$ lsof -p $pid_list -a -i -nP -FpcnT | grep ^p | wc -l
134
$ lsof -p $pid_list -a -i -nP -FpcnT | grep ^p | wc -l
136
Run Code Online (Sandbox Code Playgroud)
只需 1 个 pid 即可重现该问题。
$ clear ; lsof -p 5404 -a -i -nP -FpcnT
p5404
cprocess
nsource:port->dest:port
TST=ESTABLISHED
TQR=0
TQS=0
$ clear ; lsof …Run Code Online (Sandbox Code Playgroud) 我一直在得到一些关于如何找出我的串行端口繁忙的建议。具体来说,当我尝试启动 gammu-smsd 时,它拒绝在 /dev/ttyS0 上启动,因为它说端口正忙:
sudo /etc/init.d/gammu-smsd start
Sep 30 16:16:51 porkypig gammu-smsd[25355]: Starting phone communication...
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Gammu - 1.26.1 built 21:46:06 Nov 24 2009 using GCC 4.4]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Connection - "at115200"]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Connection index - 0]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Model type - ""]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Device - "/dev/ttyS0"]
Sep 30 16:16:51 porkypig gammu-smsd[25355]: gammu: [Runing on - …Run Code Online (Sandbox Code Playgroud) 我们的内存缓存守护进程报告非零的 'curr_connections'...
$ telnet memcache-server 11211
Escape character is '^]'.
stats
...
STAT curr_connections 12
...
Run Code Online (Sandbox Code Playgroud)
...然而,lsof显示没有套接字连接:
$ ssh memcache-server
# lsof -P -i -n | grep memcache
memcached 1759 memcached 26u IPv4 11638 0t0 TCP *:11211 (LISTEN)
memcached 1759 memcached 27u IPv6 11639 0t0 TCP *:11211 (LISTEN)
memcached 1759 memcached 28u IPv4 11642 0t0 UDP *:11211
memcached 1759 memcached 29u IPv6 11643 0t0 UDP *:11211
Run Code Online (Sandbox Code Playgroud)
我猜 'curr_connections' 并不意味着我认为它的作用......
为什么 lsof 无法列出我打开的文件。例如,我使用文本编辑器打开主目录中的某个文件。
$ gedit ~/.python_history
Run Code Online (Sandbox Code Playgroud)
lsof甚至不能以 root 身份工作
$ sudo lsof | grep python_history
Run Code Online (Sandbox Code Playgroud)
没有列出任何内容。为什么?
编辑和保存文件也没有什么区别。运行 python 解释器也没有什么区别。
$ lsof | grep gedit
Run Code Online (Sandbox Code Playgroud)
确实列出了一堆文件,但没有列出我正在编辑的文件。
我无法卸载在其上创建并删除映射的分区kpartx:
# mount /dev/sdb1 usb/
# cd usb/
# kpartx -a -p sda -r -s -v sda.img
add map loop0sda1 (254:5): 0 16777216 linear 7:0 2048
add map loop0sda2 (254:6): 0 16777216 linear 7:0 16779264
add map loop0sda3 (254:7): 0 440401920 linear 7:0 33556480
add map loop0sda4 (254:8): 0 26159792 linear 7:0 473958400
# kpartx -dv /dev/loop0
del devmap : loop0sda4
del devmap : loop0sda3
del devmap : loop0sda2
del devmap : loop0sda1
# cd ..
#umount usb/ …Run Code Online (Sandbox Code Playgroud) 五年前关于此命令的一个问题lsof声称它不会使用 cam 监视所有进程。但是当我在运行 testcam 时运行命令时,我得到:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 3077 lax mem CHR 81,0 808 /dev/video0
firefox-b 3077 lax 143u CHR 81,0 0t0 808 /dev/video0
Run Code Online (Sandbox Code Playgroud)
表示什么DEVICE 81,0。我不太明白为什么它没有被监控,因为它显示块 81,0。