我的日志文件太大了,一直在写,但关了还有程序在写,能反查到是谁在写么?
du -sh Remote-20131216.log
4.3G Remote-20131216.log
lsof abc.txt 显示开启文件abc.txt的进程:
lsof Remote-20131216.log
没有:
回忆未来-向东-Jàck 下午 03:41:05
我就是要这个啊哈哈。
没有囁。
大侠江 下午 03:42:36
COMMAND 有没有进程记录
如过没有就没有了
回忆未来-向东-Jàck 下午 03:44:20
我这边是加载的NFS,Linux都挂载到日志上了。
可能是这个原因吧?NFS网络挂载的。
linux中TOP命令显示出COMMAND进程名?
top 后有一个
http://www.ibm.com/developerworks/cn/aix/library/au-lsof.html
大侠江 下午 03:48:40
lsof 显示的的COMMAND
回忆未来-向东-Jàck 下午 03:49:51
好几列啊,就lsof lsof |grep xxxx.avi 虽然有点慢,但是可以用。
lsof -f 不行的,先用grep试试吧。那就去掉-f,直接+文件试一试?
不行的。还是 grep 吧 lsof 加上-n貌似会快一点。
确实快了很多,瞬间返回。
这个lsof是啥原理,是扫整个系统的打开文件句柄了?
遍历 /proc/实现的。
fuser
fuser -v file
使用-v选项将显示更全的信息:
# fuser -v /root
USER PID ACCESS COMMAND
/root: root 17923 ..c.. bash
root 24869 ..c.. atop
root@119.10.*.23:~# fuser -v -n tcp 80
用户 进程号 权限 命令
80/tcp: root 7717 F…. nginx
www 7718 F…. nginx
www 7719 F…. nginx
方法:
- lsof Remote-20131216.log
- fuser -v Remote-20131216.log
lsof-4.82-4.el6.x86_64
[root@localhost htdocs]# rpm -qa|grep lsof
lsof-4.82-4.el6.x86_64
/usr/sbin/lsof|grep “Remote-20131216.log”
Linux操作系统上Lsof命令详解
一般root用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,
但是普通用户执行会显示“permission denied”
我总结一下lsof指令的用法:
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序
lsof -c abc 显示abc进程现在打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程 www.2cto.com
lsof -i 用以显示符合条件的进程情况
语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 –> IPv4 or IPv6
protocol –> TCP or UDP
hostname –> Internet host name
hostaddr –> IPv4位置
service –> /etc/service中的 service name (可以不只一个)
port –> 端口号 (可以不只一个)
例子: TCP:25 – TCP and port 25
@1.2.3.4 – Internet IPv4 host address 1.2.3.4
tcp@ohaha.ks.edu.tw:ftp – TCP protocol hosthaha.ks.edu.tw service name:ftp
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
例子: lsof -i tcp@ohaha.ks.edu.tw:ftp -n
lsof -p 12 看进程号为12的进程打开了哪些文件
lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新
-r,lsof会永远不断的执行,直到收到中断信号
+r,lsof会一直执行,直到没有档案被显示
例子:不断查看目前ftp连接的情况:lsof -i tcp@ohaha.ks.edu.tw:ftp -r
lsof -s 列出打开文件的大小,如果没有大小,则留下空白
lsof -u username 以UID,列出打开的文件
_________________________lsof其它常规用法_____________________________
一、带有 PID 筛选器并进行 txt 文件描述符筛选的 lsof 输出:
lsof -a -p 605 -d ^txt
实践:
[root@test http_pcap_codes]# ps aux|grep xiyouHttpInterfaceAnalyse
root 19147 0.0 5.3 451040 441392 ? S 00:00 0:06 /data/htdocs/tools.xiyou.cntv.cn/http_pcap_codes/xiyouHttpInterfaceAnalyse
[root@test http_pcap_codes]# lsof -a -p 19147
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
xiyouHttp 19147 root cwd DIR 8,3 4096 30507009 /root
xiyouHttp 19147 root rtd DIR 8,3 4096 2 /
xiyouHttp 19147 root txt REG 8,3 18644 24117326 /data/htdocs/tools.xiyou.cntv.cn/http_pcap_codes/xiyouHttpInterfaceAnalyse
xiyouHttp 19147 root mem REG 8,3 139416 10125622 /lib64/ld-2.5.so
xiyouHttp 19147 root mem REG 8,3 1717800 10125623 /lib64/libc-2.5.so
xiyouHttp 19147 root mem REG 8,3 583798 19300366 /usr/local/lib/libpcap.so.1.4.0
二、要求 lsof 显示关于某个文件的信息:
lsof /var/run/sendmail.pid
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sendmail 605 root 8wW VREG 281,3 32 8778600 /var/run/sendmail.pid
正如输出所示,进程 sendmail(PID 为 605)控制了文件 /var/run/sendmail.pid,并且通过排它锁打开该文件以便进行写入。如果出于某种原因,您需要删除这个文件,那么正确的做法是中止该进程,而不是直接删除这个文件。否则,这个守护进程下次可能无法正常启动,或者可能稍后会启动另一个实例,从而导致争用。
三、在 Linux 中使用 lsof 查找删除的文件:
lsof | grep error_log
[root@test ~]# lsof | grep error_log
cupsd 3328 root 3u REG 8,3 3783 9273362 /var/log/cups/error_log.1
[root@test http_pcap_codes]# tail -f /var/log/cups/error_log.1
………………
I [23/Apr/2013:14:03:46 +0800] Listening to 127.0.0.1:631 on fd 4…
………………
四、查找监听端口 631 的进程:
[root@test ~]# lsof -i :631
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
cupsd 3328 root 4u IPv4 11681 TCP localhost.localdomain:ipp (LISTEN)
cupsd 3328 root 6u IPv4 11684 UDP *:ipp
示例1:
[root@test http_pcap_codes]# netstat -atlunp|grep 631
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3328/cupsd
udp 0 0 0.0.0.0:631 0.0.0.0:* 3328/cupsd
示例2:
假如我不知道这个9000端口是php-fpm,查找:
lsof -i :9000
[root@test ~]# lsof -i :9000
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
php-fpm 24648 root 6u IPv4 2654037777 TCP localhost.localdomain:cslistener (LISTEN)
五、使用 lsof 找出谁在使用文件系统:
lsof /export/home
搜索活动的连接:
lsof -i @192.168.109.8
[root@test ~]# lsof -i @192.168.109.8
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
php 3927 www 3u IPv4 268885282 TCP 192.168.109.8:33040->192.168.109.7:14000 (ESTABLISHED)
php 3927 www 4u IPv4 406835521 TCP 192.168.109.8:52239->192.168.109.7:21213 (ESTABLISHED)
php 3930 www 3u IPv4 2644728406 TCP 192.168.109.8:gnutella-rtr->192.168.109.7:14000 (ESTABLISHED)
php 5519 www 3u IPv4 406852603 TCP 192.168.109.8:45756->192.168.109.7:21213 (ESTABLISHED)
转载请注明:爱开源 » Linux操作系统上Lsof命令详解-使用 lsof 查找打开的文件的进程编号,fuser -v。lsof其它常规用法