1. Linux命令笔记的价值与定位
作为一个从2009年开始接触Linux的老用户,我整理这份笔记的初衷很简单:每次在服务器上排查问题时,总会遇到一些"似曾相识"却记不清具体用法的命令。经过十多年的积累,这份私人笔记逐渐形成了体系,今天分享出来希望能帮到同样被Linux命令困扰的朋友。
不同于网上那些"大全式"的文档,这份笔记的特点是:
- 只收录实际工作中最高频的命令
- 每个命令都附带真实使用场景示例
- 特别标注了容易踩坑的参数组合
- 按照问题场景而非字母顺序编排
比如在排查磁盘空间不足时,与其记住所有df参数,不如掌握df -hT | grep -v tmpfs这个组合,它能快速过滤掉临时文件系统,直接显示主要存储设备的使用情况。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件操作核心命令实战
2.1 目录导航与查看
pwd这个看似简单的命令,在写自动化脚本时却是确保执行路径正确的关键。我习惯用pwd -P显示物理路径(解析符号链接),避免在软链接目录下操作时出现路径错误。
ls命令的进阶用法:
bash复制# 按修改时间倒序显示(最近修改在前)
ls -lt
# 显示inode号(排查硬链接时有用)
ls -i
# 递归显示子目录大小(配合sort更实用)
ls -lR | sort -nk5
注意:在目录文件过多时避免直接用
ls -l,改用ls -1 | wc -l统计文件数更高效。
2.2 文件内容处理三剑客
grep的实用技巧:
bash复制# 搜索时显示前后3行上下文
grep -C3 "error" logfile
# 排除注释行(配置文件清理神器)
grep -v "^#" nginx.conf
# 同时匹配多个模式(OR条件)
grep -E "error|warning" system.log
awk处理字段数据示例:
bash复制# 提取nginx访问日志的IP和状态码
awk '{print $1,$9}' access.log
# 统计各状态码出现次数
awk '{count[$9]++} END {for(code in count) print code,count[code]}' access.log
sed的经典场景:
bash复制# 批量替换文本(原地修改需加-i)
sed 's/old/new/g' file.txt
# 删除空行
sed '/^$/d' config.ini
# 提取特定行范围(如日志的某时间段)
sed -n '10000,20000p' huge.log
3. 系统监控与性能分析
3.1 实时监控组合拳
top的定制化用法:
- 按内存排序:启动后按
M - 按CPU排序:按
P - 显示完整命令:按
c - 保存快照:
top -n1 -b > top.log
htop相比top的优势:
- 鼠标交互支持
- 树状视图(F5)
- 进程搜索功能(F3)
- 自定义显示列(F2)
3.2 网络与IO分析
ss替代netstat的现代方案:
bash复制# 查看所有TCP连接
ss -tulnp
# 显示进程信息(需root)
ss -tulp
# 统计各状态连接数
ss -ant | awk '{print $1}' | sort | uniq -c
iotop诊断磁盘瓶颈:
bash复制# 按IO排序显示
iotop -o
# 只显示实际IO进程(避免刷屏)
iotop --only
4. 权限管理与进程控制
4.1 精细化的权限设置
chmod的数字表示法其实有规律:
- 4(r) + 2(w) + 1(x) = 7
- 用户|组|其他 三位组合
- 特殊权限位(如SUID=4)
实用案例:
bash复制# 目录可读可进入不可列文件
chmod 711 restricted_dir
# 共享目录(组用户可读写)
chmod 775 shared_folder
4.2 进程管理进阶
kill的正确打开方式:
bash复制# 先尝试优雅终止(SIGTERM=15)
kill -15 PID
# 强制终止(SIGKILL=9)
kill -9 PID
# 批量杀进程(比如所有python进程)
pkill -9 python
nohup的替代方案:
bash复制# 使用screen保持会话
screen -S long_task
./run.sh
# 按Ctrl+A然后D脱离
# 恢复会话
screen -r long_task
5. 文本处理与数据提取
5.1 日志分析黄金组合
统计HTTP状态码分布:
bash复制awk '{print $9}' access.log | sort | uniq -c | sort -nr
提取访问量TOP 10的IP:
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
5.2 CSV/JSON处理
jq处理JSON示例:
bash复制# 提取JSON数组中的特定字段
cat data.json | jq '.[] | {name:.username, id:.user_id}'
# 格式化输出
curl api.example.com/users | jq .
csvkit处理CSV:
bash复制# 查看CSV前5行
csvcut -n data.csv
# 过滤特定列
csvcut -c 1,3,5 data.csv
# SQL式查询
csvsql --query "SELECT * FROM data WHERE age > 30" data.csv
6. 实用小技巧合集
6.1 终端生产力提升
history优化:
bash复制# 显示带时间戳的历史记录
export HISTTIMEFORMAT="%F %T "
# 永久保存更多历史记录
echo "HISTSIZE=10000" >> ~/.bashrc
alias工作流加速:
bash复制# 快速进入常用目录
alias cds="cd /var/www/sites"
# 带颜色的grep
alias grep='grep --color=auto'
# 安全删除(先备份再删)
alias rm='rm -i'
6.2 数据备份与同步
rsync的可靠用法:
bash复制# 保持权限的增量备份
rsync -avz --delete /source/ user@host:/backup/
# 限速传输(避免带宽占满)
rsync --bwlimit=1000 -avz largefile user@host:/backup/
tar的现代替代品:
bash复制# 快速压缩(zstd算法)
tar -cf - dir/ | zstd -o archive.tar.zst
# 多线程解压
pigz -dc archive.tar.gz | tar xf -
这份笔记里的每个命令都经过生产环境验证,建议先在自己的测试环境练习。对于想深入Linux系统管理的朋友,我的经验是:掌握20%的核心命令就能解决80%的日常问题,剩下的特殊场景命令随用随查即可。
