一、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
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