Linux 用户的 3 个命令行小技巧
Linux世界充满了乐趣，我们越深入进去，就会发现越多有趣的事物。我们会努力给你提供一些小技巧，让你和其他人有所不同，下面就是我们准备的3个小技巧。  1. 如何在不使用Cron的情况调度Linux下的任务 在Linux下，调度一个任务/命令称之为Cron。当我们需要调度一个任务时，我们会使用Cron，但你知道我们在不使用Cron的情况也可以调度一个在将来时间运行的任务吗？你可以按照如下建议操作 每5秒钟运行一个命令（date）然后将结果写入到一个文件（data.txt）。为了实现这一点，我们可以直接在命令提示符运行如下单行脚本。 $ while true; do
命令行 技巧
118.122.120.235
第一个命令，还可以这样<br />
<br />
watch --interval 5 ./script<br />
<br />
第二个命令，还可以<br />
<br />
printf &quot;\033c&quot;<br />
<br />
不过上述命令在 konsole 中无效，要在 konsole 完成清空终端显示内容的操作需要，需要按 Ctrl+Shift+K。
来自 - 四川成都 的 Firefox/Linux 用户
2015-06-16T08:59:17.000
118.122.120.235
第一个命令，还可以这样<br />
<br />
watch --interval 5 ./script<br />
<br />
第二个命令，还可以<br />
<br />
printf &quot;\033c&quot;<br />
<br />
不过该命令在 konsole 中无效，要在 konsole 完成清空终端显示内容的操作，需要按 Ctrl+Shift+K。
来自 - 四川成都 的 Firefox/Linux 用户
2015-06-16T09:00:37.000
115.60.14.88
记住了，以后慢慢使用！
不简单
2015-06-16T13:25:25.000
106.120.220.78
不错不错。玩的就是各种花样~
linux
2015-06-16T13:37:05.000
58.210.40.107
不错值得学习
renjieyanhong
2015-06-18T20:30:16.000
120.209.165.157
第三个技巧()的功能相当于在里面创建了个子shell，里面的命令执行完后自动退出子shell，故不改变当前工作目录。
来自 - 安徽合肥 的 Firefox/Linux 用户
2015-06-18T23:18:43.000
123.120.61.87
是这样的。
linux
2015-06-19T00:04:51.000
211.137.188.252
觉得第三个要是执行几个命令的话不如cd到那个目录下面然后执行玩命令后 cd - 回来
来自 - 山东济南 的 Chrome/Windows 用户
2015-06-24T13:44:09.000
49.80.239.174
其实这种使用代码写的时间延迟会有误差，误差不是很大，每执行一条代码，需要指令时间，sleep语句能够精准到1秒的话，循环结构还是需要时间运行的。
木一明兮
2015-07-19T18:42:05.000
49.80.239.174
理解很深刻 ，解释很到位。不过这个用法一般不会太多，基本上是采用cd -回来
木一明兮
2015-07-19T18:45:09.000
Linux世界充满了乐趣，我们越深入进去，就会发现越多有趣的事物。我们会努力给你提供一些小技巧，让你和其他人有所不同，下面就是我们准备的3个小技巧。  1. 如何在不使用Cron的情况调度Linux下的任务 在Linux下，调度一个任务/命令称之为Cron。当我们需要调度一个任务时，我们会使用Cron，但你知道我们在不使用Cron的情况也可以调度一个在将来时间运行的任务吗？你可以按照如下建议操作 每5秒钟运行一个命令（date）然后将结果写入到一个文件（data.txt）。为了实现这一点，我们可以直接在命令提示符运行如下单行脚本。 $ while true; do
Linux世界充满了乐趣，我们越深入进去，就会发现越多有趣的事物。我们会努力给你提供一些小技巧，让你和其他人有所不同，下面就是我们准备的3个小技巧。


![](/data/attachment/album/201506/15/161447nz94nec4l9mzzeec.jpg)


### 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评测，上述的单行脚本也管用。


还可以参考：[Linux 下 11 个定时调度任务例子](http://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/)


### 2. 如何不使用clear命令清空终端的内容


你如何清空终端的内容？你可能会认为这是一个傻问题。好吧，大家都清楚可以使用`clear`命令。如果养成使用`ctrl + l`快捷键的习惯，我们会节省大量时间。


`Ctrl + l`快捷键的效果和`clear`命令一样。所以下一次你就可以使用`ctrl + l`来清空终端的内容了。


**总结**：因为`ctrl + l`是一个快捷键，我们不可以在脚本中使用。所以如果我们需要在脚本中清空屏幕内容，还是需要使用`clear`命令。但我能想到的所有其他情况，`ctrl + l`都更加有效。


### 3. 在其它目录运行一个命令，然后自动返回当前工作目录


这是一个很多人可能不知道的令人吃惊的技巧。你可能想在其它目录运行任何一个命令，然后再回到当前目录。要实现这样的目的，你只需要将命令放在一个圆括号里。


我们来看一个例子：



```
avi@deb:~$ (cd /home/avi/Downloads/)

```

示例输出：



```
 avi@deb:~

```

它首先会cd到Downloads目录，然后又回到了之前的家目录。也许你认为里边的命令根本没有执行，或者是出了某种错误，因为从命令提示符看不出任何变化。让我们简单修改一下这个命令：



```
avi@deb:~$ (cd /home/avi/Downloads/ && ls -l)

```

示例输出：



```
-rw-r-----  1 avi  avi     54272 May  3 18:37 text1.txt
-rw-r-----  1 avi  avi     54272 May  3 18:37 text2.txt
-rw-r-----  1 avi  avi     54272 May  3 18:37 text3.txt
avi@deb:~$

```

在上述命令中，它首先进入Downloads目录，然后列出文件内容，最后又回到了当前目录。并且它证明了命令成功执行了。你可以在括号中包含任何命令，执行完都会顺利返回到当前目录。


这就是全部内容了，如果你知道任何类似的Linux技巧，你可以在文章下面的评论框中分享给我们，不要忘记将本文和朋友分享 :)




---


via: <http://www.tecmint.com/useful-linux-hacks-commands/>


作者：[Avishek Kumar](http://www.tecmint.com/author/avishek/) 译者：[goreliu](https://github.com/goreliu) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出

