Linux 命令行实战:从害怕到熟练

三年前第一次登录 Linux 服务器,手都在抖。现在日常操作已经很熟练了。

高频命令

命令用途频率
cd切换目录每天百次
ls -la查看文件详情每天 50 次
grep搜索内容每天 30 次
tail -f查看日志每天 20 次
cat查看文件每天 20 次
find查找文件每天 10 次
ps aux查看进程每天 10 次
kill杀进程每天 5 次

日志查看

实时查看

tail -f /var/log/nginx/access.log

过滤关键词

# 查看错误日志
tail -f app.log | grep -i error

# 查看特定时间段的日志
sed -n '/2025-06-01 10:00/,/2025-06-01 11:00/p' app.log

日志分析

# 统计访问量前 10 的 IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

# 统计 HTTP 状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -rn

# 查找慢请求(响应时间 > 1s)
awk '$NF > 1 {print $0}' access.log

终端界面

进程管理

查看进程

# 查看所有进程
ps aux

# 查看特定进程
ps aux | grep node

# 更直观的方式
htop

杀进程

# 按名称杀
pkill -f "node app.js"

# 强制杀
kill -9 12345

# 杀所有 node 进程
killall node

后台运行

# 后台运行,不随终端关闭退出
nohup node app.js &

# 更好的方式:使用 pm2
pm2 start app.js
pm2 logs
pm2 restart app

磁盘管理

查看空间

# 查看磁盘使用
df -h

# 查看目录大小
du -sh /var/log/*

# 找出大文件
find / -type f -size +100M 2>/dev/null | xargs ls -lh

清理空间

# 清理日志
> /var/log/app.log  # 清空文件
find /var/log -name "*.log" -mtime +7 -delete  # 删除 7 天前的日志

# 清理包缓存
apt clean
apt autoremove

网络排查

检查端口

# 查看端口占用
netstat -tlnp | grep 80
ss -tlnp | grep 80

# 检查端口连通性
nc -zv 192.168.1.100 80

抓包

# 抓 HTTP 请求
tcpdump -i eth0 port 80 -w capture.pcap

# 实时查看
tcpdump -i eth0 port 80 -A

DNS 查询

# 查询域名解析
dig example.com
nslookup example.com

# 查看 DNS 配置
cat /etc/resolv.conf

文本处理

sed 替换

# 替换文件内容
sed -i 's/old/new/g' file.txt

# 删除匹配行
sed -i '/pattern/d' file.txt

awk 处理

# 提取列
awk -F, '{print $1, $3}' data.csv

# 条件过滤
awk '$3 > 100 {print $0}' data.txt

组合使用

# 查找文件并替换内容
find . -name "*.js" -exec sed -i 's/var /let /g' {} \;

# 统计代码行数
find . -name "*.js" | xargs wc -l | tail -1

服务器机房

系统监控

资源使用

# CPU 和内存
top
htop

# 内存详情
free -h

# IO 情况
iostat -x 1

# 综合监控
vmstat 1

系统负载

# 查看负载
uptime
cat /proc/loadavg

# 查看用户
w
who

实用技巧

历史命令

# 搜索历史
ctrl+r  # 然后输入关键词

# 查看历史
history | grep command

# 执行上一条命令
!!
# 执行第 N 条命令
!123

后台任务

# 暂停当前任务
ctrl+z

# 查看后台任务
jobs

# 恢复到前台
fg %1

# 恢复到后台
bg %1

SSH 隧道

# 本地端口转发
ssh -L 3000:localhost:3000 user@server

# 远程端口转发
ssh -R 3000:localhost:3000 user@server

常见问题排查流程

问题排查命令
服务无法访问netstat/ss → firewall → nginx 配置
服务器卡顿top/htop → iostat → df -h
磁盘满df -h → du -sh → find 大文件
内存不足free -h → ps aux 排序
连接超时ping → telnet/nc → tcpdump

总结

Linux 命令行没有捷径,多用就熟了。

建议:

  1. 建个笔记,记常用命令
  2. 遇到问题先自己查,再搜答案
  3. 不确定的命令先在测试环境试
  4. 重要操作前备份

现在遇到问题,我已经不会慌了。知道该用什么命令、怎么分析,这就是最大的进步。