Linux系统管理进阶-源码安装与进程调度

发布时间:2026/9/15 6:56:36

Linux系统管理进阶-源码安装与进程调度 Linux 系统管理进阶源码安装、计划任务与进程调度 学习日期2026-07-29 系统环境CentOS 7 作者Linux 运维学习者 目录源码安装软件自建 YUM 仓库计划任务管理进程调度管理文件系统基本管理1. 源码安装软件在 Linux 世界里虽然yum/dnf能搞定大多数软件但源码编译安装依然是运维工程师的必修课。它能让你自定义安装路径和功能模块获取最新版本而不是仓库里的旧版本深入理解软件的构建过程1.1 源码安装 NginxNginx 是一个高性能的 HTTP 和反向代理 web 服务器官方地址nginx.org标准的源码安装三部曲配置 → 编译 → 安装Step 1安装依赖yuminstallgccmakepcre-devel zlib-develgcc和make是编译工具链pcre-devel和zlib-devel是 Nginx 依赖的库。Step 2下载 解压wgethttps://nginx.org/download/nginx-1.24.0.tar.gztar-xfnginx-1.24.0.tar.gzcdnginx-1.24.0/Step 3配置最关键的一步./configure--prefix/usr/local/nginx--prefix指定安装目录所有 Nginx 相关文件都会存放在/usr/local/nginx下。Step 4编译 安装makemakeinstall⚡make负责编译make install负责安装。用串联编译成功才会执行安装。Step 5配置环境变量exportPATH$PATH:/usr/local/nginx/sbin/echoexport PATH$PATH:/usr/local/nginx/sbin/~/.bashrcNginx 常用命令命令作用nginx启动服务nginx -s quit优雅停止处理完当前请求后退出nginx -s stop强制停止直接 kill 进程nginx -s reload重新加载配置文件将 Nginx 注册为系统服务手写一个 systemd 服务文件让 Nginx 像系统自带服务一样管理# /etc/systemd/system/nginx.service [Unit] DescriptionNginx server daemon [Service] Typeforking ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload/usr/local/nginx/sbin/nginx -s reload ExecStop/usr/local/nginx/sbin/nginx -s quit [Install] WantedBymulti-user.targetsystemctl daemon-reload systemctlenablenginx.service--now# 开机启动 立即运行1.2 源码安装 Cmatrix —— 打造黑客帝国同款屏幕 Cmatrix 是一款 Linux 环境下炫酷的屏保软件效果类似于《黑客帝国》电影中的代码雨。项目地址github.com/abishekvashok/cmatrix安装步骤# 安装依赖yum-yinstallgccmakeautoconf ncurses-devel# 下载 解压wgethttp://192.168.50.200/class/course-materials/softwares/stage01/cmatrix-1.2.tar.gztar-xfcmatrix-1.2.tar.gzcdcmatrix-1.2/# 配置 → 编译 → 安装./configure--prefix/usr/local/cmatrixmakemakeinstall# 配置环境变量exportPATH$PATH:/usr/local/cmatrix/bin 运行效果# 基础运行cmatrix# 加粗红色代码雨速度设为 3cmatrix-b-u3-Cred参数含义-b加粗字体-u 0-10滚动速度默认 4-C color字体颜色green / red / blue / white / yellow / cyan / magenta / black-s屏保模式按任意键退出-a异步滚动 运行时骚操作无需重启就能随时改变颜色按键盘上的对应键位即可颜色按键对应数字键 红色!Shift1 绿色Shift2 黄色#Shift3 蓝色$Shift4 洋红色%Shift5 青色^Shift6⚪ 白色Shift7⚫ 黑色)Shift8按数字键0~9还能随时调整滚动速度2. 自建 YUM 仓库当内网环境无法访问公网仓库或者需要统一管理团队内部的软件包版本时自建 YUM 仓库就是你的救星。自建仓库四步走准备软件包 → 创建仓库索引 → 发布仓库 → 客户端配置Step 1准备软件包mkdirrpmscdrpms# 使用 --downloadonly 只下载不安装保留依赖包yuminstall--downloadonly--downloaddir.vimopen-vm-tools vsftpd\lrzsz bash-completion nginx httpd mariadb-server# 移动到 Nginx 发布目录mkdir/usr/local/nginx/html/toolsmvrpms /usr/local/nginx/html/tools/PackagesStep 2创建仓库索引yuminstall-ycreaterepo createrepo /usr/local/nginx/html/tools/️createrepo会扫描 Packages 目录生成repodata/索引文件YUM 客户端就是靠它找到软件包的。Step 3通过 Nginx 发布在 Nginx 配置中启用目录浏览# /usr/local/nginx/conf/nginx.conf http { autoindex on; # ← 开启文件清单功能方便浏览器查看 ... }systemctl reload nginxStep 4客户端配置# 备份原仓库mkdir/etc/yum.repos.d/oldmv/etc/yum.repos.d/*repo /etc/yum.repos.d/old# 创建新仓库配置catEOF/etc/yum.repos.d/tools.repo[tools] namecentos7 tools from server.laoma.cloud baseurlhttp://server.laoma.cloud/tools/ enabled1 gpgcheck0 EOF# 测试安装yuminstall-yhttpd 同步仓库把远程仓库搬回家reposync--repoidtools# 同步所有 RPM 包createrepo tools# 重建本地索引3. 计划任务管理Linux 中的计划任务分为两类一次性任务和周期性任务。掌握它们运维自动化就迈出了一大步。3.1 一次性计划任务at “下午 5 点把这份日志发邮件给老板” —— 这种只做一次的事交给at。at 依赖atd后台服务运行yuminstallat systemctl status atd# 确认 active (running)基本用法# 5 分钟后执行at now 5 minutes atechohello world/tmp/hello.log atEOT# ← 按 CtrlD 完成输入# 从脚本文件读取命令at now 5 minutesmyscript.sh at now 100 minutes-fmyscript.sh时间表达大全timespec表达式含义now 5 minutes5 分钟后now 5 hours5 小时后teatime tomorrow明天下午 4 点 (teatime 16:00)noon 4 days4 天后的中午 (noon 12:00)5pm august 3 20262026 年 8 月 3 日下午 5 点 完整时间表达参考/usr/share/doc/at/timespec任务管理命令命令作用atq或at -l查看任务队列at -c job号查看任务详细内容atrm job号或at -d删除任务at -q 字母指定队列 (a~z越靠后优先级越低)权限控制# /etc/at.allow 存在 → 只有文件中的用户能用 at# /etc/at.allow 不存在 → /etc/at.deny 中的用户被禁止# 两个文件都不存在 → 只有 root 能用 at3.2 用户周期性计划任务crontab “每周一早上 9 点生成周报” —— 这种重复执行的活交给crontab。依赖crond服务运行使用crontab命令管理。crontab 语法速查* * * * * command │ │ │ │ │ │ │ │ │ │ │ └── 要执行的命令 │ │ │ │ └─────── 星期几 (0-7, 0和7都表示周日) │ │ │ └──────────── 月份 (1-12) │ │ └───────────────── 几号 (1-31) │ └────────────────────── 小时 (0-23) └─────────────────────────── 分钟 (0-59)时间字段规则符号含义示例*每…* * * * *→ 每分钟x-y范围1-5→ 1 到 5x,y列表1,3,5→ 第 1、3、5*/x每隔 x*/5→ 每隔 5分钟/小时等实战示例# 每年 2 月 2 日上午 9 点运行备份0922* /usr/local/bin/yearly_backup# 7 月每周五 9:00-16:00每 5 分钟响一声*/59-16 * Jul5echoChime# 每个工作日周一至周五23:58 运行日报5823* *1-5 /usr/local/bin/daily_reportcrontab 常用命令命令作用crontab -l查看当前用户的计划任务crontab -e编辑计划任务默认 vicrontab -r删除所有计划任务crontab -u user -eroot 管理其他用户的任务crontab filename从文件导入任务替换现有任务 综合练习编写一个定时监控脚本需求让一个程序运行 20 秒后自动终止在 11 月份的奇数日 11:00-18:00每 2 分钟执行一次。# 1. 编写脚本 /usr/local/bin/myjob#!/bin/bashmd5sum /dev/zero# 后台启动会吃满 CPUsleep20# 等 20 秒pkillmd5sum# 干掉它chmodx /usr/local/bin/myjob# 2. 配置 crontab# */2 11-18 */2 11 *# 解读11 月奇数日11-18 点之间每 2 分钟执行crontab-e*/211-18 */211* /usr/local/bin/myjob 验证方法journalctl -f监控 cron 日志top观察 md5sum 出现又消失。3.3 系统级周期性计划任务系统管理员通过配置文件定义系统级任务crond 从三个地方读取配置文件用途/etc/crontab系统主配置文件比用户 crontab 多一个 “执行用户” 字段/etc/cron.d/第三方应用存放任务的推荐位置不会被更新覆盖/etc/anacrontab定义每日/每周/每月任务保证即使关机也能补执行# /etc/crontab 格式多一个 user-name 字段* * * * * user-namecommand# 示例每小时执行一次 cron.hourly 下的所有脚本01 * * * * root run-parts /etc/cron.hourlyanacron错过不怕醒了就补period(days) delay(min) job-id command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly monthly 45 cron.monthly nice run-parts /etc/cron.monthlyRANDOM_DELAY45会给任务加随机延迟最多 45 分钟防止所有机器同时执行造成负载尖峰。START_HOURS_RANGE3-22限定任务在凌晨 3 点到晚上 10 点之间运行。4. 进程调度管理 操作系统里运行的进程永远比 CPU 核心数多那 Linux 是怎么做到看起来同时运行的答案是——进程调度器。4.1 两类调度器┌────────────────────────────┐ │ Linux 进程调度器 │ └───────────┬────────────────┘ │ ┌───────────────┴───────────────┐ ▼ ▼ ┌─────────────┐ ┌─────────────┐ │ 实时调度器 │ │ 非实时调度器 │ │ (抢占力强) │ │ (抢占力弱) │ └──────┬──────┘ └──────┬──────┘ │ │ ┌─────┴─────┐ ┌─────────┼─────────┐ ▼ ▼ ▼ ▼ ▼ SCHED_RR SCHED_FIFO SCHED_NORMAL SCHED_BATCH SCHED_IDLE (轮询) (先入先出) (标准分时) (批处理) (极低优先级)关键结论⚡优先级最低的实时进程 优先级最高的非实时进程实时调度器进程优先级1 ~ 99非实时调度器 nice 值-20最高 ~ 19最低实时调度器安全阀为防止实时进程霸占所有 CPU导致 SSH 都连不上内核有两个保护参数# kernel.sched_rt_period_us 1000000 (1秒CPU分配周期)# kernel.sched_rt_runtime_us 950000 (0.95秒实时进程能用的上限)# → 剩余 0.05 秒留给非实时进程保证系统可响应4.2 管理进程优先级nice renicenice 值规则nice -20 ←──── 优先级最高抢 CPU 最猛 ... nice 0 ←──── 默认值 ... nice 19 ←──── 优先级最低最佛系没有 CPU 资源竞争时nice 值再高的进程也能拿到足够 CPU。只有资源紧张时nice 值才起决定性作用。nice命令启动时设置优先级# 默认 nice 值为 10nicemd5sum /dev/zero# 指定 nice 值nice-n5md5sum /dev/zero# ⛔ 普通用户只能设置正数 nice 值降低自己的优先级nice-n-5md5sum /dev/zero# 报错Permission denied# ✅ root 可以设置任意 nice 值nice-n-10md5sum /dev/zerorenice命令运行时修改优先级# 查看进程 PID 和 nice 值ps-opid,nice,command# 调整 nice 值renice-n555782# 55782 是进程 PID# ⛔ 普通用户只能升高 nice 值降低优先级不能降低renice-n-255782# 普通用户Permission deniedrenice-n-255782# root 用户成功在top中操作在top界面按r键 → 输入 PID → 输入新 nice 值即可动态调整4.3 实时调度策略chrtchrt是操作实时进程调度的利器# 查看各调度策略的优先级范围chrt-m# SCHED_OTHER min/max: 0/0 ← 非实时用 nice 值# SCHED_FIFO min/max: 1/99 ← 实时# SCHED_RR min/max: 1/99 ← 实时# SCHED_BATCH min/max: 0/0# SCHED_IDLE min/max: 0/0# 以 SCHED_RR 策略、优先级 5 启动进程chrt-r5md5sum /dev/zero# 查看进程的调度策略和实时优先级ps-opid,cls,rtprio,command# PID CLS RTPRIO COMMAND# 56225 RR 5 md5sum /dev/zero# 修改为 SCHED_FIFO、优先级 10chrt-f--pid1056225# 改回非实时调度chrt-o--pid0562255. 文件系统基本管理5.1 识别设备和文件系统Linux 中一切皆文件存储设备也不例外接口类型设备名示例SATA/SAS/USB/dev/sda,/dev/sdb虚拟磁盘 (virtio)/dev/vda,/dev/vdbNVMe SSD/dev/nvme0n1,/dev/nvme1n1SD/MMC/dev/mmcblk0,/dev/mmcblk1分区命名规则SATA/dev/sda1,/dev/sda2NVMe/dev/nvme0n1p1,/dev/nvme0n1p2虚拟磁盘/dev/vda1,/dev/vda2三大查看命令命令用途lsblk查看块设备结构树磁盘 → 分区 → LVM → 挂载点df -hT查看文件系统使用情况容量、已用、类型du -sh dir查看目录占用磁盘空间 实战揪出占用磁盘的胖子文件# 问题根分区快满了是谁干的# 方法一逐层排查du-sk/*|sort-n# 看根目录下谁最大 → /usr 最大du-sk/usr/*|sort-n# → /usr/share 最大du-sk/usr/share/*|sort-n# → /usr/share/doc 最大# ... 层层递进最终定位到罪魁祸首# 方法二一步到位查找 100M 的文件find/-size100M2/dev/nullLinux 哲学用各种小工具的灵活组合解决复杂问题而不是一个巨型程序包办一切。5.2 挂载和卸载文件系统挂载mount# 查看设备 UUIDblkid /dev/sdb# 三种挂载方式效果一样mount/dev/sdb /datamountUUIDf20547b2-df53-46e5-b526-a8744be26231/data# 验证df-h/data卸载umountumount/dev/sdb# 按设备卸载umount/data# 按挂载点卸载 “target is busy” 怎么办# umount 提示设备忙说明有进程正在用这个目录# 方法一lsof 查找占用进程lsof/data# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME# bash 1508 root cwd DIR 8,17 156 64 /data# 方法二fuser 查找占用进程fuser-m/data# /data: 1508c ← PID 1508c 表示当前目录在此# 退出目录后重新卸载cd~umount/data5.3 查找文件locate vs find特性locatefind速度⚡ 极快查数据库 实时扫描实时性❌ 依赖 updatedb 更新✅ 实时权限控制只显示用户有权限的需读取和执行权限适用场景按文件名模糊搜索复杂条件组合搜索locate 速查yuminstall-ymlocate updatedb# 先更新数据库locatepasswd# 模糊搜索locate-bpasswd# 只匹配文件名不含路径locate-ipasswd# 忽略大小写locate-cpasswd# 只显示计数locate-rhttp.*conf# 正则匹配find 完全指南find[路径][条件][动作]常用条件条件示例说明-name-name *.log按文件名区分大小写-iname-iname passwd按文件名忽略大小写-type-type d/-type f按类型目录/文件-user/-group-user laoma按属主/属组-perm-perm 764/-perm -4000按权限- 至少满足/ 任意满足-size-size 100M按大小 大于- 小于-mtime-mtime -7按修改时间-7 7天内条件组合# 逻辑与默认find.-name*.log-size1M# .log 文件 且 1M# 逻辑或find/-nouser-o-nogroup# 无属主 或 无属组# 逻辑非find/!-size-200M# 不小于 200M即 ≥200M常用动作# 直接删除find/-name*.tmp-delete# 详细列表find/etc-name*.conf-ls# 对找到的文件执行命令{} 代表找到的文件\; 表示命令结束find/-name*.log-execgzip{}\;# 批量复制find/-inum67160130-execcp-a{}./findfiles\; 今日总结今天的学习覆盖了 Linux 系统管理的四大核心领域┌─────────────────────────────────────────────────────┐ │ Linux 系统管理进阶 │ ├───────────────┬───────────────┬──────────────────────┤ │ 软件管理 │ ⏰ 任务调度 │ ⚙️ 系统底层 │ │ │ │ │ │ • 源码编译安装 │ • at 一次性 │ • 进程调度策略 │ │ • 自建YUM仓库 │ • crontab 周期│ • nice/renice 优先级 │ │ │ • 系统级任务 │ • chrt 实时调度 │ │ │ │ • 文件系统挂载/查找 │ └───────────────┴───────────────┴──────────────────────┘从能用到会用再到精通每一条命令背后都是对系统运行原理的理解。Keep Learning, Keep Hacking!
延伸阅读

更多相关文章

2026/9/14 22:30:27

工程伦理学习指南:从应试到实践,掌握伦理分析框架

1. 从“找答案”到“学方法”:工程伦理学习的本质回归最近在几个技术社区和高校论坛里,看到不少同学在讨论“雨课堂《工程伦理》期末答案”相关的话题。作为一个在工程领域摸爬滚打了十几年,也带过不少实习生、新人的“老油条”,看…

2026/9/7 6:34:20

如何三步搞定微信聊天记录永久保存:WechatBakTool终极备份指南

如何三步搞定微信聊天记录永久保存:WechatBakTool终极备份指南 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具,提供图形界面,解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/WechatBakTo…

2026/9/15 6:51:37

Diagram-Design工程化:Mermaid、SVG与HTML协同实践

1. 为什么“diagram-design”不是一张图的事,而是一套工程化思维你有没有遇到过这样的场景:产品经理甩来一张手绘流程草图,说“按这个做”;开发同事在 Slack 里发个截图:“这个 UML 类图谁画的?字段漏了 ge…

2026/9/15 6:51:37

图表设计实战指南:从结构化思维到draw.io架构图绘制

前几天帮团队评审一张系统架构图,密密麻麻的框、十几层嵌套、几十根箭头交错在一起,我盯着屏幕看了十分钟,愣是没找到主链路在哪里。这已经不是第一次了。大多数人对 diagram-design 的理解停留在“把方块和箭头摆整齐”,但真正的…

2026/9/15 6:51:37

提升工作效率的三大误区与实用方法论

1. 工作效率的本质与常见误区我见过太多人把"提高效率"简单理解为"加快手速"或"压缩休息时间",这其实是最大的认知偏差。真正的工作效率提升,本质上是单位时间内价值产出的最大化,而非机械地减少每项任务的耗时…

2026/9/15 6:51:37

Flutter+OpenHarmony实战:完整实现打砖块游戏与碰撞检测优化

打砖块是我做游戏开发练习时每次都会想先碰一遍的经典玩法,规则一句话能讲清楚:接住球,打碎砖,别让球掉下去。但真要把手感调到舒服、把关卡做得有层次,碰撞检测、物理反弹、难度曲线这些硬骨头一个都躲不掉。这次我把…

2026/9/15 6:46:37

Java final关键字:不可变、安全发布与并发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码