当前位置: 首页 > news >正文

Linux 文本处理实战手册

一、为什么要掌握这些命令?

本手册将 Linux/Unix 运维与开发中最常用的“筛选、排序、替换”技能浓缩为两份口袋指南:先用 15 分钟掌握 cut、sort、uniq、tr 四个小工具,学会按列截取、排序去重及字符级清洗,并附带可直接套用的组合面试题与实战脚本;再深入 sed,从模式空间原理到增删改查、迁移、就地编辑及生产脚本,教你用一行 sed 解决原本需要写脚本的问题,新手可入门,老手可备忘,打开终端敲一遍就能体会“所谓高效运维,其实就是把文本玩到极致”。

二、四小工具:cut / sort / uniq / tr

命令作用典型场景
cut按列/字符截取取用户名、取 IP
sort排序按 UID 排序、去重前排序
uniq去重计数统计访问 IP、登录用户
tr字符级替换/删除/压缩大小写转换、删除回车

2.1 cut —— 截取列

cut -d':' -f1 /etc/passwd          # 用户名
cut -d':' -f1,3 /etc/passwd        # 用户名 + UID
cut -c2 chinese.txt                # 每行第 2 个字符(中文用 -c)

按照冒号截取

截取第一列和第三列

截取1到4列

cut -b 截取英文字符


[root@zard3 shelldemo]# cut -b 3 test2.txt
ee
e
o
e
=
w
to
o
A
b
s
cut -c 截取中文字符

文本如下

[root@zard3 shelldemo]# cut -c 2 test3.txt 
诚
雨
程
祥
瀚
潮

但是,cut -b不适合中文

[root@zard3 shelldemo]# cut -b 2 test3.txt ­# 运行结果啥也没有

⚠️ cut 只能处理「单字符分隔」的文本。

2.2 sort —— 排序

sort file                          # 按字典序
sort -t: -k3 -n /etc/passwd        # 以冒号分隔,按第 3 列数值升序
sort -nr -k5 -o result.log log     # 降序并落盘
sort 按字符排序

sort -n 按照数字大小升序

sort -nr 降序排列

sort -u去重

运行
[root@zard3 shelldemo]# sort -u test4.txt 
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
test3:x:1004:1004::/home/test3:/bin/bash
test4:x:1005:1005::/home/test4:/bin/bash
zard111:x:1003:1003::/home/zard111:/bin/bash

2.3 uniq —— 去重计数

uniq 只能去相邻重复 → 先 sort 再 uniq 成了铁律。

sort fruit.txt | uniq -c          # 每行出现次数
sort fruit.txt | uniq -d          # 只显示重复行
who | awk '{print $1}' | sort | uniq   # 当前在线用户
uniq 仅仅去重复
[root@zard3 shelldemo]# uniq test5.txt 
pple
apple
peache
pear
banana
cherry
banana
orange

全局去重

[root@zard3 shelldemo]# sort test5.txt |uniq
apple
banana
cherry
orange
peache
pear
uniq -c 统计重复的次数

文本

[root@zard3 shelldemo]# cat test5.txt 
apple
apple
peache
pear
banana
cherry
cherry
banana
orange

命令

# 全局去重,并统计每行出现的次数
[root@zard3 shelldemo]# sort test5.txt |uniq -c2 apple2 banana2 cherry1 orange1 peache1 pear
uniq -d 只显示重复行
[root@zard3 shelldemo]# sort test5.txt |uniq -d
apple
banana
cherry
uniq -u 显示不重复的行
[root@zard3 shelldemo]# cat test5.txt |sort |uniq -u
orange
peache
pear

2.4 tr —— 字符级替换/删除/压缩

bash

复制

tr 'a-z' 'A-Z' < fruit.txt        # 小写 → 大写
tr -d '\n' < file                 # 删除换行
tr -s ' '                         # 把连续空格压成一个

文本 同上

替换是一一对应的字母替换

[root@zard3 shelldemo]# cat test5.txt |tr "a-z" "A-Z"
APPLE
APPLE
PEACHE
PEAR
BANANA
CHERRY
CHERRY
BANANA
ORANGE
a替换成s,p替换成a,le替换成r
[root@zard3 shelldemo]# cat test5.txt |tr "apple" "star"
saarr
saarr
arschr
arsr
bsnsns
chrrry
chrrry
bsnsns
orsngr

三、sed 流编辑器

3.1 工作模型(背下来)

  1. 读一行 → 2. 模式空间 → 3. 执行脚本 → 4. 输出 → 5. 清空 → 循环

默认不改原文件,加 -i 才真正落盘。

3.2 高频指令模板

任务模板例子
删行sed '/pattern/d'sed '/^$/d' 删空行
替换sed 's/old/new/g'sed -i.bak 's/SELINUX=disabled/enable/' /etc/selinux/config
打印sed -n '3,5p'输出 3-5 行
迁移sed '/pat/{H;d};$G'含 pat 的行移到末尾
脚本sed -f script.sed file多条指令复用
[root@zard3 shelldemo]# cat passwd.txt 1	root:x:0:0:root:/root:/bin/bash2	bin:x:1:1:bin:/bin:/sbin/nologin3	daemon:x:2:2:daemon:/sbin:/sbin/nologin4	adm:x:3:4:adm:/var/adm:/sbin/nologin5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6	sync:x:5:0:sync:/sbin:/bin/sync7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8	halt:x:7:0:halt:/sbin:/sbin/halt9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10	operator:x:11:0:operator:/root:/sbin/nologin11	games:x:12:100:games:/usr/games:/sbin/nologin12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin13	nobody:x:99:99:Nobody:/:/sbin/nologin14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin15	dbus:x:81:81:System message bus:/:/sbin/nologin16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin17	libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin18	colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin19	rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin20	saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin21	gluster:x:995:992:GlusterFS daemons:/run/gluster:/sbin/nologin22	saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin23	abrt:x:173:173::/etc/abrt:/sbin/nologin24	setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin25	rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin26	pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin27	radvd:x:75:75:radvd user:/:/sbin/nologin28	chrony:x:992:987::/var/lib/chrony:/sbin/nologin29	unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin30	qemu:x:107:107:qemu user:/:/sbin/nologin31	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin32	sssd:x:990:984:User for sssd:/:/sbin/nologin33	usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin34	geoclue:x:989:983:User for geoclue:/var/lib/geoclue:/sbin/nologin35	ntp:x:38:38::/etc/ntp:/sbin/nologin36	gdm:x:42:42::/var/lib/gdm:/sbin/nologin37	rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin38	nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin39	gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin40	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin41	avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin42	postfix:x:89:89::/var/spool/postfix:/sbin/nologin43	tcpdump:x:72:72::/:/sbin/nologin44	zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash45	test1:x:1001:1001::/home/test1:/bin/bash46	tom:x:1002:1002::/home/tom:/bin/bash47	mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false48	named:x:25:25:Named:/var/named:/sbin/nologin49	apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin50	zard111:x:1003:1003::/home/zard111:/bin/bash51	test3:x:1004:1004::/home/test3:/bin/bash52	test4:x:1005:1005::/home/test4:/bin/bash
sed -n "p" passwd.txt 输出的结果和cat一样
[root@zard3 shelldemo]# sed -n "p" passwd.txt 1	root:x:0:0:root:/root:/bin/bash2	bin:x:1:1:bin:/bin:/sbin/nologin3	daemon:x:2:2:daemon:/sbin:/sbin/nologin4	adm:x:3:4:adm:/var/adm:/sbin/nologin5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6	sync:x:5:0:sync:/sbin:/bin/sync7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8	halt:x:7:0:halt:/sbin:/sbin/halt9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10	operator:x:11:0:operator:/root:/sbin/nologin11	games:x:12:100:games:/usr/games:/sbin/nologin12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin13	nobody:x:99:99:Nobody:/:/sbin/nologin14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin15	dbus:x:81:81:System message bus:/:/sbin/nologin16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin17	libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin18	colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin19	rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin20	saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin21	gluster:x:995:992:GlusterFS daemons:/run/gluster:/sbin/nologin22	saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin23	abrt:x:173:173::/etc/abrt:/sbin/nologin24	setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin25	rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin26	pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin27	radvd:x:75:75:radvd user:/:/sbin/nologin28	chrony:x:992:987::/var/lib/chrony:/sbin/nologin29	unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin30	qemu:x:107:107:qemu user:/:/sbin/nologin31	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin32	sssd:x:990:984:User for sssd:/:/sbin/nologin33	usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin34	geoclue:x:989:983:User for geoclue:/var/lib/geoclue:/sbin/nologin35	ntp:x:38:38::/etc/ntp:/sbin/nologin36	gdm:x:42:42::/var/lib/gdm:/sbin/nologin37	rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin38	nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin39	gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin40	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin41	avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin42	postfix:x:89:89::/var/spool/postfix:/sbin/nologin43	tcpdump:x:72:72::/:/sbin/nologin44	zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash45	test1:x:1001:1001::/home/test1:/bin/bash46	tom:x:1002:1002::/home/tom:/bin/bash47	mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false48	named:x:25:25:Named:/var/named:/sbin/nologin49	apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin50	zard111:x:1003:1003::/home/zard111:/bin/bash51	test3:x:1004:1004::/home/test3:/bin/bash52	test4:x:1005:1005::/home/test4:/bin/bash
sed -n "10p" passwd.txt 输入第十行
[root@zard3 shelldemo]# sed -n "10p" passwd.txt 10	operator:x:11:0:operator:/root:/sbin/nologin
sed -n "4,6p" passwd.txt 输入4-6行
[root@zard3 shelldemo]# sed -n "4,6p" passwd.txt 4	adm:x:3:4:adm:/var/adm:/sbin/nologin5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6	sync:x:5:0:sync:/sbin:/bin/sync
sed -n "p;n" passwd.txt  输入所有的奇数行
[root@zard3 shelldemo]# sed -n "p;n" passwd.txt 1	root:x:0:0:root:/root:/bin/bash3	daemon:x:2:2:daemon:/sbin:/sbin/nologin5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin11	games:x:12:100:games:/usr/games:/sbin/nologin13	nobody:x:99:99:Nobody:/:/sbin/nologin15	dbus:x:81:81:System message bus:/:/sbin/nologin17	libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin19	rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin21	gluster:x:995:992:GlusterFS daemons:/run/gluster:/sbin/nologin23	abrt:x:173:173::/etc/abrt:/sbin/nologin25	rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin27	radvd:x:75:75:radvd user:/:/sbin/nologin29	unbound:x:991:986:Unbound DNS resolver:/etc/unbound:/sbin/nologin31	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin33	usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin35	ntp:x:38:38::/etc/ntp:/sbin/nologin37	rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin39	gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin41	avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin43	tcpdump:x:72:72::/:/sbin/nologin45	test1:x:1001:1001::/home/test1:/bin/bash47	mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false49	apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin51	test3:x:1004:1004::/home/test3:/bin/bash
sed -n "n;p" passwd.txt 显示所有的偶数行
[root@zard3 shelldemo]# sed -n "n;p" passwd.txt 2	bin:x:1:1:bin:/bin:/sbin/nologin4	adm:x:3:4:adm:/var/adm:/sbin/nologin6	sync:x:5:0:sync:/sbin:/bin/sync8	halt:x:7:0:halt:/sbin:/sbin/halt10	operator:x:11:0:operator:/root:/sbin/nologin12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin18	colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin20	saned:x:996:993:SANE scanner daemon user:/usr/share/sane:/sbin/nologin22	saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin24	setroubleshoot:x:993:990::/var/lib/setroubleshoot:/sbin/nologin26	pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin28	chrony:x:992:987::/var/lib/chrony:/sbin/nologin30	qemu:x:107:107:qemu user:/:/sbin/nologin32	sssd:x:990:984:User for sssd:/:/sbin/nologin34	geoclue:x:989:983:User for geoclue:/var/lib/geoclue:/sbin/nologin36	gdm:x:42:42::/var/lib/gdm:/sbin/nologin38	nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin40	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin42	postfix:x:89:89::/var/spool/postfix:/sbin/nologin44	zard3:x:1000:1000:ZARD3:/home/zard3:/bin/bash46	tom:x:1002:1002::/home/tom:/bin/bash48	named:x:25:25:Named:/var/named:/sbin/nologin50	zard111:x:1003:1003::/home/zard111:/bin/bash52	test4:x:1005:1005::/home/test4:/bin/bash
sed -n "1,12{p;n}" passwd.txt  输出1-12行所有的奇数行
[root@zard3 shelldemo]# sed -n "1,12{p;n}" passwd.txt 1	root:x:0:0:root:/root:/bin/bash3	daemon:x:2:2:daemon:/sbin:/sbin/nologin5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin11	games:x:12:100:games:/usr/games:/sbin/nologin
sed -n "1,12{n;p}" passwd.txt 输出1-12行所有的偶数行
[root@zard3 shelldemo]# sed -n "1,12{n;p}" passwd.txt 2	bin:x:1:1:bin:/bin:/sbin/nologin4	adm:x:3:4:adm:/var/adm:/sbin/nologin6	sync:x:5:0:sync:/sbin:/bin/sync8	halt:x:7:0:halt:/sbin:/sbin/halt10	operator:x:11:0:operator:/root:/sbin/nologin12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
sed -n '45,${p}' passwd.txt  打印45行之后的所有行
[root@zard3 shelldemo]# sed -n '45,${p}' passwd.txt 45	test1:x:1001:1001::/home/test1:/bin/bash46	tom:x:1002:1002::/home/tom:/bin/bash47	mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false48	named:x:25:25:Named:/var/named:/sbin/nologin49	apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin50	zard111:x:1003:1003::/home/zard111:/bin/bash51	test3:x:1004:1004::/home/test3:/bin/bash52	test4:x:1005:1005::/home/test4:/bin/bash
sed -n '/the/p' test2.txt  带有the的每一行
[root@zard3 shelldemo]# sed -n '/the/p' test2.txt 4	the tongue is boneless but it breaks bones.12! 5	google is the best tools for search keyword.6	The year ahead will test our political establishment to the limit.
sed -n '4,/the/p' test2.txt 以第四行作为起点,到第一次出现the的行
[root@zard3 shelldemo]# sed -n '4,/the/p' test2.txt 4	the tongue is boneless but it breaks bones.12! 5	google is the best tools for search keyword.
sed -n '/the/=' test2.txt 出现the的行号
[root@zard3 shelldemo]# sed -n '/the/=' test2.txt 
4
5
6
sed -n '/^PI/p' test1.txt 找到开头为PI的行
[root@zard3 shelldemo]# sed -n '/^PI/p' test1.txt 
PI=3.141592653589793238462643383249901429
nl test1.txt|sed '6d' 删除第六行
[root@zard3 shelldemo]# nl test1.txt|sed '6d'1	he was short and fat.2	He was wearing a blue polo shirt with black pants. 3	The home of Football on BBC Sport online.4	the tongue is boneless but it breaks bones.12! 5	google is the best tools for search keyword.7	PI=3.1415926535897932384626433832499014298	a wood cross!9	Actions speak louder than words10	#woood #11	#woooooood 12	# AxyzxyzxyzxyzC13	I bet this place is really spooky late at night! 14	Misfortunes never come alone/single.
sed '/^[a-z]/d' test1.txt 删除所有的以小写字母开头的行
[root@zard3 shelldemo]# sed '/^[a-z]/d' test1.txt 
He was wearing a blue polo shirt with black pants. 
The home of Football on BBC Sport online.
The year ahead will test our political establishment to the limit.
PI=3.141592653589793238462643383249901429
Actions speak louder than words#woood #
#woooooood 
# AxyzxyzxyzxyzC
I bet this place is really spooky late at night! 
Misfortunes never come alone/single.
sed '/\.$/d' test2.txt 删除所有以.结尾的行
[root@zard3 shelldemo]# sed '/\.$/d' test2.txt 2	He was wearing a blue polo shirt with black pants. 4	the tongue is boneless but it breaks bones.12! 7	PI=3.1415926535897932384626433832499014298	a wood cross!9	Actions speak louder than words10	11	12	#woood #13	#woooooood 14	# AxyzxyzxyzxyzC15	I bet this place is really spooky late at night! 
sed '/^$/d' test1.txt 删除所有的空行
[root@zard3 shelldemo]# sed '/^$/d' test1.txt 
he was short and fat.
He was wearing a blue polo shirt with black pants. 
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12! 
google is the best tools for search keyword.
The year ahead will test our political establishment to the limit.
PI=3.141592653589793238462643383249901429
a wood cross!
Actions speak louder than words
#woood #
#woooooood 
# AxyzxyzxyzxyzC
I bet this place is really spooky late at night! 
Misfortunes never come alone/single.
sed '/the/{H;d}; $G' test1.txt 将包含the 的行迁移至文件末尾,{;}用于多个操作

sed '/the/w the.file' test2.txt  将包含the的行转移到the.file

sed -i.bak 's/SELINUX=permissive/SELINUX=enforcing/' /etc/selinux/config 替换

 sed '8a+句子' test2.txt 在第八行下面加一句话

 sed '/the/a+句子' test2.txt 在含有the的句子下面加一句话

3.3 生产案例

  1. 一键修改网卡 IP        

    sed -i 's/^IPADDR=.*/IPADDR=192.168.10.100/' /etc/sysconfig/network-scripts/ifcfg-ens33
  2. Apache 改监听地址 + 端口

    bash

    复制

    sed -i 's/^Listen .*/Listen 192.168.10.100:8080/' /etc/httpd/conf/httpd.conf
  3. vsftpd 安全加固脚本(禁止匿名、允许本地)

    bash

    复制

    #!/bin/bash
    CONFIG=/etc/vsftpd/vsftpd.conf
    [ ! -f $CONFIG.bak ] && cp $CONFIG $CONFIG.bak
    sed -e '/^anonymous_enable/s/YES/NO/' \-e '/^local_enable/s/NO/YES/' \-e '/^write_enable/s/NO/YES/' $CONFIG > tmp
    mv tmp $CONFIG
    systemctl restart vsftpd

总结

        经过两套速查资料的梳理,我们已经把 Linux 文本处理的核心武器握在手中:cut 精准截取列,sort 与 uniq 联手完成排序与去重,tr 在字符级别做替换、删除与压缩,而 sed 则凭借“模式空间”机制,提供行级乃至跨行级的增删改查、迁移与就地编辑能力。
它们的组合套路可以归纳为一句话——先用 cut/sort/uniq/tr 完成“数据清洗”,再用 sed 做“结构重塑”。面对日志、配置、监控输出或任何纯文本场景,只要记住这条流水线,就能在 1~3 行命令内完成传统脚本几十行才能实现的任务。
下一步建议把示例亲手敲一遍,将命令固化为肌肉记忆,并在生产环境中大胆实践:在线扩容配置文件、批量替换 IP、实时统计连接数……你会发现,所谓高效运维,不过是把文本玩到极致。

http://www.dtcms.com/a/363929.html

相关文章:

  • 【专栏升级】大模型应用实战并收录RAG专题,Agent专题,LLM重构数据科学流程专题,端侧AI专题,累计63篇文章
  • Redis 哨兵 (基于 Docker)
  • YOLO 目标检测:YOLOv5网络结构、Focus、CSP、自适应Anchor、激活函数SiLU、SPPF、C3
  • 3.2-C++基础组件
  • Kafka面试精讲 Day 5:Broker集群管理与协调机制
  • 深度学习-----通过本地数据实现图片识别的训练
  • PS痕迹检测器:基于深度学习的图像篡改检测
  • 撤销修改 情况⼀:对于⼯作区的代码,还没有 add
  • 浏览器内存 (JavaScript运行时内存)存储的优劣分析
  • linux(cut,sort,uniq ,tr,sed,awk)命令介绍
  • 贝叶斯定理:理解概率更新与实际场景应用
  • 在VS Code中直接操控浏览器
  • 预算紧张?这5款低代码平台免费还好用!
  • 光储充一体化智慧能源平台助力某能投公司绿色能源转型
  • 【面试场景题】如何理解设计模式
  • three.js手机端的4种旋转方式
  • 有鹿巡扫机器人:智慧清洁时代的多面手
  • (四)Python控制结构(条件结构)
  • MMORPG 游戏战斗系统架构
  • 2025互联网大厂Java后端面试:3-5年经验必问核心考点解析
  • 机器学习辅助的Backtrader资产配置优化策略
  • 【vue2】vue2.7x的项目中集成tailwind.css真的不要太香
  • Python 类的方法类型详解
  • 企业如何实现零工用工零风险?盖雅全自动化合规管控
  • 望获实时Linux:亚微秒级系统响应的实现方法
  • Qt中字节对齐问题和数据的序列化和反序列化的问题
  • springboot2.x集成swagger api(springdoc-openapi-ui)
  • 开源企业级快速开发平台(JeecgBoot)
  • python - ( js )object对象、json对象、字符串对象的相关方法、数组对象的相关方法、BOM对象、BOM模型中 Navigator 对象
  • 人工智能与强化学习:使用OpenAI Gym进行项目开发