Linux 常用命令技巧
文件操作
查找与搜索
# 按名称查找文件
find /var/log -name "*.log" -mtime -7
# 按大小查找(大于 100MB)
find / -type f -size +100M -exec ls -lh {} \;
# 按权限查找
find /usr -type f -perm 4755
# 快速定位文件(基于数据库,比 find 快)
locate nginx.conf
sudo updatedb # 更新 locate 数据库
文件内容操作
# 查看文件头部和尾部
head -n 20 app.log
tail -f -n 100 app.log # 实时跟踪日志
# 强大的查看器 less
less -N bigfile.log # 显示行号
# 在 less 中:/pattern 搜索, n/N 上下跳转, G 跳到底部
# 文件分割与合并
split -b 100M largefile.tar.gz part_
cat part_* > restored.tar.gz
快速操作组合
# 查看最占用磁盘空间的目录
du -sh /* 2>/dev/null | sort -rh | head -10
# 批量重命名(将所有 .htm 改为 .html)
rename 's/\.htm$/.html/' *.htm
# 统计代码行数
find src -name "*.ts" | xargs wc -l | tail -1
进程管理
查看进程
# 动态进程查看
top -o %MEM # 按内存排序
htop # 增强版 top
# 进程快照
ps aux --sort=-%mem | head -10 # 内存 top 10
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
# 查找进程
pgrep -f "node server" # 通过命令名查找 PID
pidof nginx # 查找 nginx 的 PID
信号与控制
# 发送信号
kill -15 1234 # 优雅终止 (SIGTERM)
kill -9 1234 # 强制终止 (SIGKILL)
kill -HUP 1234 # 重新加载配置 (SIGHUP)
# 批量操作
pkill -f "node server" # 匹配命令名终止
killall chrome # 终止所有 chrome 进程
网络诊断
连接检查
# 端口监听状态
ss -tlnp # 查看所有 TCP 监听端口
ss -tunap # 查看所有 TCP/UDP 连接
# 旧版但常用
netstat -tlnp
# 连接追踪
lsof -i :8080 # 查看谁在使用端口 8080
连通性测试
# HTTP 请求
curl -I https://example.com # 仅查看响应头
curl -w "%{http_code}" -o /dev/null # 查看状态码
# 网络路径追踪
traceroute -n example.com
mtr example.com # 持续追踪(更强)
# DNS 查询
dig example.com A
nslookup example.com
host example.com
带宽监控
# 实时流量
iftop -i eth0
nethogs eth0 # 按进程查看流量
# 抓包
tcpdump -i eth0 port 80 -w capture.pcap
tshark -r capture.pcap -T fields -e http.host | sort | uniq -c | sort -rn
磁盘与文件系统
# 磁盘空间
df -h # 人类可读格式
df -i # inode 使用情况
# 磁盘 I/O 监控
iostat -x 2 # 每 2 秒输出
# 查找大目录
ncdu # 交互式磁盘分析
系统信息
# 系统版本
uname -a # 内核版本
cat /etc/os-release # 发行版信息
# 硬件信息
lscpu # CPU 信息
free -h # 内存使用
lsblk # 块设备信息
lspci | grep -i nvidia # 显卡信息
# 运行时间与负载
uptime # 运行时间和负载
w # 谁登录了,在做什么
文本处理三板斧
grep
# 递归搜索并显示上下文
grep -rn "ERROR" --include="*.log" -C 3 /var/log
# 仅列出匹配的文件
grep -rl "TODO" src/
# 正则搜索 IP 地址
grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log
sed
# 替换文本
sed -i 's/old-host/new-host/g' config/*.yml
# 删除匹配行
sed -i '/^#/d' config.conf # 删除注释行
# 提取特定行范围
sed -n '100,200p' largefile.log
awk
# 按列处理
awk '{print $1, $NF}' access.log # 打印第 1 列和最后一列
# 过滤行
awk '$9 >= 500 {print $1, $7, $9}' access.log # 5xx 错误
# 分组统计
awk '{ips[$1]++} END {for (ip in ips) print ip, ips[ip]}' access.log
总结
掌握这些 Linux 命令技巧可以极大提升日常运维效率。关键在于理解每个命令的设计哲学,并将它们组合起来解决实际问题。建议将这些命令整理成常用的 shell 别名或函数,减少重复输入。