Linux

Linux常用指令

  • systemctl restart 服务名称 重启服务 pid值会变
  • systemctl reload 服务名称 重启服务 pid值不会变
  • systemctl start 服务名称 开启服务
  • systemctl enable 服务名称 加入启动项
  • systemctl status 服务名称 查看服务状态

reboot命令

reboot命令用于重启系统,其格式为reboot。

poweroff命令

poweroff命令用于关闭系统,其格式为poweroff。

top命令

top命令用于动态地监视进程活动与系统负载等信息,其格式为top。

第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。负载达到1表示满队列,即cpu处理速度和程序需求相同,达到5则有程序会崩溃,9系统可能出现异常。

第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“97.1 id”意味着有97.1%的CPU处理器资源处于空闲。

第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。

第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。

NT的值越低,表示优先级越高。

image 10

echo命令

echo命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $变量]”。

date命令

date命令用于显示及设置系统的时间或日期,格式为“date [选项] [+指定的格式]”。

只需在强大的date命令中输入以“+”号开头的参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间信息结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2017-9-1.tar.gz”,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间了。

                                           date命令中的参数以及作用

参数作用
%S秒(00~59)
%M分钟(00~59)
%H小时(00~23)
%I小时(00~12)
%m月份(1~12)
%p显示出AM或PM
%a缩写的工作日名称(例如:Sun)
%A完整的工作日名称(例如:Sunday)
%b缩写的月份名称(例如:Jan)
%B完整的月份名称(例如:January)
%q季度(1~4)
%y简写年份(例如:20)
%Y完整年份(例如:2020)
%d本月中的第几天
%j今年中的第几天
%n换行符(相当于按下回车键)
%t跳格(相当于按下Tab键)

pwd查看当前工作目录

ps命令

ps命令用于查看系统中的进程状态,格式为“ps [参数]”。

Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在Linux系统中,有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。

R(运行):进程正在运行或在运行队列中等待。

S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该   状态。

D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。

Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。

T(停止):进程收到停止信号后停止运行。

pidof命令

pidof命令用于查询某个指定服务进程的PID值,格式为“pidof [参数] [服务名称]”。

每个进程的进程号码值(PID)是唯一的,因此可以通过PID来区分不同的进程。例如,可以使用如下命令来查询本机上sshd服务程序的PID:

[root@linuxprobe ~]# pidof sshd
2156

ctrl+l清屏

kill命令

kill命令用于终止某个指定PID的服务进程,格式为“kill [参数] [进程PID]”。

killall命令

killall命令用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [服务名称]”。

通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务程序带有的全部进程。

ifconfig命令

ifconfig命令用于获取网卡配置与网络状态等信息,格式为“ifconfig [网络设备] [参数]”。

使用ifconfig命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量(即下面加粗的信息内容):

[root@linuxprobe ~]# ifconfig
eno16777728: flags=4163  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::20c:29ff:fec4:a409  prefixlen 64  scopeid 0x20
        ether 00:0c:29:c4:a4:09  txqueuelen 1000  (Ethernet)
        RX packets 36  bytes 3176 (3.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 4757 (4.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

uname命令

uname命令用于查看系统内核与系统版本等信息,格式为“uname [-a]”。

在使用uname命令时,一般会固定搭配上-a参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。

uptime命令

uptime用于查看系统的负载信息,格式为uptime。

uptime命令真的很棒,它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过1,在生产环境中不要超过5。

who命令

who用于查看当前登入主机的用户终端信息,格式为“who [参数]”。

这三个简单的字母可以快速显示出所有正在登录本机的用户的名称以及他们正在开启的终端信息。表2-9所示为执行who命令后的结果。

history命令

history命令用于显示历史执行过的命令,格式为“history [-c]”。

history命令应该是作者最喜欢的命令。执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,还可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,如果使用-c参数则会清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。还可以使用“!编码数字”的方式来重复执行某一次的命令

last命令

last命令用于查看所有系统的登录记录,格式为“last [参数]”。

使用last命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!

sosreport命令

sosreport命令用于收集系统配置及架构信息并输出诊断文档,格式为sosreport。

当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。

Linux中以.开头的文件是隐藏文件

more命令

more命令用于查看纯文本文件(内容较多的),格式为“more [选项]文件”。

head命令

head命令用于查看纯文本文档的前N行,格式为“head [选项] [文件]”。

tail命令

tail命令用于查看纯文本文档的后N行或持续刷新内容,格式为“tail [选项] [文件]”。

我们可能还会遇到另外一种情况,比如需要查看文本内容的最后20行,这时就需要用到tail命令了。tail命令的操作方法与head命令非常相似,只需要执行“tail -n 20 文件名”命令就可以达到这样的效果。tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”

tr命令

tr命令用于替换文本文件中的字符,格式为“tr [原始字符] [目标字符]”。

wc命令

wc命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。

每次我在课堂上讲到这个命令时,总有同学会联想到一种公共设施,其实这两者毫无关联。Linux系统中的wc命令用于统计文本的行数、字数、字节数等。如果为了方便自己记住这个命令的作用,也可以联想到上厕所时好无聊,无聊到数完了手中的如厕读物上有多少行字。wc的参数以及相应的作用如表2-10所示。

表2-10                                                   wc的参数以及作用

参数作用
-l只显示行数
-w只显示单词数
-c只显示字节数

在Linux系统中,passwd是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询,是不是很神奇:

[root@linuxprobe ~]# wc -l /etc/passwd
38 /etc/passwd

stat命令

stat命令用于查看文件的具体存储信息和时间等信息,格式为“stat 文件名称”。

Access: 2017-07-14 01:46:18.721255659 -0400  //最后查看时间
Modify: 2017-05-04 15:44:36.916027026 -0400  //最后修改内容时间
Change: 2017-05-04 15:44:36.916027026 -0400  //最后更改文件属性时间

cut命令

cut命令用于按“列”提取文本字符,格式为“cut [参数] 文本”。

在Linux系统中,如何准确地提取出最想要的数据,这也是我们应该重点学习的内容。一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。passwd在保存用户数据信息时,用户信息的每一项值之间是采用冒号来间隔的,接下来我们使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

[root@linuxprobe ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@linuxprobe ~]# cut -d: -f1 /etc/passwd

mkdir命令

mkdir命令用于创建空白的目录,格式为“mkdir [选项] 目录”。

在Linux系统中,文件夹是最常见的文件类型之一。除了能创建单个空白目录外,mkdir命令还可以结合-p参数来递归创建出具有嵌套叠层关系的文件目录。

cp命令

cp命令用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”。大家对文件复制操作应该不陌生,在Linux系统中,复制操作具体分为3种情况:

如果目标文件是目录,则会把源文件复制到该目录中;

如果目标文件也是普通文件,则会询问是否要覆盖它;

如果目标文件不存在,则执行正常的复制操作。

mv命令

mv命令用于剪切文件或将文件重命名,格式为“mv [选项] 源文件 [目标路径|目标文件名]”。

剪切操作不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名。

rm命令

rm命令用于删除文件或目录,格式为“rm [选项] 文件”。

在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在rm命令后跟上-f参数来强制删除。另外,想要删除一个目录,需要在rm命令后面加一个-r参数才可以。

file命令

file命令用于查看文件的类型,格式为“file 文件名”。

在Linux系统中,由于文本、目录、设备等所有这些一切都统称为文件,而我们又不能单凭后缀就知道具体的文件类型,这时就需要使用file命令来查看文件类型了。

tar命令

tar命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”。

在Linux系统中,常见的文件格式比较多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式,我们不用担心格式太多而记不住,其实这些格式大部分都是由tar命令来生成的。刘遄老师将讲解最重要的几个参数,以方便大家理解。tar命令的参数及其作用如表2-14所示。

表2-14                                               tar命令的参数及其作用

参数作用
-c创建压缩文件
-x解开压缩文件
-t查看压缩包内有哪些文件
-z用Gzip压缩或解压
-j用bzip2压缩或解压
-v显示压缩或解压的过程
-f目标文件名
-p保留原始的权限与属性
-P使用绝对路径来压缩
-C指定解压到的目录

首先,-c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用Gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v参数向用户不断显示压缩或解压的过程。-C参数用于指定要解压到哪个指定的目录。-f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。一般使用“tar -czvf 压缩包名称.tar.gz 要打包的目录”命令把指定的文件进行打包压缩;相应的解压命令为“tar -xzvf 压缩包名称.tar.gz”。

grep命令

grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]”。

grep可以用于取出文本文件中的一行,下面这个指令就是输出包含abc的一行

cat hello.txt |grep abc

find命令

find命令用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”。

find / -name 全盘搜索

输出重定向

命令 > 文件将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 &>> 文件将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

输入重定向

命令 < 文件将文件作为命令的标准输入
命令 << 分界符从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2将文件1作为命令的标准输入并将标准输出到文件2

管道操作符

“命令A | 命令B”。管道命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入”。

通配符

星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符,而中括号内加上字母[a,b,c]则是代表匹配a、b、c三个字符中的任意一个字符。

 常用的转义字符

反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。

单引号(”):转义其中所有的变量为单纯的字符串。

双引号(””):保留其中的变量属性,不进行转义处理。

反引号(“):把其中的命令执行后返回结果。

环境变量

环境变量一般是大写的,使用echo $PATH查看环境变量的路径。以冒号分隔。这些路径作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。

定义变量 :

WORKDIR=/home/workdir

但是这样定义后仅仅当前用户可以使用,所以要使用export。

export WORKDIR

vim编辑器

vim相对于vi的提升在于:vim有着色功能,避免错误参数的产生。

switching between different modes of vim

a、i、o三个键从命令模式切换到输入模式。其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光标的下面再创建一个空行。

命令模式下

  • dd剪切当前行 10dd 剪切10行
  • p表示复制当前行 ,可粘贴dd
  • u撤销
配置主机名称

为了便于在局域网中查找某台特定的主机,或者对主机进行区分,除了要有IP地址外,还要为主机配置一个主机名,主机之间可以通过这个类似于域名的名称来相互访问。在Linux系统中,主机名大多保存在/etc/hostname文件中,接下来将/etc/hostname文件的内容修改为“linuxprobe.com”,步骤如下。

第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件。

第2步:把原始主机名称删除后追加“linuxprobe.com”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。

第3步:保存并退出文档,然后使用hostname命令检查是否修改成功。

简单的脚本

[root@linuxprobe ~]# vim example.sh  //以sh结尾表示命令
#!/bin/bash    //表示在哪个目录下执行
#For Example BY linuxprobe.com  //注释
pwd    //命令
ls -al

使用bash 命令 执行

判断用户的参数

操作符作用
-d测试文件是否为目录类型
-e测试文件是否存在
-f判断是否为一般文件
-r测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试当前用户是否有权限执行
-z判断当前变量是否被人使用, 0为未使用
判断字符串内容是否为空

下面使用文件测试语句来判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;如果返回值为非零的值,则意味着目录不存在:

注意有一个空格在-前

[root@linuxprobe ~]# [ -d /etc/fstab ]
[root@linuxprobe ~]# echo $?
1

再使用文件测试语句来判断/etc/fstab是否为一般文件,如果返回值为0,则代表文件存在,且为一般文件:

[root@linuxprobe ~]# [ -f /etc/fstab ]
[root@linuxprobe ~]# echo $?
0

逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。例如在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

第三种逻辑语句是“非”,在Linux系统中的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的;原本测试错误的结果则将其变成正确的。

我们现在切换回到root管理员身份,再判断当前用户是否为一个非管理员的用户。由于判断结果因为两次否定而变成正确,因此会正常地输出预设信息:

[linuxprobe@linuxprobe ~]$ exit
logout
[root@linuxprobe root]# [ $USER != root ] || echo "administrator"
administrator

比较运算符

执行正确为0

操作符作用
-eq是否等于
-ne是否不等于
-gt是否大于
-lt是否小于
-le是否等于或小于
-ge是否大于或等于
[root@linuxprobe ~]# [ 10 -gt 10 ]
[root@linuxprobe ~]# echo $?
1
[root@linuxprobe ~]# [ 10 -eq 10 ]
[root@linuxprobe ~]# echo $?
0

IF语句

[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
multi branch structure 2

for语句

for conditional statement 1

case语句

case conditional statement 1
[root@linuxprobe ~]# vim Checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按Enter键确认:6
您输入的是 数字。
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按Enter键确认:p
您输入的是 字母。
[root@linuxprobe ~]# bash Checkkeys.sh
请输入一个字符,并按Enter键确认:^[[15~
您输入的是 空格、功能键或其他控制字符。
计划任务服务程序

经验丰富的系统运维工程师可以使得Linux在无需人为介入的情况下,在指定的时间段自动启用或停止某些服务或命令,从而实现运维的自动化。尽管我们现在已经有了功能彪悍的脚本程序来执行一些批处理工作,但是,如果仍然需要在每天凌晨两点敲击键盘回车键来执行这个脚本程序,这简直太痛苦了(当然,也可以训练您的小猫在半夜按下回车键)。接下来,刘遄老师将向大家讲解如何设置服务器的计划任务服务,把周期性、规律性的工作交给系统自动完成。

计划任务分为一次性计划任务与长期性计划任务,大家可以按照如下方式理解。

一次性计划任务:今晚11点30分开启网站服务。

长期性计划任务:每周一的凌晨3点25分把/home/wwwroot目录打包备份为backup.tar.gz。

顾名思义,一次性计划任务只执行一次,一般用于满足临时的工作需求。我们可以用at命令实现这种功能,只需要写成“at 时间”的形式就可以。如果想要查看已设置好但还未执行的一次性计划任务,可以使用“at -l”命令;要想将其删除,可以用“atrm 任务序号”。在使用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

可以把前面学习的管道符(任意门)放到两条命令之间,让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

如果我们不小心设置了两个一次性计划任务,可以使用下面的命令轻松删除其中一个:

[root@linuxprobe ~]# atrm 3
[root@linuxprobe ~]# at -l
4 Mon Apr 27 23:30:00 2016 a root

如果我们希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务简直再适合不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您是以管理员的身份登录的系统,还可以在crontab命令中加上-u参数来编辑他人的计划任务。

第4章 Vim编辑器与Shell命令脚本。第4章 Vim编辑器与Shell命令脚本。

在正式部署计划任务前,请先跟刘遄老师念一下口诀“分、时、日、月、星期 命令”。这是使用crond服务设置任务的参数格式(其格式见表4-6)。需要注意的是,如果有些字段没有设置,则需要使用星号(*)占位,如图4-23所示。

图4-23  使用crond设置任务的参数格式

表4-6                                       使用crond设置任务的参数字段说明

字段说明
分钟取值为0~59的整数
小时取值为0~23的任意整数
日期取值为1~31的任意整数
月份取值为1~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: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot

需要说明的是,除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。

如果在crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条。例如我们再添加一条计划任务,它的功能是每周一至周五的凌晨1点钟自动清空/tmp目录内的所有文件。尤其需要注意的是,在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询,rm命令路径为下面输出信息中加粗部分。

[root@linuxprobe ~]# whereis rm
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
[root@linuxprobe ~]# crontab -e
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*

在crond服务的配置参数中,可以像Shell脚本那样以#号开头写上注释信息,这样在日后回顾这段命令代码时可以快速了解其功能、需求以及编写人员等重要信息。

计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。