有位童鞋正在Linux系统上开发一个中文相似度匹配的项目,工作相当努力,已经达到了废寝忘食的地步,但是使用的TF-IDF[⑤]算法的计算速度还是不尽人意。这时候,他决定先停一停,换换思路,玩玩俄罗斯方块放松一下。突然老板走过来,他下意识地使用<Ctrl><Alt><d>快速隐藏桌面。还好有惊无险,没有被老板发觉在玩游戏,否则又需要一大堆的解释。老板拍了拍他的肩膀走了过去,随后他用<Ctrl><Alt><d>又恢复了原有功能的显示。
举这个好玩的例子可不是让你照着做,而是为了告诉你Linux系统提供了很多快捷键提高命令行使用的工作效率,减少键盘的敲打以及拼写错误。说几个比较实用的快捷键,见表1-2所示,其他的你自己去挖掘。
表 1-2
常用快捷键 |
说 明 |
<Tab> |
在文本终端下,使用TAB自动完成命令的输入,或者显示所有的可选项。超好用! |
<Shift><PgUp> |
滚动文本终端输出。终端屏幕上一屏又一屏的提示信息,就可以用它向上翻滚查看这些信息 |
<Shift><PgDn> |
回滚文本终端输出 |
<Ctrl><Alt><Delete> |
文本终端下关机和重新启动 |
<Ctrl><Alt><Backspace> |
关闭或重启X Window |
<Ctrl>a |
到正在输入的命令行的首部 |
<Ctrl>e |
到正在输入的命令行的尾部 |
<Ctrl>c |
终止当前进程 |
<Ctrl>s |
停止终端传输 |
<Ctrl>p |
上一条执行的命令 |
<Ctrl>n |
下一条执行的命令,前提是执行过<Ctrl>p |
<Ctrl>f |
在当前命令输入中右移光标一个字符 |
<Ctrl>b |
在当前命令输入中左移光标一个字符 |
<Alt>f |
在当前命令输入中右移光标一个词 |
<Alt>b |
在当前命令输入中左移光标一个词 |
<Ctrl>k |
删除光标后的所有字符 |
<Ctrl>d |
删除光标当前的字符 |
<Alt><Tab> |
切换不同的程序窗口 |
<Alt><F1> |
访问“开始”菜单 |
<Alt><鼠标左键> |
拖曳并移动一个窗口 |
<Alt><PrintScreen> |
把当前屏幕的快照存到剪贴板 |
<Ctrl><Alt><d> |
哈哈,老板键。切换隐藏/显示桌面运行程序 |
使用快捷键太爽了!默认情况下,按TAB在bash中是可以自动补齐,但仅能自动补齐命令名和文件名。可是我们追求的目标是“更快、更高、更强”,那就安装bash-completion做个增强版的自动补齐吧。使用TAB键自动补齐几乎任何内容,包括参数、文件、目录甚至包名称等。安装方法很简单,下载到的包中包含一个bash-completion文件,将其放在/etc下。在/etc/bash.bashrc文件里加入可执行命令(这个操作需要root权限)。
# Run bash completion code if [ -r /etc/bash_completion ]; then # Source completion code. . /etc/bash_completion fi
1. 更快……
举个例子。淘宝的预发环境中的Linux机器不允许直接登录。需要申请跳板机,通过跳板机才能登录预发机。在跳板机上,我们经常使用ssh 10.232.15.201操作命令,好麻烦呀。在/etc/hosts中我们加入一行“10.232.15.201 prerelease”。
然后我们使用complete -F _known_hosts ssh告诉ssh需要的主机名。一旦设置好了,我就可以通过敲[TAB]键完成主机名的输入:ssh p[TAB]。
另外你还可以定制私有命令的补齐功能,不过你需要自己编写shell脚本实现,然后把这个脚本放在/etc/bash_completion.d/下。在随后的章节,我们会学习shell脚本的编程。在学完之后,希望你会通过编写脚本产生自己的补齐功能。
2. 更高……
有的命令太长,那就把命令缩短。命令别名(alias)就起到这个作用。例如在SUSE版本中有个命令别名的文件(/etc/profile.d/alias.bash)。它里面定义了许多命令别名,例如alias ..='cd ..', 那么在终端上输入“..”就相当于输入了“cd ..”直接回到上级目录,方便不?
3. 更强……
在shell终端上还可以一下子运行多个命令,只需要用分号“;”把各个命令串起来就行:
[命令1];[命令2];[命令3]
不管执行的命令结果如何,就是勇往直前地冲呀杀呀,把这些命令最终执行掉。但是有时候,这些命令之间是有关联的,就需要改改这种傻愣愣的工作方式。我们可以用“&&”把命令连接起来,只有前一个命令执行成功才执行下一个命令:
[命令1]&&[命令2]&&[命令3]
如果需要等前一个命令执行失败才执行下一个命令,则要使用“||”把命令连接起来:
[命令1]||[命令2]||[命令3]
哎,使用命令行的技巧还真不少,我们可以考虑出版一本专门讲述Linux命令行的参考书了:)
[⑤] TF-IDF(term frequency-inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一个字词对于文件集或语料库中的一份文件的重要程度。
Comments