Linux系统管理实战:权限、进程与网络配置 1. Linux初学者笔记5从零开始的系统管理实战刚接触Linux时那些黑底白字的终端窗口总让人望而生畏。但当你真正开始用命令行管理文件、安装软件、排查故障时会发现这比图形界面高效得多。作为系列第五篇这次我们重点解决三个实际场景多用户权限管理、进程监控排错、网络配置调试。这些都是系统管理员日常必备技能也是面试常考内容。提示所有命令在Ubuntu 22.04 LTS实测通过其他发行版可能需要微调参数1.1 用户与权限的精细控制新建用户看似简单但生产环境中往往需要更复杂的配置。比如开发团队需要共享某个项目目录但又不希望他们随意删除彼此文件# 创建开发组并设置共享目录 sudo groupadd dev_team sudo mkdir -p /projects/alpha sudo chown :dev_team /projects/alpha sudo chmod 2775 /projects_alpha # 关键设置SGID位保持组继承这里chmod 2775中的2表示SGIDSet Group ID它确保在该目录下新建的文件自动继承父目录的组权限。实测时发现如果不设置这个标志即使用户属于dev_team组新建文件的组仍会是用户主组。权限问题90%的报错都源于umask值。通过umask -S查看当前掩码我习惯在~/.bashrc添加umask 002让同组用户默认有写权限。曾遇到过Apache无法写入日志文件的坑最后发现是父目录权限未继承# 递归修正权限继承 sudo find /var/log/apache2 -type d -exec chmod gs {} \;1.2 进程管理的核心技巧ps aux输出太多信息试试这个组合命令监控CPU占用前五的进程watch -n 1 ps -eo pid,user,%cpu,%mem,cmd --sort-%cpu | head -n 6参数解析-eo指定输出字段进程ID、用户、CPU占比等--sort-%cpu按CPU使用降序head -n 6显示前五行含表头watch -n 1每秒刷新遇到僵尸进程时常规kill无效。需要找到其父进程IDPPID然后重启父进程。记录个实用命令链# 查找所有僵尸进程及其父进程 ps -A -ostat,ppid | grep -e [zZ] | awk {print $2} | xargs -I{} ps -p {}1.3 网络配置与排错Ubuntu新版改用netplan配置网络典型yaml配置示例# /etc/netplan/00-installer-config.yaml network: version: 2 ethernets: enp3s0: dhcp4: false addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 114.114.114.114]应用配置时务必执行sudo netplan apply而非直接重启网络服务。曾因这个细节浪费两小时排查——新配置未生效时先用netplan --debug apply查看详细处理过程。当遇到Network is unreachable时按这个顺序排查ip link看网卡是否UPip route show检查默认路由ping 127.0.0.1测试本地协议栈traceroute 8.8.8.8定位断点2. 磁盘管理进阶操作2.1 LVM的灵活运用逻辑卷管理是Linux磁盘管理的精髓。新建PV/VG/LV的标准流程# 将/dev/sdb初始化为物理卷 sudo pvcreate /dev/sdb # 创建名为data_vg的卷组 sudo vgcreate data_vg /dev/sdb # 创建20G的逻辑卷并格式化为ext4 sudo lvcreate -L 20G -n data_lv data_vg sudo mkfs.ext4 /dev/data_vg/data_lv最实用的特性是在线扩容。当逻辑卷空间不足时# 先扩展逻辑卷大小无需卸载 sudo lvextend -L 5G /dev/data_vg/data_lv # 然后调整文件系统ext4/xfs命令不同 sudo resize2fs /dev/data_vg/data_lv重要XFS文件系统要用xfs_growfs命令且不支持缩小2.2 磁盘性能监控iostat -x 1是诊断IO瓶颈的利器关键指标解读%util设备繁忙百分比70%说明饱和awaitIO平均等待时间(ms)机械盘20ms需警惕svctm设备处理IO所需时间应与await对比发现某MySQL服务器响应慢通过iotop发现是备份脚本正在大量写盘。临时限制其IO速度ionice -c 3 -p $(pgrep backup_script)3. 自动化运维实战3.1 Shell脚本的健壮性写法初学者常犯的错误是不做异常检查。规范的脚本开头应该包含#!/bin/bash set -euo pipefail # 遇到错误立即退出/使用未定义变量报错/管道错误能被捕获 # 检查是否为root [[ $EUID -eq 0 ]] || { echo 必须使用root执行; exit 1; } # 检查必要命令是否存在 command -v jq /dev/null 21 || { echo 需要安装jq; exit 1; }日志记录推荐使用logger命令写入系统日志方便统一收集logger -t backup_script 开始执行全量备份3.2 定时任务的最佳实践crontab的常见误区及解决方案环境变量问题在命令前加载/etc/profile* * * * * . /etc/profile; /path/to/script.sh避免任务重叠使用flock文件锁*/5 * * * * /usr/bin/flock -xn /tmp/backup.lock -c /opt/scripts/backup.sh邮件报警设置在crontab首行指定MAILTOMAILTOadminexample.com4. 安全加固要点4.1 SSH安全配置修改/etc/ssh/sshd_config的几个关键参数PermitRootLogin no # 禁止root直接登录 PasswordAuthentication no # 强制密钥认证 MaxAuthTries 3 # 限制尝试次数 AllowUsers alice bob # 白名单用户配置完成后务必测试新会话能否登录再重启服务sshd -t systemctl restart sshd4.2 防火墙精细控制UFW的进阶用法示例# 允许特定IP访问3306端口 sudo ufw allow from 192.168.1.100 to any port 3306 proto tcp # 限制某IP的连接速率防暴力破解 sudo ufw limit proto tcp from 203.0.113.45 to any port 22 # 查看详细规则 sudo ufw show raw5. 性能调优速查5.1 内存优化参数在/etc/sysctl.conf中添加vm.swappiness10 # 减少swap使用倾向 vm.dirty_ratio40 # 系统级脏页比例阈值 vm.dirty_background_ratio5 # 后台回写触发阈值应用配置sysctl -p5.2 文件系统调优针对SSD的ext4挂载选项UUIDxxxx / ext4 defaults,discard,noatime,datawriteback 0 1关键参数说明discard启用TRIM功能noatime不更新访问时间戳datawriteback牺牲部分安全性换取写入性能6. 实用工具推荐6.1 终端多路复用器tmux基础工作流tmux new -s work # 创建会话 Ctrlb % # 垂直分屏 Ctrlb # 水平分屏 tmux a -t work # 重新接入会话6.2 日志分析神器journalctl的常用过滤方式# 查看最近10条内核日志 journalctl -k -n 10 # 追踪某个服务的日志 journalctl -u nginx -f # 显示包含ERR的日志支持正则 journalctl -p err..alert7. 常见故障处理实录7.1 只读文件系统修复当出现Read-only file system错误时检查磁盘错误dmesg | grep error强制fsck检查需卸载umount /dev/sda1 fsck -y /dev/sda1检查SMART状态smartctl -a /dev/sda7.2 套接字文件占用处理报错Address already in use时# 查找占用端口的进程 ss -tulnp | grep :80 # 强制释放端口慎用 fuser -k 80/tcp8. 内核模块管理8.1 动态加载驱动查看已加载模块lsmod加载指定模块modprobe module_name带参数加载示例echo options e1000e InterruptThrottleRate3000 /etc/modprobe.d/e1000e.conf systemctl restart systemd-modules-load8.2 DKMS管理第三方驱动以安装Realtek网卡驱动为例sudo apt install dkms sudo dkms add -m r8168 -v 8.050.03 sudo dkms build -m r8168 -v 8.050.03 sudo dkms install -m r8168 -v 8.050.039. 软件包管理技巧9.1 解决依赖冲突强制降级软件包的方法sudo apt-get install packageversion查看可用版本apt-cache madison package标记特定版本防止意外升级sudo apt-mark hold package9.2 本地仓库创建搭建简易APT仓库# 创建Packages.gz dpkg-scanpackages . /dev/null | gzip -9c Packages.gz # 客户端配置 echo deb [trustedyes] file:/path/to/repo ./ | sudo tee /etc/apt/sources.list.d/local.list10. 系统救援实战10.1 制作可引导救援盘使用Ventoy创建多系统启动盘# 下载并解压Ventoy wget https://github.com/ventoy/Ventoy/releases/download/v1.0.88/ventoy-1.0.88-linux.tar.gz tar zxvf ventoy-*.tar.gz # 安装到U盘确认设备路径正确 sudo ./Ventoy2Disk.sh -i /dev/sdX10.2 chroot环境搭建从LiveCD救援系统# 挂载原系统分区 mount /dev/sda1 /mnt mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys # 切换根环境 chroot /mnt /bin/bash # 修复引导 grub-install /dev/sda update-grub