作为一名在Linux系统管理领域摸爬滚打多年的运维工程师,我深知CentOS作为企业级服务器的中流砥柱,其命令行工具的高效使用直接关系到运维工作的质量。今天我将分享一套经过实战检验的CentOS命令合集,这些命令不仅是我日常工作的利器,更是排查系统问题的"瑞士军刀"。
ps -eo pid,ppid,cmd,%mem --sort=-%mem | head -n 15这个命令组合堪称内存分析的黄金标准。让我们拆解它的每个部分:
-eo参数指定输出格式,比常用的-aux更精确可控pid,ppid,cmd,%mem分别显示:进程ID、父进程ID、完整命令、内存占比--sort=-%mem按内存使用降序排列(升序则去掉负号)head -n 15限制显示前15条记录实际运维中发现,Java应用和MySQL经常出现在这个列表顶部。当看到某个进程内存占用异常时,我会先用
pstree -p 进程ID查看其进程树结构,再结合jstat(Java)或SHOW PROCESSLIST(MySQL)进行深度分析。
进阶技巧:
%cpu字段可同时监控CPU占用:ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%memwatch -n 5 'ps -eo pid,ppid,cmd,%mem --sort=-%mem | head -15'(每5秒刷新)awk过滤特定进程:ps -eo pid,ppid,cmd,%mem --sort=-%mem | awk '$4 > 10'(显示内存>10%的进程)当收到磁盘告警时,我常用的诊断链条是:
bash复制df -hT # 查看文件系统整体使用情况
du -sh /var/log/* | sort -rh # 分析指定目录空间占用
lsof +L1 # 查找被删除但未释放空间的大文件
特别是du命令的几个实用参数:
--max-depth=1:限制目录遍历深度-x:不跨越文件系统边界--time:显示文件修改时间曾遇到一个案例:/var分区爆满但
du查不出大文件,最终用lsof | grep deleted发现被Apache进程占用的已删除日志文件,通过kill -HUP优雅重启服务后释放了30GB空间。
bash复制# 查找7天前大于100MB的日志文件
find /var/log -type f -name "*.log" -mtime +7 -size +100M -exec ls -lh {} \;
# 安全删除(先确认再执行)
find /var/log -type f -name "*.log" -mtime +30 -exec rm -v {} \;
关键参数解析:
-mtime +7:修改时间>7天(-7表示<7天)-size +100M:文件大小>100MB(c=bytes, k=KB, G=GB)-exec:对找到的文件执行命令({}表示文件名)bash复制ss -tulnp # 比netstat更高效的连接查看
lsof -i :80 # 查看80端口占用情况
tcpdump -i eth0 port 443 -vv # 抓取HTTPS流量(需要root)
ss命令的新特性:
-t:TCP连接-u:UDP连接-l:监听中的端口-n:显示数字端口号-p:显示进程信息bash复制firewall-cmd --list-all # 查看完整规则
firewall-cmd --add-port=8080/tcp --permanent # 永久开放端口
firewall-cmd --reload # 重载配置
CentOS 7+的firewalld与iptables的区别:
--reload才能生效bash复制systemctl list-units --type=service --all # 查看所有服务
systemctl cat nginx.service # 查看服务定义文件
systemctl edit --full docker.service # 编辑服务配置
关键操作备忘:
daemon-reload:修改服务文件后必须执行mask:彻底禁用服务(比disable更彻底)show:显示服务详细信息(包括环境变量)bash复制journalctl -u nginx --since "2023-01-01" --until "2023-01-02"
journalctl -p err -b # 本次启动的错误日志
journalctl --disk-usage # 查看日志占用空间
journalctl实用参数:
-f:实时跟踪(类似tail -f)-k:仅显示内核日志--vacuum-size=200M:限制日志总大小bash复制last -aiF # 详细登录历史
who /var/log/wtmp # 当前登录用户
grep 'Failed password' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
密码策略配置示例:
bash复制# /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_MIN_LEN 8
PASS_WARN_AGE 14
# /etc/security/pwquality.conf
minlen = 8
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
bash复制visudo -f /etc/sudoers.d/admin # 安全编辑sudo配置
典型授权示例:
code复制User_Alias ADMINS = user1,user2
Cmnd_Alias DISK_CMDS = /bin/df, /bin/mount, /bin/umount
ADMINS ALL=(ALL) NOPASSWD: DISK_CMDS
bash复制top -c -o %MEM # 交互式资源监控
vmstat 1 10 # 虚拟内存统计
iostat -xz 1 # 磁盘I/O监控
sar -n DEV 1 # 网络流量监控
top命令的实用交互指令:
M:按内存排序P:按CPU排序c:显示完整命令1:展开多核CPU显示bash复制sysctl -a | grep tcp # 查看TCP相关参数
sysctl -w net.ipv4.tcp_tw_reuse=1 # 临时修改参数
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf # 永久生效
常用优化参数:
conf复制net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 65535
vm.swappiness = 10
bash复制yum history # 查看操作历史
yum provides */ifconfig # 查找命令所属包
repoquery -l nginx # 查看包内文件(需安装yum-utils)
创建本地仓库的步骤:
createrepo /path/to/rpmsini复制[local]
name=Local Repo
baseurl=file:///path/to/rpms
enabled=1
gpgcheck=0
yum clean all && yum makecachebash复制rpm -qpl package.rpm # 查看包内文件
rpm2cpio package.rpm | cpio -idmv # 解压rpm包
rpm -qf /path/to/file # 查看文件所属包
构建RPM包的典型流程:
rpm-build和spectoolrpmdev-newspec -o package.specspectool -g -R package.specrpmbuild -ba package.specbash复制#!/bin/bash
set -euo pipefail # 安全脚本三件套
IFS=$'\n\t' # 防止文件名中有空格
readonly LOG_FILE="/var/log/script.log"
日志记录最佳实践:
bash复制log() {
local level="$1"
shift
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $@" | tee -a "$LOG_FILE"
[ "$level" = "ERROR" ] && exit 1
}
bash复制crontab -l # 查看当前任务
crontab -e # 编辑任务
cron表达式备忘:
code复制* * * * *
| | | | |
分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7)
系统级cron配置:
bash复制/etc/crontab # 系统主cron表
/etc/cron.d/ # 分片配置目录
/etc/cron.hourly/ # 每小时脚本
在长期运维实践中,我发现将常用命令封装成带颜色的输出函数能极大提升工作效率。比如在我的.bashrc中定义了:
bash复制function memtop() {
watch -n 5 "ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -15 |
awk 'BEGIN {printf \"\033[34m%-6s %-6s %-30s %-5s %-5s\033[0m\n\",\"PID\",\"PPID\",\"CMD\",\"MEM%\",\"CPU%\"}
NR>1 {printf \"%-6s %-6s %-30s \033[31m%-5s\033[0m \033[32m%-5s\033[0m\n\",\$1,\$2,\$3,\$4,\$5}'"
}
这样执行memtop就能获得一个带颜色高亮、自动刷新的内存监控面板,关键指标一目了然。这种小技巧的积累正是高效运维的秘诀所在。