Linux Network Command Guide
lsof
- lsof(list open files)是一个列出当前系统打开文件的命令。
- 由于在linux环境下,任何事物都以文件的形式存在,
- 所以通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
输出格式
1 | $lsof -i |
值得解释的参数:
- COMMAND:进程的名称
- FD:文件描述符,应用程序通过文件描述符识别该文件。
cwd
值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。txt
类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。数值
表示应用程序的文件描述符,这是打开该文件时返回的一个整数。- 由于初始打开每个应用程序时,都具有三个文件描述符,
0 1 2
,分别表示标准输入、输出和错误流。 - 所以应用自己的文件的 FD 都是从 3 开始。
- 由于初始打开每个应用程序时,都具有三个文件描述符,
u
表示文件描述符是可读写的(unlocked)r
:只读文件描述符。w
:只写文件描述符。- 大写的
W
表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。
- 大写的
mem
memory-mapped file;rtd
root directory;
- TYPE:文件类型
- REG 和 DIR分别表示文件和目录。
- CHR 和 BLK,分别表示字符和块设备;
- UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。
- DEVICE:指定磁盘的名称
- SIZE:文件的大小
- NODE:索引节点(文件在磁盘上的标识)
- NAME:打开文件的确切名称
常见用法
- 打开文件的进程
lsof abc.txt
- 进程打开的文件
- 根据进程名
lsof -c abc
- 根据PID
lsof -c -p 1234
- 根据进程名
- 当前目录下被打开的文件
lsof +d /usr/local/
- 允许向下递归目录
lsof +d /usr/local/
- 允许向下递归目录
- 筛选和网络相关的
lsof -i
默认打印所有网络相关的
1 | lsof -i[46] [protocol][@hostname|hostaddr][:service|port] |
常见用例
1 | lsof -i UDP@[url]www.akadia.com:123 //显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接 |
特殊端口替代符号
lsof -i :8080
会用特殊的端口替换名称代替,常见的见文档
1 | > sudo lsof -i :8080 |
常见端口号 | 替换名称 |
---|---|
21 | ftp |
22 | ssh |
80 | http |
8080 | http-alt |
8090 | http_alt_alt |
443 | https |
top命令
一些重要的快捷键:
- h 或 ?: 显示帮助信息。
- Esc 或 q: 退出当前的界面。
全局命令:
- Z: 切换颜色显示模式(打开/关闭)。有四个区域和8种数字颜色可选。
- B: 切换加粗显示(打开/关闭)。
- 排序字段的高亮 (x 键):当你按下 x 键时,top 会高亮显示当前排序的字段。这使得你能够清晰地看到系统当前最关注的资源(例如,CPU 或内存消耗最多的进程)。
- 正在运行的任务的高亮 (y 键):按下 y 键时,top 会高亮显示正在运行的任务(即当前活跃的进程,通常在 top 中状态为
R
)。这有助于你迅速找到最消耗资源的任务,尤其是在系统负载较高时。非高亮的就是S
(睡眠状态)或I
(等待 I/O)状态的任务。
- E, e: 切换内存显示格式(TB/GB/MB/KB),
E
为切换导航栏的内存,e
为切换各个任务的内存。
导航栏:
- l: 显示/隐藏平均负载(Load Average)。
- t: 显示/隐藏任务和 CPU 信息。
- m: 显示/隐藏内存使用情况。
CPU/NUMA 视图:
- 0,1,2,3,4: 切换显示不同的 CPU/NUMA 信息视图。
0
隐藏所以的0值,为空格。1/2/3
显示对应 CPU/NUMA 节点的信息,4
显示多个 CPU 纵向排列。
字段操作:
- f: 调整显示的字段,包括添加、删除、排序。比如PPID,UID
查找和排序:
- L, &: 查找当前显示的任务/进程,
L
为查找,&
为查找下一个匹配项。- 类似搜索
排序和显示:
- R: 切换排序顺序。
- H: 显示/隐藏线程信息。
- C: 显示/隐藏坐标(某些任务显示的额外信息)。
切换显示内容:
- c: 切换显示进程的命令行(显示参数)或进程名。
- i: 显示/隐藏空闲进程。
高亮显示:
- x: 切换排序字段的高亮显示。
- y: 切换正在运行的任务的高亮显示。
- z: 切换颜色模式(显示任务时)。
- b: 切换加粗或反转显示(仅在启用
x
或y
时有效)。
过滤进程:
- u: 按用户过滤(显示当前用户的进程)。
- U: 按任意用户过滤(显示指定用户的进程)。
- o, O: 按其他条件进行过滤。
- 按 o 键(小写),进入过滤条件输入模式。输入筛选条件:对于 PID 筛选,输入 pid=<进程ID>,然后按回车。
- 取消筛选?
- top -p 1234
- Ctrl + O: 显示其他筛选器条件。
设置和显示:
- n, #: 设置最大显示的任务数。默认是不限制。
进程管理:
- k: 杀死(终止)选定进程。
- r: 重设进程的优先级(
renice
)。
配置和视图设置:
- W: 保存配置。
- Y: 查看当前配置。
- !: 合并 CPU(例如多个 CPU 显示)。
- Ctrl + E: 设置时间缩放比例。
htop命令
- 按键
h
、?
或者F1
进说明界面,介绍快捷键- 注意大小写, 前面亮蓝色的
F9 k
代表F9
和k
两按键都可以实现功能 u
可以指定用户的进程H
显示或隐藏user线程K
显示或隐藏kernel线程。 值得注意显示的PID
,其实是PID或者TID(thread id)e
可以打印环境变量
- 注意大小写, 前面亮蓝色的
- F5可以在两模式间切换
- sort模式时,F6为
SortBy
可以选择排序方式 - Tree模式时,F6为
Collapse
折叠子进程
- sort模式时,F6为
常规设置以及解释
- F2中布局设置如下(注意分成左右两大块)
- “load average”,它的意思是”系统的平均负荷”,里面有三个数字,意思分别是1分钟、5分钟、15分钟内系统的平均负荷。当CPU完全空闲的时候,平均负荷为0;当CPU工作量饱和的时候,平均负荷为1。
- 如果CPU每分钟最多处理100个进程,系统负荷1.7,意味着除了CPU正在处理的100个进程以外,还有70个进程正排队等着CPU处理。
- 多核或者多CPU情况:n个CPU的电脑,可接受的系统负荷最大为n
- F2中Dispaly options 除开隐藏用户态线程,其他建议全部勾选
- F2中Columns设置每个进程显示的内容
- 建议添加
- STARTTIME
- PPID 父进程PID
- NLWP
Number of threads in the process
- 根据情况添加
- 分析程序时间
user_time
&system_time
- 程序数据占用大小
M_LRS The library size of the process
- IO读取的数据和速率
IO_RATE
(需要sudo才能采集)
- 分析程序时间
- 建议添加
常见用法
- 先使用F4查找到进程名对应的PID,然后退出F4查找,直接输入pid可以知道其是否是僵尸进程
ip rule 与 ip route
传统路由
传统路由是基于目的地址来路由,如route
命令。但是已经不再被使用。
1 | $ route |
- 显示所有的流量都走名为warp的wireguard虚拟网卡。如果第一条wg的路由规则,所有流量原本应该走网关
202.38.73.254
- 参数基本说明
Metric
路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (Linux内核不再使用)Ref
是路由项引用次数 (Linux内核不再使用)- 相关Flags含义:
U
路由是活动的G
需要经过网关!
拒绝路由n
表示该路由是一个主机路由(而不是网络路由)
1 | $ route -6 |
以上是ipv6的相关输出
ip ro命令 ip route 命令
ip ro
命令是ip route
命令的缩写,默认显示的是ip route show table main
也就是main 路由表
注意每个路由表的内容,如果满足几个路由规则,路由的优先级是按照匹配前缀最长的路由。而不是按照第一行优先于第二行。
1 | root@tsjOp ~ [03:02:19] |
对于目的地址为10.0.233.2
的信包,虽然也匹配default
规则,但是32位全匹配10.0.233.2 dev wg1 scope link
,所以最终选择wg1
.
ip rule指令
1 | Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 删除; llist 列表) |
查看指定ip的路由
1 | root@tsjOp ~ [01:46:08] |
iptables
Linux 网络管理机制
在命令的学习和实践中,逐步学习。Linux系统是如何管理网络的。
node5 problem
1 | $ ip route show table default |
参考文献
https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316599.html
Linux Network Command Guide
http://icarus.shaojiemike.top/2023/09/07/Work/network/example/LinuxNetworkCommandGuide/