Linux目录

命令分类大全
补充知识
fortune

AppImage

tee

nice / renice

nano

sudo

系统日志

snap包

基础命令
ip

nslookup

journalctl

stat

file

touch

tree

uniq

who&w

yes

cal

dig

uname

hostname

sort

ss

time

date

kill

lsof

ps

cat
cat=catenate 连接的意思,意思是将文件的内容连接展示出来看看
# cat连接,可以连接展示文件的内容, 可以接多个文件
cat test.log
cat test1.log test2.log
# 展示行号
cat -n test.log
# 一般配合其他命令来使用
cat test.log > newFile.log
cat test.log | grep --color vin
cat test.log | wc -l# 检查你的服务器命令
command -v scp
# 像远端服务器传输数据
# 将test.log传到71.216机器上,默认是登陆用户名的主目录。不写就是这个,可以另外指定
scp test.log root@100.100.71.216:/root/
# 将远端服务器的数据传到本地/home/zesheng/目录下来
scp root@100.100.71.216:/root/test.log /home/zesheng/
# 传输目录需要 -r 递归复制
scp -r config/ root@100.100.71.216:/root/
# 传输需要保留本来的元数据stat就用 -p , 目标文件的stat元数据就会保留下来
scp -pr config/ root@100.100.71.216:/root/
# 如果两台服务器的用户名相同就可以忽略,因为默认是采用相同的用户名,也可以写上,没多大关系。
# ssh 可以直接执行命令,不用再去开窗口,如果命令可以这样做
ssh root@100.100.71.216 ls man
cut

tr

find

diff

wget

curl
调试,访问API
curl -o anzhuang.sh https://res1.hermesagent.org.cn/install.sh
curl -O https://res1.hermesagent.org.cn/install.sh
curl -I https://res1.hermesagent.org.cn/install.sh
curl -L http://192.168.71.213:9090ping

tcpdump
基础的抓包工具,用于分析和捕获网络数据包。
用来分析k3s集群中pod的跨节点通信非常好使,输出的内容清晰明了、
# 抓任何网口的udp协议的与8472端口有关的数据包 srcport+dstport=8472
tcpdump -i any udp port 8472
# -c 10 抓10次自动退出
tcpdump -i any -c 10 udp port 8472
# -n 不解析主机名 抓的更快
tcpdump -i any -n udp port 8472
# -e 显示更多细节,包含链路层头
tcpdump -i any -c 5 -e udp port 8472
# -s 0 -w flannel.pcap 保存到文件
tcpdump -i any -s 0 -w flannel.pcap udp port 8472
# 完全不要解包
tcpdump -i any -n udp port 8472 -e -c 5
[ 外层以太网帧 ] → [ 外层IP ] → [ 外层UDP:8472 ] → [ OTV头 ] → [ 内层以太网帧 ]
→ [ 内层IP ] → [ 内层TCP ] → [ HTTP请求 ]- 时间戳与接口方向
<font style="color:rgb(15, 17, 21);">10:32:30.640392 enp2s0 Out ifindex 2</font>
- 10:32:30.640392:抓包时间
- enp2s0 Out:从本机
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">enp2s0</font>网卡发送出去(Out) - ifindex 2:内核接口索引号
- 外层以太网帧
70:b5:e8:42:33:df > 某个MAC (省略部分)
ethertype IPv4 (0x0800), length 498- 源 MAC 是本机
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">enp2s0</font>的地址 - 目标 MAC 是下一跳网关或对端物理机
- 帧总长度 498 字节
- 外层 UDP 封装(Overlay 隧道)
<font style="color:rgb(15, 17, 21);">ext-215.55204 > ext-214.8472</font>
这一行实际是 tcpdump 简化显示,完整含义:
| 字段 | 值 | 含义 |
|---|---|---|
| 外层源IP | <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">ext-215</font>(假设是 192.168.71.215 之类的物理机IP) | 本机物理IP |
| 外层源端口 | <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">55204</font> | 随机端口(隧道封装使用) |
| 外层目标IP | <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">ext-214</font> | 对端物理机IP |
| 外层目标端口 | <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">8472</font> | Overlay 隧道端口(你过滤的就是这个) |
| 协议 | UDP | 隧道传输协议 |
说明:<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">ext-215</font> / <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">ext-214</font> 是 DNS 反向解析结果,实际是物理机的 IP。
- OTV 头(类似 VXLAN)
<font style="color:rgb(15, 17, 21);">OTV, flags [I] (0x08), overlay 0, instance 1</font>
| 字段 | 值 | 含义 |
|---|---|---|
| 类型 | OTV | Overlay Transport Virtualization(Cisco 的 Overlay 协议,类似 VXLAN) |
flags <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">[I]</font> | 0x08 | 表示 Inter-site(跨站点)或控制标志 |
| overlay | 0 | Overlay 网络标识符(类似 VNI,这里是 0) |
| instance | 1 | 实例 ID(相当于二层隔离域) |
OTV 作用:在 UDP 隧道中封装一个完整的二层以太网帧。
- 内层以太网帧(容器网络内部)
<font style="color:rgb(15, 17, 21);">76:8f:bd:69:fb:93 > 62:23:99:bd:eb:db, ethertype IPv4 (0x0800), length 442</font>
- 源 MAC:
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">76:8f:...</font>→ 可能是 容器 A 的虚拟网卡 MAC - 目标 MAC:
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">62:23:...</font>→ 可能是 容器 B 的虚拟网卡 MAC 或容器网关 MAC - 类型:IPv4
- 内层帧长度:442 字节
这说明 Overlay 网络模拟了一个跨物理机的二层广播域,容器以为自己在同一个 LAN 里。
- 内层 IP 层(容器真实通信)
<font style="color:rgb(15, 17, 21);">10.42.0.121.36260 > 10.42.1.74.http-alt</font>
| 字段 | 值 | 含义 |
|---|---|---|
| 源IP | <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">10.42.0.121</font> | 容器 A 的 Pod IP(所在节点网段 .0.121) |
| 源端口 | <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">36260</font> | 容器内进程使用的临时端口 |
| 目标IP | <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">10.42.1.74</font> | 容器 B 的 Pod IP(另一节点网段 .1.74) |
| 目标端口 | <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">http-alt</font>(8080) | <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">http-alt</font>是 8080 端口的别名 |
- 内层 TCP 层
<font style="color:rgb(15, 17, 21);">Flags [P.], seq 344688621:344688997, ack 843165503, win 6666, options [nop,nop,TS val 3842157405 ecr 2281446211], length 376</font>
| 字段 | 含义 |
|---|---|
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">[P.]</font> | PSH + ACK(推数据并确认) |
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">seq</font> | 从 344688621 到 344688997,共 376 字节 |
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">ack</font> | 确认号 843165503(对端下一个期望的序列号) |
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">win 6666</font> | TCP 窗口大小 |
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">TS val/ecr</font> | TCP 时间戳选项(用于 RTT 计算) |
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">length 376</font> | TCP payload 长度 |
- HTTP 请求内容
<font style="color:rgb(15, 17, 21);">HTTP: GET /actuator/prometheus HTTP/1.1</font>
- 方法:GET
- 路径:
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">/actuator/prometheus</font>(Spring Boot Actuator 的 Prometheus 指标端点) - 版本:HTTP/1.1
这说明是 监控系统抓取指标 的流量。
ss
ss = Socket Statistics 套接字统计信息
是 iproute2 工具集的一部分(和 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">ip</font> 命令同源),直接从内核 netlink 获取数据,是netstat的现代替代品。
ss -s
ss -ln
ss -tulnp
# ss:原生过滤(更快、更精确)
ss state established
ss state time-wait sport = :80 # 源端口是80的time-wait连接
ss state listening sport = :443 # 监听443端口的服务
# ss:更详细的进程、cgroup、TCP 内部状态
ss -p # 进程信息
ss -e # 扩展信息(socket 选项、uid、inode)
ss -m # 内存使用(发送/接收缓冲区大小)
ss -i # TCP 内部信息(RTT、拥塞窗口、重传等)
ss -t -i # TCP + 内部信息(非常详细)
# 找出所有连接到 80 端口且处于 time-wait 状态的连接
ss state time-wait dport = :80
# 找出所有与 192.168.1.100 通信的 established 连接
ss state established dst 192.168.1.100
# 监控 RTT 大于 100ms 的连接
ss -ti | grep -B 3 "rtt:10[0-9]"系统管理
alias

crontab定时任务

systemctl
systemd的管理命令
# 在很多的linux发行版都有这个命令,包括redhat系列、Debian系列、Ubuntu等等
# 在systemd中每一个服务被称为 unit
# 可以使用apache2来实验一下
systemctl status apache2
systemctl start apache2usermod

文件权限

用户账户管理

用户管理

用户组管理

环境变量PATH

符号连接ln

history
history=就是bash命令的历史记录,很有用的命令,可以看到你在这台机器上干了些什么
每个用户都有独特的历史记录,配置文件在~/.bashrc文件中
history
# 在history的配置文件的.bashrc中可以打开命令的时间标签
# 加上这句就行
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
# 另外还有一个配置
HISTCONTROL=ignoreboth # 这行配置很重要,他的意思就是如果你在命令前面输入一个空格,
# 就是命令以空格开头,就不会将命令记入历史记录中
# 这点非常有用,如果你的命令中有明文的密码之类的敏感信息就可以使用这个小技巧
# 另外可以使用 ! 来执行命令,!命令序号就可执行了,自己去试试就行
# 最重要的一点就是 !! 可以重复执行上条命令,!!就是最近的一条,比如你想apt update更新一下,
# 但没权限,失败了,就可以 sudo !!重复执行一下上一条命令.
sudo !!
# 另外 ctrl + r 可以简单搜索命令,比如我想搜索最近使用sudo执行的命令,就可使用
# ctrl + r ,之后输入 sudo, 他就会不全最近的sudo命令,使用ctrl + r 来切换下一个命令
# 当然也可以使用 history | grep sudo
history | grep sudo
top


- 系统运行状态行
top - 10:08:41 up 823 days, 9:37, 1 user, load average: 0.27, 0.55, 0.31| 字段 | 含义 | 分析 |
|---|---|---|
10:08:41 | 当前系统时间 | - |
up 823 days, 9:37 | 系统连续运行时长 | 连续运行823天(约2年3个月),稳定性极佳,无重启记录 |
1 user | 当前登录用户数 | 仅1个用户在线,负载低 |
load average: 0.27, 0.55, 0.31 | 1/5/15分钟系统平均负载 | 假设为多核CPU,负载远低于CPU核心数,系统极度空闲,无压力 |
- 任务状态行
Tasks: 247 total, 1 running, 246 sleeping, 0 stopped, 0 zombie| 字段 | 含义 | 分析 |
|---|---|---|
247 total | 总进程数 | 正常水平,无异常进程堆积 |
1 running | 正在运行的进程数 | 仅1个进程在CPU上运行,其余均休眠,CPU资源充足 |
246 sleeping | 休眠进程数 | 绝大多数进程处于等待I/O/事件状态,符合空闲系统特征 |
0 stopped | 停止进程数 | 无挂起进程,系统正常 |
0 zombie | 僵尸进程数 | 无僵尸进程,父进程回收正常,无资源泄漏 |
- CPU使用率行
%Cpu(s): 0.4 us, 0.1 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st| 字段 | 含义 | 分析 |
|---|---|---|
us (user) | 用户态CPU占比 | 0.4%,应用程序占用极低 |
sy (system) | 内核态CPU占比 | 0.1%,系统内核开销极小 |
ni (nice) | 调整优先级进程占比 | 0%,无优先级调整进程 |
id (idle) | 空闲CPU占比 | 99.5%,CPU几乎完全空闲,性能冗余 |
wa (wait) | I/O等待占比 | 0%,磁盘/网络I/O无瓶颈 |
hi (hardirq) | 硬中断占比 | 0%,硬件中断无压力 |
si (softirq) | 软中断占比 | 0%,网络/内核中断正常 |
st (steal) | 被宿主机抢占时间 | 0%,虚拟机环境下无资源被抢占(物理机默认0) |
- 内存状态行
KiB Mem : 41018360 total, 22925424 free, 10095996 used, 7996940 buff/cache单位:KiB(1 KiB = 1024 B),换算后:
| 字段 | 数值(KiB) | 换算(GB) | 含义 | 分析 |
|---|---|---|---|---|
total | 41,018,360 | ≈39.12 GB | 总物理内存 | 约39GB内存,配置充足 |
free | 22,925,424 | ≈21.86 GB | 完全空闲内存 | 超21GB空闲,内存充足 |
used | 10,095,996 | ≈9.63 GB | 已用内存(不含缓存) | 仅约9.6GB被应用占用 |
buff/cache | 7,996,940 | ≈7.63 GB | 缓存/缓冲内存 | 用于文件缓存,可随时回收给应用 |
avail Mem | 28,360,208 | ≈27.05 GB | 可分配给新应用的内存 | ≈27GB可用内存,完全无内存压力 |
- 交换分区(Swap)状态行
KiB Swap: 8388604 total, 8388604 free, 0 used. 28360208 avail Mem| 字段 | 数值(KiB) | 换算(GB) | 含义 | 分析 |
|---|---|---|---|---|
total | 8,388,604 | ≈8.0 GB | 总交换分区大小 | 8GB Swap,配置合理 |
free | 8,388,604 | ≈8.0 GB | 空闲交换分区 | 完全空闲 |
used | 0 | 0 | 已用交换分区 | 0使用,说明内存完全足够,无内存交换,系统性能极佳 |
二、整体系统健康状态总结
✅ 核心结论:这是一台极度健康、负载极低、运行稳定的Linux服务器
- 运行稳定性:连续运行823天无重启,无僵尸进程,无异常状态
- CPU负载:99.5%空闲,平均负载远低于CPU核心数,无性能瓶颈
- 内存状态:27GB+可用内存,Swap完全未使用,无内存压力
- I/O状态:I/O等待为0,磁盘/网络无瓶颈
三、补充说明与运维建议
- 关键指标健康阈值参考
| 指标 | 健康阈值 | 当前状态 |
|---|---|---|
| 系统负载 | 低于CPU核心数(如8核<8) | 0.27/0.55/0.31,远低于阈值 |
| CPU空闲率 | >70%为健康 | 99.5%,极度健康 |
| Swap使用率 | <10%为健康 | 0%,完美 |
| 可用内存 | >20%总内存为健康 | ≈69%总内存可用,远超阈值 |
top命令
├─ 核心作用
│ └─ 实时监控进程、CPU、内存、系统负载
├─ 界面分为两部分
│ ├─ 上半区:系统统计
│ │ ├─ 时间、运行时长、用户数
│ │ ├─ 1/5/15分钟平均负载
│ │ ├─ 进程总数、运行/睡眠/僵尸状态
│ │ ├─ CPU使用率(us/sy/id/wa等)
│ │ └─ 内存、Swap使用情况
│ └─ 下半区:进程列表
│ ├─ PID、USER、PR、NI
│ ├─ VIRT、RES、SHR
│ ├─ %CPU、%MEM、TIME+
│ └─ COMMAND
├─ 常用快捷键
│ ├─ P:按CPU排序
│ ├─ M:按内存排序
│ ├─ T:按时间排序
│ ├─ k:杀死进程
│ ├─ s、d:修改刷新间隔
│ ├─ 1:显示CPU核心
│ ├─ H:显示线程
│ └─ q:退出
├─ 与 htop 对比
│ ├─ top:系统自带、轻量
│ └─ htop:需安装、界面更友好、功能更强
└─ 常用排查场景
├─ 找CPU高占用进程
├─ 查内存占用异常
├─ 看系统负载高原因
└─ 检查IO等待(wa)偏高bg & fg

后台和前台
前台=控制台、直接可以操作的
后台=放在后面,不直接表现在控制台界面
# 比如我想编辑一个~/bashrc文件,执行了vim ~/.bashrc, 正在编辑的时候,
# 现在又要去跑一个docker容器,一般只能就是先暂时保存这个.bashrc文件,稍后来处理。或者再开一个
# bash去跑docker容器。
# 现在你可以在未完成的vim ~/.bashrc发送到后台,跑完容器再把他从后台拿到前台来处理
# & 后面接这个符号主动将任务发送到后台,或者使用ctrl + z 发送到后台
vim ~/.bashrc &
# 使用fg将任务拿到前台,fg直接执行是拿最近一个放入后台的任务。
# 如果有多个任务,可以使用jobs命令查看bg后台的任务列表,每个任务有一个id,可以使用这个id配合
# fg命令来将任务取出。这个id是绑定在任务上的,id=1的任务结束了,id=2的任务并不会变成id=1,
# 任务和id是绑定在一起的。
jobs
fg
fg 1
fg 2
# 其实可以配合kill命令干掉任务,使用任务id,就可以干掉任务
kill %1scp
scp=secure copy 安全的复制

ssh公钥认证

memory&swap

head & tail

load average

apt

文件与存储
tar & gizp

du & df

/etc/fstab文件

linux文件系统

磁盘格式化与挂载

linux文本处理
grep

sed

awk

性能工具
sar性能监控
linux标准数据流
标准输入流
标准输出流
标准错误流

linux发行版

桌面环境
