Linux Network Command Guide
导言
我想写关于 linux 网络命令 ip iptables ufw 的相关文档来全面表述linux网络的构成和如何控制管理
lsof¶
- lsof(list open files)是一个列出当前系统打开文件的命令。
- 由于在linux环境下,任何事物都以文件的形式存在,
- 所以通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
输出格式¶
$lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 82138 shaojiemike 20u IPv4 101994394 0t0 TCP localhost:34075->localhost:56220 (ESTABLISHED)
hugo 4042646 shaojiemike 9u IPv4 99496788 0t0 TCP localhost:xtel (LISTEN)
ssh 4080263 shaojiemike 3u IPv4 100792902 0t0 TCP snode6:40592->ec2-54-82-85-249.compute-1.amazonaws.com:ssh (ESTABLISHED)
$lsof
init 1 root rtd DIR 8,1 4096 2 /
init 1 root txt REG 8,1 150584 654127 /sbin/init
值得解释的参数:
- COMMAND:进程的名称
- FD:文件描述符,应用程序通过文件描述符识别该文件。
cwd
值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。txt
类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。数值
表示应用程序的文件描述符,这是打开该文件时返回的一个整数。- 由于初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。
u
表示该文件被打开并处于读取/写入模式,而不是只读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
默认打印所有网络相关的
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不止一个)
port --> 端口号 (可以不止一个)
常见用例¶
lsof -i UDP@[url]www.akadia.com:123 //显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接
lsof -i [email protected]:ftp -r //不断查看目前ftp连接的情况(-r,lsof会永远不断的执行,直到收到中断信号,+r,lsof会一直执行,直到没有档案被显示,缺省是15s刷新)
特殊端口替代符号¶
lsof -i :8080
会用特殊的端口替换名称代替,常见的见文档
> sudo lsof -i :8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qbittorre 102376 chivier 9u IPv6 257158435 0t0 TCP *:http-alt (LISTEN)
常见端口号 | 替换名称 |
---|---|
21 | ftp |
22 | ssh |
80 | http |
8080 | http-alt |
8090 | http_alt_alt |
443 | https |
top命令¶
提高刷新率
top
命令的默认刷新间隔是 3 秒,但你可以通过设置刷新间隔来让它更频繁地更新。
要将 top
的刷新间隔改为 0.5 秒,可以在 top
启动后按下 d
键(小写),然后输入新的时间间隔(单位为秒)。- d 或 s: 设置更新间隔时间。
-
启动
top
: -
按下
d
键(小写)后,输入0.5
,然后按回车:
这样,top
就会以 0.5 秒的间隔更新显示内容。
或者,你也可以在启动 top
时指定刷新间隔:
在命令行中直接指定刷新间隔为 0.5 秒:
-d
选项用来设置刷新间隔(单位:秒)。
一些重要的快捷键:¶
- 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中布局设置如下(注意分成左右两大块)
- 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才能采集)
- 分析程序时间
常用参数解释
- PRIORITY
- Kernel's internal priority for the process
- NICE
- Nice value (the higher the value,the more it lets other processes take priority)
- 所以
F7 Nice-
调高优先级,F8 Nice+
降低优先级
- PROCESSOR
- Id of the CPU the process last executed on
- M_SIZE
- Total program size in virtual memory
- 进程占用的虚拟内存值
- M_RESIDENT
- Resident set size,size of the text and data sections,plus stack usage
- 进程占用的物理内存值
- M_SHARE
- Size of the process's shared pages
- 进程占用的共享内存值
- PERCENT_CPU
- Percentage of the CPU time the process used in the last sampling (0~n)
- PERCENT_MEM
- Percentage of the memory the process is using, based on resident memory size
- 该进程占用的物理内存和总内存的百分比
- TIME
- Total time the process has spent in user and system time
- Status:
- R: running;
- S: sleeping;
- T: traced/stopped;
- Z: zombie;
- D: disk sleep
常见用法¶
- 先使用F4查找到进程名对应的PID,然后退出F4查找,直接输入pid可以知道其是否是僵尸进程
ip rule 与 ip route¶
传统路由¶
传统路由是基于目的地址来路由,如route
命令。但是已经不再被使用。
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 0.0.0.0 0.0.0.0 U 0 0 0 warp
default 202.38.73.254 0.0.0.0 UG 0 0 0 eno0
- 显示所有的流量都走名为warp的wireguard虚拟网卡。如果第一条wg的路由规则,所有流量原本应该走网关
202.38.73.254
- 参数基本说明
Metric
路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (Linux内核不再使用)Ref
是路由项引用次数 (Linux内核不再使用)- 相关Flags含义:
U
路由是活动的G
需要经过网关!
拒绝路由n
表示该路由是一个主机路由(而不是网络路由)
$ route -6
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
[::]/0 [::] !n -1 1 0 lo
[::]/0 2001:da8:d800:730::1 UG 1024 65 0 eno0
ip6-localhost/128 [::] Un 0 57 0 lo
以上是ipv6的相关输出
ip ro命令 ip route 命令¶
ip ro
命令是ip route
命令的缩写,默认显示的是ip route show table main
也就是main 路由表
注意每个路由表的内容,如果满足几个路由规则,路由的优先级是按照匹配前缀最长的路由。而不是按照第一行优先于第二行。
root@tsjOp ~ [03:02:19]
> ip ro
default via 114.214.235.254 dev eth1 src 114.214.233.141
10.0.233.2 dev wg1 scope link
10.0.233.3 dev wg1 scope link
10.0.233.4 dev wg1 scope link
10.0.233.5 dev wg1 scope link
10.0.233.6 dev wg1 scope link
10.0.233.7 dev wg1 scope link
114.214.232.0/22 dev eth1 scope link src 114.214.233.141
192.168.31.0/24 dev br-lan scope link src 192.168.31.1
对于目的地址为10.0.233.2
的信包,虽然也匹配default
规则,但是32位全匹配10.0.233.2 dev wg1 scope link
,所以最终选择wg1
.
ip rule指令¶
Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 删除; llist 列表)
SELECTOR := [ from PREFIX 数据包源地址] [ to PREFIX 数据包目的地址] [ tos TOS 服务类型]
[ dev STRING 物理接口] [ pref NUMBER ] [fwmark MARK iptables 标签]
ACTION := [ table TABLE_ID 指定所使用的路由表] [ nat ADDRESS 网络地址转换]
[ prohibit 丢弃该表| reject 拒绝该包| unreachable 丢弃该包]
[ flowid CLASSID ]
TABLE_ID := [ local | main | default | new | NUMBER ]
查看指定ip的路由¶
root@tsjOp ~ [01:46:08]
> ip route get 20.205.243.166
20.205.243.166 via 114.214.235.254 dev eth1 src 114.214.233.141
root@tsjOp ~ [01:48:07]
> ip route show to match 20.205.243.166
default via 114.214.235.254 dev eth1 src 114.214.233.141
iptables¶
Linux 网络管理机制¶
在命令的学习和实践中,逐步学习。Linux系统是如何管理网络的。
node5 problem¶
参考文献¶
https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316599.html
https://zhuanlan.zhihu.com/p/144585950