当前位置:首页>Linux>Linux 命令行高级用法大全

Linux 命令行高级用法大全

  • 2026-09-10 00:33:00
Linux 命令行高级用法大全

Linux 命令行高级用法大全

一、命令组合与管道进阶(最常用高级技巧)

1. 管道 | + 多阶段过滤

基础:cmd1 | cmd2
高级搭配:

# 统计日志中500错误,取Top10访问IP
grep " 500 " access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10

# 多条件过滤、反向过滤

ps aux | grep nginx | grep -v grep

2. 进程替换 <() / >()

解决两个文件对比、命令输出当临时文件,替代临时文件:

# 对比两个命令输出差异(不用存文件)
diff <(ls dir1) <(ls dir2)

# 一边输出到文件,一边管道处理

ls
 -lh | tee output.txt | grep ".log"

3. 分号 ;、&&、||、()、{} 流程控制

# 全部顺序执行,不管前一条是否报错
mkdir
 test; cd test; touch a.txt

# 前一条成功才执行后一条(推荐)

nginx -t && systemctl restart nginx

# 前一条失败才执行(错误兜底)

curl 127.0.0.1:80 || echo "服务挂了"

# 批量执行,输出合并

{ echo "start"; ls -l; echo "end"; } > log.txt

# 子shell执行,不污染当前环境

(cd /tmp; ls)
pwd
 # 还在原来目录

二、文本三剑客高级:grep / sed / awk(运维核心高级工具)

1. grep 高级

# 递归搜索代码,排除node_modules目录
grep -r "user_id" ./ --exclude-dir=node_modules --include=*.js

# 正则匹配、显示前后3行上下文

grep -C 3 "Exception" app.log

# 反向匹配、只显示匹配行数

grep -v "^#" nginx.conf | grep -v "^$" | wc -l

2. sed 流编辑器(批量修改文本)

# 全局替换,直接修改文件(mac去掉-i,用 -i '')
sed -i 's/127.0.0.1/0.0.0.0/g' config.yaml

# 删除空行、注释行

sed -i '/^#/d;/^$/d' app.conf

# 提取指定行 10~20行

sed -n '10,20p' log.txt

# 多行匹配替换

sed '/start/,/end/s/old/new/g' file

3. awk 数据处理(最强文本分析,类编程语言)

# 打印磁盘使用率大于80%的分区
df
 -h | awk 'NR>1 {gsub(/%/,""); if($5>80) print $1,$5"%"}'

# 求和统计(日志流量汇总)

awk '{sum+=$10} END{print "总流量:",sum/1024/1024,"MB"}' access.log

# 多分隔符、自定义变量、条件判断

cat
 csv.txt | awk -F '[;,]' '$3>100 {print $1,$4}'

三、文件操作高级技巧

1. 重定向高阶:stdout/stderr 分离

# 标准输出到文件,错误输出到另一个文件
cmd > out.log 2> err.log

# 输出+错误全部写入同一个文件

cmd &> all.log

# 错误丢弃,只保留正常输出

cmd 2>/dev/null

# 输出到屏幕同时写入文件(tee)

tail
 -f app.log | tee -a monitor.log

2. find 高级批量处理(运维神器)

# 查找7天前日志并删除
find /var/log -name "*.log" -mtime +7 -delete

# 找到文件后批量执行sed替换

find ./ -type f -name "*.yaml" -exec sed -i 's/foo/bar/g' {} \;

# 限定大小、排除目录、并行处理

find . -size +100M -type f -not -path "./tmp/*" | xargs ls -lh

3. xargs 批量传参(解决参数过长报错 Argument list too long)

# 批量删除匹配文件
find . -name "*.tmp" | xargs rm -f

# 带空格文件名安全处理(-0 空字符分隔)

find . -print0 | xargs -0 ls -lh

# 分批执行,每次10个文件

ls
 *.log | xargs -n10 cat

四、进程与系统监控高级用法

1. ps / top / htop 进阶

# 按CPU排序,只看进程名、PID、CPU、内存
ps aux --sort=-pcpu,-rss | head -15

# 查找占用端口进程(替代netstat)

ss -tulnp | grep :8080

# 实时监控某个进程资源

top -p $(pidof java)

2. nohup / screen / tmux 后台常驻会话

nohup:后台运行,断开ssh不终止

nohup python task.py > run.log 2>&1 &
# 查看后台任务

jobs

# 切回前台

fg
 %1
# 后台暂停任务继续运行

bg
 %1

tmux(最推荐高级会话工具)

tmux new -s monitor          # 创建命名会话
tmux attach -s monitor        # 重新连接会话
# 快捷键:Ctrl+b 后

# % 垂直分屏 | " 水平分屏 | d 后台挂起会话

tmux ls                       # 查看所有会话
tmux kill-session -t monitor # 销毁会话

3. 定时一次性任务:at

# 1小时后执行脚本
at now + 1 hour <<EOF
/opt/clean_log.sh
EOF

atq  # 查看定时任务

五、变量、循环、函数(Shell脚本单行高级语法)

1. for 循环单行批量操作

# 批量重命名
for
 f in *.txt; do mv $f ${f%.txt}.bak; done

# 遍历数字1~10

for
 i in {1..10}; do echo $i; done

# 遍历命令输出

for
 ip in $(cat ip_list.txt); do ping -c1 $ip; done

2. while 循环实时监控

# 每秒打印端口连接数
while
 true; do ss -s; sleep 1; clear; done

3. 自定义函数(命令行直接定义,临时生效)

# 定义查看端口函数
checkport
() { ss -tulnp | grep ":$1"; }
# 直接调用

checkport 80
checkport 3306

六、历史命令、快捷操作

1. history 高级复用

!100         # 执行第100条历史命令
!nginx       # 执行最近以nginx开头的命令
!!           # 重复上一条命令
!$           # 取上一条命令最后一个参数
cat
 !$       # 例:mkdir test ; cd !$

# 替换上一条命令参数

ls
 /opt/xxx
^xxx^yyy     # 等价 ls /opt/yyy

2. 快捷键(无需鼠标,大幅提速)

  • • Ctrl+r:反向搜索历史命令(最常用)
  • • Ctrl+u:清空光标左侧内容
  • • Ctrl+k:清空光标右侧内容
  • • Ctrl+a:跳到行首,Ctrl+e:跳到行尾
  • • Alt+f/b:前后跳一个单词

七、网络高级命令

# 端口连通性测试(不用telnet)
timeout
 1 bash -c 'cat < /dev/tcp/127.0.0.1/3306' && echo ok || echo fail

# 抓包过滤指定端口

tcpdump -i any port 8080 -w capture.pcap

# 批量ping网段(并行)

for
 i in {1..254}; do (ping -c1 192.168.$i >/dev/null && echo 192.168.$i online) & done

八、压缩、校验、加密高级用法

# 排除目录打包
tar -zcvf code.tar.gz ./ --exclude=node_modules --exclude=.git

# 大文件分片压缩、合并解压

tar -zcv - split -b 100m -o code.tar.gz.part
cat
 code.tar.gz.part* | tar -zxv

# 文件完整性校验

sha256sum
 *.iso > check.txt
sha256sum
 -c check.txt

九、参数扩展、字符串处理(无awk/sed纯bash操作)

file="/opt/log/app.log"
echo
 ${file##*/}  # 取文件名 app.log
echo
 ${file%/*}   # 取路径 /opt/log
echo
 ${file%.log} # 去掉后缀 /opt/log/app
echo
 ${file/app/backend} # 字符串替换

十、实用组合实战案例(可直接复制使用)

  1. 1. 日志告警:检测5xx错误超过100条触发提示
count=$(grep " 500 " access.log | wc -l); [ $count -gt 100 ] && echo "告警:500错误过多"
  1. 2. 一键清理30天前容器、镜像
docker system prune -a --filter "until=720h" -f
  1. 3. 快速统计当前目录各类文件数量
find . -type f | awk -F '.' '{print $NF}' | sort | uniq -c
  1. 4. 后台持续监控磁盘,使用率超90%打印告警
watch -n 10 "df -h | awk 'NR>1 {gsub(/%/,\\"\"); if(\$5>=90) print \\"磁盘告警:\\",\$1,\$5\\"%\\"}'"

最新文章

随机文章