1. Linux命令笔记的价值与定位
作为从Windows转向Linux开发的第七个年头,我的~/notes目录下积累了上百个碎片化命令记录文件。直到去年用Markdown重新梳理后,这套个人命令库才真正成为高效的生产力工具。不同于官方man手册的冗长和网络教程的碎片化,工程师日常需要的往往是那些高频使用却容易忘记的参数组合和场景化用法。
这份笔记的特殊性在于:
- 每个命令都标注了首次使用场景(如"2020年阿里云ECS排障时发现")
- 参数组合经过真实生产环境验证(标注了CentOS 7/Ubuntu 22.04等具体环境)
- 包含自动化脚本片段(比如用awk处理nginx日志的完整管道命令)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件操作核心命令实战
2.1 文件查找与定位
bash复制# 按修改时间反向排序(最近修改在前)
find /var/log -name "*.log" -mtime -7 -exec ls -lt {} + | head -n 20
# 快速定位配置文件(忽略大小写)
updatedb && locate -i "nginx.conf" | grep -v example
实际踩坑:在百万级小文件的NAS存储上避免直接使用find,先通过locate建立索引效率提升显著
2.2 文件内容处理黄金组合
处理Apache日志提取TOP10 IP的经典案例:
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
参数解析:
- 第一个sort是为uniq -c准备(必须排序后才能正确计数)
- sort -nr是按数值反向排序
- 加入
| column -t可以让输出自动对齐
3. 系统诊断命令进阶用法
3.1 网络状态深度排查
bash复制# 显示TCP连接状态统计(按状态分类计数)
ss -ant | awk 'NR>1 {print $1}' | sort | uniq -c
# 查看进程实际占用的内存(RES列)
ps -eo pid,user,%mem,rss,comm --sort=-rss | head -n 10
内存排查特别注意:
- 容器环境下
free -m显示的是宿主机的内存情况 - 真实内存占用应该看
/proc/meminfo的MemAvailable字段
3.2 磁盘IO性能分析
bash复制# 实时监控磁盘IO(每秒刷新)
iostat -xmd 1 | awk '/^[v|s]d/ {print $1,$6,$7,$12}'
# 找出高IO进程
iotop -oP
关键指标解读:
- %util超过80%说明磁盘接近性能瓶颈
- await大于10ms需要关注(SSD应在5ms内)
4. 高效运维脚本片段
4.1 安全备份策略
bash复制# 带时间戳和校验的备份
backup_name="config_$(date +%Y%m%d_%H%M%S).tar.gz"
tar -czvf ${backup_name} /etc/nginx/
md5sum ${backup_name} > ${backup_name}.md5
# 保留最近7天备份
find /backups -name "config_*.tar.gz" -mtime +7 -delete
4.2 服务监控自动化
简易HTTP服务监控脚本:
bash复制#!/bin/bash
URL="http://localhost/health"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" $URL)
if [ $STATUS -ne 200 ]; then
echo "$(date) - Service down" >> /var/log/service_monitor.log
systemctl restart nginx
fi
加入crontab实现每分钟检查:
bash复制* * * * * /usr/local/bin/monitor_service.sh
5. 环境配置的持久化技巧
5.1 Shell环境优化
在~/.bashrc中加入这些实用配置:
bash复制# 命令执行时间统计
function timer_start {
timer=${timer:-$SECONDS}
}
function timer_stop {
timer_show=$((SECONDS - timer))
unset timer
}
trap 'timer_start' DEBUG
PROMPT_COMMAND=timer_stop
PS1='[${timer_show}s] \w\$ '
# 防止覆盖重要文件
alias cp='cp -i'
alias mv='mv -i'
5.2 SSH连接管理
~/.ssh/config配置示例:
bash复制Host aliyun
HostName 192.168.1.100
User root
Port 2222
IdentityFile ~/.ssh/aliyun_key
ServerAliveInterval 60
这样只需执行ssh aliyun即可连接,同时解决SSH超时断开问题
6. 文本处理三剑客实战
6.1 grep的进阶技巧
bash复制# 显示匹配行及前后3行上下文
grep -C 3 "error" /var/log/syslog
# 排除注释行和空行
grep -vE '^\s*(#|$)' nginx.conf
# 递归搜索时忽略二进制文件
grep -rI "config" /etc/
6.2 sed的批量处理
批量替换文件内容:
bash复制sed -i.bak 's/old_domain/new_domain/g' *.conf
重要:-i.bak参数会创建备份文件,防止误操作
6.3 awk的报表生成
统计Nginx日志状态码分布:
bash复制awk '{count[$9]++} END {for(code in count) print code, count[code]}' access.log
7. 系统管理关键命令
7.1 用户权限管理
bash复制# 查看用户的有效权限
sudo -l -U username
# 批量修改文件属主
find /data -user olduser -exec chown newuser:newgroup {} +
7.2 定时任务管理
查看系统所有定时任务:
bash复制for user in $(cut -f1 -d: /etc/passwd); do
echo "### Crontab for $user ###";
crontab -u $user -l;
done
8. 网络调试必备工具
8.1 tcpdump实战示例
抓取HTTP请求:
bash复制tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
关键过滤条件:
-A以ASCII显示数据-s 0抓取完整数据包- 复杂表达式用于过滤HTTP头部
8.2 nc的多种用途
快速测试端口连通性:
bash复制nc -zv example.com 80-90 2>&1 | grep succeeded
临时文件传输:
bash复制# 接收方
nc -l 1234 > file.tar
# 发送方
nc receiver_ip 1234 < file.tar
9. 性能分析高阶命令
9.1 perf基础用法
CPU热点分析:
bash复制perf record -F 99 -g -- ./my_program
perf report -n --stdio
9.2 strace系统调用跟踪
分析程序启动慢的问题:
bash复制strace -T -ttt -o startup.log ./my_program
关键参数:
-T显示调用耗时-ttt精确到微秒的时间戳
10. 开发环境实用技巧
10.1 编译加速
多核并行编译:
bash复制make -j$(nproc)
10.2 调试符号处理
分离调试符号:
bash复制objcopy --only-keep-debug myapp myapp.debug
strip --strip-debug --strip-unneeded myapp
需要调试时:
bash复制gdb -ex "file myapp" -ex "add-symbol-file myapp.debug 0x400000"
