《Linux基础》05. 定时任务调度 · 磁盘分区与挂载
本文以 CentOS 7.6 为例。
1:定时任务调度
任务调度是指系统在某个时间执行特定的命令或程序。
任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等。
- 用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。
1.1:crontab
功能描述:用来设置定期执行任务。定时任务以类似文本的形式保存,称为时程表。
任务调度配置文件:/etc/crontab
重启任务调度:service crond restart
基本语法:crontab [选项]
常用选项:
参数 | 说明 |
---|---|
-l |
查询定时任务,列出时程表。 |
-e |
编辑个人定时任务,执行文本编辑器(默认为 vi 编辑器)来设定时程表。 |
-r |
删除当前用户所有定时任务,即清空时程表。 |
编辑时程表时,任务可为命令,也可为 shell 脚本。另外,涉及到路径,最好使用绝对路径。
时程表占位符说明:
占位符 | 含义 | 范围 |
---|---|---|
第一个【* 】 |
分钟 | 0 ~ 59 |
第二个【* 】 |
小时 | 0 ~ 23 |
第三个【* 】 |
一个月中的第几天 | 1 ~ 31 |
第四个【* 】 |
月份 | 1 ~ 12 |
第五个【* 】 |
一周当中的星期几 | 0 ~ 6(0为星期天) |
特殊符号说明:
特殊符号 | 含义 |
---|---|
【* 】 |
代表任何时间。比如第一个 “ * ” 就代表每分钟都执行一次。 |
【, 】 |
代表不连续的时间。如 “ 0 8,12,16 * * * ” 就代表在每天的 8:00,12:00,16:00 都执行一次。 |
【- 】 |
代表连续的时间范围。如 “ 30 5 * * 1-6 ” 就代表在周一到周六的凌晨 5:30 执行。 |
【*/n 】 |
代表每隔多久执行一次。如 “ */10 * * * * ” 就代表每隔 10 分钟执行一次。 |
时间执行示例:
1 | * * * * * 每分钟定时执行一次 |
示例:
1 | /* |
1.2:at
功能描述:一次性定时计划任务。默认从标准输入读取要执行的命令。(并非所有 Linux 发行版都自带 at 命令)
at 的守护进程 atd 会以后台模式运行,检查作业队列来运行。
默认情况下,atd 守护进程每 60 秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
在使用 at 命令的时候,一定要保证 atd 进程的启动 , 可以使用相关指令来查看。
检测 atd 是否在运行:ps -ef | grep atd
查看未执行的任务:atq
查询到的第一列即为任务编号。
删除未执行的任务:atrm <编号>
基本语法:at [选项]
常用选项:
参数 | 说明 |
---|---|
时间 |
以标准输入(命令行)来输入定时任务。需要按两遍 Ctrl + D 来结束输入。 |
-I |
atq 别名,相当于 atq 指令。 |
-d |
atrm 别名,相当于 atrm 指令。 |
-v |
显示任务将被执行的时间。 |
-t <时间参数> |
以时间参数的形式提交要运行的任务。 |
-f <文件> |
从指定文件读入任务而不是从标准输入读入。 |
指定时间的方法:
- 接受
hh:mm
(小时:分钟)式的时间指定。假如该时间在当天已过去,那就放在第二天执行。例如:at 04:00
。 - 使用
midnight
(深夜),noon
(中午),teatime
(饮茶时间,一般是下午 4 点)等比较模糊的词语来指定时间。 - 采用 12 小时计时制,即在时间后面加上
AM
(上午)或PM
(下午)来说明是上午还是下午。例如:at 12pm
。 - 使用相对计时法。指定格式为:
now + 数字 时间单位
,now 就是时间(默认当前,可自己设定),时间单位能够是minutes
(分钟)、hours
(小时)、days
(天)、weeks
(星期)。例如:at now + 5 minutes
、at 5pm + 5 days
。 - 直接使用
today
(今天)、tomorrow
(明天)来指定完成命令的时间。 - 指定命令执行的具体日期,指定格式为
month day
(月 日)或mm/dd/yy
(月/日/年)或dd.mm.yy
(日.月.年),指定的日期必须跟在指定时间的后面。例如:at 04:00 2021-03-1
比较抽象。。。由于非常复杂且不常用,这里只举几个简单例子。
示例:
1 | /* |
2:磁盘分区&挂载
2.1:原理介绍
Linux 无论磁盘有几个分区,分给哪一目录使用,归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux 中每个分区都是整个文件系统的一部分。
Linux 采用了一种叫 “ 载入 ” 的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来(挂载)。这时载入的一个分区的存储空间与一个目录(挂载点)对应。
2.2:硬盘说明
Linux 硬盘分 IDE 硬盘和 SCSI 硬盘。目前基本上是 SCSI 硬盘。
- IDE 硬盘
对于 IDE 硬盘,驱动器标识符为 “ hdx~
”。
其中 “ hd ” 表明分区所在设备的类型是 IDE 硬盘。
“ x ” 为盘号(a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘)。
“ ~ ” 代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。
例:
hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区
hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。
- SCSI 硬盘
对于 SCSI 硬盘,标识符为 “ sdx~
”。
用 “ sd ” 来表示分区所在设备的类型是 SCSI 硬盘。
其余则和 IDE 硬盘的表示方法一样。
2.3:磁盘目录情况查询
2.3.1:lsblk
功能描述:查看设备挂载情况,列出所有可用块设备的信息。(list block)
基本语法:lsblk [选项]
常用选项:
参数 | 说明 |
---|---|
-a |
显示所有设备。(不加选项,默认为此选项) |
-f |
显示文件系统信息。 |
示例:
参数说明:
- NAME:块设备名与分区情况。
- MAJ:MIN:表示主要和次要设备号。
- RM:表示设备是否为可移动设备。(1 为可移动设备)
- SIZE:设备的容量大小信息。
- RO:设备是否为只读。(0 代表不是只读的)
- TYPE:表示块设备是否是磁盘或磁盘上的一个分区。(如上图,sda 为磁盘。sda1、sda2、sda3 为 sda 分区。sr0 为只读存储 rom)
- MOUNTPOINT:挂载点。
参数说明:
- NAME:块设备名与分区情况。
- FSTYPE:文件类型。
- UUID:分区 40 位唯一标识符。
- MOUNTPOINT:挂载点。
2.3.2:df
功能描述:查询系统整体磁盘使用情况。(disk free)
基本语法:df [选项] [<path>]
常用选项:
参数 | 说明 |
---|---|
-h |
使用便于人类可读的格式列出信息。 |
-H |
与 -h 类似,但是以 1000 为换算单位而不是用 1024。 |
示例:
2.3.3:du
功能描述:查询指定目录或文件的磁盘占用情况。(disk usage)
基本语法:du [选项] [<path>]
常用选项:
参数 | 说明 |
---|---|
-h |
使用便于人类可读的格式列出信息。 |
-H |
与 -h 类似,但是以 1000 为换算单位而不是用 1024。 |
-s |
仅显示占用大小汇总。 |
-a |
列出包含文件在内的大小 |
-c |
除了显示目录或文件的大小外,也显示占用大小的总和。 |
--max-depth=<num> |
统计的子目录深度,超过指定层数的目录后,予以忽略。 |
示例:
2.3.4:tree
功能描述:以树状图列出目录的内容。(并非所有 Linux 发行版都自带)
基本语法:tree [选项] <目录>
常用选项:
参数 | 说明 |
---|---|
-a |
显示所有文件和目录。 |
-C |
在文件和目录清单加上色彩,便于区分各种类型。 |
-s |
列出文件或目录大小。 |
-t |
用文件和目录的更改时间排序。 |
2.3.5:其他查看指令示例
1 | 统计 /opt/ 目录下文件的个数 |
2.4:分区&挂载
2.4.1:fdisk
功能描述:一个创建和维护分区表的程序,即可用来分区。
基本语法:fdisk [选项]
常用选项:
参数 | 说明 |
---|---|
/dev/硬盘 |
以命令的方式进行硬盘分区处理。 |
-l |
查看分区情况。 |
分区时选项说明:
选项 | 说明 |
---|---|
m |
显示菜单和帮助信息。 |
p |
显示磁盘分区。同 fdisk -l。 |
n |
新建分区。 |
d |
删除分区。 |
q |
退出不保存。 |
w |
保存修改并退出。 |
示例:
1 | 对 /sdb 分区 |
2.4.2:mkfs
功能描述:用于在特定的分区上建立 Linux 文件系统,即格式化。(make file system)
基本语法:mkfs [选项] /dev/磁盘分区
常用选项:
参数 | 说明 |
---|---|
-t <分区类型> |
将磁盘分区格式化为指定格式。 |
示例:
1 | 将 sdb1 分区格式化为 ext4 格式 |
2.4.3:mount
功能描述:用于挂载 Linux 系统外的文件。即将一个分区与一个目录联系起来。
注:以命令行的方式操作,重启后会失效。如需永久生效,要在 /etc/fstab 配置文件中编辑。
基本语法:mount [选项] <磁盘分区> <挂载目录>
常用选项:
参数 | 说明 |
---|---|
-o ro |
以只读模式挂上。 |
-o rw |
以可读写模式挂上。(默认为此) |
-a |
将 /etc/fstab 中的定义立即生效。 |
示例:
1 | 将 /dev/sdb1 以只读模式挂在 /newdisk/ 之下。 |
2.4.4:umount
功能描述:用于卸除文件系统。即移除挂载。(unmount)
注:以命令行的方式操作,重启后会失效。如需永久生效,要在 /etc/fstab 配置文件中编辑。
基本语法:umount <name>
“ name ” 可以用分区名称或挂载点。
示例:
1 | 将上例中 sdb1 卸载。 |
2.4.5:相关配置文件
有关挂载的配置,保存在 /etc/fstab 文件。
可通过编辑此文件来改变挂载。
可用分区 UUID 或路径进行挂载。
示例:
将 /dev/sdb1 挂在 /newdisk/ 之下。
2.5:挂载案例
这里以增加一块硬盘为例(虚拟机进行),进行磁盘分区、挂载、卸载。
总体步骤:
- 添加硬盘。
- 给硬盘分区。
- 格式化。
- 挂载。
2.5.1:虚拟机添加硬盘
在设备列表里添加硬盘,然后只需一直【下一步】,只有选择磁盘大小的地方需要修改,直到完成。然后重启系统才能识别。
可以看到硬盘为 sdb。还没有分区。
2.5.2:硬盘分区
给添加的硬盘分区。这里为了方便,只分一个区。
1 | fdisk /dev/sdb |
输入 n
,新增分区;然后输入 p
(分区类型为主分区);两次【回车】默认分配剩余全部空间。最后输入 w
,写入分区并退出。分区完成。
可以看到有了一个分区。
2.5.3:格式化
新增分区需格式化后才能分配 UUID。
1 | mkfs -t ext4 /dev/sdb1 |
格式化后分配了 UUID。
2.5.4:挂载
将 /dev/sdb1 挂在 /newdisk/ 之下。/newdisk/ 即为挂载点,挂载点可随意更改。
1 | mount /dev/sdb1 /newdisk |
如需永久挂载,只需在 /etc/fstab 中配置。
不祈多积,多文以为富。
——《礼记 · 儒行》