尽管Linux桌面在过去二十年中经历了巨大的改变(最显著的变化可能是Ubuntu Unity界面),根据可以提供给有经验系统管理员的力量,命令行依然是非平行的。尽管接下来的十个技巧大部分关于Bash shell,所有这些技巧都可以很容易地应用到其它现在shell上。
1.运用一条命令来创建并进入目录
创建接着进入一个新目录是一个非常普通的任务,似乎在shell中执行两种命令都该有捷径。虽然没有捷径,你可以将以下函数添加到你的.bashrc文件:
mkcd()
{
mkdir $1
cd $1
}
接着运行源.bashrc来读取内存中的变化,并运用mkcd命令完成两个服务:
wjgilmore@ubuntu:~$ mkcd articles
wjgilmore@ubuntu:~/articles $
2.回到前一目录
当你需要从结构复杂的目录中转移并想要回到初始目录时,你可以将之前一路径传递到cd命令,但是鲜为人知的cd命令让这件事变得琐碎。该顺序展示了该行为:
wjgilmore@ubuntu-laptop:~/Documents/techtarget_articles/ten_command_line_tricks/test2$ cd
wjgilmore@ubuntu-laptop:~$ cd -
~/Documents/techtarget_articles/ten_command_line_tricks/test2$
wjgilmore@ubuntu-laptop:~/Documents/techtarget_articles/ten_command_line_tricks/test2$
3.创建目录书签
继续跟随目录互动的主题,你会不可避免地一次次回到某些目录。可以通过添加到$CDPATH shell变体的路径(在你的.bashrc文件中)来创建能让你快速导航到这些目录的书签:
CDPATH='.:/home/wjgilmore/books'
一旦添加,你可以从操作系统路径中的任一处直接导航到书签目录,只需要执行如下命令:
$ cd books
4.熟练地编辑命令行
你有多少次在沉闷地编辑和执行一系列略微不同的命令?例如我在忙于创建来自Markdown源的不同书本章节的PDF版本时,我通常执行以下命令:
$ pandoc -o html/chapter06.html chapters/chapter06.md --template=templates/html.template
为了也创建chapter04.md源文件,命令行初学者会很快厌倦用向上箭头在历史中检索之前执行(上一)命令,然后用左指箭头直到用chapter04.md更换了所有chapter06.md实例。还有很多更高效的方式来执行该任务。首先,考虑使用Bash的命令行编辑键盘快捷键(两种支持模式:Emacs和vi),这让你可以快速地导航到想去的位置:
Ctrl + a:去往首行
Ctrl + e: 去往末行
Alt + f: 前进一个字
Alt + b: 退后一个字
第二种且可能更有效的方法是使用命令行替换。接下来的命令会将在之前执行命令中发现的06用04代替:
$ pandoc -o html/chapter06.html chapters/chapter06.md --template=templates/html.template
$ !!:gs/06/04
pandoc -o html/chapter04.html chapters/chapter04.md --template=templates/html.template
如果你正偶然地使用GNOME终端,那么元(Alt)键不会如描述般工作,因为GNO ME终端已经绑定Alt键到工具栏命令。你还可以选择使用Shift + Alt作为元键,但是这有点笨拙。相反地,如果你不需要工具栏命令快捷键,通过导航到编辑-> 键盘快捷键来关闭它们…也能关闭启用菜单访问键选项。
5.为之后的使用保存长命令
当通过一列系统管理员操作的工作时,可以输入特定的长命令并在执行它之前意识到省去序列中的一个步骤。相比于删除该命令,你可以将其保存到历史,而不用通过添加井号键(#)到命令开端:
$ #this is some ridiculously long command that I want to save
在按下Enter键后,用向上箭头,你会看见保存的命令。要执行该命令,只要在执行前从行的开始移开井号键。
6.运用命令别名保存输入
ls命令的长列表格式(ls -l)可以频繁地运用,但是连字符让它在大量输入时有点不实用。你可以使用.bashrc内的别名命令创建命令别名用于长命令。在这个例子中,命令别名dir是ls –l的替代。
alias dir='ls -l'
7.通过忽略输入错误保存更多输入
你正处于终端区域,在任意地复制、更新和移除文件时从一个目录激发到下一个。或者你不在终端区域,由于手指比大脑运动得更快,甚至键盘反应时间可以处理,这导致你要不断地返回并更正你的输入错误。在你的.bashrc文件中添加以下行,shell会在识别文件或路径名字时自动地修正所有输入错误。
shopt -s cdspell
8.在后台打开应用程序
当巡视命令行时,你也许会需要进行另一个任务,如响应一封邮件。当然,可以按你执行其它命令的方式从终端打开GUI应用,只需通过调用它们的名字完成,在这个例子中,打开Gimp:
$ gimp
但是有效地这么做结束了你的终端会话,因为应用程序会在前台打开。如果你正从命令行中常规打开一个特定程序,考虑在你的.bashrc文件里修改它的默认调用:
gimp()
{
command gimp "$@" &
}
重载你的.bashrc文件(见源命令),你将能调用Gimp应用,和任意你想要打开的图像文件名称一起传递,还有保留终端控制的附加福利。
9.以少换多
更多的命令在快速细读文本文件内容时实用。一旦文件负载到页面,你可以运用/来搜索文件。问题并是一旦你发现想要的行,向上导航并检查看上去高于该行的内容不可能。更少的命令并不是劣势,它允许你可以实现向上和向下的文本滚动。以相同的方式调用越少的命令得到的越多:
$ less sometextfile.txt
10.清理你的命令行历史
历史命令(history command)很容易成为你能支配的最有力工具之一。但是有一个节省时间的命令尤其值得一提:$HISTIGNORE shell变量。
随着时间,你的历史列表会变得非常长。利用$HISTIGNORE变量来排泄你认为不相关的记录:
$ export $HISTIGNORE="&:cd:exit:ls"
这会导致所有复制的命令、cd、离开和ls命令从历史命令中遗漏。
速度是管理命令行的关键,而这十个技巧应该可以帮助你开始你的命令行管理。