Linux学习笔记六

Linux任务计划crontab

周期性的清理/tmp、周期性的去备份一次数据库、周期性的分析日志等,因此需要利用Linux系统的计划工具–crontab(用于设置周期性被执行的命令)。

crontab命令从输入设备读取指令,并将其存放于crontab文件中,以供之后读取和执行。通常情况下,crontab存储的指令被守护进程激活,crond为其守护进程,crond常常在后台运行,每一分钟会检查一次是否由预定的作业需要执行。

crontab指令格式:

# Example of job definition:

#.—————- minute (0 - 59)

#| .————- hour (0 - 23)

#| | .———- day of month (1 - 31)

#| | | .——- month (1 - 12) OR jan,feb,mar,apr …

#| | | | .—- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

#| | | | | # * user-name command to be executed

crontab的使用

1
crontab -e

以上命令来添加一个计划任务。

然后通过以下命令来查看添加了哪些内容:

1
crontab -l

确保cron是否成功在后台启动的方法:

1
2
3
ps aux | grep cron
# or
pgrep cron

在不需要这个任务时可以使用以下命令来删除一个任务:

1
crontab -r

命令执行顺序控制和管道

顺序执行多条命令

安装软件

使用apt-get安装软件,然后安装完成后立即运行安装的软件或命令工具,如下:

1
2
3
sudo apt-get update
sudo apt-get install some-tool
some-tool

但要是一次性输入完,让它自己去依次执行各个命令,简单的顺序执行可以使用;来完成:

1
sudo apt-get update;sudo apt-get install some-tool;some-tool

有选择的执行命令

即上一条命令执行成功才继续下一条,或者不成功又该做出其它处理。例如:

1
which cowsay>/dev/null && cowsay -f head-in ohch~

上面的&&就是用来实现选择性执行的,它表示如果前面的命令执行结果(不是表示终端输出的内容而是表示命令执行状态的结果)返回0则执行后面的,否则不执行,可以从$?环境变量获取上一次命令的返回结果。

管道

管道是一种通信机制,通常用于进程间的通信(也可以通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。

其中管道又分为匿名管道具名管道。匿名管道在使用时通常是用分隔符|表示。

查看/etc目录下有哪些文件和目录,使用ls来查看:

1
ls -al /etc

可是内容太多,屏幕并不能完全显示,这时就需要使用滚动条或者快捷键滚动窗口来查看,但也可以使用管道:

1
ls -al /etc | less

通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入,然后就可以一行一行的看。

cut命令打印输出文件

打印 /etc/passwd 文件中以 : 为分隔符的第 1 个字段和第 6 个字段分别表示用户名和其家目录:

1
cut /etc/passwd -d ':' -f 1,6

打印 /etc/passwd 文件中每一行的前 N 个字符:

1
2
3
4
5
6
7
8
# 前五个(包含第五个)
cut /etc/passwd -c -5
# 前五个之后的(包含第五个)
cut /etc/passwd -c 5-
# 第五个
cut /etc/passwd -c 5
# 2 到 5 之间的(包含第五个)
cut /etc/passwd -c 2-5

grep命令–查找

一般形式为:

1
grep [命令选项]... 用于匹配的表达式 [文件]

例如:

1
grep -rnI "shiyanlou" ~

-r参数表示递归搜索子目录中的文件,-n表示打印匹配项行号,-I表示忽略二进制文件。

wc命令

该命令用于统计并输出一个文件中的行、单词和字节的数目。

1
2
3
4
5
6
7
8
9
10
# 行数
wc -l /etc/passwd
# 单词数
wc -w /etc/passwd
# 字节数
wc -c /etc/passwd
# 字符数
wc -m /etc/passwd
# 最长行字节数
wc -L /etc/passwd

sort排序

该功能是将输入按照一定方式排序,然后再输出,它支持的排序有按字典排序、数字排序、按月份排序、随机排序、反转排序和指定特定字段进行排序。

默认为字典排序:

1
cat /etc/passwd | sort

反转排序:

1
cat /etc/passwd | sort -r

按特定字段排序:

1
cat /etc/passwd | sort -t':' -k 3

-t参数用于指定字段的分隔符;-k字段号用于指定对哪一个字段进行排序。