运维--Linux 系统管理 Linux 系统管理确实是运维最核心的基本功可以说是吃饭的家伙。这部分内容比较多我帮你把它拆解成日常工作中最常用的四个核心模块咱们一个个来看 文件管理在服务器上“找东西”和“搬东西”在 Linux 里一切皆文件。熟练掌握文件操作是第一步。目录切换与查看pwd查看当前所在的目录路径。ls -l或ll查看目录下的文件列表及详细信息权限、大小、修改时间。cd /path/to/dir进入指定目录cd ..返回上一级。文件的增删改查mkdir创建目录。touch创建一个空文件。cp和mv分别用于复制和移动重命名文件或目录。rm -rf高危命令强制删除文件或目录。运维新手一定要小心使用敲回车前务必再三确认路径。查看文件内容cat或less查看文件内容less更适合看大文件支持上下翻页。tail -f filename运维神器实时滚动查看文件最新追加的内容排查日志报错时天天都在用。搜索与过滤find根据名字、时间等条件在茫茫目录中找文件。grep在文件内容中搜索关键字。比如grep ERROR app.log就能快速找出日志里的报错信息。 用户与权限控制服务器的“门禁系统”Linux 是多用户系统权限管理直接关系到服务器的安全。用户与用户组管理useradd/userdel添加或删除用户。passwd修改用户密码。su - username切换到另一个用户。权限查看与修改用ls -l看文件时最左边会有类似-rw-r--r--的字符。这代表了文件所有者User、所属组Group和其他人Others的读r、写w、执行x权限。chmod修改权限。比如chmod 755 script.sh可以让脚本变成可执行文件。chown修改文件的所有者。比如把某个目录交给特定的用户去管理。提权操作 (sudo)日常运维中我们通常用普通用户登录需要管理员权限时在命令前加sudo比如sudo systemctl restart nginx。这比直接用 root 登录要安全得多且操作会被记录在案。⚙️ 进程管理掌控服务器的“心跳”服务器上运行的每一个服务如 Nginx、MySQL在系统里都是一个或多个“进程”。查看进程状态top或htop动态查看系统的实时资源占用情况CPU、内存以及哪些进程最耗资源。ps aux | grep 关键字静态查看当前系统中运行的进程配合grep找特定服务。控制进程kill根据进程号PID杀掉卡死或异常的进程。比如kill -9 PID是强制杀死。killall根据进程名字直接杀掉相关进程。后台运行在命令后面加个如python script.py 可以让程序在后台运行即使你关闭了终端窗口它也不会停。 磁盘与 LVM 管理给服务器“扩容”当服务器的硬盘满了或者需要重新规划存储空间时就会用到这部分知识。查看磁盘空间df -h查看各个分区总共多大、用了多少、还剩多少。du -sh /path查看某个具体目录占用了多少空间用来排查是哪个日志或文件把硬盘撑爆了。LVM逻辑卷管理这是 Linux 下非常强大的磁盘管理技术。它把底层的物理硬盘PV抽象成一个大的“存储池”VG然后你可以从这个池子里随意切出不同大小的“虚拟分区”LV给系统用。最大优势支持在线动态扩容。比如你的数据库分区LV空间不够了只要底层的存储池VG还有剩余空间你就可以在不重启服务器、不中断业务的情况下直接给这个分区“加容量”。详细实战简单与进阶这个任务模拟了日常运维中经常要做的一个工作“为新来的同事或程序分配专属环境并设置自动化维护”。你可以打开你的 Linux 终端如果没有真实服务器用虚拟机或者 WSL 也可以跟着下面的步骤一步步敲命令。基础 实战任务目标创建一个名为devteam的用户组和一个名为tom的普通用户。为tom创建一个专属的工作目录并设置好权限确保只有他和 root 能改。编写一个 Shell 脚本用于清理该目录下的过期日志。配置定时任务Crontab让这个脚本每天凌晨自动运行。️ 第一步用户与权限管理模拟分配环境首先我们需要在系统里把“人”和“组织”建好。1. 创建用户组sudo groupadd devteam(解释创建一个名为 devteam 的团队组)2. 创建用户并加入组sudo useradd -m -g devteam -s /bin/bash tom(解释-m表示在/home下自动创建 tom 的家目录-g指定主组-s指定默认使用的 shell 是 bash)3. 给新用户设置密码sudo passwd tom(解释执行后系统会提示你输入两次新密码注意输入时屏幕不会显示星号输完回车即可)4. 创建专属工作目录并设置权限# 在根目录下创建一个 logs 目录 sudo mkdir -p /data/logs # 把这个目录的所有者交给 tom所属组交给 devteam sudo chown tom:devteam /data/logs # 设置权限为 750所有者可读/写/执行同组人可读/执行其他人没有任何权限 sudo chmod 750 /data/logs 第二步编写 Shell 脚本模拟自动化逻辑现在环境有了我们来写一个清理脚本。1. 切换到 tom 用户体验一下权限控制su - tom2. 创建几个测试用的假日志文件# 进入工作目录 cd /data/logs # 创建几个测试文件并用 touch 修改它们的修改时间为 30 天前 touch app.log touch -d 30 days ago error_20260601.log touch -d 30 days ago error_20260605.log touch access.log # 查看一下现在的文件列表 ls -l(解释此时你应该能看到有两个文件的时间是 30 天前的)3. 编写清理脚本# 在当前目录创建一个名为 clean_logs.sh 的文件 nano clean_logs.sh(解释这里使用 nano 编辑器如果你习惯用 vim把 nano 换成 vim 即可)在打开的编辑器中把下面这段代码复制进去#!/bin/bash # 这是一个清理过期日志的脚本 # 定义要清理的目录 LOG_DIR/data/logs # 查找目录下以 .log 结尾且修改时间超过 7 天的文件并删除它们 # -mtime 7 表示修改时间在 7 天前 find $LOG_DIR -type f -name *.log -mtime 7 -exec rm -rf {} \; echo 日志清理完成当前时间是$(date) $LOG_DIR/clean_record.txt保存并退出在 nano 中按Ctrl O保存按回车确认然后按Ctrl X退出。4. 赋予脚本执行权限chmod x clean_logs.sh⏰ 第三步配置定时任务让脚本自己跑起来脚本写好了但不能每次都手动敲我们要让系统自动执行。1. 编辑 tom 用户的定时任务crontab -e(解释第一次执行可能会让你选编辑器选 nano 即可)2. 添加定时规则在文件最末尾加上这一行0 2 * * * /data/logs/clean_logs.sh(解释这是 Cron 表达式。0 2 * * *的意思是“每天的凌晨 2点0分”执行后面的命令)保存并退出。系统会提示crontab: installing new crontab说明配置成功了。 第四步验证与排错运维的核心环节作为运维配置完一定要验证。1. 手动执行一次脚本看看效果./clean_logs.sh执行完后输入ls -l看看那两个 30 天前的error_*.log文件是不是已经消失了同时是不是多了一个clean_record.txt2. 查看定时任务是否生效crontab -l(解释列出当前用户的定时任务确认刚才写的规则还在)3. 查看定时任务的执行日志进阶排错如果以后脚本没按时执行去哪看原因呢在大多数 Linux 系统中可以查看系统日志# 查看 cron 服务的运行日志需要切回有 sudo 权限的用户或者用 sudo sudo grep CRON /var/log/syslog(注如果是 CentOS/RedHat 系统日志文件通常在/var/log/cron命令就是sudo cat /var/log/cron) 任务总结恭喜你当你完成上面这些步骤时你已经完整体验了用户与权限管理useradd, chmod, chown文件操作与时间属性touch, lsShell 脚本编写变量, find 命令定时任务配置crontab这就是运维日常工作中最典型的一个闭环。你可以尝试在这个基础上自己加点难度比如修改脚本让它不删除文件而是把旧日志打包压缩成.tar.gz文件。进阶任务刚才的任务里我们是用rm直接删除旧文件。但在真实的运维环境里数据可是非常宝贵的直接删除是大忌。所以“打包压缩归档”才是标准操作。我们继续用刚才的tom用户在/data/logs目录下操作。 第一步准备“弹药”为了测试打包效果我们先造几个不同时间的日志文件并往里面随便写点内容# 进入目录 cd /data/logs # 创建几个假日志并写入一些测试文本 echo 这是今天的正常日志 app_today.log echo 这是昨天的报错日志 app_yesterday.log echo 这是三天前的报错日志 app_3days.log # 把后两个文件的时间改成过去模拟旧日志 touch -d 1 day ago app_yesterday.log touch -d 3 days ago app_3days.log # 看看现在的状态 ls -l️ 第二步升级清理脚本我们重新编辑一下刚才的clean_logs.sh脚本。这次我们要实现两个逻辑找出修改时间超过 2 天的日志。把它们打包压缩到一个叫backup的隐藏目录里然后删除原文件。输入以下命令编辑脚本nano clean_logs.sh把里面的内容全部删掉替换成下面这段“升级版”代码#!/bin/bash # 升级版日志打包归档脚本 LOG_DIR/data/logs # 定义一个专门存放压缩包的目标目录前面加.表示隐藏目录 BACKUP_DIR$LOG_DIR/.archive # 1. 检查备份目录是否存在不存在就创建 if [ ! -d $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR fi # 2. 生成一个带当前日期的压缩包名字比如 logs_backup_20260711.tar.gz DATE$(date %Y%m%d) ARCHIVE_NAMElogs_backup_$DATE.tar.gz # 3. 核心逻辑找出修改时间超过 2 天的 .log 文件 # -type f 表示只找文件-mtime 2 表示修改时间在 2 天前-name *.log 匹配后缀 OLD_FILES$(find $LOG_DIR -maxdepth 1 -type f -name *.log -mtime 2) # 4. 判断是否真的找到了旧文件 if [ -n $OLD_FILES ]; then echo 发现过期日志开始打包... # 使用 tar 命令打包并压缩 # -z: 使用 gzip 压缩; -c: 创建新包; -f: 指定文件名 tar -zcf $BACKUP_DIR/$ARCHIVE_NAME $OLD_FILES # 打包成功后删除这些原始文件 rm -f $OLD_FILES echo $(date) - 成功打包并清理了过期日志: $ARCHIVE_NAME $LOG_DIR/clean_record.txt else echo 没有发现超过 2 天的过期日志无需清理。 fi写好后按Ctrl O保存Ctrl X退出。 第三步手动运行与验证现在我们来执行这个脚本看看它是不是按我们的预期工作的。1. 执行脚本./clean_logs.sh2. 检查原目录ls -l你会发现app_yesterday.log1天前和app_today.log今天都还在但是app_3days.log3天前已经消失了。3. 检查备份目录ls -l .archive你会看到一个类似logs_backup_20260711.tar.gz的压缩包躺在那里。4. 验证压缩包内容终极验证运维不仅要执行还要验证结果对不对。我们可以不解压直接查看压缩包里面有什么tar -ztvf .archive/logs_backup_*.tar.gz(解释-t是列出内容-v是显示详细信息-f是指定文件)你会看到被打包进去的正是那个 3 天前的app_3days.log文件。 核心知识点复盘通过这个扩展任务你其实已经掌握了几个非常实用的运维技巧find命令的高级用法利用-mtime N按时间筛选文件这是写自动化脚本最常用的逻辑。tar打包压缩tar -zcf是 Linux 下最经典的打包压缩命令。Shell 脚本的条件判断if [ ! -d $DIR ]判断目录是否存在和if [ -n $VAR ]判断变量是否为空这让你的脚本有了“大脑”能根据不同情况做不同的事。