提高UNIX/Linux工作效率的十个小贴士
您是否曾为看到有人在UNIX上飞快地操作指令而赞叹不已?至少我就碰到过好几次,而且我将他们视为自己努力提高UNIX技能的目标。在本文中,我将与您分享一些自己曾经在Linux系统中实现快速、高效工作的常用UNIX命令操作的范例,希望能对您有所帮助。
本人供职于金融服务业,工作内容主要涉及到在电子交易及衍生品系统上,开发和支持在线股票与期货业务。由于我们所有的服务都运行在Linux服务器上,所以对我来说,能够在Linux上流畅娴熟地工作是非常重要的。
与本文属于相同系列的文章有:《UNIX的10大基本网络命令》,如果您没有阅读过且饶有兴趣的话,可以去找来参考阅读一下。
1.使用 ! 来执行最后一条命令
此用法节省了我平均30%的时间。通常情况下,您可能会碰到需要在较短的时间内,屡次输入相同UNIX命令的情况。以前,我所使用的普通技巧是:通过键盘上的向上和向下箭头,来查找我最近使用过的命令,选中后再回车执行。这显然需要我逐一检索的时间。
但是,如今我知道了可以使用 ! 这一技巧。而我只需要记住输入过的命令名称便可。例如:
- 如果输入“!ls”,系统就会执行我最后一次输入过的“ls -lrt”。
- 如果输入“!vim”则能够打开我最后一次编辑过的文件,而不必输入其完整的命令。
通过使用该技巧,您不但能够节省在繁复命令的拼写上所花费的输入时间,还能在某些不能运用向上和向下箭头来调出过往命令的bash shell(如csh或ksh)中进行使用。
例如:如果您在执行了“ls -l stocks.txt”之后,想直接打开stocks.txt文件,就可以直接使用“vi !$(最后一个参数)”。
2.使用 !! 来调用最后一条命令
该技巧是前面的 ! 的一个扩展,可以帮您引用且调出前面执行过的最后一条命令。只要双击 ! ,您就能获得惊人的快捷体验。
例如:我前面执行过 ifconfig | grep "inet addr:",但是现在却碰到了权限不够,需要root用户权限,那么我就可以直接输入su -c "!!" root。此处su用来选择用户,-c用来表示要执行的具体命令,而“!!”就代替了我最后一次运行过的命令。
该技巧同样对于那些不能运用向上和向下箭头的csh或ksh特别有效。如果您要经常停止/启动服务器、或使用Java来调试应用的话,请熟悉该技巧。
顺便说一句,如果您还不熟悉bash shell和shell脚本的话,我建议您参看一下:《bash shell脚本的初学者速成课程》。它对于Linux初学者非常实用。
3.使用 CTRL+R 去匹配稍久远的命令
在Linux系统中,如果您要查找那些并非最近几次输入过,而是相对久远的命令,那么仅靠使用键盘的向上和向下箭头,显然效率不高。此时,我们就可以使用该技巧来通过相同的参数进行反向搜索查找。
例如:您只需按下“CRTL+R”,然后输入您在以前命令中所出现过的关键字,UNIX就能帮您找到该命令。您在确认后直接按下回车键便可。当然,您也可以继续按向上或向下键,来查找该命令之前或之后的命令,并通过左右键来移动光标,以修改此条命令。
就我自己而言,由于上述三种技巧的使用频率比较高,它们基本上能节省我50%-60%的时间。
4.使用 History 命令,获得最常用的UNIX命令
该命令实际上是我初学UNIX时的入门级技巧,想必也是在UNIX和Shell脚本中对您最有用的命令。
在大多数情况下,您经常会在Linux系统中执行诸如启动、停止、检查日志文件、编译或执行发布等特定命令。由于不同的应用所使用的拼写方式会略有不同,因此如果您不记得确切的命令语法也不必担心,只要输入:history | grep "关键字",您就能从Linux系统的历史记录中找到相应的命令。
当然,系统有一些特定的环境变量,如HISTSIZE就定义了UNIX的history里能存储的命令条数。因此它在帮助您节约时间的同时,也省去了您去频繁地翻阅手册。
顺便说一句,如果您不熟悉Linux基本命令的话,那么我强烈建议您通过《linux 命令行基础知识》,来补足自己的短板,以免在手头任务吃紧时,还不得不在线搜索相关的Linux命令。
5.在 grep 中使用正则表达式进行查找
grep和find是UNIX提供给我们的两个绝好的工具。我们不可避免地需要在UNIX中搜索某些内容,例如文件、目录、文件中的某些字(如ERROR或Exception)。因此如果您知道如何使用grep与find的正则表达式,那么就能节省大量输入命令的时间。
例如:如果您知道如何使用egrep,那么就能通过输入 egrep "ERROR|Exception" *. xml,来取代两个单独的grep命令去分别查找ERROR和Exception。
如果想了解更多grep和find命令的有关信息,您可以参看《grep命令的十种示例》(http://javarevisited.blogspot.sg/2011/06/10-examples-of-grep-command-in-unix-and.html)和《Linux中find命令的十种示例》(http://javarevisited.blogspot.sg/2011/03/10-find-command-in-unix-examples-basic.html)。
6.使用管道来替代发送两次命令
上面的示例中已经展示了管道的用法,不知您是否已经注意到了呢?
7.使用别名,并在Bash Profile或bashrc文件中定义它们
您是否有看过别人会在自己的系统中用到一些奇怪的命令?也许他们使用的就是在其.bashrc或.profile文件所预先设置好的别名机制。
他们会通过在.bashrc和.profile文件中大量地使用简化了的别名命令,来节约反复输入的时间。例如:
- 用"l"来表示查找所有的隐藏文件。
- 用"ls"来包括所有的有用选项,如 -lrtH就可以显示所有的相关信息。
您可以通过参看《linux命令行界面(CLI)基础知识》,来进一步了解更多有关Linux的登录机制,以及.login、.profile和.bashrc文件在Linux bash shell中的作用。
8.使用 pushd、popd、cd -、~来切换目录
不知大家是否有过这样的体验:由于任务的要求,我们需要不停地在多个深层次的目录之间进行切换。虽然在输入cd命令的时候,我们可以使用tab键,但是冗长的路径着实会花费时间。
因此根据我的经验,我们完全可以:
- 使用"cd –"回到前一级目录,以实现两个目录位置之间的切换。
- 使用"pushd"以切换到一个作为参数的目录,并把原目录和当前的目录存入到一个虚拟的堆栈中,从而实现目录的交换。
- 使用"popd"以弹出堆栈中最近的目录。
9.最小化击键或增加打字速度
众所周知,您的键盘输入越少,工作效率就越高。因此您可以在bash中充分使用tab键,来让系统自动猜想,并帮您完成后续的参数内容。当然您也可以用到我们在前面提到过的CRTL+R,来对前面输入过的复杂命令,进行小修小改快速成型。
10.不断学习新的Linux命令
学习使人熟练。只有通过不断尝试新的命令和参数选项,才能缩短您在执行特定任务时的切换时间。另外,您还可以使用ctrl+z、fg和bg来暂停某个进程。其中:
- 使用"ctrl+z"可以将某个正在前台执行的命令挂起。
- 使用"fg"可以将后台某个命令调至前台继续运行。
- 使用"bg"可以对某个在后台被暂停的命令予以恢复并继续执行。
这些命令对于您需要同时查看多个文件或日志时,都是极其实用的。