两者都显示了我们正在使用的文件数量。
然而,它们都显示出不同的结果。
root@host [~]# lsof /home4
root@host [~]# lsof /home2
root@host [~]# lsof /home4
Run Code Online (Sandbox Code Playgroud)
然后我们得到
fuser -uvm /home4
root 2621 Frce. (root)crond
root 2635 Frce. (root)atd
root 4554 frce. (root)S99firstboot
root 4768 .rce. (root)firstboot
root 6533 .rce. (root)setup
root 11042 Frce. (root)leechprotect
root 11049 Frce. (root)httpd
root 17885 Frce. (root)httpd
root 18163 .rce. (root)sshd
root 18184 .rce. (root)bash
nobody 18619 Frce. (nobody)httpd
nobody 18679 Frce. (nobody)httpd
nobody 18812 Frce. (nobody)httpd
nobody 18821 Frce. (nobody)httpd
nobody 18841 Frce. (nobody)httpd
nobody 18843 …Run Code Online (Sandbox Code Playgroud) 该lsof手册页说,大约在下面TYPE列。
TYPE 是与文件关联的节点的类型 - 例如,GDIR、GREG、VDIR、VREG 等。
有人可以解释(或指向一个解释的链接)这些是什么意思。我试过用谷歌搜索这些,但所有的链接都只带我到 lsof 手册页。
如果你找到了一个链接,请告诉我你是如何用谷歌搜索的:)
我习惯wget在晚上自动下载文件(大多数是 zip 文件)。
然而,有时早上我发现有几个文件无法解压。我不知道为什么会发生这种情况,也许是远程服务器出了问题。
我想编写一个脚本来使用“unzip -t”定期测试下载文件夹中的 zip 文件,但我不想测试正在下载的文件。那么我如何判断文件是否正在被使用wget呢?
使用netstat或查找已建立连接的 PID 是微不足道的lsof。但是,我有一个进程每 60 秒创建一个连接到我们的数据库并通过最大化失败的连接尝试限制来锁定它。我可以将失败的连接限制增加到数据库上极高的值,或者我可以尝试追踪建立连接的原因,我选择了后者。
基于 tcpdump/wireshark,我可以看到正在发生的事情是建立了连接,然后连接服务器在服务器甚至可以响应之前立即关闭连接。我不知道是为什么。
第一步是找出哪个PID正在打开连接。不幸的是,这似乎说起来容易做起来难。问题是当连接进入 TIME_WAIT 状态时,它不再与 PID 相关联。由于我的连接的生命周期不到十分之一秒,有没有办法记录这些信息?
netstat并且lsof似乎能够每秒轮询一次,但这对于我正在处理的连接尝试来说还不够快。是否有我可以连接的挂钩以将此信息转储到日志中?或者我唯一的选择是用循环和一些编码来暴力破解它?
我使用 CentOS 6。
我想知道我的服务器是否与远程服务器建立了连接,或者远程服务器是否尝试访问我的服务器。我试图阅读输出lsof并获取以下信息:
lsof -i TCP:25
USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 2657 root 12u IPv4 8086 0t0 TCP *:smtp (LISTEN)
smtpd 12950 postfix 6u IPv4 8086 0t0 TCP *:smtp (LISTEN)
smtpd 12950 postfix 9u IPv4 35762406 0t0 TCP hostname:smtp->spe.cif.ic.IP:55277 (ESTABLISHED)
smtp 13007 postfix 13u IPv4 35762309 0t0 TCP hostname:34434->fake.VVVVV.fr:smtp (ESTABLISHED)
smtpd 14188 postfix 6u IPv4 8086 0t0 TCP *:smtp (LISTEN)
smtpd 14188 postfix 9u IPv4 35748921 0t0 TCP hostname:smtp->XX.XX.XX.XX:55912 (ESTABLISHED)
smtpd 14897 postfix 6u IPv4 8086 0t0 …Run Code Online (Sandbox Code Playgroud) 我有 Centos 6.7 通过包装程序运行 java 应用程序。所以首先我运行了这个。
lsof -p 15200 | wc -l and I got the results immediately as 200
Run Code Online (Sandbox Code Playgroud)
接下来我运行了这个 lsof -p 15232 | wc -l我一直花费太长时间并且从未产生任何结果。我可以使用什么其他方法来获取打开的文件总数?我需要知道因为我的系统在一段时间后一直挂着。我可能需要增加打开的文件大小。
我有一个挂在 RHEL 7、xfs 文件系统主机上的进程(NewRelic 基础设施代理)。我认为它正在尝试观看另一个进程已经在使用的文件或套接字。
当我运行strace它时,我得到了这个:
strace: Process 18333 attached
read(6,
Run Code Online (Sandbox Code Playgroud)
如果我运行lsof它,我会看到:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
newrelic- 18333 root cwd DIR 253,3 236 64 /
newrelic- 18333 root rtd DIR 253,3 236 64 /
newrelic- 18333 root txt REG 253,3 15672136 9280340 /usr/bin/newrelic-infra
newrelic- 18333 root mem REG 253,3 68192 16892409 /usr/lib64/libbz2.so.1.0.6
newrelic- 18333 root mem REG 253,3 157400 16892537 /usr/lib64/liblzma.so.5.2.2
newrelic- 18333 root mem REG 253,3 90248 16891935 /usr/lib64/libz.so.1.2.7
newrelic- …Run Code Online (Sandbox Code Playgroud) 我正在查看 lsof -i 的输出,我很困惑!例如,我的 java 进程和数据库之间的以下连接显示为 IPv6:
[me ~] % lsof -P -n -i :2315 -a -p xxxx
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java xxxx me 93u IPv6 2499087197 0t0 TCP 192.168.0.1:16712->192.168.0.2:2315 (ESTABLISHED)
Run Code Online (Sandbox Code Playgroud)
因此输出类型是 IPv6,但它在 NAME 列中清楚地显示了 IPv4 地址。此外,该连接配置了 IPv4 地址!(在此示例中为 192.168.0.2)
非常感谢您的任何见解!
我发现命令的输出中使用了 Unix 套接字lsof:
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
screen 110970 username 4u unix 0xffff91fe3134c400 0t0 19075659 socket
Run Code Online (Sandbox Code Playgroud)
“DEVICE”列保存看起来像内存地址的内容。根据 lsof 手册页:
DEVICE contains the device numbers, separated by commas, for a character special, block special, regular, directory or NFS file;
or ``memory'' for a memory file system node under Tru64 UNIX;
or the address of the private data area of a Solaris socket stream;
or a kernel reference address that identifies the file …Run Code Online (Sandbox Code Playgroud)