定时任务调度
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等。
2.个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。
基本语法
crontab [选项]
常用选项
-e
编辑crontab定时任务
-l
查询crontab任务
-r
删除当前用户的所有crontab任务
-u
只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;
service crond restart #重启任务调度
占位符*的说明
项目 | 说明 | 范围 |
---|---|---|
第一个* | 分钟 | 0-59 |
第二个* | 小时 | 0-23 |
第三个* | 天 | 1-31 |
第四个* | 月份 | 1-12 |
第五个* | 一周中的星期几 | 0-7(0和7都代表星期日) |
案例1:
任务的要求:
设置任务调度文件:/etc/crontab
输入一段内容到调度文件,任务的内容为:ls –l /etc/ > /tmp/to.txt
每隔一分钟执行一次ls –l /etc/ > /tmp/to.txt
步骤:
1)crontab - e 进入编辑
2)输入 */ * * * * ls -l /etc/ > /tmp/to.txt,保存退出。
在每一分钟都会自动的调用 ls -l /etc/ >> /tmp/to.txt这个命令。
案例2:
用dmtsai的身份在每天的12:00发信给自己
crontab -e
0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
#分 时 日 月 周 |《==============命令行=======================》|(注释)
特殊符号的说明
* | 代表任何时间,比如第一个占位符为“*”则代表每小时的每分钟都执行一次 |
---|---|
, | 代表不连续的时间,比如“0 8,12,16 * * *”命令,代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
- | 代表连续的时间范围,比如“0 5 * * 1-6”命令,代表在周一到周六的5点0分都执行 |
*/n | 代表每隔多久执行一次,比如“*/10 * * * *”命令,代表每隔10分钟就执行一遍命令 |
练习
命令 | 含义 |
---|---|
45 22 * * * | 在22点45分执行命令 |
0 17 * * 1 | 每周一的17点0分执行命令 |
0 5 1,15 * * | 每月1号和15号的5点0分执行命令 |
40 4 * * 1-5 | 每周一到周五的4点40分执行命令 |
*/10 4 * * * | 每天的4点,每隔10分钟执行一次命令 |
0 0 1,15 * 1 | 每月1号和15号,每周一的0点0分都会执行命令。 |
注意:星期几和几号最好不要同时出现,因为他们定义的都是天,非常容易让管理员混乱
案例3:
每隔 1 分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
步骤:
- 先编写一个文件 /home/mytask1.sh 内容:
date >> /tmp/mydate
- 给 mytask1.sh 一个可以执行权限
chmod 744 /home/mytask1.sh
- 终端输入 crontab -e
- 输入:
*/1 * * * * /home/mytask1.sh
5)成功
案例4:
每隔 1 分钟, 将当前日期和日历都追加到 /home/mycal 文件中
步骤:
- 先编写一个文件 /home/mycal.sh 内容:
date >> /tmp/mycal
cal >> /tmp/mycal
- 给 mytask1.sh 一个可以执行权限
chmod 744 /home/mytask1.sh
- 终端输入 crontab -e
- 输入:
*/1 * * * * /home/mycal.sh
案例5:
每天凌晨 2:00 将 mysql 数据库 testdb ,备份到文件mydb.bak中.
步骤:
- 先编写一个文件 /home/mytask3.sh
/usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak
- 给 mytask3.sh 一个可以执行权限
chmod 744 /home/mytask3.sh
- crontab -e
0 2 * * * /home/mytask3.sh
- 成功
磁盘管理
硬盘:
整颗磁盘的组成主要有:
- 圆形的磁盘盘(主要记录数据的部分);
- 机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据);
- 轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据。
磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。
- MBR分区表中,第一个扇区最重要,里面有:主要开机区及分区表,其中 开机区占有 446 bytes,而分区表则占有 64 bytes。最多支持四个主分区、系统只能安装在主分区、扩展分区要占一个主分区、MBR最大支持2TB,但拥有最好的兼容性。
- GPT 分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过 2TB。支持无限多个主分区(说是这么说,但是操作系统可能会限制,比如Windows下最多128个分区)、最大支持18EB的超大容量、Windows7 64以后支持gtp。
分类
-
Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘。
-
对于 IDE 硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指 IDE 硬盘了。“x”为盘号(a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘),“~”代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例如,hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区,hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。
-
对于 SCSI 硬盘则标识为“sdx~”,SCSI 硬盘是用“sd”来表示分区所在设备的类型的,其余则和 IDE 硬盘的表示方法一样。
windows的分区
Linux 分区
- Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分。
- Linux 采用了一种叫“挂载”的处理方法,它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
我们知道整个Linux系统使用的是目录树架构,但是我们的文件数据其实是放置在磁盘分区槽当中的, 现在的问题是『如何结合目录树的架构与磁盘内的数据』呢? 这个时候就牵扯到『挂载』。
『挂载』就是利用一个目录当成进入点,将磁盘分区槽的数据放置在该目录下; 也就是说,进入该目录就可以读取该分区槽的意思。这个动作我们称为『挂载』,那个进入点的目录我们称为『挂载点』。 由于整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分区槽的。 至于其他的目录则可依用户自己的需求来给予挂载到不同的分区槽。我们以下图来作为一个说明:
图中假设我的硬盘分为两槽,partition 1是挂载到根目录,至于partition 2则是挂载到/home这个目录。 这也就是说,当我的数据放置在/home内的各次目录时,数据是放置到partition 2的,如果不是放在/home底下的目录, 那么数据就会被放置到partition 1了!
想一想,我的计算机系统如何读取光盘内的数据呢?在Windows里面使用的是『光驱』的代号方式处理(假设为E槽时), 但在Linux底下我们依旧使用目录树喔!在默认的情况下,Linux是将光驱的数据放置到/media/cdrom里头去的。 如果光盘片里面有个文件文件名为『我的文件』时,那么这个文件是在哪里?
答:
windows: 桌面\我的计算机\E:\我的文件
Linux: /media/cdrom/我的文件
查看当前系统的分区情况
指令
lsblk [-f ]
案例:添加硬盘【重要】
需求:给Linux 系统增加一个新的硬盘,并且挂载到/home/newdisk
原理:新增一块硬盘sdb1,并挂载到/home/newdisk,此时对/home/newdisk的操作其实就是在操作sdb1这块硬盘。
步骤:
-
虚拟机添加名为sdb的硬盘
注意: 当添加硬盘后使用 lsblk -f 发现并没有叫sdb的硬盘,需要重启才能看到。 -
分区
- 分区命令
fdisk 硬盘位置
- 开始对/sdb 分区
*m 显示命令列表
*p 显示磁盘分区 与fdisk -l效果相同
*n 新增分区
*d 删除分区
*w 写入并退出
说明: 开始分区后输入 n,新增分区,然后选择 p ,分区类型为主分区。两次回车默认剩余全部空间。最后输入 w 写入分区并退出,若不保存退出输入 q。
-
格式化磁盘
分区命令:mkfs -t ext4 硬盘位置
其中 ext4 是分区类型 -
挂载: 将一个分区与一个目录联系起来
• mount 设备名称 挂载目录
• 例如: mount /dev/sdb /newdisk
• umount 设备名称 或者 挂载目录
• 例如: umount /dev/sdb 或 者 umount /newdisk -
永久挂载
通过修改/etc/fstab 实现挂载添加。完成后 执行 mount –a 即刻生效。
磁盘情况查询
查询系统整体磁盘使用情况
df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
基本语法
df [选项] [目录或文件名]
选项与参数:
-a
:列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k
:以 KBytes 的容量显示各文件系统;
-m
:以 MBytes 的容量显示各文件系统;
-h
:以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H
:以 M=1000K 取代 M=1024K 的进位方式;
-T
:显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i
:不用硬盘容量,而以 inode 的数量来显示
应用实例
案例:查询系统整体磁盘使用情况。
首先将系统内所有的文件系统列出来,然后将容量结果以易读的容量格式显示出来。
查询指定目录的磁盘占用情况
du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。
语法:
du [选项] 文件或目录名称
选项与参数:
-a
:列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h
:以人们较易读的容量格式 (G/M) 显示;
-c
: 列出明细的同时,增加汇总值;
-s
:列出总量而已,而不列出每个各别的目录占用容量;
-S
:不包括子目录下的总计,与 -s 有点差别。
-k
:以 KBytes 列出容量显示;
-m
:以 MBytes 列出容量显示;
--max-depth=1
子目录深度;
案例:
查询 /redis-4.0.8 目录的磁盘占用情况,深度为 1
只列出当前目录下的所有文件夹容量(包括隐藏文件夹):
du
将文件的容量也列出来
du -a
检查根目录底下每个目录所占用的容量
du -sm /*
统计/home 文件夹下文件的个数
ls -l /home | grep "^-" | wc -l
统计/root文件夹下文件的个数
ls -l /home | grep "^d" | wc -l
统计/home文件夹下文件的个数,包括子文件夹下的
ls -lR /home | grep "^-" | wc -l
统计文件夹下目录的个数,包括子文件夹里的
ls -lR /home | grep "^d" | wc -l
以树状显示目录结构
tree