在 Linux 下,我可以使用netstat -tulpnwand ps,如下所示:
# netstat -tulpnw | grep :53
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1482/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 1482/named
# ps aux | fgrep 1482
named 1482 0.0 1.0 93656 44900 ? Ssl Sep06 3:17 /usr/sbin/named -u named
root 20221 0.0 0.0 4144 552 pts/0 R+ 21:09 0:00 fgrep --color=auto 1482
#
Run Code Online (Sandbox Code Playgroud)
ksh在 AIX 6 中使用时,如何获取绑定到端口的程序的完整路径?
# lsof -n -itcp | wc
92 919 10212
# lsof -n | grep TCP | wc
2482 27222 373861
Run Code Online (Sandbox Code Playgroud)
我做错了lsof -itcp什么?这种调用是跳过部分连接,看起来这是线程的连接。
我不明白 lsof 命令的输出。
当我写
lsof -p PID
Run Code Online (Sandbox Code Playgroud)
我得到 4 行,当我写
lsof | grep PID
Run Code Online (Sandbox Code Playgroud)
我得到数百行。
它不应该返回相同的结果吗?
谢谢你的回复。这里是输出。看起来是子流程还是这个任务是什么意思?
lsof -p 29076
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 29076 pr cwd unknown /proc/29076/cwd (readlink: Permission denied)
java 29076 pr rtd unknown /proc/29076/root (readlink: Permission denied)
java 29076 pr txt unknown /proc/29076/exe (readlink: Permission denied)
java 29076 pr NOFD /proc/29076/fd (opendir: Permission denied)
lsof |grep 29076|head -20
java 29076 pr cwd unknown /proc/29076/cwd (readlink: Permission denied)
java 29076 pr …Run Code Online (Sandbox Code Playgroud) 我正在使用 Debian Stretch。我的根分区已挂载read-only。只有当我安装或升级包时,才会/重新挂载到read-write(通过使用 apt 钩子),然后重新挂载回ro.
有时在软件包升级后,我无法重新安装/为只读:
mount -o remount,ro /
mount: / is busy
Run Code Online (Sandbox Code Playgroud)
在较旧的 Debian 版本 (Wheezy) 上,我可以列出已取消链接的打开文件lsof:
lsof +L1
Run Code Online (Sandbox Code Playgroud)
或者,更具体地说,阻止/重新挂载回 ro 的文件:
{ lsof +L1 ; lsof|sed -n '/SYSV/d; /DEL|(path /p;' ; } | grep -Ev '/(dev|home|tmp|var)'
Run Code Online (Sandbox Code Playgroud)
但是,在 Debian Stretch 上,lsof +L1不会列出任何文件。
我没有看到任何改变+|-L在man lsof这可以解释为什么它停止工作。
为什么 lsof +L1 不再列出已取消链接的打开文件?
如何列出那些阻止 / 重新挂载为只读的文件?
更新
我已经停止了所有可以停止的进程,并且只有init并且getty仍在运行,但我仍然无法重新挂载/ …
我想在外部进程关闭后立即移动它创建的大文件。
这个测试命令正确吗?
if lsof "/file/name"
then
# file is open, don't touch it!
else
if [ 1 -eq $? ]
then
# file is closed
mv /file/name /other/file/name
else
# lsof failed for some other reason
fi
fi
Run Code Online (Sandbox Code Playgroud)
编辑:该文件代表一个数据集,我必须等到它完成才能移动它,以便另一个程序可以对其进行操作。这就是为什么我需要知道外部进程是否完成了文件。
是否可以使用 输出完整的命令名称lsof -nP -i4UDP?
我一直在手册中寻找合适的选项,例如-V(见下文),但它不会产生全COMMAND名,即systemd-resolve显示为systemd-r:
$ sudo lsof -V -nP -i4UDP
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae 437 avahi 12u IPv4 12982 0t0 UDP *:5353
avahi-dae 437 avahi 14u IPv4 12984 0t0 UDP *:45006
cups-brow 449 root 7u IPv4 12149 0t0 UDP *:631
systemd-r 485 systemd-resolve 12u IPv4 14694 0t0 UDP 127.0.0.53:53
systemd-r 485 systemd-resolve 13u IPv4 14695 0t0 UDP *:5355
dhclient 629 root 6u IPv4 …Run Code Online (Sandbox Code Playgroud) 我想提取某个进程的进程 ID 以将其关闭。该进程是使用某个端口(localhost:3000)的本地Web服务器,我目前正在这样做以提取相关行:
lsof|grep localhost:3000
Run Code Online (Sandbox Code Playgroud)
但是lsof命令太慢了。有没有更快的方法来提取进程ID?
有什么方法可以在 FreeBSD 10 上使用 ZFS 找到一些定期写入磁盘(根据 hdd led)的进程(也许将 ZFS 转换为详细日志记录模式)?
lsof 由于磁盘访问时间很短,其他即时聚合统计实用程序似乎无法捕获任何内容。
我目前正在尝试查看所有使用 /var mount 的文件。
随着lsof | grep /var*当它以字节为单位显示大小。如何以 MB 为单位显示文件大小。
谢谢你。
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 服务器管理员都非常有用。