1.如何在不使用 Cron 的情况调度 Linux 下的任务
在 Linux 下,调度一个任务/命令称之为 Cron。当我们需要调度一个任务时,我们会使用Cron,但你知道我们在不使用 Cron 的情况也可以调度一个在将来时间运行的任务吗?你可以按照如下建议操作……
每5秒钟运行一个命令(date)然后将结果写入到一个文件(data.txt)。为了实现这一点,我们可以直接在命令提示符运行如下单行脚本。
$ while true;do date >> date.txt ; sleep 5;done&
上述脚本的解释:
while true
:让脚本进入一个条件总为真的循环中,也就是制造一个死循环,将里边的命令一遍遍地重复运行。do
:do
是while
语句中的关键字,它之后的命令会被执行,在它后边可以放置一个或一系列命令。date >> date.txt
:运行date
命令,并将其输出写入到data.txt
文件中。注意我们使用>>
,而不是>
。>>
:对文件(date.txt)
进行追加写的操作,这样每次运行命令后,输出内容会被追加到文件中。如果使用>的话,则会一遍遍地覆盖之前的内容。sleep 5
:让脚本处于5秒睡眠状态,然后再运行之后的命令。注意这里的时间单位只能用秒。也就是说如果你想让命令每6分钟运行一次,你应该使用sleep 360
。done
:while
循环语句块结束的标记。&
:将整个进程放到后台运行。
类似地,我们可以这样运行任何脚本。下边的例子是每100秒运行一个名为 script_name.sh
的脚本。
另外值得一提的是上面提到的脚本文件必须处于当前目录中,否则需要使用完整路径 (/home/$USER/…/script_name.sh)
。实现如上功能的单行脚本如下:
$ while true;do/bin/sh script_name.sh ; sleep 100;done&
总结:上述的单行脚本并不是 Cron 的替代品,因为 Cron 工具支持众多选项,更加灵活,可定制性也更高。然而如果我们想运行某些测试,比如 I/O 评测,上述的单行脚本也管用。
2.如何不使用 clear 命令清空终端的内容
你如何清空终端的内容?你可能会认为这是一个傻问题。好吧,大家都清楚可以使用 clear 命令。如果养成使用 ctrl + l
快捷键的习惯,我们会节省大量时间。
Ctrl + l
快捷键的效果和 clear 命令一样。所以下一次你就可以使用 ctrl + l
来清空终端的内容了。
总结:因为 ctrl + l
是一个快捷键,我们不可以在脚本中使用。所以如果我们需要在脚本中清空屏幕内容,还是需要使用 clear 命令。但我能想到的所有其他情况,ctrl + l
都更加有效。
3.在其它目录运行一个命令,然后自动返回当前工作目录
这是一个很多人可能不知道的令人吃惊的技巧。你可能想在其它目录运行任何一个命令,然后再回到当前目录。要实现这样的目的,你只需要将命令放在一个圆括号里。
我们来看一个例子:
apple@ubuntu:~$ (cd ~/Downloads)
示例输出:
apple@ubuntu:~$
它首先会 cd
到 Downloads
目录,然后又回到了之前的家目录。也许你认为里边的命令根本没有执行,或者是出了某种错误,因为从命令提示符看不出任何变化。让我们简单修改一下这个命令:
apple@ubuntu:~$ (cd ~/Downloads/&& ls -l)
示例输出:
apple@ubuntu:~/Downloads$ (cd ~/Downloads/&& ls -l)
total 8
-rw-rw-r-- 1 apple apple 2 Jun 22 00:13 1.txt
-rw-rw-r-- 1 apple apple 2 Jun 22 00:13 2.txt
在上述命令中,它首先进入 Downloads
目录,然后列出文件内容,最后又回到了当前目录。并且它证明了命令成功执行了。你可以在括号中包含任何命令,执行完都会顺利返回到当前目录。