Linux 系统管理必备:三剑客 + 网络 / 防火墙 / 进程管理,一站式实战手册
Linux三剑客
在Linux系统中,“三剑客”通常指三个强大的文本处理工具:grep,sed和awk。它们结合正则表达式和灵活的语法,能够高效完成文本搜索,过滤,替换和结构化处理任务
grep文本内容查找器
使用grep命令可以对输入的文本内容进行匹配搜索,输入来源默认是文件内容,也可以结合管道符“|”匹配其他命令的输出结果
基本语法
grep [选项] "匹配内容" 文件名
常用选项
-i:忽略大小写-v:反向匹配(不包含)-n:显示行号-l:只显示匹配的文件名-c:只统计匹配行数-r/-R:递归搜索目录-E:使用扩展正则(等价egrep)-w:全词匹配-A n:匹配行后显示 n 行-B n:匹配行前显示 n 行-C n:前后各显示 n 行
pattern 通用基础规则(所有工具都能用)
先掌握这些最基础、最高频的匹配符号,是所有模式的核心:
这是 Pattern 的「底层语法」,所有场景都能用,优先记:
| 符号 | 含义 | 典型示例 |
|---|---|---|
^ |
行首锚定 | ^ERROR 匹配以 ERROR 开头的行 |
$ |
行尾锚定 | WARN$ 匹配以 WARN 结尾的行 |
^$ |
匹配空行 | grep -v "^$" 过滤空行 |
. |
匹配任意单个字符(除换行) | r.t 匹配 rat/rot/r@t |
* |
前一个字符 0 次 / 多次 | ro*t 匹配 rt/rot/root |
[] |
匹配括号内任意一个字符 | [0-9a-z] 匹配数字 / 小写字母 |
[^] |
匹配括号内「除外」的字符 | [^0-9] 匹配非数字 |
\ |
转义特殊字符 | \. 匹配真实的点,\* 匹配真实的星号 |
匹配文件内容用法
1.查找anaconda-ks.cfg文件中包含root的行
2.查找“%end”出现的次数

3.查找anaconda-ks.cfg文件以字母数字下划线开头的内容并列出行号
通过管道符“|”匹配命令结果
在Linux中竖线("|"也被称为管道符)是一个非常强大的工具,尤其在命令行操作中。
管道符 | 的核心是:将前一个命令的「标准输出(stdout)」,作为后一个命令的「标准输入(stdin)」。
- 形象理解:像「水管」一样,把前一个命令的输出结果,直接传给下一个命令处理,无需临时文件。
- 关键规则:后一个命令必须能接收「标准输入」(比如 grep/sed/awk/cat/sort 等),像
ls/mkdir这类不接收标准输入的命令,用管道符无意义。
ll /etc/sysconfig/network-scripts/ | grep ifcfg
这个命令一共分为两个部分第一部分 ll /etc/sysconfig/network-scripts/ 命令会将 /etc/sysconfig/network-scripts/目录下的所有文件列出来,然后将输出的内容交给grep来进行匹配,这样就可以找出包含ifcfg的文件进行输出 ,效果如图
在一条命令中,管道符可以写多个,进行链式处理,如果我希望定位日志access.log文件以ERROR开头的错误日志,并且包含username的行那么我们可以这样写
cat access.log | grep '^ERROR' | grep 'username'
sed文本内容编辑器
作用:非交互式修改文本,替换、删除、插入、追加,不改原文件(加 -i 才改)
基本语法
sed [选项] "命令" 文件名
常用选项
-n:只打印匹配 / 处理的行-i:直接修改文件(危险!建议先不加测试)-e:多条件编辑-r:支持扩展正则
最常用命令
s/旧/新/:替换d:删除p:打印a 内容:追加i 内容:插入
使用示例
由于sed命令是编辑命令,为了测试sed命令的作用,我们可以cp命令复制几个文件进行尝试。
cp ~/anaconda-ks.cfg ~/test.cfg
打印指定行内容
显示3行内容

显示1-5行内容
查找包含network内容的行

替换文件内容
sed的主要功能是修改文件,在test.cfg中有一行内容是 network --bootproto=dhcp --device=ens33 --ipv6=auto --active我们希望将dhcp改为static:
1.普通模式匹配
#通过s/pattern/replacement/进行模式替换,添加-i命令直接修改文件
sed -i 's/dhcp/static/' test.cfg
2.正则模式匹配
普通模式有一定的弊端,某些单词中包含dhcp也会被替换为static,例如文件中有许多的auto如果要替换为no:
# 使用\b表示单词结束符
sed -i 's/\bauto\b/no/' test.cfg
文件中插入内容
在文件总快速插入内容主要有两个命令,“a\”表示在匹配行后追加内容,“i\”表示在匹配行前插入内容
#nl 可以给文件添加行号,然后通过管道符提交给sed命令提取10-13行
nl test.cfg | sed -n '10,13p'
# “11a\” 表示在第11行后追加内容,内容为# append line
sed -i '11\a# append line'

删除指定行内容
通过d指令可以删除定位的行内容
nl test.cfg | sed -n '10,13p'
# 删除第12行内容
sed -i '12d' test.cfg
#删除network开头的内容
sed -i '/^network/d' test.cfg

awk文本内容分析器
awk 是一种用于处理和分析文本数据的编程语言 / 工具,特别擅长处理结构化的文本(如日志、CSV 文件、配置文件),它逐行读取输入,按指定规则进行处理和输出,是 Linux/Unix 环境下文本处理的核心工具之一。
一、awk 核心基础
1. 基本语法结构
awk [选项] '模式{动作}' 输入文件
- 模式(Pattern):可选,用于匹配行(如条件判断、行号匹配),只有匹配的行才会执行后续动作。
- 动作(Action):必选(若无模式则默认处理所有行),用
{}包裹,是要执行的操作(如打印、计算、赋值)。 - 核心内置变量(最常用):
变量 含义 $0当前整行内容 $1-$n当前行的第 1~n 个字段(默认分隔符是空格 / 制表符) NF当前行的字段总数(Number of Fields) NR当前处理的行号(Number of Records) FS字段分隔符(默认空格,可自定义,如 FS=",")OFS输出字段分隔符(默认空格)
使用示例
需求:按文件从大到小进行排序/etc/sysconfig/network-scripts/目录中的文件,然后打印出前5个文件名与它们的大小
分析实现步骤:
(1)列出目录中的文件还需要获得大小,排序等操作,可以使用ls命令,并且参数为-lhs,要获得大小需要-l,表示详细信息,-h表示文件大小友好显示,-S表示按大小从大到小排序
参考命令:
ls lhs /etc/sysconfig/network-scripts/

(2)步骤2:通过管道符号,将输出信息转交给awk命令进行分析,取出每个文件信息(每一行)对应位置的文件和大小即可,从格式可以看出,awk命令默认按空格和进制表符进行分割,即文件名在第10部分,文件大小在第部分,然后使用print函数进行打印

参考命令:
ls -lhs /etc/sysconfig/network-scripts/ | awk '{print $10,$6}'

步骤3:最后还需要提取最大的前5个文件,就可以使用sed命令,要注意的是awk的输出的第一行是空行,所以提取第2-6行即可
ls -lhs /etc/sysconfig/network-scripts/ | awk '{print $10,$6}' | sed -n '2,6p'

自定义分隔符
awk命令可以使用-F参数来指定分隔符,且多个分隔符可以同时生效,多个分隔符使用“ | ”进行分隔
awk -F '分隔符1|分隔符2...'<file>
我们通过一个查看所有用户的例子来学习如何使用,在/etc/password 文件中保存了所有用户的用于读取的必要信息,信息格式为
用户名称:登录口令情况:用户ID:所属组ID:用户的全称等其他详细信息:用户的home目录用户的默认登录shell
取出/etc/password第一行查看,可以看到root用户信息如图
如果我们需要获取到用户名称,也就是以分号“:”分隔的第一部分$1。若不指定分隔符,那么获取结果如图所示

使用-F参数指定分隔符
可以看到按照指定的":"冒号进行分隔了
awk内置变量
处理$1,$2,$n,awk还有一些内置变量,常用的如下:
- $0:表示当前整行,$1表示第一个字段,$2表示第二个字段,$n表示第n个字段
- NR:表示当前已读的行数
- NF:表示当前被分割的列数,NF表示最后一个字段,NF-1表示倒数第二个字段
- FILENAME:表示当前文件的名称
将awk内置变量的值显示出来
awk -F ':' '{print FILENAME,NR,NF,"----",$0}' /etc/passwd

NR变量通常用于输出行号,NF变量通常和$符进行结合"$NF",获取最后一段的内容
小结
Linux的三剑客(grep,sed,awk)是一组强大的文本处理工具,通常用于系统管理,脚本编写和日志分析。
grep善于文本搜索和过滤,sed善于文本替换和编辑,而awk则擅长文本格式化和数据处理。
管理系统运行状态
硬件状态
查看CPU信息
想要查看CPU信息一共有两个途径:
- lscpu命令提供CPU的详细统计信息,包括型号,核心数,线程数,缓存大小等。
- /proc/cpuinfo文件包含每个CPU核心的详细参数,如型号,频率,缓存等。
lscpu

cat /proc/cpuinfo

查看硬盘信息
查看硬盘分区信息命令:
fdisk -l

以树状结构显示设备信息
lsblk

查看硬盘容量
df -h

查看某个文件夹的容量占用情况,可以使用如下命令
du -sh /usr/* | sort -n

查看内存使用情况
# 显示内存使用情况命令如下
free -m
# 内存显示可读单位,此命令可能不存在
free -h


软件状态
top命令监控系统状态
top 是 Linux 下最常用的实时系统监控工具,可以直观查看 CPU、内存、进程等核心运行状态。
top

🔹 顶部系统汇总区
- 系统运行时间:
15:47:33 up 18 min→ 系统已启动 18 分钟 - 负载情况:
load average: 0.00, 0.04, 0.10→ 1/5/15 分钟平均负载都很低,说明系统非常空闲 - 进程状态:
124 total, 1 running, 123 sleeping→ 只有 1 个进程在运行,其余都在休眠,无停止 / 僵尸进程 - CPU 使用率:
1.0 us, 1.7 sy, 97.0 id→ 用户态 1%、内核态 1.7%,空闲率 97%,CPU 几乎无压力 - 内存使用:
995896K total, 360144K free→ 总内存约 972MB,空闲约 351MB,使用量不大 - Swap 分区:
2097148K total, 2097148K free→ 交换分区完全未使用,内存充足
🔹 关键进程解读
| PID | 命令 | 资源占用 | 说明 |
|---|---|---|---|
| 7553 | bash |
0.7% CPU, 0.2% MEM | 当前你正在使用的终端 shell |
| 6457 | vmtoolsd |
0.3% CPU, 0.7% MEM | 虚拟机工具进程(VMware Tools),负责虚拟机与宿主机交互 |
| 1 | systemd |
0.0% CPU, 0.7% MEM | 系统 1 号进程,所有进程的父进程,负责系统初始化 |
| 其他 | 内核线程 | 0.0% CPU | 如 kworker、rcu_bh 等,是内核后台工作进程,正常存在 |
top命令还支持一些交互,大家可以自行尝试
| 序号 | 快捷键 | 核心功能 | 适用场景 |
|---|---|---|---|
| 1 | q |
退出 top | 查看完毕,快速退出界面 |
| 2 | P |
按 CPU 排序 | 找吃 CPU 的进程(默认项) |
| 3 | M |
按内存排序 | 找吃内存的进程(排查内存泄漏) |
| 4 | 1 |
多核监控 | 查看服务器每个核心的负载情况 |
| 5 | k |
终止进程 | 发现异常进程,直接输入 PID 杀掉 |
| 6 | u |
过滤用户 | 只看 root 或 nginx 等特定用户的进程 |
| 7 | c |
完整命令 | 切换显示完整的命令行(如看到具体的 Java 启动参数) |
| 8 | s |
调整刷新 | 修改刷新间隔(如输入 5,改为 5 秒刷新一次) |
| 9 | H |
显示线程 | 切换到线程模式(排查多线程程序问题) |
| 10 | h |
帮助手册 | 忘记命令时,快速查看所有快捷键说明 |
ps命令查看进程状态
top命令虽然可以查看进程状态,但是top属于交互式命令,对于需要读取进程的瞬时状态则还是非交互式的ps比较合适
语法
ps [OPTION]...
ps 命令最核心的 5 个选项
| 选项 | 功能说明 | 典型用法 |
|---|---|---|
aux |
显示所有进程,并以用户格式展示 CPU / 内存占比、启动时间等关键信息(最常用组合) | ps aux |
-ef |
显示所有进程,并以树形格式展示父子进程关系,便于追溯进程来源 | ps -ef |
-u |
按用户名 / UID过滤进程,只查看指定用户的进程 | ps -u root |
-p |
按 ** 进程 ID (PID)** 精确查找进程,用于查看特定进程的详细信息 | ps -p 1234 |
-eo |
自定义输出列,按需提取 PID、CPU / 内存占用、命令行等字段,输出更精简 | ps -eo pid,%cpu,%mem,cmd |
ps -aux 显示所有进程信息,适用于需要查看CPU内存和使用率的情况
ps -ef 显示全格式进程信息,适用于查看进程关系

搜索列出与sshd相关的进程信息
ps -ef|grep sshd

网络状态
网络状态命令用来查看本机 IP、网卡、端口、路由、连通性,判断网络是否正常。
ss命令
ss = Socket Statistics,用来查看系统网络连接、端口监听状态,比 netstat 更快更常用。
ss [OPTION] [FILTER]
OPTION主要选项
- -t 显示 TCP 连接
- -u 显示 UDP 连接
- -l 只显示监听状态的端口
- -n 以数字形式显示 IP 和端口(不解析域名)
- -a 显示所有连接(监听 + 已建立)
- -p 显示进程名 / PID(需要 root)
查看当前服务器的网络连接统计
ss -s

查看当前服务器中的TCP和UDP连接
核心列说明
| 列名 | 含义 |
|---|---|
| Netid | 网络协议类型,这里是 udp(也可以是 tcp、raw 等) |
| State | 连接状态,UNCONN 表示 UDP 无连接状态(TCP 会显示 LISTEN/ESTAB 等) |
| Recv-Q | 接收队列中未被应用读取的字节数 |
| Send-Q | 发送队列中未被确认的字节数 |
| Local Address:Port | 本机监听的 IP 地址和端口号- *:port 表示监听所有网卡- 192.168.122.1:53 表示仅监听该特定 IP 的 53 端口 |
| Peer Address:Port | 对端地址和端口,*:* 表示未建立连接(监听状态下无对端) |
| users: | 占用该端口的进程信息,格式为 ("进程名", pid=进程ID, fd=文件描述符) |
管理网络防火墙
在Linux系统中,网络安全是一个至关重要的话题,而防火墙是实现网络安全的核心组件之一,Linux提供了多种防火墙管理工具最常见的是iptables和firewalld
什么是firewalld防火墙
firewalld 是 Linux 系统中默认的动态网络防火墙管理工具,用于控制进出系统的网络流量,通过设置规则允许或禁止端口、服务、IP 的访问,保护系统安全。
查看fireawlld运行状态
firewall-cmd --state
如果我们防火墙是启动状态显示running,停止的则显示not running

启停firewalld防火墙
类似于Windows的服务,Linux也存在服务的概念,firewalld就是一个服务,通过systemctl服务管理工具可以对firewalld防火墙服务进行启停操作
systemctl start firewalld # 启动
systemctl stop firewalld # 停止
systemctl restart firewalld # 重启
systemctl status firewalld # 查看状态
systemctl enable firewalld # 开机自启
systemctl disable firewalld # 开机不自启
firewalld的区域管理
firewalld 用区域(zone) 按信任级别管理网络流量,每个区域是一套独立规则集,可绑定网卡 / 源地址,快速切换安全策略。
一、核心概念
- 区域本质:预定义 / 自定义的规则模板,决定入站流量默认行为(ACCEPT/REJECT/DROP)。
- 绑定规则:一个网卡 / 源地址只能属于一个区域;一个区域可绑定多个网卡 / 源地址。
- 默认区域:
public(新网卡默认归属)。 - 配置目录:
- 系统默认:
/usr/lib/firewalld/zones/ - 自定义 / 永久:
/etc/firewalld/zones/firewalld
- 系统默认:
二、预定义区域(默认规则)
| 区域 | 信任级别 | 默认行为 | 适用场景 |
|---|---|---|---|
| trusted | 最高 | 允许所有入站 | 完全可信内网 |
| internal | 高 | 允许 ssh/mdns/samba-client/dhcpv6-client | 内部局域网 |
| home | 高 | 同 internal | 家庭网络 |
| work | 中 | 允许 ssh/dhcpv6-client | 办公网络 |
| public | 中低 | 仅允许 ssh/dhcpv6-client | 公共网络(默认) |
| external | 低 | 仅允许 ssh,开启 NAT 伪装 | 路由器外网接口 |
| dmz | 低 | 仅允许 ssh | 非军事区(服务器) |
| block | 极低 | 拒绝所有入站(返回 ICMP 拒绝) | 严格限制 |
| drop | 最低 | 丢弃所有入站(无响应) | 最高安全 |
三、常用管理命令
查看当前区域信息
# 查看所有支持的zone区域
firewall-cmd --get-zone
# 查看当前默认区域
firewall-cmd --get-default-zone
更多推荐




所有评论(0)