欢迎光临
我们一直在努力

Linux 计划任务 + 进程调度 + 文件系统

Linux 计划任务 + 进程调度 + 文件系统

本文详细讲解 linux 的 周期性计划任务、进程调度与优先级管理、文件系统与磁盘管理,兼顾操作命令+底层原理+易错排错,帮助建立完整的知识体系。


文章目录

  • Linux 计划任务 + 进程调度 + 文件系统
    • 第一章 Linux 周期性计划任务
      • 1.1 计划任务概述与 cron 整体架构
        • 什么是周期性计划任务
        • cron 三大组成部分
      • 1.2 用户级计划任务:crontab
        • 1.2.1 时间格式详解
          • 时间字段的通用语法
          • 示例对照
        • 1.2.2 常用命令与参数
        • 1.2.3 环境变量与特殊符号
          • 环境变量问题(新手第一大坑)
          • `%` 特殊符号
        • 1.2.4 任务输出与日志排错
          • 为什么 cron 日志里看不到报错
          • 查看报错的两个途径
      • 1.3 系统级计划任务
        • 1.3.1 /etc/crontab 与 /etc/cron.d/
          • 两者的区别
          • 语法差异
        • 1.3.2 anacron:保证执行的延时任务
          • 为什么需要 anacron
          • 工作原理
          • /etc/anacrontab 配置格式
        • 1.3.3 系统周期目录
      • 1.4 计划任务常见排错思路
    • 第二章 Linux 进程调度与优先级管理
      • 2.1 进程调度基本原理
        • 为什么需要进程调度
        • 两个核心概念
      • 2.2 调度器分类与策略
        • 2.2.1 实时调度器
        • 2.2.2 非实时调度器
        • 2.2.3 实时进程的 CPU 时间限制
      • 2.3 非实时进程优先级:nice 值
        • 2.3.1 nice 值的含义与范围
        • 2.3.2 nice:启动时指定优先级
          • 权限限制
        • 2.3.3 renice:运行中修改优先级
          • 权限限制
        • 2.3.4 继承特性
      • 2.4 实时调度管理:chrt 命令
      • 2.5 优先级体系总结
    • 第三章 Linux 文件系统与磁盘管理
      • 3.1 块设备与磁盘分区
        • 3.1.1 块设备概念与命名规则
        • 3.1.2 磁盘分区的意义
      • 3.2 文件系统基础
        • 3.2.1 什么是文件系统
        • 3.2.2 主流文件系统对比
      • 3.3 磁盘与文件系统查看工具
        • 3.3.1 lsblk:查看块设备层级结构
        • 3.3.2 df:查看文件系统空间使用率
        • 3.3.3 du:查看目录/文件实际占用空间
        • 3.3.4 df 和 du 结果不一致的经典原因
      • 3.4 挂载与卸载
        • 3.4.1 挂载的本质
        • 3.4.2 mount 命令与常用选项
        • 3.4.3 挂载遮蔽现象
        • 3.4.4 umount 卸载与 busy 问题处理
          • 常见报错:device is busy(设备正忙)
        • 3.4.5 特殊文件系统挂载案例
          • 挂载 NTFS 格式 U盘
          • 挂载 exFAT 格式 U盘
          • 挂载 ISO 镜像文件
      • 3.5 文件查找工具
        • 3.5.1 locate:数据库快速查找
        • 3.5.2 find:实时精准查找
          • 常用匹配条件
          • 常用动作
        • 3.5.3 实战:查找系统大文件
      • 补充:LVM 逻辑卷管理(扩展知识)

第一章 Linux 周期性计划任务

1.1 计划任务概述与 cron 整体架构

什么是周期性计划任务

按照预设的时间规则,自动、重复执行指定命令或脚本的机制,类似 Windows 的「任务计划程序」。常用于日志切割、数据备份、定时巡检、系统清理等自动化场景。

cron 三大组成部分

Linux 的计划任务由 cron 体系实现,包含三层结构:

  • crond 守护进程:后台常驻的系统服务,是计划任务的执行引擎,负责扫描配置、按时触发任务。
  • crontab 命令:用户管理自己计划任务的工具,用来编辑、查看、删除任务配置。
  • 配置文件:存放具体的任务规则,分为「用户级配置」和「系统级配置」两类。
  • 💡 核心区分:

    • 用户级任务:每个用户自己管理,互不干扰,存在 /var/spool/cron/用户名 文件中。
    • 系统级任务:管理员配置,用于系统全局维护,存放在 /etc/crontab 和 /etc/cron.d/ 目录下。

    1.2 用户级计划任务:crontab

    1.2.1 时间格式详解

    每条任务固定由 5个时间字段 + 1个命令字段 组成,顺序严格固定:

    分钟 小时 几号 月份 星期几 要执行的命令

    字段取值范围说明
    分钟 0-59 每小时的第几分钟执行
    小时 0-23 当天的第几个小时执行
    几号 1-31 当月的第几天执行
    月份 1-12 当年的第几月执行
    星期几 0-7 周几执行;0和7都代表周日,1代表周一
    时间字段的通用语法
    语法含义示例
    * 任意值,代表「每…都执行」 分钟位写* = 每分钟都执行
    x-y 连续范围 小时位 9-18 = 上午9点到下午6点之间
    x,y,z 离散列表 分钟位 5,15,30 = 第5、15、30分钟各执行一次
    */x 间隔x单位 分钟位 */5 = 每隔5分钟执行一次

    ⚠️ 重要易错点: 「几号」和「星期几」是逻辑或的关系,只要满足其中一个条件就会触发,而不是同时满足。 例如:0 12 15 * 3 不是「每月15号且周三才执行」,而是「每月15号 + 每周三」都会执行。

    示例对照

    # 每天凌晨2点30分执行备份脚本
    30 2 * * * /usr/local/bin/backup.sh

    # 工作日(周一到周五)上午9点整执行打卡脚本
    0 9 * * 1-5 /usr/local/bin/checkin.sh

    # 7月份每周五,9点到16点之间每5分钟执行一次
    */5 9-16 * Jul 5 echo "Time check"

    # 每隔2天的晚上11点58分执行日报脚本
    58 23 */2 * * /usr/local/bin/daily_report.sh

    1.2.2 常用命令与参数
    命令作用注意事项
    crontab -l 查看当前用户的所有计划任务 只看自己的,看不到其他用户
    crontab -e 编辑当前用户的计划任务 默认用 vi 编辑器,保存后自动生效
    crontab -r 删除当前用户所有计划任务 高危操作!没有回收站,删除即永久丢失
    crontab -u 用户名 root 专属,管理指定用户的任务 例:crontab -u hero -l 查看hero的任务
    crontab 文件名 用文件里的内容覆盖当前所有任务 批量导入配置用,会覆盖原有全部任务

    💡 新手建议: 不要用 crontab -r,想删除单条任务直接 crontab -e 进去注释或删除对应行即可,避免误删全部任务。

    1.2.3 环境变量与特殊符号
    环境变量问题(新手第一大坑)

    crontab 执行任务时,不会加载用户终端的完整环境变量,默认只有极简的 PATH,非常容易出现「终端手动跑没问题,cron 执行就报错找不到命令」。

    解决方法:

  • 命令里所有程序都写绝对路径,比如不用 date,用 /usr/bin/date。
  • 在 crontab 开头手动声明 PATH 变量:
  • PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

  • 脚本开头先加载环境配置文件:source /etc/profile。
  • % 特殊符号

    crontab 的命令中,% 有特殊含义:代表换行,% 后面的内容会作为命令的标准输入。 如果想表示普通的百分号,必须转义写成 \\%。

    1.2.4 任务输出与日志排错

    如果任务的命令没有手动重定向输出,那么所有的标准输出和错误输出,都会通过系统内部邮件发送给任务所属用户,而不会打印在终端。

    为什么 cron 日志里看不到报错

    /var/log/cron 只记录「调度动作本身」(什么时候触发了哪条命令),不记录命令的执行结果和报错。

    查看报错的两个途径
  • 用户系统邮件:cat /var/spool/mail/用户名,所有任务的输出和报错都会以邮件形式存在这里。
  • 手动重定向日志(推荐):写任务时主动把输出和错误都写入日志文件,方便排查:
  • */5 * * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

    `>>` 追加正常输出,`2>&1` 把错误输出也合并到同一个日志。


    1.3 系统级计划任务

    1.3.1 /etc/crontab 与 /etc/cron.d/
    两者的区别
    • /etc/crontab:系统主配置文件,不建议直接修改,系统更新 cron 包时可能会覆盖。
    • /etc/cron.d/:系统任务的标准存放目录,自定义任务在这里新建文件,不会被系统更新覆盖,软件包也会把自己的计划任务放到这里。
    语法差异

    系统级任务比用户级任务多一个用户字段,指定用哪个用户身份执行命令:

    分钟 小时 几号 月份 星期几 执行用户 命令

    示例:

    # 每小时第1分钟,以root身份执行/etc/cron.hourly下的所有脚本
    01 * * * * root run-parts /etc/cron.hourly

    1.3.2 anacron:保证执行的延时任务
    为什么需要 anacron

    普通 cron 是严格按时触发,如果机器关机错过了时间,任务就直接跳过了。anacron 就是为了解决这个问题:它保证任务一定会被执行,只是时间可能延迟。

    工作原理

    anacron 记录任务上次执行的时间,开机后检查如果超过周期没执行,就会等待指定延迟后补执行。 适合笔记本、不24小时开机的服务器,保证每日/每周/每月的维护任务不会因为关机漏掉。

    /etc/anacrontab 配置格式

    每行四个字段:

    周期(天) 延迟(分钟) 任务标识 执行命令

    示例:

    # 每天的任务,开机延迟5分钟执行,任务标识cron.daily
    1 5 cron.daily nice run-parts /etc/cron.daily
    # 每周的任务,开机延迟25分钟执行
    7 25 cron.weekly nice run-parts /etc/cron.weekly
    # 每月的任务,开机延迟45分钟执行
    @monthly 45 cron.monthly nice run-parts /etc/cron.monthly

    1.3.3 系统周期目录

    系统预置了四个任务目录,对应不同执行频率:

    • /etc/cron.hourly:每小时执行一次里面的所有脚本
    • /etc/cron.daily:每天执行一次
    • /etc/cron.weekly:每周执行一次
    • /etc/cron.monthly:每月执行一次

    由 run-parts 工具负责执行目录下的所有脚本,要求脚本必须有可执行权限,且文件名不能包含特殊字符。

    💡 小技巧: 想加一个每天执行的系统任务,直接把写好的脚本加执行权限丢进 /etc/cron.daily 即可,不用手动写 crontab 配置。


    1.4 计划任务常见排错思路

    任务不执行时,按以下顺序排查:

  • 看调度日志:tail /var/log/cron,确认任务有没有被触发。
    • 没触发:检查时间格式、crond服务是否运行。
      • 已触发:说明是命令执行问题,继续往下查。
  • 看用户邮件:cat /var/spool/mail/用户名,查看具体报错信息。
  • 检查路径:命令是否用了绝对路径,脚本是否有可执行权限。
  • 检查环境:脚本里的命令是否依赖特定环境变量,是否提前加载了配置文件。
  • 手动测试:把命令完整复制到终端手动执行,复现问题。

  • 第二章 Linux 进程调度与优先级管理

    2.1 进程调度基本原理

    为什么需要进程调度

    系统中的进程/线程数量,远多于 CPU 核心数量。Linux 通过分时复用的方式,让多个进程轮流使用 CPU,宏观上看起来像是「同时运行」。

    进程调度器就是内核的「调度总管」,负责决定:

    • 哪个进程接下来获得 CPU
    • 每个进程能使用多久 CPU
    • 优先级高的进程优先获得更多 CPU 时间
    两个核心概念
    • 时间片:每个进程一次能占用 CPU 的时长,通常 10-20ms。时间片用完就切换给下一个进程。
    • 优先级:进程获得 CPU 能力的等级。高优先级进程能获得更多 CPU 时间,低优先级进程在 CPU 繁忙时让步。

    2.2 调度器分类与策略

    Linux 调度器分为两大类:实时调度器 和 非实时调度器,实时调度器的所有进程,优先级永远高于非实时进程。

    2.2.1 实时调度器

    用于对响应速度要求极高的场景,比如工业控制、音视频处理。

    调度策略全称工作机制特点
    SCHED_FIFO 先入先出调度 进程一旦获得 CPU,就一直运行,直到主动放弃(IO阻塞)或被更高优先级进程抢占 相同优先级下,先来先服务,没有时间片
    SCHED_RR 轮询调度 相同优先级的进程,轮流分配相同的时间片,时间片用完就换下一个 公平轮转,是实时调度的默认策略

    实时优先级范围:1-99,数值越大优先级越高。

    2.2.2 非实时调度器

    系统中绝大多数普通进程使用的调度器。

    调度策略定位适用场景
    SCHED_NORMAL(SCHED_OTHER) 标准分时调度 绝大多数普通进程,系统默认
    SCHED_BATCH 批量调度 后台批量任务,减少调度频率,长时间运行,牺牲响应换吞吐量
    SCHED_IDLE 空闲调度 极低优先级,只有系统完全空闲时才运行,优先级比 nice 19 还低
    2.2.3 实时进程的 CPU 时间限制

    如果实时进程一直占满 CPU,系统其他普通进程(包括 SSH)都会卡死。Linux 通过两个 sysctl 参数做保护:

    • kernel.sched_rt_period_us:调度周期,默认 1000000 微秒(1秒)
    • kernel.sched_rt_runtime_us:实时进程在一个周期内最多能使用的 CPU 时间,默认 950000 微秒(0.95秒)

    也就是说,每秒至少预留 0.05 秒给非实时进程,保证系统基本响应。


    2.3 非实时进程优先级:nice 值

    2.3.1 nice 值的含义与范围

    nice 值是针对非实时进程的相对优先级,范围 -20 ~ 19。

    ⚠️ 最容易记反的点:

    • nice 值越高,优先级越低,进程越「谦让」,获得 CPU 能力越弱
    • nice 值越低,优先级越高,进程越「强势」,获得 CPU 能力越强
    • 默认值为 0

    只有当 CPU 资源紧张时,nice 值的差异才会体现;CPU 空闲时,所有进程都能跑满。

    2.3.2 nice:启动时指定优先级

    在启动程序时直接指定 nice 值:

    # 默认不加参数,nice 值加10(即优先级为10)
    nice md5sum /dev/zero &

    # 手动指定 nice 值
    nice -n -5 md5sum /dev/zero &

    权限限制
    • 普通用户:只能设置正数的 nice 值(降低自己进程的优先级),不能设置负数。
    • root 用户:可以设置 -20 ~ 19 任意值。
    2.3.3 renice:运行中修改优先级

    修改已经在运行的进程的 nice 值:

    # 把PID为1234的进程nice值改为5
    renice -n 5 1234

    # 按用户批量修改所有进程的优先级
    renice -n 10 -u hero

    权限限制
    • 普通用户:只能调高自己进程的 nice 值(降低优先级),不能调低。
    • root 用户:可以任意修改所有进程的 nice 值。
    2.3.4 继承特性

    子进程会继承父进程的 nice 值。比如在 bash 里启动的程序,nice 值和当前 bash 一致,默认都是 0。


    2.4 实时调度管理:chrt 命令

    chrt 用来查看和修改进程的调度策略与实时优先级,注意:它不能调整 nice 值,nice 和 chrt 是两套独立的体系。

    # 查看系统支持的调度策略和优先级范围
    chrt -m

    # 以RR调度、优先级5启动程序
    chrt -r 5 md5sum /dev/zero &

    # 修改运行中进程的调度策略为FIFO,优先级10
    chrt -f –pid 10 1234

    # 把进程改回普通非实时调度
    chrt -o –pid 0 1234


    2.5 优先级体系总结

    优先级从高到低:
    实时进程(优先级1-99) > 非实时进程(nice -20 ~ 19)

    • 优先级最低的实时进程,也比优先级最高的非实时进程优先级高。
    • nice 只在非实时进程内部有相对意义,和实时进程不在一个维度。

    第三章 Linux 文件系统与磁盘管理

    3.1 块设备与磁盘分区

    3.1.1 块设备概念与命名规则

    Linux 中所有存储设备都以「块设备文件」的形式存在于 /dev 目录下,由系统自动创建。

    不同接口的设备命名不同:

    设备接口命名格式说明
    SATA/SCSI/SAS/USB /dev/sda、/dev/sdb… 按识别顺序a、b、c排序,虚拟机常用的SCSI磁盘也用这个
    半虚拟化磁盘 /dev/vda、/dev/vdb… KVM等虚拟机的virtio磁盘,性能更好
    NVMe 固态硬盘 /dev/nvme0n1、/dev/nvme1n1… 第0个控制器第1个命名空间
    SD/MMC卡 /dev/mmcblk0 内存卡、嵌入式存储

    分区命名:在设备名后面加数字,比如 sda 的第一个分区是 sda1,第二个是 sda2。

    3.1.2 磁盘分区的意义

    分区就是把一块物理磁盘,逻辑上划分成多个独立的存储区域。

    为什么要分区,而不是整块盘直接用?

  • 数据隔离:系统、用户数据、日志分不同分区,一个分区满了不影响其他的。
  • 功能区分:启动分区、交换分区、数据分区各司其职。
  • 性能与安全:不同分区可以用不同的文件系统参数,损坏时影响范围更小。
  • 💡 补充:分区表不是必须的 Linux 支持直接在整块磁盘上创建文件系统(不分区),但不符合规范,兼容性差,生产环境永远先分区再使用。


    3.2 文件系统基础

    3.2.1 什么是文件系统

    磁盘本身只是一堆可以读写的扇区,只能存 0 和 1,它不知道什么是文件、目录、文件名。 文件系统就是一套「磁盘数据组织规则」,负责管理:

    • 文件怎么拆分存储到扇区
    • 怎么索引文件的位置(inode机制)
    • 空闲空间怎么分配和回收
    • 异常断电后怎么恢复数据

    「格式化」的本质,就是在分区里写入这套文件系统的管理结构(超级块、inode表、数据区等)。

    3.2.2 主流文件系统对比
    文件系统所属阵营核心特点典型场景缩容支持
    XFS Linux 高性能、大文件优化、支持在线扩容 CentOS默认、服务器数据盘 ❌ 只支持扩容,不支持缩容
    ext4 Linux 稳定成熟、功能全面、支持在线扩容缩容 通用Linux发行版 ✅ 支持
    NTFS Windows 权限管理完善、日志、压缩加密 Windows系统盘/数据盘 ✅ 支持
    FAT32 跨平台通用 兼容性极强、结构简单 老式U盘、内存卡 ❌ 原生不支持
    exFAT 跨平台通用 突破4GB单文件限制、轻量 现代U盘、移动硬盘 ❌ 原生不支持

    💡 跨平台兼容性: Windows 默认不认 XFS/ext4;Linux 默认不认 NTFS/exFAT,需要安装额外驱动。 只有 FAT32/exFAT 是全平台通用的移动存储格式。


    3.3 磁盘与文件系统查看工具

    3.3.1 lsblk:查看块设备层级结构

    作用:以树状结构展示所有块设备的层级关系、大小、类型、挂载点。

    lsblk

    输出字段说明:

    • NAME:设备/分区名称
    • SIZE:容量大小
    • TYPE:类型(disk磁盘/part分区/lvm逻辑卷/rom光驱)
    • MOUNTPOINT:挂载点

    最适合用来快速看清磁盘、分区、LVM逻辑卷的层级关系。

    3.3.2 df:查看文件系统空间使用率

    作用:查看所有已挂载文件系统的总容量、已用空间、剩余空间、使用率。

    常用参数:

    • -h:人性化显示单位(GB/MB),按1024进制
    • -H:按1000进制显示
    • -T:额外显示文件系统类型

    # 查看所有挂载点,带类型和人性化单位
    df -hT

    # 只看根分区
    df -h /

    3.3.3 du:查看目录/文件实际占用空间

    作用:统计目录或文件实际占用的磁盘空间大小。

    常用参数:

    • -s:只统计总大小,不列出子目录
    • -h:人性化显示单位

    # 查看/boot目录总大小
    du -sh /boot

    # 查看/etc下每个子目录大小,按大小排序
    du -sk /etc/* | sort -n

    3.3.4 df 和 du 结果不一致的经典原因

    经常出现 df 显示已用很多,但 du 统计文件加起来没那么大,核心原因: 已删除但仍被进程打开的文件:

    • 文件被删除后,目录里看不到了,du 不统计。
    • 但进程还占用着文件句柄,磁盘空间没有释放,df 仍然统计。

    解决方法:找到并重启占用文件的进程,空间就会释放。

    # 查找已删除但被占用的文件
    lsof | grep deleted


    3.4 挂载与卸载

    3.4.1 挂载的本质

    Linux 的文件系统是一棵从 / 开始的目录树。要使用一个磁盘分区的文件系统,必须把它「挂接」到目录树的某个空目录上,这个目录就叫挂载点。

    • 挂载前:挂载点只是根文件系统里一个普通的空目录。
    • 挂载后:访问挂载点目录,实际访问的就是磁盘分区里的内容。
    3.4.2 mount 命令与常用选项

    mount [选项] 设备路径 挂载点目录

    常用选项(-o 参数):

    • ro:只读挂载
    • rw:读写挂载(默认)
    • noexec:禁止在该分区执行二进制程序
    • remount:重新挂载,常用于修改挂载选项而不卸载

    # 只读挂载
    mount -o ro /dev/sdb1 /data

    # 重新挂载为读写
    mount -o remount,rw /data

    除了设备路径,也可以用 UUID 挂载,更稳定(设备名可能变,UUID 唯一):

    mount UUID="xxxx-xxxx" /data

    3.4.3 挂载遮蔽现象

    同一个挂载点可以挂载多个设备,但后挂载的会遮蔽先挂载的。

    • 访问挂载点时,只能看到最上层设备的内容。
    • 下层设备的数据不会丢失,卸载上层后会重新显露。
    • 写入的数据只会进入当前最上层的设备。

    卸载后挂载点目录回归普通目录,此时写入文件会落到父分区(通常是根分区),和外接设备无关。

    3.4.4 umount 卸载与 busy 问题处理

    # 两种写法都可以
    umount 设备路径
    umount 挂载点

    常见报错:device is busy(设备正忙)

    原因:有进程正在使用这个挂载点里的文件/目录,最常见的就是当前终端在挂载点目录里。

    排查与解决:

  • 先退出挂载点目录,再尝试卸载。
  • 查看哪个进程在占用:
  • lsof 挂载点路径
    fuser -m 挂载点路径

  • 结束对应进程,或者用 fuser -km 挂载点 强制杀死占用进程。
  • 3.4.5 特殊文件系统挂载案例
    挂载 NTFS 格式 U盘

    Linux 默认不识别 NTFS,需要安装驱动:

    yum install -y ntfs-3g
    mount.ntfs /dev/sdb1 /mnt

    挂载 exFAT 格式 U盘

    # 安装fuse-exfat驱动后挂载
    mount.exfat /dev/sdb1 /mnt

    挂载 ISO 镜像文件

    mount -o loop 镜像文件.iso /mnt

    loop 设备用来把文件模拟成块设备挂载。


    3.5 文件查找工具

    3.5.1 locate:数据库快速查找

    原理:系统维护一个文件路径数据库(mlocate.db),查找时直接查数据库,速度极快,但不是实时的。

    使用前准备:

    yum install -y mlocate
    updatedb # 更新数据库,新增文件需要更新才能查到

    常用参数:

    • -i:忽略大小写
    • -b:只匹配文件名,不匹配路径
    • -c:只返回匹配数量

    # 查找所有叫passwd的文件
    locate passwd

    # 忽略大小写查找
    locate -i PASSWD

    特点:快、适合找已知文件名;缺点:不实时、找不到刚创建的文件。

    3.5.2 find:实时精准查找

    原理:实时遍历指定目录下的所有文件,按条件匹配,功能强大但速度慢。

    find 查找路径 匹配条件 动作

    常用匹配条件
  • 按名称查找
  • # 精确匹配文件名
    find /etc -name passwd

    # 模糊匹配,忽略大小写
    find /etc -iname '*passwd*'

  • 按类型查找
    • f:普通文件
      • d:目录
      • l:软链接

      # 查找/etc下名字叫passwd的目录
      find /etc -name passwd -type d

  • 按大小查找 单位:c字节、kKB、MMB、GGB
    • +10M:大于10MB
    • -10M:小于10MB
    • 10M:等于10MB(近似取整)

    # 查找系统中大于100MB的文件
    find / -size +100M

  • 按时间查找
    • -mmin -10:10分钟内修改过
      • -mtime +7:7天前修改过
      • -newer 文件:比指定文件更新
  • 按权限查找
  • # 查找系统中所有suid权限的文件
    find / -perm -4000

  • 多条件组合
    • 逻辑与:默认,两个条件都满足
      • 逻辑或:-o
      • 逻辑非:!

      # 查找不属于任何用户或任何组的文件
      find / -nouser -o -nogroup

    常用动作
    • -ls:找到后显示详细信息
    • -delete:找到后直接删除
    • -exec 命令 {} \\;:找到后对文件执行命令,{}代表找到的文件

    # 找到所有.txt文件并复制到/tmp
    find . -name "*.txt" -exec cp {} /tmp \\;

    3.5.3 实战:查找系统大文件

    方法一:du 逐层排查

    # 从根目录开始,逐层定位大目录
    du -sk /* | sort -n
    du -sk /usr/* | sort -n
    du -sk /usr/share/* | sort -n

    方法二:find 直接查找

    # 查找根目录下大于1GB的文件
    find / -size +1G 2>/dev/null


    补充:LVM 逻辑卷管理(扩展知识)

    普通物理分区划分后大小固定,调整困难。LVM(逻辑卷管理器)在物理磁盘和文件系统之间加了一层抽象,实现空间的灵活管理。

    三层架构:

  • PV 物理卷:把物理分区/磁盘初始化为LVM可用的资源
  • VG 卷组:把多个PV合并成一个大的空间池
  • LV 逻辑卷:从卷组里按需划分的逻辑分区,用来格式化文件系统
  • 核心优势:在线动态扩容缩容、跨磁盘合并空间、快照备份,是服务器磁盘管理的标准方案。

    赞(0)
    未经允许不得转载:171主机测评 » Linux 计划任务 + 进程调度 + 文件系统
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址