1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 程序员都应该知道的 lsof 命令

程序员都应该知道的 lsof 命令

时间:2020-03-18 18:08:56

相关推荐

程序员都应该知道的 lsof 命令

来自公众号:高性能服务器开发

lsof命令是 Linux 系统的扩展工具,它的含义是listopenedfiledesciptor (列出已经打开的文件描述符),在 Linux 系统中,所有的与资源句柄相关的东西都可以统一抽象成文件描述符(filedescriptor,简称 fd)。一个文件句柄是一个 fd,一个 socket 对象也可以称之为 fd 等等。

默认情况下,系统是不存在这个命令的,你需要安装一下,使用如下命令安装:

yuminstalllsof

我们来看一下这个命令的使用效果:

COMMANDPIDTIDUSERFDTYPEDEVICESIZE/OFFNODENAME

systemd1rootcwdDIR202,140962/

nscd453469nscd8unetlink0t011017ROUTE

nscd453470nscdcwdDIR202,140962/

nscd453470nscdrtdDIR202,140962/

nscd453470nscdtxtREG202,1180272146455/usr/sbin/nscd

nscd453470nscdmemREG202,1217032401548/var/db/nscd/hosts

nscd453470nscdmemREG202,190664132818/usr/lib64/libz.so.1.2.7

nscd453470nscdmemREG202,168192133155/usr/lib64/libbz2.so.1.0.6

nscd453470nscdmemREG202,1153192133002/usr/lib64/liblzma.so.5.0.99

nscd453470nscdmemREG202,191496133088

nscd453471nscd5ua_inode0,904796[eventpoll]

nscd453471nscd6rREG202,1217032401548/var/db/nscd/hosts

nscd453471nscd7uunix0xffff8800374974400t011015/var/run/nscd/socket

nscd453471nscd8unetlink0t011017ROUTE

imgserver611zhangylcwdDIR202,140961059054/home/zhangyl/flamingoserver

imgserver611zhangylrtdDIR202,140962/

imgserver611zhangyltxtREG202,147889171057044/home/zhangyl/flamingoserver/imgserver

imgserver611zhangyl24ua_inode0,904796[eventfd]

imgserver611zhangyl25uIPv4557076430t0TCP*:commtact-http(LISTEN)

imgserver611zhangyl26rCHR1,30t04800/dev/null

imgserver611613zhangyl32wREG202,11310722754609/home/zhangyl/flamingoserver/imgcache/258bfb8945288a117d98d440986d7a03

结果显示中列出了各个进程打开的各种 fd 类型,对于 Uinx Socket,lsof命令会显示出其详细的路径,打开的文件 fd 亦是如此。

使用lsof命令有三点需要注意:

默认情况下,lsof的输出比较多,我们可以使用 grep 命令过滤我们想要查看的进程打开的 fd 信息,如:

lsof-i|grepmyapp

或者使用lsof -p pid也能过滤出指定的进程打开的 fd 信息:

[root@iZ238vnojlyZ~]#lsof-p26621

COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME

chatserve26621zhangylcwdDIR202,140961059054/home/zhangyl/flamingoserver

chatserve26621zhangylrtdDIR202,140962/

chatserve26621zhangyltxtREG202,180270351051942/home/zhangyl/flamingoserver/chatserver

chatserve26621zhangylmemREG202,161928141417/usr/lib64/libnss_files-2.17.so

chatserve26621zhangylmemREG202,144096143235/usr/lib64/librt-2.17.so

chatserve26621zhangylmemREG202,11957064/usr/lib64/libdl-2.17.so

chatserve26621zhangylmemREG202,12112384132824/usr/lib64/libc-2.17.so

chatserve26621zhangylmemREG202,1142304132850/usr/lib64/libpthread-2.17.so

chatserve26621zhangylmemREG202,18875291/usr/lib64/libgcc_s-4.8.5-0702.so.1

chatserve26621zhangylmemREG202,11141560137077/usr/lib64/libm-2.17.so

chatserve26621zhangylmemREG202,1999944140059/usr/lib64/libstdc++.so.6.0.19

chatserve26621zhangylmemREG202,19879756269001/usr/lib64/mysql/libmysqlclient.so.20.3.4

chatserve26621zhangylmemREG202,1164440133622/usr/lib64/ld-2.17.so

chatserve26621zhangyl0uCHR1,30t04800/dev/null

chatserve26621zhangyl1uCHR1,30t04800/dev/null

chatserve26621zhangyl2uCHR1,30t04800/dev/null

chatserve26621zhangyl3ua_inode0,904796[eventpoll]

chatserve26621zhangyl4ua_inode0,904796[timerfd]

chatserve26621zhangyl5ua_inode0,904796[eventfd]

chatserve26621zhangyl7ua_inode0,904796[eventpoll]

lsof命令只能查看到当前用户有权限查看到的进程 fd 信息,对于其没有权限的进程,最右边一列会显示 “Permission denied”。如下所示:

sshd26759rootcwdunknown/proc/26759/cwd(readlink:Permissiondenied)

sshd26759rootrtdunknown/proc/26759/root(readlink:Permissiondenied)

sshd26759roottxtunknown/proc/26759/exe(readlink:Permissiondenied)

sshd26759rootNOFD/proc/26759/fd(opendir:Permissiondenied)

bash26761rootcwdunknown/proc/26761/cwd(readlink:Permissiondenied)

bash26761rootrtdunknown/proc/26761/root(readlink:Permissiondenied)

bash26761roottxtunknown/proc/26761/exe(readlink:Permissiondenied)

bash26761rootNOFD/proc/26761/fd(opendir:Permissiondenied)

lsof命令第一栏进程名在显示的时候,默认显示前 n 个字符,这样如果我们需要显示完整的进程名以方便过滤的话,可以使用+c选项。用法如下:

#最左侧的程序名最大显示15个字符

[zhangyl@iZ238vnojlyZ~]$lsof+c15

当然,如果你设置值太大,lsof便不会采用你设置的最大值,而是使用默认最大值。

上文也介绍了,socket 也是一种 fd,如果需要仅显示系统的网络连接信息,使用的是-i选项即可,这个选项可以形象地显示出系统当前的出入连接情况:

看到图中的连接方向了吧?

当然,和netstat命令一样,lsof -i默认也会显示 ip 地址和端口号的别名,我们只要使用-n和-P选项就能相对应地显示 ip 地址和端口号了,综合起来就是lsof -Pni:

●编号837,输入编号直达本文

●输入m获取文章目录

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。