1. Linux命令目录(二):系统管理与网络配置实战
作为Linux系统管理员,掌握核心命令是基本功。但真正区分新手和老鸟的,往往是对命令组合使用和边界场景的理解。本文将聚焦系统管理和网络配置相关命令,结合我在运维工作中积累的实战经验,分享那些手册里不会写的细节。
2. 系统状态监控与进程管理
2.1 资源监控三剑客:top/htop/vmstat
top命令是大多数人的第一选择,但默认视图其实隐藏了很多关键信息。建议启动时加上-d 5参数设置刷新间隔,按1键显示所有CPU核心负载,按Shift+M按内存排序。我习惯的黄金组合是:
top -d 5 -c -u appuser # 监控特定用户进程htop作为增强版,彩色界面更直观。安装后建议配置:
- 按
F2进入设置 - 添加CPU温度、磁盘I/O监控栏
- 开启树状视图(F5)
vmstat特别适合排查间歇性性能问题。关键参数组合:
vmstat 1 10 # 每秒采样,共10次重点关注:
si/so:交换分区使用情况us/sy:用户/系统CPU时间占比b:等待IO的进程数
经验:当
b列持续大于5,说明存在IO瓶颈,应立即检查磁盘健康状况
2.2 进程管理进阶技巧
ps aux的输出虽然全面,但可读性差。我常用的过滤组合:
ps -eo pid,user,pcpu,pmem,cmd --sort=-%cpu | head -10 # CPU占用TOP10 ps -eo pid,user,lstart,cmd | grep -E '(nginx|mysql)' # 查服务启动时间kill命令的常见误区:
- 直接
kill -9可能导致数据损坏 - 正确流程:
kill -15 PID# 优雅终止- 等待30秒
kill -9 PID# 强制终止
对于僵尸进程,需要kill其父进程:
ps -ef | grep defunct # 找僵尸进程PPID kill -HUP PPID3. 网络配置与故障排查
3.1 网络接口管理
ip命令已取代老旧的ifconfig,推荐用法:
ip -c addr show # 彩色显示接口信息 ip route show table all # 查看所有路由表 ip neigh show # ARP表永久修改网络配置(CentOS/RHEL):
nmcli con mod eth0 ipv4.addresses "192.168.1.100/24" nmcli con mod eth0 ipv4.gateway "192.168.1.1" nmcli con up eth03.2 网络连通性测试
ping的高级用法:
ping -c 5 -i 0.2 -W 1 8.8.8.8 # 发5个包,间隔200ms,超时1秒traceroute的替代方案(部分系统已移除):
mtr -n -i 0.5 example.com # 实时路径分析3.3 防火墙管理
Firewalld基础操作:
firewall-cmd --permanent --add-port=8080/tcp # 永久开放端口 firewall-cmd --reload # 重载配置 firewall-cmd --list-all # 查看所有规则复杂规则示例(允许特定IP访问MySQL):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.50" port protocol="tcp" port="3306" accept'4. 存储管理与文件系统
4.1 磁盘空间分析
df的易读格式:
df -hT -x tmpfs -x devtmpfs # 排除临时文件系统查找大文件的三种姿势:
du -sh /* 2>/dev/null | sort -rh | head -10 # 根目录大小TOP10 find /var/log -type f -size +100M -exec ls -lh {} + # 特定目录大文件 ncdu /home # 交互式分析工具4.2 LVM管理实战
创建逻辑卷完整流程:
pvcreate /dev/sdb1 # 创建物理卷 vgcreate vg_data /dev/sdb1 # 创建卷组 lvcreate -L 100G -n lv_mysql vg_data # 创建逻辑卷 mkfs.xfs /dev/vg_data/lv_mysql # 格式化 mount /dev/vg_data/lv_mysql /var/lib/mysql # 挂载扩展逻辑卷(无需卸载):
lvextend -L +50G /dev/vg_data/lv_mysql xfs_growfs /var/lib/mysql # 对XFS文件系统5. 系统服务与日志管理
5.1 systemd服务管理
查看服务启动耗时:
systemd-analyze blame | head -10自定义服务单元示例(/etc/systemd/system/myapp.service):
[Unit] Description=My Application After=network.target [Service] User=appuser Group=appuser WorkingDirectory=/opt/myapp ExecStart=/usr/bin/java -jar app.jar Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target重载并启用:
systemctl daemon-reload systemctl enable --now myapp.service5.2 日志分析技巧
journalctl高级用法:
journalctl -u nginx --since "2023-01-01" --until "2023-01-02" journalctl -p err -b # 本次启动的错误日志 journalctl -f -u mysql # 实时追踪日志轮转配置示例(/etc/logrotate.d/myapp):
/var/log/myapp/*.log { daily missingok rotate 30 compress delaycompress notifempty create 640 appuser adm sharedscripts postrotate systemctl reload myapp >/dev/null 2>&1 || true endscript }6. 安全加固实践
6.1 SSH安全配置
/etc/ssh/sshd_config关键修改:
Port 2222 # 修改默认端口 PermitRootLogin no PasswordAuthentication no # 强制密钥登录 AllowUsers admin deploy ClientAliveInterval 300 # 5分钟无操作断开生成更安全的ED25519密钥对:
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed255196.2 文件权限管理
查找异常权限文件:
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -exec ls -ld {} + # SUID/SGID文件 find / -xdev -nouser -o -nogroup # 无主文件ACL权限示例(允许web用户组读取日志):
setfacl -R -m g:web:r-x /var/log/nginx getfacl /var/log/nginx # 验证7. 实用工具集锦
7.1 终端效率工具
tmux基础配置(~/.tmux.conf):
set -g mouse on bind | split-window -h bind - split-window -v set -g history-limit 10000rsync增量备份示例:
rsync -avz --delete --progress -e "ssh -p 2222" \ /data/ backupuser@backupserver:/backups/daily/7.2 性能分析工具
iostat监控磁盘IO:
iostat -xmt 1 # 每秒刷新,显示扩展指标iftop实时流量监控:
iftop -nNP -i eth0 # 不解析IP,显示端口号8. 常见问题排错指南
8.1 "Too many open files"错误
查看当前限制:
ulimit -n cat /proc/$(pgrep nginx)/limits # 查看进程实际限制永久修改(/etc/security/limits.conf):
nginx soft nofile 65535 nginx hard nofile 65535对于systemd服务,还需修改:
mkdir -p /etc/systemd/system/nginx.service.d echo -e '[Service]\nLimitNOFILE=65535' > /etc/systemd/system/nginx.service.d/limits.conf systemctl daemon-reload8.2 磁盘空间不足但df显示有剩余
通常是被删除文件仍被进程占用:
lsof +L1 # 查看被删除但未释放的文件解决方法:
# 重启持有文件的进程 systemctl restart nginx # 或清空文件内容(不中断服务) truncate -s 0 /var/log/nginx/access.log