LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1247|回复: 7

Bash 使用技巧大补贴

[复制链接]
发表于 2007-7-23 11:07:18 | 显示全部楼层 |阅读模式
已经排版好的页面请参见这里:http://www.gracecode.com/article/display/100.html

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 输出。
发表于 2007-7-26 14:30:34 | 显示全部楼层
谢谢楼主的整理!
回复 支持 反对

使用道具 举报

发表于 2007-7-30 14:06:47 | 显示全部楼层
我试了一下,果然不错~~
* Ctrl + u:剪切光标之前的内容
* Ctrl + k:与上一个快捷键相反,剪切光标之后的内容
* Ctrl + t:交换光标之前两个字符的顺序
* Ctrl + w:删除光标左边的参数(选项)或内容
再补充一个
* ctrl+d:删除当前光标所在处的字符
但是各位注意!!!这些命令貌似是会改变历史记录的。即万一改错了,即使没有回车,记录也永远改变了。至少我试过是这样的-_-!
回复 支持 反对

使用道具 举报

发表于 2007-8-1 21:47:17 | 显示全部楼层
不过du -h -a -c $(find . -name *.conf 2>&-)命令中的2>&-是什么意思
2是标准错误 输出到什么地方呢  -是指什么
回复 支持 反对

使用道具 举报

发表于 2007-8-1 22:28:54 | 显示全部楼层
不错,那几个快截键的确很有用~~
回复 支持 反对

使用道具 举报

发表于 2007-8-2 18:28:08 | 显示全部楼层
Post by gregorian
不过du -h -a -c $(find . -name *.conf 2>&-)命令中的2>&-是什么意思
2是标准错误 输出到什么地方呢  -是指什么
这个是关闭文件标识符2,就是关闭标准错误输出
回复 支持 反对

使用道具 举报

发表于 2007-8-5 17:49:14 | 显示全部楼层
http://blog.csdn.net/wplxb/archive/2007/05/11/1604000.aspx

注:Alt 开头的一些快捷键可能需要禁止终端的菜单快速存取功能(如一般的 Alt + F 打开“文件”菜单等)

* Alt + A   将光标移到当前单词开头
* Alt + D   删除光标到当前单词结尾的部分
* Alt + E   将光标移到当前单词结尾
* Alt + F   将光标向前移动一个单词
* Alt + B   将光标向后移动一个单词

* Ctrl + A  将光标移到行首,同 Home
* Ctrl + B  将光标向后移动一个字符
* Ctrl + C  中断当前命令的执行(杀死当前运行的程序)
* Ctrl + D  若当前命令行有内容,删除光标所在处字符 (若有);否则退出当前 Shell
* Ctrl + E  将光标移到行尾,同 End
* Ctrl + F  将光标向前移动一个字符
* Ctrl + H  删除光标前一个字符,同退格键 (Backspace)
* Ctrl + K  删除当前行光标处之后的内容 (包括光标所在处字符)
* Ctrl + L  清除屏幕,效果同 clear 命令
* Ctrl + N  下一个命令,同向下键
* Ctrl + O  执行当前命令
* Ctrl + P  上一个命令,同向上键
* Ctrl + Q  继续被 Ctrl + S 暂停的当前命令的执行
* Ctrl + R  搜索并自动匹配以前输入过的命令
* Ctrl + S  暂停当前命令的执行,不返回命令输入界面
* Ctrl + T  交换光标处字符和光标前字符,并使光标后移一个字符的位置
* Ctrl + U  删除当前行光标处之前的内容 (不包括光标所在处字符)
* Ctrl + W  删除光标到当前单词开头的部分
* Ctrl + Y  插入最近删除 (通过 Ctrl + W 或 Alt + D) 的单词
* Ctrl + Z  挂起当前命令的执行并返回到命令输入界面(可以用 bg 命令将其放到后台执行,用 fg 命令将其拉回前台继续执行,具体参见 bg 和 fg 命令的文档)

* Esc + T   交换光标处单词和光标前单词,并使光标移动到后一个单词的位置

* Tab       自动补齐(包括文件名,目录名和命令)
* Tab + Tab 列出补齐的所有可能性

* 空格键    翻页(在命令模式下)
回复 支持 反对

使用道具 举报

发表于 2007-8-6 17:38:59 | 显示全部楼层
很实用,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表