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 kworkerrcu_bh 等,是内核后台工作进程,正常存在

top命令还支持一些交互,大家可以自行尝试

序号 快捷键 核心功能 适用场景
1 q 退出 top 查看完毕,快速退出界面
2 P 按 CPU 排序 找吃 CPU 的进程(默认项)
3 M 按内存排序 找吃内存的进程(排查内存泄漏)
4 1 多核监控 查看服务器每个核心的负载情况
5 k 终止进程 发现异常进程,直接输入 PID 杀掉
6 u 过滤用户 只看 rootnginx 等特定用户的进程
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(也可以是 tcpraw 等)
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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐