当前位置:首页>Linux>别再问我Linux怎么学了!这份运维实战指南,直接抄作业

别再问我Linux怎么学了!这份运维实战指南,直接抄作业

  • 2026-09-10 03:05:30
别再问我Linux怎么学了!这份运维实战指南,直接抄作业

“Linux命令那么多,到底该学哪些?怎么才能快速上手?”说实话,Linux命令确实浩如烟海,但真正在日常运维中高频使用的,也就几十个。今天这篇文章,我把十年积累的核心命令、实用技巧、故障排查方法论全部整理出来,手把手带你从“会用”到“精通”。

一、基础篇:这些命令,每天都会用到

1. 文件操作三剑客

ls - 查看文件

# 最常用组合ls -lh          # 人性化显示大小,长格式ls -la          # 显示所有文件(包括隐藏文件)ls -lt          # 按修改时间排序ls -ltr         # 按时间倒序(最新的在最后)# 实战技巧:查看目录下最大的10个文件ls -lhS | head -10
find - 查找文件
# 按名称查找find /var/log -name "*.log" -mtime -7   # 最近7天修改的日志# 按大小查找find / -size +100M -ls                    # 查找大于100M的文件# 按权限查找find / -perm 4000 -ls                     # 查找SUID文件(安全审计常用)# 批量操作(经典案例:清理7天前的日志)find /var/log/nginx/ -name "*.log" -mtime +7 -delete# 批量修改权限find . -type f -exec chmod 644 {} \;      # 所有文件644find . -type d -exec chmod 755 {} \;      # 所有目录755
tar - 打包压缩
# 打包压缩(最常用)tar -czf backup.tar.gz /path/to/dir        # 压缩tar -xzf backup.tar.gz                     # 解压# 查看压缩包内容不解压tar -tzf backup.tar.gz | head -20# 排除某些目录打包tar -czf backup.tar.gz --exclude='logs' --exclude='cache' /app# 打包时保留权限和属性tar -czpf backup.tar.gz /etc               # -p 保留权限

2. 文本处理三剑客(grep、awk、sed)

这是Linux运维的核心技能,掌握了它们,你处理日志的效率能提升10倍。

grep - 搜索文本

# 基础搜索grep "ERROR" app.log                       # 搜索ERRORgrep -i "error" app.log                    # 忽略大小写grep -r "error" /var/log/                  # 递归搜索目录grep -E "ERROR|FATAL" app.log              # 正则匹配多个关键词# 实战技巧:查看错误日志并显示前后5行grep -B 5 -A 5 "ERROR" app.log# 统计错误次数grep -c "ERROR" app.log# 排除某些行grep -v "DEBUG" app.log                    # 过滤掉DEBUG日志# 常用组合:查看实时日志中的错误tail -f app.log | grep --line-buffered "ERROR"
awk - 文本处理神器
# 基础语法:awk '{print $N}' 打印第N列cat access.log | awk '{print $1}'          # 打印第一列(通常是IP)cat access.log | awk '{print $4, $7}'      # 打印时间和URL# 实战案例1:统计Nginx日志中访问量最高的IPawk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10# 实战案例2:统计HTTP状态码分布awk '{print $9}' access.log | sort | uniq -c | sort -rn# 实战案例3:计算平均响应时间(假设第10列是响应时间)awk '{sum+=$10; count++} END {print sum/count}' access.log# 条件过滤awk '$9 >= 500 {print $0}' access.log      # 打印所有5xx错误的请求
sed - 流编辑器
# 替换文本(最常用)sed -i 's/old/new/g' file.txt              # 全局替换sed -i 's/old/new/' file.txt               # 只替换每行第一个# 实战:批量修改配置文件sed -i 's/192.168.1.100/192.168.1.200/g' config.properties# 删除行sed -i '/^$/d' file.txt                    # 删除空行sed -i '10d' file.txt                      # 删除第10行sed -i '10,20d' file.txt                   # 删除10-20行# 插入行sed -i '1i # This is a new header' file.txt   # 在第1行前插入sed -i '$a # This is footer' file.txt         # 在最后一行后插入

3. 系统状态监控

top/htop - 实时进程监控

top                                         # 基础版# 在top中常用快捷键:# P - 按CPU排序# M - 按内存排序# 1 - 显示每个CPU核心# k - 杀掉进程htop                                        # 增强版(需要安装)# 更友好的界面,支持鼠标操作
free - 内存监控
free -h                                     # 人性化显示free -m                                     # 以MB为单位# 重点关注available列(真实可用内存)# buffers/cache 是Linux的缓存机制,不用过度担心
df/du - 磁盘监控
df -h                                       # 查看磁盘分区使用率df -i                                       # 查看inode使用率(容易忽略!)# du:查看目录大小du -sh /var/log/                            # 总大小du -sh /* | sort -rh | head -10             # 根目录下最大的10个目录du -sh * | sort -rh | head -10              # 当前目录下最大的10个文件/目录
netstat/ss - 网络连接
# netstat(传统,需要安装net-tools)netstat -tlnp                               # 查看监听端口netstat -anp | grep ESTABLISHED | wc -l     # 统计当前连接数# ss(现代,更快速)ss -tlnp                                    # 查看监听端口ss -tan state established | wc -l           # 统计已建立的连接数# 实战:查看哪个进程占用了80端口ss -tlnp | grep :80
iostat - IO监控
iostat -x 1 5                               # 每秒刷新,共5次# 重点关注:# %util - 磁盘使用率(超过80%说明IO瓶颈)# await - 平均等待时间(超过10ms说明有问题)

二、进阶篇:实战场景必备技能

4. 性能排查三板斧

CPU排查

# 1. 查看CPU整体情况top -c                                      # 看哪个进程CPU高# 2. 查看CPU详细信息mpstat -P ALL 1                              # 查看每个CPU核心的使用率# 3. 查看进程内线程CPU占用top -H -p <pid>                              # 查看指定进程的线程CPU# 4. 分析Java进程CPU高的原因(典型场景)# 先用top找到CPU高的进程pid# 再查看该进程的线程top -H -p 12345# 将线程ID转为16进制printf "%x\n" 12346# 用jstack导出线程堆栈jstack 12345 | grep -A 20 <16进制线程ID>
内存排查
# 1. 查看内存整体情况free -h# 如果available很小,说明内存紧张# 2. 查看内存占用最高的进程ps aux --sort=-%mem | head -10# 3. 查看进程内存详情pmap -x <pid>                               # 详细内存映射cat /proc/<pid>/smaps | grep -i pss         # 查看实际物理内存# 4. 检查内存泄漏(Java进程)jmap -heap <pid>                            # 查看堆内存使用jstat -gcutil <pid> 1000 10                 # 每秒打印GC情况
IO排查
# 1. 查看磁盘IO情况iostat -x 1# 2. 查看哪个进程在读写磁盘iotop -o                                     # 只显示有IO的进程# 3. 查看文件系统读写情况pidstat -d 1                                 # 每秒打印进程IO统计# 4. 查找大量小文件目录(常见性能杀手)find /data -type f | cut -d/ -f2 | sort | uniq -c | sort -rn | head -10

5. 日志分析实战

实时追踪日志

# 基础实时查看tail -f app.log# 带高亮的实时查看(grep颜色)tail -f app.log | grep --color=auto ERROR# 多文件同时查看tail -f app1.log app2.log# 使用multitail(更强大,需要安装)multitail -l "tail -f app.log" -l "tail -f error.log"
日志统计与分析
# 统计每小时请求量awk '{print $4}' access.log | cut -d: -f2 | sort | uniq -c# 统计Top 10 URLawk '{print $7}' access.log | sort | uniq -c | sort -rn | head -10# 统计响应时间分布awk '{print $10}' access.log | awk '{if($1<100) count1++; else if($1<500) count2++; else count3++} END {print "slow:",count3,"normal:",count2,"fast:",count1}'# 分析某个时间段的日志sed -n '/2024-01-15 10:00/,/2024-01-15 11:00/p' app.log | grep ERROR

6. 网络排查实战

连接排查

# 1. 查看TCP连接状态ss -tan | awk '{print $1}' | sort | uniq -c# 2. 查看TIME_WAIT过多(常见问题)ss -tan | grep TIME_WAIT | wc -l# 解决方法:调整内核参数sysctl net.ipv4.tcp_tw_reuse=1sysctl net.ipv4.tcp_fin_timeout=30# 3. 追踪路由traceroute -n 8.8.8.8# 4. 测试端口连通性telnet 192.168.1.100 80nc -zv 192.168.1.100 80                     # 更现代的方式# 5. 抓包分析tcpdump -i eth0 port 80 -w capture.pcap     # 抓取80端口流量tcpdump -i eth0 host 192.168.1.100 -c 100   # 抓取指定IP的100个包tcpdump -i eth0 -A | grep "GET"             # 实时查看HTTP请求
DNS排查
# 1. DNS解析测试dig google.comnslookup google.com# 2. 查看DNS缓存(systemd-resolved)resolvectl statistics# 3. 清空DNS缓存systemd-resolve --flush-caches

三、系统调优篇:让Linux跑得更快

7. 内核参数优化

文件句柄限制

# 查看当前限制ulimit -n# 临时修改ulimit -n 65535# 永久修改(/etc/security/limits.conf)* soft nofile 65535* hard nofile 65535# 查看进程打开的文件lsof -p <pid> | wc -l
TCP参数优化(/etc/sysctl.conf)
# 高并发场景必备net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_max_tw_buckets = 5000net.ipv4.tcp_max_syn_backlog = 8192net.ipv4.tcp_syn_retries = 2net.ipv4.tcp_synack_retries = 2# 生效配置sysctl -p

8. 定时任务与自动化

Crontab配置

# 编辑定时任务crontab -e# 定时任务格式# * * * * * command# 分 时 日 月 周# 常用示例0 2 * * * /scripts/backup.sh               # 每天凌晨2点执行*/5 * * * * /scripts/health_check.sh       # 每5分钟执行0 9 * * 1 /scripts/weekly_report.sh        # 每周一上午9点@reboot /scripts/startup.sh                # 重启时执行# 查看定时任务crontab -l# 定时任务日志tail -f /var/log/cron
Shell脚本规范
#!/bin/bash# 脚本头部模板set -e                                      # 遇到错误立即退出set -u                                      # 使用未定义变量时报错# 定义日志函数log_info() {    echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: $1"}log_error() {    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" >&2}# 使用示例log_info "Starting backup..."# 执行操作if [ $? -eq 0 ]; then    log_info "Backup completed"else    log_error "Backup failed"    exit 1fi

四、安全篇:这些配置必须做

9. SSH安全加固

# /etc/ssh/sshd_config 关键配置PermitRootLogin no                          # 禁止root直接登录PasswordAuthentication no                   # 禁用密码登录,只使用密钥Port 22222                                   # 修改默认端口(可选)MaxAuthTries 3                              # 最大认证尝试次数ClientAliveInterval 60                      # 保持连接ClientAliveCountMax 3# 重启SSHsystemctl restart sshd

10. 防火墙配置

# firewalld(CentOS/RHEL)firewall-cmd --zone=public --add-port=80/tcp --permanentfirewall-cmd --zone=public --add-service=ssh --permanentfirewall-cmd --reloadfirewall-cmd --list-all# iptables(通用)iptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp --dport 80 -j ACCEPTiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -j DROP

五、故障排查实战案例

案例1:CPU突然飙升到100%

现象:服务器响应变慢,top看到CPU 100%

排查步骤:

# 1. 找到高CPU进程top -c# 发现进程PID 12345 CPU占用80%# 2. 查看该进程的线程top -H -p 12345# 发现线程12346 CPU占用70%# 3. 查看该线程的堆栈printf "%x\n" 12346  # 输出 0x303ajstack 12345 | grep -A 30 "0x303a"# 4. 发现线程在死循环,定位到代码行# 修复代码后重启服务

案例2:磁盘空间满了,但找不到大文件

现象:df -h 显示 / 使用率100%,但 du -sh /* 加起来远小于总大小

排查步骤:

# 1. 检查是否有已删除但未释放的文件lsof | grep deleted | grep -v "perl|python"# 发现有文件被删除,但进程还在占用# 2. 查看占用进程lsof -n | grep deleted | awk '{print $2}' | sort -u | xargs ps -fp# 3. 重启占用进程或清空文件> /proc/<pid>/fd/数字  # 清空文件描述符# 4. 再次检查df -h

案例3:Nginx出现大量TIME_WAIT

现象:ss -tan | grep TIME_WAIT | wc -l 显示几万个TIME_WAIT

排查步骤:

# 1. 查看当前TCP参数sysctl net.ipv4.tcp_tw_reusesysctl net.ipv4.tcp_tw_recycle  # 注意:已废弃,不要再使用# 2. 优化参数echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.confecho "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.confsysctl -p# 3. 检查短连接是否过多ss -tan | grep ESTABLISHED | wc -l# 4. 考虑使用长连接(在Nginx配置中)# upstream中配置keepaliveupstream backend {    keepalive 32;}

让工作更高效的技巧

# 1. 使用别名简化常用命令alias ll='ls -alh'alias gs='git status'alias nginx-reload='nginx -s reload'# 2. 后台运行与持久化nohup ./long_task.sh > output.log 2>&1 &   # 后台运行,关闭终端不影响disown                                      # 将作业从shell中剥离# 3. 屏幕复用(tmux)tmux new -s work                           # 创建新会话tmux attach -t work                        # 重新连接Ctrl + b, d                                # 分离会话Ctrl + b, %                                # 垂直分屏Ctrl + b, "                                # 水平分屏

Linux运维是一门需要持续积累的手艺。命令背得再多,不如亲手敲一遍;文档看得再多,不如亲手处理一次故障。

我的建议是:

  1. 搭建一套自己的实验环境(虚拟机或云服务器),大胆尝试

  2. 每天学一条新命令,坚持一个月,你会发现质的变化

  3. 遇到问题先看日志,80%的问题日志里都有答案

  4. 不要只满足于能用,多问一句“为什么这样写”

最后,送大家一句话:运维最大的敌人不是技术,而是“我以为”。

关注我,为您分享更多的IT知识!

最新文章

随机文章