第4章 vim编辑器与shell 命令脚本
Linux中的一切都是文件
部署一个服务,就是在修改服务的配置文件
Vim编辑器 是Vi编辑器的提升版本
命令模式:a、i、o 进入输入模式
末行模式:Esc键键入命令模式
vim vi
vim编辑器是vi编辑器的提升版本
vim 带有着色的功能
命令模式:复制、剪切、粘贴、搜索等等
输入模式:随意对文件进行内容编辑
末行模式:保存、退出、设置编辑环境
进入编辑文件后,默认是在命令模式
Vim中常用的命令
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的5行
yy 复制光标所在整行
5yy 复制从光标处开始的5行
u 撤销上一步的操作
p 把之前删除(dd)或复制(yy)过的数据粘贴到光标后面
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
末行模式中可用的命令
:w 保存
:q 退出
:q! 强制退出(放弃对文档的 修改内容)
:wq! 强制保存退出
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个one 替换成two
:s/one/two/g 将当前光标所在行的所有one 替换成two
:%s/one/two/g 将当前光标所在行的所有one 替换成two
?字符串
/字符串
4.1.2 配置主机名称
[root@localhost 桌面]# vim /etc/hostname
localhost.localdomain
#linuxprobe.com
[root@localhost 桌面]# cat /etc/hostname
localhost.localdomain
#linuxprobe.com
4.1.3 配置网卡信息
cd /etc/sysconfig/network-scripts/
4.1.4配置Yum软件仓库
1、cd /etc/yum.repos.d/ 进入Yum软件仓库的配置文件
2、vim rhel17.repo 创建新的配置文件(rhel17.repo)
3、按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中
4、使用"Yum ×××tall httpd -y”命令检查Yum软件仓库是否已经可用。
[root@localhost 桌面]# vim /etc/yum.repos.d/yumwenjian.repo
进入Yum软件仓库的配置文件
[rhel]
name=rhel7
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
创建挂载点进行挂载操作,并设置成开机自动挂载
尝试使用Yum软件仓库来安装web服务。
4.2 编写脚本
1:脚本声明 哪个程序可以懂 bash #!/bin/bash
2:脚本注释 #sdkasodka 不执行 可以有可以没有 某一程序或某一段代码suan的解释
3:脚本命令 Linux系统命令即是脚本命令
执行脚本
1、bash 脚本名称.sh
2、./脚本名称.sh
4.2.1 编写脚本
[root@linuxprobe ~]# vim xiaofeng1.sh
[root@linuxprobe ~]# cat xiaofeng1.sh
#!/bin/bash
#lianxi jiaoben shiyong
pwd
ls
ll
top
[root@linuxprobe ~]# bash xiaofeng1.sh
/root
anaconda-ks.cfg xiaofeng1.sh 公共 图片 音乐
initial-setup-ks.cfg xiaolu.txt 模板 文档 桌面
practise xiaoxiao 视频 下载
xiaofeng1.sh:行5: ll: 未找到命令
top - 16:11:54 up 4:14, 2 users, load average: 0.61, 0.24, 0.1
Tasks: 494 total, 1 running, 493 sleeping, 0 stopped, 0 zom
%Cpu(s): 19.4 us, 1.8 sy, 0.0 ni, 78.7 id, 0.0 wa, 0.1 hi, 0
KiB Mem: 2035648 total, 1043932 used, 991716 free, 920
KiB Swap: 2097148 total, 0 used, 2097148 free. 328880
PID USER PR NI VIRT RES SHR S %CPU %MEM
2468 root 20 0 1816144 294852 42416 S 80.1 14.5
1186 root 20 0 219796 33704 7500 S 8.9 1.7
5392 root 20 0 789836 24172 14224 S 4.3 1.2
762 root 20 0 0 0 0 S 1.0 0.0
137 root 20 0 0 0 0 S 0.3 0.0
1032 root 20 0 267352 4320 3480 S 0.3 0.2
2603 root 20 0 346920 17252 13692 S 0.3 0.8
3372 root 20 0 0 0 0 S 0.3 0.0
5938 root 20 0 123924 1932 1156 R 0.3 0.1
1 root 20 0 52924 6800 3768 S 0.0 0.3
2 root 20 0 0 0 0 S 0.0 0.0
3 root 20 0 0 0 0 S 0.0 0.0
5 root 0 -20 0 0 0 S 0.0 0.0
[root@localhost ~]# vim xiaofeng1.sh
[root@localhost ~]# bash xiaofeng1.sh
uname -a :
Linux localhost.localdomain
#linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
pwd :
/root
ls :
bianji etc ip.txt xiaolu.txt 视频 下载
CheckHosts.sh etc.tar.gz practise 公共 图片 音乐
checkkeys.sh guess.sh xiaofeng1.sh 模板 文档 桌面
uptime :
01:20:37 up 18 min, 2 users, load average: 0.37, 0.43, 0.32
[root@localhost ~]# cp xiaofeng1.sh jiaobenlianxi.sh
[root@localhost ~]# ls
bianji etc.tar.gz practise 模板 下载
CheckHosts.sh guess.sh xiaofeng1.sh 视频 音乐
checkkeys.sh ip.txt xiaolu.txt 图片 桌面
etc jiaobenlianxi.sh 公共 文档
[root@localhost ~]# rm -f xiaofeng1.sh
[root@localhost ~]# ls
bianji etc ip.txt xiaolu.txt 视频 下载
CheckHosts.sh etc.tar.gz jiaobenlianxi.sh 公共 图片 音乐
checkkeys.sh guess.sh practise 模板 文档 桌面
[root@localhost ~]# cat jiaobenlianxi.sh
#!/bin/bash
#lianxi jiaoben shiyong
echo "uname -a :"
uname -a
echo "pwd :"
pwd
echo "ls :"
ls
echo "uptime :"
uptime
4.2.2接收用户的参数
变量
$0指脚本名称本身
$#总共接收到多少参数
$*分别接收到参数有哪些
$1,$3,$5,第1个参数,第3个参数,第5个参数的值是什么
[root@localhost ~]# vim jiaobencanshu.sh
[root@localhost ~]# cat jiaobencanshu.sh
#!/bin/bash
jiaoben canshu lianxi
echo "$0"
echo "$#,$*"
echo "$1,$3,$5"
[root@localhost ~]# bash jiaobencanshu.sh a b c d e f g h
jiaobencanshu.sh
8,a b c d e f g h
a,c,e
1:接收用户输入的参数
2:根据用户输入的参数做出判断
4.2.3判断用户的参数
条件测试语句:
文件测试语句:
逻辑测试语句:
整数值比较语句:
字符串比较语句:
文件测试参数:
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
判断/home是否为一个目录类型的文件
[root@localhost ~]# [ -d /home ]
[root@localhost ~]# echo $? #判断上一条语句是否执行成功,若成功,返回0
0
判断/etc/fstab是否为一般文件,如果返回值为0,则代表文件存在,且为一般文件:
[root@localhost ~]# [ -f /home ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -f /etc/fstab ]
[root@localhost ~]# echo $?
0
逻辑语句
测试语句 && 命令 逻辑的与
测试语句 || 命令 逻辑的或
测试语句 ! 命令 逻辑的非
逻辑的与 &&:当成功的时候,则执行后面语句
[root@localhost ~]# [ -f /etc/fstab ] && echo $?
0
逻辑的或 ||:当成功的时候,则执行后面语句
[root@localhost ~]# [ -d /etc/fstab ] || echo $?
1
[root@localhost ~]# [ $USER=root ] && echo "admin" || echo "user"
admin
[root@localhost ~]# su linuxprobe
[linuxprobe@localhost root]$ [ $USER=root ] && echo "admin" || echo "user"
admin
逻辑的非 !:当成功-->取反值,失败;当失败-->取反值,成功;
[root@localhost ~]# [ ! $USER = root ] && echo "user"
[root@localhost ~]# su linuxprobe
[linuxprobe@localhost root]$ [ ! $USER = root ] && echo "user"
user
管理员叫做root用户
逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。例如在Shell终端中逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令,因此可以用来判断/dev/cdrom文件是否存在,若存在则输出Exist字样。
[root@linuxprobe ~]# [ -e /dev/cdrom ] && echo "Exist"
Exist
逻辑“或”,它在Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令,因此可以用来结合系统环境变量USER来判断当前登录的用户是否为非管理员身份:
[root@linuxprobe ~]# echo $USER
root
[root@linuxprobe ~]# [ $USER = root ] || echo "user"
[root@linuxprobe ~]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ [ $USER = root ] || echo "user"
user
当前我们正在登录的即为管理员用户—root。下面这个示例的执行顺序是,,先判断当前登录用户的USER变量名称是否等于root,然后用逻辑运算符“非”进行取反操作,效果就变成了判断当前登录的用户是否为非管理员用户了。最后若条件成立则会根据逻辑“与”运算符输出user字样;或条件不满足则会通过逻辑“或”运算符输出root字样,而如果前面的&&不成立才会执行后面的||符号。
整数比较运算符
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否 等于或小于
-ge 是否大于或等于
[root@localhost ~]# [ 10 > 5 ] && echo $?
0
[root@localhost ~]# [ 10 > 15 ] && echo $?
0
[root@localhost ~]# [ 10 -gt 8 ] && echo "right" || echo "wrong"
right
[root@localhost ~]# [ 10 -gt 15 ] && echo "right" || echo "wrong"
wrong
[root@localhost ~]# [ 10 -lt 8 ] && echo "right" || echo "wrong"
wrong
[root@localhost ~]# [ 10 -lt 16 ] && echo "right" || echo "wrong"
做内存报警的小程序:
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 1987 893 1094 9 0 315
-/+ buffers/cache: 577 1410
Swap: 2047 0 2047
[root@localhost ~]# free -m | grep Mem:
Mem: 1987 893 1094 9 0 315
[root@localhost ~]# free -m | grep Mem: | awk '{ print $4 }'
1094
[root@localhost ~]# OREZ=free -m | grep Mem: | awk '{ print $4 }'
[root@localhost ~]# echo $OREZ
1090
[root@localhost ~]# [ $OREZ -lt 1024 ] && echo "neicunchognzu" || echo "neicunbuzu"
[root@localhost ~]# [ $OREZ -lt 1024 ] && echo "baojing" | mail -s "subjiect " linuxprobe
查看内存不能使用量
awk 是正则表达式
free命令,它可以用来获取当前系统正在使用及可用的内存量信息。接下来先使用free -m命令查看内存使用量情况(单位为MB),然后通过grep Mem:命令过滤出剩余内存量的行,再用awk '{print $4}'命令只保留第四列,最后用FreeMem=语句
的方式把语句内执行的结果赋值给变量。
这个演示确实有些难度,但看懂后会觉得很有意思,没准在运维工作中也会用得上。
[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 1826 1244 582 9 1 413
-/+ buffers/cache: 830 996
Swap: 2047 0 2047
[root@linuxprobe ~]# free -m | grep Mem:
Mem: 1826 1244 582 9
[root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'
582
[root@linuxprobe ~]# FreeMem=free -m | grep Mem: | awk '{print $4}'
[root@linuxprobe ~]# echo $FreeMem
582
[ free -m | grep Mem: awk '{print $4}'
-lt 1024 ] && echo
"Insufficient Memory"
我们使用整数运算符来判断内存可用量的值是否小于1024,若小于则会提示“Insufficient Memory”(内存不足)的字样:
[ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
[ free -m | grep Mem: awk '{print $4}'
-lt 1024 ] && mail -s memory root@linuxprobe.com
当内存达到某个值的时候,邮件发出。
字符串比较语句用于判断测试字符串是否为空值
操作符
作用
比较字符串内容是否相同
!=
比较字符串内容是否不同
-z
判断字符串内容是否为空
接下来通过判断String变量是否为空值,进而判断是否定义了这个变量:
[root@linuxprobe ~]# [ -z $String ]
[root@linuxprobe ~]# echo $?
04.3 流程控制语句
4.3.1 if条件测试语句
if 如果
判断目录是否存在,存在,向目录里写入。
下面使用单分支的if条件语句来判断/media/cdrom文件是否存在,若存在就结束条件判断和整个Shell脚本,反之则去创建这个目录:
[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
if条件语句的双分支结构由if、then、else、fi关键词组成,它进行一次条件匹配判断,如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令,相当于口语的“如果……那么……或者……那么……”。if条件语句的双分支结构也是一种很简单的判断结构。
使用双分支的if条件语句来验证某台主机是否在线,然后根据返回值的结果,要么显示主机在线信息,要么显示主机不在线信息。
$?变量,作用是显示上一次命令的执行返回值
[root@localhost ~]# vim chkhost.sh
#!/bin/bash
ping#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi
-c 3 ping 3次
-i 0.2 ping 间隔时间
-w 3 ping 最长超时时间
&>/dev/null 将所有信息输出到黑洞文件
/dev/null 相当于中没有回收功能的Windows回收站,任何信息或者文件进入后就会消失掉
[root@localhost ~]# bash chkhost.sh 192.168.1.110
Host 192.168.1.110 is Off-line.
[root@localhost ~]# bash chkhost.sh 192.168.1.120
Host 192.168.1.120 is On-line.
[root@localhost ~]# bash chkhost.sh 192.168.1.130
Host 192.168.1.130 is Off-line.
[root@localhost ~]# bash chkhost.sh 127.0.0.0
Host 127.0.0.0 is Off-line.
[root@localhost ~]# bash chkhost.sh 127.0.0.1
Host 127.0.0.1 is On-line.
使用多分支的if条件语句来判断用户输入的分数在哪个成绩区间内,然后输出如Excellent、Pass、Fail等提示信息。
read是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量,-p参数用于向用户显示一定的提示信息。
[root@localhost ~]# vim chkscore.sh
[root@localhost ~]# cat chkscore.sh
#!/bin/bash
duofenzhi if tiaojian yuju panduan fenshu zai nage chengji qujian.
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
[root@localhost ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@localhost ~]# bash chkscore.sh
Enter your score(0-100):77
77 is Pass
输入1000分 结果是如何?
[root@localhost ~]# bash chkscore.sh
Enter your score(0-100):1000
1000 is Fail
批量检测主机是否在的脚本
4.3.2 for 条件循环语句
使用for循环语句从列表文件中读取多个用户名,然后为其逐一创建用户账户并设置密码。首先创建用户名称的列表文件users.txt,每个用户名称单独一行。
首先创建一个主机列表文件ipadds.txt:
[root@linuxprobe ~]# vim ip.txt
192.168.1.110
192.168.1.120
192.168.1.130
然后前面的双分支if条件语句与for循环语句相结合,让脚本从主机列表文件ipadds.txt中自动读取IP地址(用来表示主机)并将其赋值给IP变量,从而通过判断ping命令执行后的返回值来逐个测试主机是否在线。脚本中出现的$(命令)是一种完全类似于第3章的转义字符中反引号命令
的Shell操作符,效果同样是执行括号或双引号括起来的字符串中的命令。
使用双分支if条件语句与for循环语句相结合,让脚本从主机列表文件ipadds.txt中自动读取IP地址,并将其赋值给IP变量,从而通过判断ping命令执行后的返回值来逐个测试主机是否在线。
[root@linuxprobe ~]# vim checkHosts.sh
#!/bin/bash
for IP in cat ip.txt
do
ping -c 3 -i 0.2 -w 3 $IP &> /dev/null
if [ $? -eq 0 ] ;then
echo "Host $IP is On-line ."
else
echo "Host $IP is Off-line ."
fi
done
[root@linuxprobe ~]# bash checkHosts.sh
Host 192.168.1.110 is Off-line .
Host 192.168.1.120 is On-line .
Host 192.168.1.130 is Off-line .
for循环语句,批量创建用户。读取用户名称,使用脚本命令read读取用户输入的密码,赋值给PASSWD变量,使用“id 用户名”查看用户信息,使用$?判断用户是否存在。
[root@localhost ~]# vim users.txt
[root@localhost ~]# cat users.txt
andy
barry
xiaolu
xiaoli
xiaozhang
xiaohuang
xiaomei
xiaoyan
[root@localhost ~]# vim jianyonghu.sh
[root@localhost ~]# cat jianyonghu.sh
#!/bin/bash
#for循环语句,批量创建用户。读取用户名称,使用脚本命令read读取用户输入的密码,赋值给PASSWD变量,使用“id 用户名”查看用户信息,使用$?判断用户是否存在。
read -p "Enter":PASSWD
for UNAME in cat users.txt
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Alread exists"
else
useradd $UNAME &> /dev/null
echo "PASSWD" |passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , creat success"
else
echo "$UNAME , creat failure"
fi
fi
done
[root@localhost ~]# bash jianyonghu.sh
Enter:PASSWDredhat11
andy , creat success
barry , creat success
xiaolu , creat success
xiaoli , creat success
xiaozhang , creat success
xiaohuang , creat success
xiaomei , creat success
xiaoyan , creat success
[root@localhost ~]# tail -6 /etc/passwd
xiaolu:x:1005:1005::/home/xiaolu:/bin/bash
xiaoli:x:1006:1006::/home/xiaoli:/bin/bash
xiaozhang:x:1007:1007::/home/xiaozhang:/bin/bash
xiaohuang:x:1008:1008::/home/xiaohuang:/bin/bash
xiaomei:x:1009:1009::/home/xiaomei:/bin/bash
xiaoyan:x:1010:1010::/home/xiaoyan:/bin/bash
[root@localhost ~]# bash jianyonghu.sh
Enter:PASSWDredhat11
Alread exists
Alread exists
Alread exists
Alread exists
Alread exists
Alread exists
Alread exists
Alread exists
使用反引号``,执行一个命令。
使用$(命令),执行一个命令。
for 循环 范围
for 循环 条件
4.3.3 while条件循环语句
猜测数值大小的脚本Guess.sh。 该脚本使用$RANDOM变量来调取出一个随机的数值(范围为0~32767),将这个随机数对1000进行取余操作,并使用expr命令取得其结果,再用这个数值与用户通过read命令输入的数值进行比较判断。这个判断语句分为三种情况,分别是判断用户输入的数值是等于、大于还是小于使用expr命令取得的数值。当前,现在这些内容不是重点,我们当前要关注的是while条件循环语句中的条件测试始终为true,因此判断语句会无限执行下去,直到用户输入的数值等于expr命令取得的数值后,这两者相等之后才运行exit 0命令,终止脚本的执行。
[root@localhost 桌面]# vim guess.sh
[root@localhost 桌面]# cat guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
while true
do
read -p "Enter:" INT
let TIMES++
if [ $INT -eq $PRICE ] ;then
echo "OK,$INT"
echo "Times is $TIMES ci"
exit 0
elif [ $INT -gt $PRICE ] ;then
echo "high"
else
echo "low"
fi
done
[root@localhost 桌面]# bash guess.sh
Enter:520
high
Enter:260
low
Enter:391
high
Enter:329
low
Enter:356
high
Enter:343
low
Enter:352
high
Enter:348
low
Enter:350
high
Enter:349
OK,349
Times is 10 ci
4.3.4 case 条件测试语句
在前文介绍的Guess.sh脚本中有一个致命的弱点—只能接受数字!您可以尝试输入一个字母,会发现脚本立即就崩溃了。原因是字母无法与数字进行大小比较,例如,“a是否大于等于3”这样的命题是完全错误的。我们必须有一定的措施来判断用户的输入内容,当用户输入的内容不是数字时,脚本能予以提示,从而免于崩溃。
通过在脚本中组合使用case条件测试语句和通配符(详见第3章),完全可以满足这里的需求。接下来我们编写脚本Checkkeys.sh,提示用户输入一个字符并将其赋值给变量KEY,然后根据变量KEY的值向用户显示其值是字母、数字还是其他字符。
[root@linuxprobe ~]# vim checkkeys.sh
#!/bin/bash
read -p "Enter:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "zimu"
;;
[0-9])
echo "shuzi"
;;
*)
echo "Luanma"
esac
[root@linuxprobe ~]# bash checkkeys.sh
Enter:a
zimu
[root@linuxprobe ~]# bash checkkeys.sh
Enter:8
shuzi
[root@linuxprobe ~]# bash checkkeys.sh
Enter:
Luanma
[root@localhost 桌面]# bash checkkeys.sh
Enter:34
[root@localhost 桌面]# bash checkkeys.sh
Enter:23sd
Luanma
[root@localhost 桌面]# bash checkkeys.sh
Enter:479$09xc
Luanma
输入两位数34,57,输入 数字加字母, 则是输出" luanma " 。
打包网站数据做备份:
if 单 双 多分支
for 范围
while 条件
case 判断
4.4 计划任务服务程序
at 一次性的计划任务
crond 周期性的计划任务
at 一次性的计划任务
[root@linuxprobe ~]# at 22:10
at> reboot
at> <EOT> #ctrl d 保存
job 2 at Wed May 1 22:10:00 2019
[root@linuxprobe ~]# at -l #查看 at 任务名称
2 Wed May 1 22:10:00 2019 a root
在使用at命令来设置一次性计划任务时,默认采用的是交互式方法。例如,使用下述命令将系统设置为在今晚23:30分自动重启网站服务。
[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd
at > 此处请同时按下Ctrl+d来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root
[root@linuxprobe ~]# atrm 2
果读者想挑战一下难度更大但简捷性更高的方式,可以把前面学习的管道符(任意门)放到两条命令之间,让at命令接收前面echo命令的输出信息,以达到通过非交互式的方式创建计划一次性任务的目的。
[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root
4 Mon Apr 27 23:30:00 2016 a root
at 时间 创建计划任务
at -l 查看计划任务
atrm 编码 删除计划任务
at -c 编码 查看计划任务的详细情况
crond 是一个服务
crondtab 配置工具 默认调用vim 编辑器
crontab -e 创建、编辑计划任务
crontab -l 查看当前计划任务
crontab -r 删除某条计划任务
需要注意的是,如果有些字段没有设置,则需要使用星号(*)占位,如图4-23所示。
分 时 日 月 星期 命令
分 0~59 整数
时 0~23 整数
日 0~31 整数
月 0~12 整数
星期 0~7 整数 0和7 都是星期日
命令 要执行的命令或程序脚本
假设在每周一、三、五的凌晨3点25分,都需要使用tar命令把某个网站的数据目录进行打包处理,使其作为一个备份文件。我们可以使用crontab -e命令来创建计划任务。为自己创建计划任务无需使用-u参数,具体的实现效果的参数如crontab -l命令结果所示:
[root@linuxprobe ~]# crontab -e
no crontab for root - using an empty one
crontab: ×××talling new crontab
[root@linuxprobe ~]# crontab -l
25 3 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
[root@localhost 桌面]# crontab -e
crontab: ×××talling new crontab
[root@localhost 桌面]# crontab -l
0 1 1 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 1-5 /usr/bin/rm-rf /tmp/*
分 时 日 月 星期 命令
0 1 1-5 每周一到五 的凌晨一点
0 /4 1-5 每周一到五 的每隔4小时
0 1 1,3,5 每周的1,3,5日 的凌晨一点
0 1 1-5 * 每月的1-5日 的凌晨一点
转载于:https://blog.51cto.com/13615251/2396019