1. 单机运维操作命令概述
作为系统管理员或运维工程师,日常工作中最频繁接触的就是各种运维命令。这些看似简单的命令行工具,实则是维护系统健康的"手术刀"。我在十多年的运维生涯中,整理出一套经过实战检验的命令组合,能够覆盖90%的单机运维场景。
单机运维命令主要分为几个核心类别:系统状态监控、性能分析、故障排查、配置管理和日常维护。掌握这些命令不仅能快速定位问题,更能预防潜在风险。与集群运维不同,单机环境更注重命令的精细化和针对性,因为所有操作都直接影响着这台主机的运行状态。
重要提示:执行任何可能影响系统稳定性的命令前,务必先通过--help或man查看详细用法,并在测试环境验证效果。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统状态监控命令
2.1 基础状态检查
uptime命令是我的运维工作台永远开着的第一窗口。这个简单的命令输出包含三个关键指标:
code复制10:30:45 up 25 days, 3:15, 2 users, load average: 0.08, 0.03, 0.05
- 第一段显示当前时间
- 第二段是系统运行时长(本例25天未重启)
- 最后三个数字是1/5/15分钟的负载均值
经验法则:负载值超过CPU核心数就需要警惕。比如4核机器负载长期高于4,说明存在性能瓶颈。
free -h以人类可读格式显示内存使用情况:
code复制 total used free shared buff/cache available
Mem: 15Gi 4.2Gi 8.3Gi 356Mi 2.5Gi 10Gi
Swap: 2.0Gi 0.0Ki 2.0Gi
关键看available列,这才是应用真正可用的内存。buff/cache是内核缓存,必要时可以被回收,不必过度担心。
2.2 进程监控
top是经典的实时进程监控工具,但我更推荐其增强版htop。安装方式:
bash复制# CentOS/RHEL
sudo yum install -y htop
# Ubuntu/Debian
sudo apt install -y htop
htop的优势在于:
- 彩色界面直观显示CPU/内存使用率
- 支持鼠标操作和进程树视图
- 可以直接杀死进程或调整优先级
对于批量服务器管理,我习惯用pgrep和pkill组合:
bash复制# 查找所有nginx worker进程
pgrep -a nginx
# 优雅重启nginx
pkill -HUP nginx
3. 性能分析命令
3.1 CPU性能分析
vmstat 1 5每1秒采样一次,共5次,输出系统整体性能指标:
code复制procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 8372144 210332 2630384 0 0 1 3 1 1 2 1 97 0 0
关键列解析:
- r:运行队列长度(理想值<CPU核心数)
- us:用户态CPU使用率
- sy:内核态CPU使用率
- id:空闲CPU百分比
当us长期高于70%,说明应用计算密集;sy过高则可能是系统调用频繁或内核瓶颈。
3.2 磁盘I/O分析
iostat -x 1显示磁盘扩展统计信息:
code复制Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
vda 0.12 1.25 5.33 20.12 0.00 0.07 0.00 5.26 0.61 1.12 0.00 44.00 16.09 0.72 0.10
重点关注:
- %util:设备利用率(超过80%说明饱和)
- await:平均I/O等待时间(毫秒)
- svctm:平均服务时间(应小于await)
对于随机读写较多的数据库服务器,如果await明显高于svctm,说明存在I/O队列堆积。
4. 网络排查命令
4.1 基础网络检查
ss -tulnp比netstat更高效,显示所有监听端口:
code复制Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=728,fd=3))
tcp LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=1234,fd=13))
关键字段:
- Recv-Q:接收队列积压数据量
- Send-Q:发送队列积压数据量
- 最后一列显示哪个进程在监听
mtr结合了traceroute和ping的功能,是诊断网络问题的瑞士军刀:
bash复制mtr -rwc 10 www.example.com
参数说明:
- -r:生成报告模式
- -w:宽输出显示
- -c 10:发送10个包
4.2 高级网络分析
当遇到网络性能问题时,我常用的组合拳:
ethtool eth0查看网卡配置和状态nstat -z重置并监控内核网络统计tcpdump -ni eth0 port 80 -w capture.pcap抓包分析
对于连接数过多的情况,这个命令统计各状态的TCP连接数:
bash复制ss -s | grep -i tcp
5. 日志分析命令
5.1 实时日志监控
tail -f是最基础的日志跟踪命令,但我更推荐使用multitail:
bash复制# 同时监控nginx访问日志和错误日志
multitail -cS nginx /var/log/nginx/access.log -cS error /var/log/nginx/error.log
参数说明:
- -cS:指定颜色方案
- 支持分屏显示多个日志文件
对于高频日志,使用grep -v排除干扰信息:
bash复制tail -f /var/log/messages | grep -v "systemd"
5.2 历史日志分析
journalctl是systemd系统的日志神器:
bash复制# 查看最近1小时的内核日志
journalctl --since "1 hour ago" -k
# 跟踪某个服务的日志
journalctl -fu nginx.service
对于大日志文件,使用less比vi更高效:
bash复制less +G /var/log/syslog # 直接跳转到文件末尾
在less界面中:
- /error 搜索"error"关键词
- Shift-F 实时跟踪模式(相当于tail -f)
- Ctrl+C退出跟踪模式
6. 文件系统管理
6.1 磁盘空间分析
df -h查看磁盘使用情况已是常识,但ncdu才是深度分析的神器:
bash复制# 安装ncdu
sudo apt install ncdu
# 扫描指定目录
ncdu /var
交互界面中:
- 按n按文件名排序
- 按s按文件大小排序
- 按d删除选中文件
对于找大文件,这个命令组合很实用:
bash复制find / -type f -size +100M -exec ls -lh {} + | awk '{ print $9 ": " $5 }'
6.2 文件操作技巧
快速创建测试大文件:
bash复制# 生成1GB文件
dd if=/dev/zero of=testfile bs=1M count=1024
# 更快的fallocate方式
fallocate -l 1G testfile
安全删除文件(不可恢复):
bash复制shred -zu filename
参数说明:
- -z:最后用0覆盖
- -u:删除后截断并删除文件
7. 系统配置管理
7.1 服务管理
systemctl基础命令:
bash复制# 查看服务状态
systemctl status nginx
# 设置开机自启
systemctl enable nginx
# 重启服务并查看日志
systemctl restart nginx && journalctl -u nginx -f
对于老的SysVinit系统,服务管理命令不同:
bash复制# 查看服务状态
service nginx status
# 重启服务
/etc/init.d/nginx restart
7.2 定时任务管理
查看所有用户的crontab:
bash复制ls /var/spool/cron/crontabs/
安全的编辑crontab方式:
bash复制crontab -e
我常用的crontab头配置,避免执行出错无通知:
bash复制MAILTO="admin@example.com"
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
8. 安全相关命令
8.1 用户权限管理
查看用户登录历史:
bash复制last -a | head
检查空密码账户:
bash复制sudo awk -F: '($2 == "") {print}' /etc/shadow
查找SUID特权文件:
bash复制find / -perm /4000 -type f 2>/dev/null
8.2 防火墙管理
firewalld基础操作:
bash复制# 查看所有规则
firewall-cmd --list-all
# 临时开放端口
firewall-cmd --add-port=8080/tcp
# 永久生效
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
对于iptables系统:
bash复制# 查看规则
iptables -L -n -v
# 保存规则
iptables-save > /etc/iptables.rules
9. 实用命令组合
9.1 性能监控仪表板
这个命令组合可以创建一个简易的性能监控面板:
bash复制watch -n 1 "echo '===== CPU ====='; top -bn1 | head -5; echo; echo '===== MEM ====='; free -h; echo; echo '===== DISK ====='; df -h; echo; echo '===== NET ====='; ss -s"
9.2 系统信息一览
快速获取系统关键信息:
bash复制echo -e "Hostname: $(hostname)\nKernel: $(uname -r)\nCPU: $(grep 'model name' /proc/cpuinfo | head -1)\nUptime: $(uptime)\nMemory: $(free -h | grep Mem)"
10. 命令使用经验分享
-
历史命令复用:善用
history | grep keyword查找过去执行的命令,用!123执行历史中第123条命令。 -
命令别名:在~/.bashrc中添加常用命令的别名:
bash复制alias ll='ls -alF'
alias ports='ss -tulnp'
alias meminfo='free -m -l -t'
- 脚本化常用操作:将重复性运维操作写成脚本,比如这个检查系统健康状态的脚本:
bash复制#!/bin/bash
echo "===== System Health Check ====="
date
echo
echo "----- Uptime -----"
uptime
echo
echo "----- Memory Usage -----"
free -h
echo
echo "----- Disk Usage -----"
df -h | grep -v tmpfs
echo
echo "----- Top Processes -----"
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6
- 远程执行技巧:使用ssh批量执行命令时,通过
-t参数分配伪终端:
bash复制ssh -t user@host 'sudo reboot'
- 命令输出重定向:同时记录输出到文件和屏幕:
bash复制some_command 2>&1 | tee output.log
掌握这些命令组合和技巧后,你会发现单机运维效率能提升数倍。关键是要理解每个命令背后的原理,而不是死记硬背。在实际环境中,我建议先搭建测试机练习这些命令,熟悉后再在生产环境使用。
