linux · 2020-05-10 0

netstat、lsof、ulimit 的使用

一、netstat

linux netstat 用于显示网络状态

常用参数:

  • -a all 显示所有连接的socket,默认不显示LISTEN
  • -t tcp 显示TCP传输协议的连接状况
  • -u udp 显示UDP传输协议的连接状况
  • -n numeric 直接使用IP地址,而不是通过域名解析器
  • -l listen 仅列出正在监听的服务状态
  • -p programs 显示进程名和进程号
  • -r route 显示路由表
root@7350a4d8c021:~# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp6       0      0 :::3306                 :::*                    LISTEN      1/mysqld            
tcp6       0      0 :::33060                :::*                    LISTEN      1/mysqld            
tcp6       0      0 172.17.0.2:3306         172.17.0.1:55568        ESTABLISHED 1/mysqld 
root@7350a4d8c021:/# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.17.0.1      0.0.0.0         UG        0 0          0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 eth0

二、lsof

lsof ( list opened files )负责列出系统中已经打开的文件,包括普通文件,目录,块特殊文件,字符特殊文件,正在执行的文本引用,库,流或网络文件

netstat无权限控制,lsof有权限控制,只能看到本用户,可以通过 sudo lsof -i 查看端口

常用参数:

  • -p 执行命令 lsof -p 1,列出 1号 进程打开的文件
  • -l 执行命令 lsof -l ,输出中使用用户 ID 代替用户名,USER 列显示的是用户ID而不是用户名
  • -u 执行命令 lsof -u root,输出 root 用户打开的文件
  • -c 执行命令 lsof -c sshd,输出 COMMAND 列包含 sshd 的项
  • -d 执行命令 lsof -d 12,输出打开文件描述符 12 的所有项
  • -i 执行命令 lsof -i 4,输出 TYPE 为 IPv4 的所有项,执行命令 lsof -i UDP 输出协议类型为 UDP 的所有项
  • -<file_name> 执行命令 lsof test/t.log,查看打开文件 test/t.log 的进程项
  • -n 不将 ip 转换为 hostname
  • -i [46] [protocol][@hostname|hostaddr][:service|port] 输出符合指定条件的项。46 :分别指 IPv4、IPv6;protocol :指 TCP 或 UDP;hostname : 网络主机名;hostaddr : IP 地址;service : 包含在 /etc/services 中的名称;port : 端口号,可以是多个
root@7350a4d8c021:~# lsof
COMMAND PID TID TASKCMD    USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
mysqld    1               mysql  cwd       DIR              259,2     4096 30015665 /var/lib/mysql
mysqld    1               mysql  rtd       DIR               0,54     4096  1731335 /
mysqld    1               mysql  txt       REG               0,54 69890744  1730978 /usr/sbin/mysqld
mysqld    1               mysql  DEL       REG               0,19            325726 /[aio]
mysqld    1               mysql  mem       REG               0,54    39648  1730873 /usr/lib/mysql/plugin/component_reference_cache.so
root@7350a4d8c021:~# lsof -l
COMMAND PID TID TASKCMD       USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
mysqld    1                    999  cwd       DIR              259,2     4096 30015665 /var/lib/mysql
mysqld    1                    999  rtd       DIR               0,54     4096  1731335 /
mysqld    1                    999  txt       REG               0,54 69890744  1730978 /usr/sbin/mysqld
mysqld    1                    999  DEL       REG               0,19            325726 /[aio]
mysqld    1                    999  mem       REG               0,54    39648  1730873 /usr/lib/mysql/plugin/component_reference_cache.so
root@7350a4d8c021:~# lsof -p 1
COMMAND PID  USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
mysqld    1 mysql  cwd       DIR              259,2     4096 30015665 /var/lib/mysql
mysqld    1 mysql  rtd       DIR               0,54     4096  1731335 /
mysqld    1 mysql  txt       REG               0,54 69890744  1730978 /usr/sbin/mysqld
mysqld    1 mysql  DEL       REG               0,19            325726 /[aio]
mysqld    1 mysql  mem       REG               0,54    39648  1730873 /usr/lib/mysql/plugin/component_reference_cache.so
root@7350a4d8c021:~# lsof test/t.log 
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
more    684 root    4r   REG   0,54      204 1731396 test/t.log
root@7350a4d8c021:~# lsof +d ~/test
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    495 root  cwd    DIR   0,54     4096 1731391 /root/test
more    684 root  cwd    DIR   0,54     4096 1731391 /root/test
more    684 root    4r   REG   0,54      204 1731396 /root/test/t.log
root@7350a4d8c021:~# lsof -i :3306
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld    1 mysql   23u  IPv6 327923      0t0  TCP *:3306 (LISTEN)
mysqld    1 mysql   35u  IPv6 894378      0t0  TCP 7350a4d8c021:3306->172.17.0.1:54244 (ESTABLISHED)
root@7350a4d8c021:~# lsof -ni :3306
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld    1 mysql   23u  IPv6 327923      0t0  TCP *:3306 (LISTEN)
mysqld    1 mysql   35u  IPv6 894378      0t0  TCP 172.17.0.2:3306->172.17.0.1:54244 (ESTABLISHED)
root@7350a4d8c021:~# lsof -i tcp
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld    1 mysql   20u  IPv6 320162      0t0  TCP *:33060 (LISTEN)
mysqld    1 mysql   23u  IPv6 327923      0t0  TCP *:3306 (LISTEN)
mysqld    1 mysql   35u  IPv6 894378      0t0  TCP 7350a4d8c021:3306->172.17.0.1:54244 (ESTABLISHED)

lsof输出各列信息的意义如下:

标识 说明
COMMAND 进程的名称
PID 进程标识符
PPID 父进程标识符(需要指定-R参数)
USER 进程所有者
PGID 进程所属组
FD 文件描述符,应用程序通过它识别该文件

文件描述符列表:

标识 说明
cwd 表示当前工作目录,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
txt 该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
lnn 库引用 (AIX)
er FD 信息错误(参见名称栏)
jld jail 目录 (FreeBSD)
ltx 共享库文本(代码和数据)
mxx 十六进制内存映射类型编号xx
m86 DOS合并映射文件
mem 内存映射文件
mmap 内存映射设备
pd 父目录
rtd 根目录
tr 内核跟踪文件 (OpenBSD)
v86 VP/ix 映射文件
0 标准输入文件stdin
1 标准输出文件stdout
2 标准错误输出文件stderr

一般在标准输出、标准错误、标准输入后还跟着文件状态模式:

标识 说明
u 表示该文件被打开并处于读取/写入模式
r 表示该文件被打开并处于只读模式
w 表示该文件被打开并处于写入模式
空格 表示该文件的状态模式为 unknow,且没有锁定
- 表示该文件的状态模式为 unknow,且被锁定

同时在文件状态模式后面,还跟着相关的锁:

标识 说明
N 对于未知类型的Solaris NFS锁
r 用于部分文件的读取锁定
R 对整个文件进行读取锁定
w 对文件的一部分进行写锁定(文件的部分写锁)
W 对整个文件进行写锁定(整个文件的写锁)
u 用于任何长度的读写锁
U 对于未知类型的锁
x 对于文件部分的SCO OpenServer Xenix锁
X 对于整个文件的SCO OpenServer Xenix锁
space 如果没有锁

文件类型:

标识 说明
DIR 表示目录
CHR 表示字符类型
BLK 块设备类型
UNIX UNIX 域套接字
FIFO 先进先出 (FIFO) 队列
IPv4 网际协议 (IP) 套接字
DEVICE 指定磁盘的名称
SIZE 文件的大小
NODE 索引节点(文件在磁盘上的标识)
NAME 打开文件的确切名称
REG 常规文件

三、ulimit

进程与文件描述符关系:

文件描述符表每个进程都有一个,打开文件表和 i-node 表整个系统只有一个

/proc/46067/fd 可在 proc 目录下,查看 fd

fd

ulimit 命令查看文件描述符信息

zxm@zxm-pc:~$ ulimit -n
1024
zxm@zxm-pc:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127566
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 127566
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited