Bash 使用技巧

Bash 是我们经常与之打交道的 Shell 程序,本文针对其使用技巧进行了搜罗。相信在你看过这些内容之后,定会在 Bash 的世界里游刃有余。

  • 从历史中执行命令 有时候,我们需要在 Bash 中重复执行先前的命令。你当然可以使用上方向键来查看之前曾经运行过的命令。但这里有一种更好的方式:你可以按 Ctrl + r 组合键进入历史搜索模式,一旦找到需要重复执行的命令,按回车键即可。
  • 重复命令参数 先来看一个例子: mkdir /path/to/exampledir cd !$ 本例中,第一行命令将创建一个目录,而第二行的命令则转到刚创建的目录。这里,“!$”的作用就是重复前一个命令的参数。事实上,不仅是命令的参数可以重复,命令的选项同样可以。另外,Esc + . 快捷键可以切换这些命令参数或选项。
  • 用于编辑的快捷键
    • Ctrl + a:将光标定位到命令的开头
    • Ctrl + e:与上一个快捷键相反,将光标定位到命令的结尾
    • Ctrl + u:剪切光标之前的内容
    • Ctrl + k:与上一个快捷键相反,剪切光标之后的内容
    • Ctrl + y:粘贴以上两个快捷键所剪切的内容
    • Ctrl + t:交换光标之前两个字符的顺序
    • Ctrl + w:删除光标左边的参数(选项)或内容
    • Ctrl + l:清屏
  • 处理作业 首先,使用 Ctrl + z 快捷键可以让正在执行的命令挂起。如果要让该进程在后台执行,那么可以执行 bg 命令。而 fg 命令则可以让该进程重新回到前台来。使用 jobs 命令能够查看到哪些进程在后台执行。 你也可以在 fg 或 bg 命令中使用作业 id,如: fg %3 又如: bg %7
  • 使用置换
    • 命令置换 先看例子: du -h -a -c $(find . -name *.conf 2>&-) 注意 $() 中的部分,这将告诉 Bash 运行 find 命令,然后把返回的结果作为 du 的参数。
    • 进程置换 仍然先看例子: diff <(ps axo comm) <(ssh user@host ps axo comm) 该命令将比较本地系统和远程系统中正在运行的进程。请注意 <() 中的部分。
    • xargs 看例: find . -name *.conf -print0 | xargs -0 grep -l -Z mem_limit | xargs -0 -i cp {} {}.bak 该命令将备份当前目录中的所有 .conf 文件。
  • 使用管道 下面是一个简单的使用管道的例子: ps aux | grep init 这里,“|”操作符将 ps aux 的输出重定向给 grep init。 下面还有两个稍微复杂点的例子: ps aux | tee filename | grep init 及: ps aux | tee -a filename | grep init
  • 将标准输出保存为文件 你可以将命令的标准输出内容保存到一个文件中,举例如下: ps aux > filename 注意其中的“>”符号。 你也可以将这些输出内容追加到一个已存在的文件中: ps aux >> filename 你还可以分割一个较长的行: command1 | command2 | ... | commandN > tempfile1 cat tempfile1 | command1 | command2 | ... | commandN > tempfile2
  • 标准流:重定向与组合 重定向流的例子: ps aux 2>&1 | grep init 这里的数字代表:
    • 0:stdin
    • 1:stdout
    • 2:sterr
    上面的命令中,“grep init”不仅搜索“ps aux”的标准输出,而且搜索 sterr 输出。

××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

这是我所见过的 Bash 提示当中非常 Cool 的几个,使用它们能够让你充分地享受到 CLI 的高效,并免除重复输入的麻烦,从而节省大量地时间。

  1. 清屏 一般来讲,为了清屏,我们通常使用 clear 命令。你有没有试过它的快捷键 Ctrl+L?个人认为使用组合键操作更快捷。
  2. 逆向搜索 有时候我们需要重新执行先前输入的命令。那么,在使用快捷键 Ctrl+R 后输入命令,Bash 将为你自动完成。
  3. 命令置换 谁都避免不了输入错误命令的情况,不要紧,可以使用 ^texttosobstitute^sobstitution 来置换。比如,你输入了一个 sudo apt-get updkte 的错误命令,Bash 当然无法执行它了,这时可以通过输入 ^updkte^update(或 ^k^a)来纠正错误。
  4. 重复上次的操作 如果你想要重复执行上次的命令,那么只需输入 !! 即可。
  5. 重复上次的参数 如果你想要重复使用上次所用命令的参数,则可以使用 !$。举个例子,假如你上次执行的命令为 ls -lsh,那么,现在可以用 ls !$ 来达到同样的目的。

××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

下面两个诀窍可以增强 Bash 的功能,一个是针对 Bash 的命令历史管理进行了改善,另一个是使 Bash 能够具有更加智能的自动完成特性。实现的过程并不复杂,只需修改 Bash 的默认配置即可。

  1. 改善 Bash 的命令历史管理功能: Bash 的默认配置会存在一个问题,如果同时打开两个(或两个以上的)控制台,那么在这两个控制台中执行的命令并不会互相分享到 history 中。有的命令历史甚至最终会被覆盖掉。要解决这个问题,可把下列内容添加到 ~/.bashrc~/.bash_profile 文件中: shopt -s histappend PROMPT_COMMAND='history -a' 第一句的作用是将命令追加到 history 中。第二句是在显示命令提示符时,保存 history。
  2. 设置智能的自动完成功能: 在 Bash 中我们已经可以通过按 Tab 键来享用自动完成的特性。通过下面的设置,则可以使用 Up 和 Down 键来选择命令后所跟的参数。在 .inputrc(如果该文件不存在,则创建一个)中加入下列内容: "\e[A": history-search-backward "\e[B": history-search-forward set show-all-if-ambiguous on 前两句使用 Up 和 Down 在 history 中进行搜索。后一句是按 Tab 显示自动完成。如果结合 Ctrl - R,则更加好用。

××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

posted @ 2014-03-20 12:45  samhugh  阅读(221)  评论(0编辑  收藏  举报