当前位置: 首页 > news >正文

常用命令lsof netstat 介绍

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

注释:在linux下一切皆文件,包括磁盘 tty 串口,包括硬件设备,套接口;

既然linux下一切都是以文件形式存在,那我们是不是可以通过访问文件来查看数据以及网络连接以及tcp和udp等socket套接字;

系统在后台会为每个应用程序分配一个文件描述符,文件描述符为应用程序和操作系统交换提供接口,应用程序在打开文件的描述符列表提供了一些应用程序的信息;

lsof  (list   openfile)      列出打开文件; 

注释:losf  会访问linux核心文件以及内存,所以一般需要使用root用户的权限;

losf     选项

注释:每行会显示一个打开的文件,若直接输入  losf  ,不指定任何选项会显示所有进程打开的所有文件;

常用的选项如下;

lsof   /filename        查看当前谁正在使用这个文件;  如:   lsof    /root

lsof  +D   /root           可以递归查看某个目录下的目录;

lsof   -u   username    列出某个用户打开的文件信息;             losf   -u    root     ====   losf   -u   0  

lsof    -c   program     列出某个程序所打开的文件信息;         losf   -c  mysql  ======    lsof  |grep   mysql

lsof    -u   ^mysql    -c    mysqld     #    ^mysql   表示只过滤出非mysql的程序打开的文件;

lsof    -i   列出所有网络连接,  后面可以跟tcp   udp     :80(某个端口)        查看那个应用程序在使用80端口;

lsof   -g  GID      查看某个用户组所打开的文件;      losf  -g   root       ====        lsof    -g    0    (查看root用户组所打开的文件);

lsof   -d   4        显示文件描述符是4的进程和文件;

注释:lsof的选项都可以结合一起使用,比如  lsof    -u  mysql    -c   mysql(列出mysql用户及mysql程序打开的文件)   两者是或者的意思;

(1):lsof默认选项:如下显示;

COMMAND       PID           TID          USER       FD              TYPE                DEVICE      SIZE/OFF              NODE                       NAME

进程名称           进程ID      线程ID        用户     文件描述符      类型            指定磁盘的名称      文件大小    索引阶段                  打开文件的名称

[root@localhost_002 ~]# lsof |head -n10
COMMAND    PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1         root  cwd       DIR                8,3       268         64 /
systemd      1         root  rtd       DIR                8,3       268         64 /
systemd      1         root  txt       REG                8,3   1523568     279801 /usr/lib/systemd/systemd
systemd      1         root  mem       REG                8,3     20040      60007 /usr/lib64/libuuid.so.1.3.0
systemd      1         root  mem       REG                8,3    261336     190815 /usr/lib64/libblkid.so.1.1.0
systemd      1         root  mem       REG                8,3     90664      59990 /usr/lib64/libz.so.1.2.7
systemd      1         root  mem       REG                8,3    157424      59996 /usr/lib64/liblzma.so.5.2.2
systemd      1         root  mem       REG                8,3     23968      60084 /usr/lib64/libcap-ng.so.0.0.0
lsof      1704         root    2u      CHR              136,0       0t0          3 /dev/pts/0
pickup    1696      postfix    7u     unix 0xffff88003a44dc00       0t0      31732 socket
pickup    1696      postfix   92w     FIFO                0,8       0t0      18922 pipe

注释: FD:文件描述符; 

cwd(应用程序在那个目录启动的)     

txt(txt类型是程序代码,应用程序本身或者共享库 如/sbin/init)

2u:表示文件描述符是2,  该文件处于读取/写入模式       

w:表示只写模式;               

W:表示该程序对真个应用程序可写;

  type:类型;DIR(目录)     REG(文件)          CHR(字符)      BLK(块设备)        unix(域套接字)    FIFO(先进先出)

(2):       lsof    /root             查看当前谁正在使用/root这个文件;

[root@localhost_002 ~]# lsof /root
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash    1198 root  cwd    DIR    8,3     4096 33574977 /root
bash    1242 root  cwd    DIR    8,3     4096 33574977 /root
bash    1624 root  cwd    DIR    8,3     4096 33574977 /root
vim     1725 root  cwd    DIR    8,3     4096 33574977 /root
lsof    1744 root  cwd    DIR    8,3     4096 33574977 /root
lsof    1745 root  cwd    DIR    8,3     4096 33574977 /root

(3):lsof  +D   /root           可以递归查看某个目录下的目录有谁在使用;

[root@localhost_002 ~]# lsof +D /root
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash    1198 root  cwd    DIR    8,3     4096 33574977 /root
bash    1242 root  cwd    DIR    8,3     4096 33574977 /root
bash    1624 root  cwd    DIR    8,3     4096 33574977 /root
vim     1725 root  cwd    DIR    8,3     4096 33574977 /root
vim     1725 root    4u   REG    8,3    16384 37237431 /root/.2.txt.swp
lsof    1756 root  cwd    DIR    8,3     4096 33574977 /root
lsof    1757 root  cwd    DIR    8,3     4096 33574977 /root

注释:如上图例,查看到/root/.2.txt.swp的;因为我刚刚在另外一个终端编辑过这个文件;

注释lsof可以查看到那些用户正在使用这个文件,losf后面跟 文件  目录    硬件设备   串口等( /root    /dev    /proc等    /tmp/mysql.sock)

(4):  losf   -u   root     列出root用户所打开的文件信息;

[root@localhost_002 ~]# lsof -u root |head
COMMAND    PID USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1 root  cwd       DIR                8,3       268         64 /
systemd      1 root  rtd       DIR                8,3       268         64 /
systemd      1 root  txt       REG                8,3   1523568     279801 /usr/lib/systemd/systemd
systemd      1 root  mem       REG                8,3     20040      60007 /usr/lib64/libuuid.so.1.3.0
systemd      1 root  mem       REG                8,3    261336     190815 /usr/lib64/libblkid.so.1.1.0
systemd      1 root  mem       REG                8,3     90664      59990 /usr/lib64/libz.so.1.2.7
systemd      1 root  mem       REG                8,3    157424      59996 /usr/lib64/liblzma.so.5.2.2
systemd      1 root  mem       REG                8,3     23968      60084 /usr/lib64/libcap-ng.so.0.0.0
systemd      1 root  mem       REG                8,3     19888      60070 /usr/lib64/libattr.so.1.1.0

(5):显示某个程序所打开的文件信息;         lsof   -c   mysql    =======        lsof  |grep mysql   (默认lsof会显示系统里所有打开的文件)

[root@localhost_002 ~]# lsof -c mysql|head -n3
COMMAND    PID  USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
mysqld_sa  950  root  cwd    DIR                8,3       223 16788108 /usr/local/mysql
mysqld_sa  950  root  rtd    DIR                8,3       268       64 /
[root@localhost_002 ~]# lsof |grep mysql|head -n3
mysqld_sa  950         root  cwd       DIR                8,3       223   16788108 /usr/local/mysql
mysqld_sa  950         root  rtd       DIR                8,3       268         64 /
mysqld_sa  950         root  txt       REG                8,3    960472   50332813 /usr/bin/bash

注释:losf的选项可以结合一起使用,

[root@localhost_002 ~]# lsof -u mysql -c mysql |head -n3
COMMAND    PID  USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
mysqld_sa  950  root  cwd    DIR                8,3       223 16788108 /usr/local/mysql
mysqld_sa  950  root  rtd    DIR                8,3       268       64 /

(6):lsof    -i (列出所有网络连接)       lsof   -i   tcp     lsof   -i  udp        lsof   -i   :80(那个进程在使用80端口)

[root@localhost_002 ~]# lsof -i tcp|head -n3
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     888   root    3u  IPv4  18131      0t0  TCP *:ssh (LISTEN)
sshd     888   root    4u  IPv6  18140      0t0  TCP *:ssh (LISTEN)
[root@localhost_002 ~]# lsof  -i :80
COMMAND PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   908   root    7u  IPv4  18284      0t0  TCP *:http (LISTEN)
nginx   910 nobody    7u  IPv4  18284      0t0  TCP *:http (LISTEN)
nginx   911 nobody    7u  IPv4  18284      0t0  TCP *:http (LISTEN)

(7):查看某个用户组所打开的文件;

[root@localhost_002 ~]# lsof -g 0 |head -n3
COMMAND    PID PGID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
kthreadd     2    0 root  cwd       DIR    8,3      268   64 /
kthreadd     2    0 root  rtd       DIR    8,3      268   64 /

常用的命令如下:

lsof    /etc/passwd     #查看那些进程在使用/etc/passwd;

lsof   /dev                   #查看有哪些进程在占用/dev/目录;

lsof   -c   mysql      #查看mysql进程的文件使用情况;       

^  表示非的意思,    lsof    -c   mysql    -u    ^mysql    #mysql进程的文件使用情况,但不是mysql用户使用的;

lsof  -p   2332:   #查看进程PID 2332的文件使用情况;

lsof    `which   nginx`   ====   lsof   /usr/local/nginx/sbin/nginx        #查看那些进程在使用nginx;    `which是一个变量`

[root@localhost_002 ~]# lsof /usr/local/nginx/sbin/nginx
COMMAND PID   USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME
nginx   908   root txt    REG    8,3  4878280 1367149 /usr/local/nginx/sbin/nginx
nginx   910 nobody txt    REG    8,3  4878280 1367149 /usr/local/nginx/sbin/nginx
nginx   911 nobody txt    REG    8,3  4878280 1367149 /usr/local/nginx/sbin/nginx
[root@localhost_002 ~]# lsof `which nginx`
COMMAND PID   USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME
nginx   908   root txt    REG    8,3  4878280 1367149 /usr/local/nginx/sbin/nginx
nginx   910 nobody txt    REG    8,3  4878280 1367149 /usr/local/nginx/sbin/nginx
nginx   911 nobody txt    REG    8,3  4878280 1367149 /usr/local/nginx/sbin/nginx

[root@localhost_002 ~]# lsof /dev|head -n5
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd      1    root    0u   CHR    1,3      0t0 5999 /dev/null
systemd      1    root    1u   CHR    1,3      0t0 5999 /dev/null
systemd      1    root    2u   CHR    1,3      0t0 5999 /dev/null
systemd      1    root   21r   CHR 10,235      0t0 7928 /dev/autofs
[root@localhost_002 ~]# lsof -c mysql |head -n4
COMMAND    PID  USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
mysqld_sa  950  root  cwd    DIR                8,3       223 16788108 /usr/local/mysql
mysqld_sa  950  root  rtd    DIR                8,3       268       64 /
mysqld_sa  950  root  txt    REG                8,3    960472 50332813 /usr/bin/bash
查看mysql进程打开的文件,但是非mysql用户的;
[root@localhost_002 ~]# lsof -c mysql -u ^mysql
COMMAND   PID USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
mysqld_sa 950 root  cwd    DIR                8,3       223 16788108 /usr/local/mysql
mysqld_sa 950 root  rtd    DIR                8,3       268       64 /
mysqld_sa 950 root  txt    REG                8,3    960472 50332813 /usr/bin/bash
mysqld_sa 950 root  mem    REG                8,3     62184    43553 /usr/lib64/libnss_files-2.17.so
mysqld_sa 950 root  mem    REG                8,3 106070960 17001962 /usr/lib/locale/locale-archive
mysqld_sa 950 root  mem    REG                8,3   2173512    32391 /usr/lib64/libc-2.17.so
mysqld_sa 950 root  mem    REG                8,3     19776    32399 /usr/lib64/libdl-2.17.so

查看进程PID  3223 打开的文件使用情况;       lsof   -p  3223     也尅用使用ps aux|grep -w   322

[root@localhost_002 ~]# lsof -p 3223
COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
wc      3223 root  cwd    DIR    8,3      4096 33574977 /root
wc      3223 root  rtd    DIR    8,3       268       64 /
wc      3223 root  txt    REG    8,3     41640 50381625 /usr/bin/wc
wc      3223 root  mem    REG    8,3 106070960 17001962 /usr/lib/locale/locale-archive
wc      3223 root  mem    REG    8,3     26254 33659609 /usr/lib64/gconv/gconv-modules.cache
wc      3223 root    0u   CHR  136,1       0t0        4 /dev/pts/1

程序名称  PID  启动用户   文件描述符  类型   磁盘名称   文件大小   索引节点(在磁盘的表示)     文件名称
文件描述符如下: 
cwd     文件的启动在那个目录;
txt     文件的程序代码;
0 表示标准输入  
1 表示输出
2 错误流
u 表示读取/写入模式,              w 表示只读,     R 表示只读

TYPE 类型    DIR表示目录      REG表示文件     CHR表示字符;

注释:通过lsof命令,可以查看  cwd 当前程序是在那个目录下启动,   txt 程序代码,     以及它的类型(DIR目录  REG文件  CHR字符),通过lsof  -p  PID还可以查看进程的一些进程;同/proc/PID/下面目录下cwd目录下;

常用选项:

lsof   -[ u g  c  D i  p  d  ^ ]  

当然,选项可以结合到一起使用,比如 -u   -c        lsof     -u mysql   -c   mysql   不过两种默认是或的一起,显示出mysql用户使用文件,mysql程序使用的文件(包括root用户的);

而使用 -a 选项后,则是表示 的意思,不会显示root用户相关;

[root@localhost_002 ~]# lsof -a -u mysql -c mysql
COMMAND  PID  USER   FD   TYPE             DEVICE SIZE/OFF     NODE NAME
mysqld  1141 mysql  cwd    DIR                8,3      259 34097256 /data/mysql
mysqld  1141 mysql  rtd    DIR                8,3      268       64 /
mysqld  1141 mysql  txt    REG                8,3 87240567 51165778 /usr/local/mysql/bin/mysqld

注释:lsof还可以用在卸载文件系统时,比如我们挂载cdrom到/mnt目录下,如果在该目录下还有在操作,通常会提示卸载文件系统失败:如下;

[root@localhost_002 ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost_002 ~]# cd /mnt
[root@localhost_002 mnt]# vim 1.txt
卸载时:
[root@localhost_002 ~]# umount /mnt
umount: /mnt:目标忙。
        (有些情况下通过 lsof(8) 或 fuser(1) 可以
         找到有关使用该设备的进程的有用信息)
那我们就可以通过losf  /mnt 查看有哪些程序在使用/mnt目录影响卸载;
[root@localhost_002 ~]# lsof /mnt
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash     1198 root  cwd    DIR   11,0     2048 1856 /mnt
vim     10050 root  cwd    DIR   11,0     2048 1856 /mnt

注释:图例中在看到有一个实例bash在运行,还有一个vim程序在运行;所以无法卸载;

注释:进程所打开的可以是:  文件   目录     文件系统   字符设备     函数共享库   软连接    串口    硬件设备等;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/yuanhaohao/blog/2966108

相关文章:

  • 神经网络定义
  • ssm整合详解
  • const的用法,特别是用在函数前面与后面的区别
  • React源代码解析(3):组件的生命周期
  • C++17 并行排序初体验
  • Oracle DataGuard常用管理命令
  • SSH远程管理常用的几种配置
  • Nuxt 开发 - 项目初始化
  • 赖世雄:新中考英语听说满分冲刺 笔记
  • MariaDB数据基础应用
  • 百度小程序遇到的问题
  • 【总结整理】房产类---转自人人都是产品经理
  • Mac mojova 10.14.1 安装 Cocoapods
  • RabbitMQ的前世今生
  • SpringBoot服务器压测对比(jetty、tomcat、undertow)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【comparator, comparable】小总结
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 5、React组件事件详解
  • centos安装java运行环境jdk+tomcat
  •  D - 粉碎叛乱F - 其他起义
  • Electron入门介绍
  • input的行数自动增减
  • JavaScript创建对象的四种方式
  • JavaScript的使用你知道几种?(上)
  • k8s如何管理Pod
  • React-生命周期杂记
  • React组件设计模式(一)
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 高程读书笔记 第六章 面向对象程序设计
  • 观察者模式实现非直接耦合
  • 技术:超级实用的电脑小技巧
  • 坑!为什么View.startAnimation不起作用?
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端性能优化--懒加载和预加载
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 小程序测试方案初探
  • 异步
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #android不同版本废弃api,新api。
  • #Lua:Lua调用C++生成的DLL库
  • #NOIP 2014#Day.2 T3 解方程
  • #Z2294. 打印树的直径
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (¥1011)-(一千零一拾一元整)输出
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)linux使用docker容器运行mysql
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB