您的位置:首页 > 运维架构 > Shell

bash使用技巧整理

2016-10-20 01:20 183 查看

说明:

    这些技巧主要来自history&read line这两个库,下文中的技巧也适用其它使用该库的应用程序。
    bash命令可以使用ctrl + alt + e展开,参数使用ctrl x + *(glob-expand-word)展开,以查看是否与期望相符。
    bash命令历史可以看成是Emacs里的一个buffer,与emacs中快捷键类似,使用bind -P命令可以查看所有readline键盘绑定。
    ESC和ALT通用,只是有时其中的一个更方便使用。
    连续输入几条命令之后考虑下有没有可以提高效率的地方。

I. history

    ^foo            删除上一条命令中的foo

    ^foo^bar    将上一条命令的第一个foo改为bar

    !!                 重新执行上一条命令

    !N               重新执行第N条命令

    !-N              重新执行倒数第N条命令

    !string        重新执行以字符串开头的命令

    !?string?   重新执行包含字符串的命令

    !$               上一条命令的最后一个参数

    !^               上一条命令的第一个参数

    !cmd:n     上一条命令的第n个参数

    !*              上一条命令的所有参数

    !*:x            x表示修饰符

        :s/old/new/ 对第N条指令中第一次出现的new替换为old

        :gs/old/new/ 全部替换

        :n 取指令的第w个参数

        :p 回显命令而不是执行

        :h 选取路径部分dirname

        :t 选取文件名部分basename

        :r 选取文件名filename

        :e 选取扩展名

    实例演示

    root@ADT:~# rm /usr/lib/libtpn_http.so

    root@ADT:~# cd !:$:h #切换到/usr/lib目录下

II. read line(Emacs风格)

    移动类

    Ctrl + a(head) 移到命令行首

    Ctrl + e(nd) 移到命令行尾

    Ctrl + f(orward) 右向按字符前移

    Ctrl + b(ackward) 左向按字符后移

    Alt + f(orward) 右向按单词前移(以空格,斜线,点号作为word边界))

    Alt + b(ackward) 左向按单词后移(以空格,斜线,点号作为word边界))

    Alt + < 移动到历史记录的开始行

    Alt + > 移动到历史记录的末尾行

    Ctrl + x + x 在命令行首和光标之间位置切换

    删除类

    Alt + # 注释当前行

    Ctrl + u 从光标处删除至命令行首

    Ctrl + k 从光标处删除至命令行尾

    Ctrl + w 从光标处删除至字首(以空格作为word边界)

    ESC + Backspace 从光标处删除至字首(以空格,斜线,点号作为word边界)

    Alt + d 从光标处删除至字尾

    Ctrl + d 删除光标处的字符

    Ctrl + h 删除光标前的字符

    Ctrl + y 粘贴至光标后

    大小写快速转换

    Alt + c 从光标处更改为首字母大写的单词

    Alt + u 从光标处更改为全部大写的单词

    Alt + l 从光标处更改为全部小写的单词

    顺序快速调换

    Alt + t 交换光标处和之前的单词

    Ctrl + t 交换光标处和之前的字符

    撤销修改

    C-/ 或 C-_

    Alt+r 撤销当前行的所有内容

    清屏

    Ctrl + l

    clear

    查找历史命令

    Ctrl + r逆向搜索历史命令行和当前命令行

    TIPS : 在当前行中搜索,可以快速定位到需要修改的字符:P

    Ctrl + g终止搜索并还原原始命令行

    Ctrl + j终止搜索并停留在查找的位置,直接使用ESC也可以实现该功能

    Ctrl + p历史中的上一条命令

    Ctrl + n历史中的下一条命令

    alt + n\p非增量搜索

    Ctrl + o执行当前命令,并选择上一条命令

    插入数据

    TAB complete

    ESC + .

    使用上次命令的最后一个参数,重复使用会获取上上次命令的最后一个参数,总共插入一个参数;

    ESC-n + ESC + .

    把上一条命令的第n个参数放在命令行上,如果重复使用,上次输出会被替换成上上条命令的第n个参数,总共插入一个参数;

    Ctrl + alt + y

    使用上次命令的第一个参数,如果重复使用会插入多个参数;

    ESC -1 + Ctrl + alt + y

    使用上次命令的最后一个参数,如果重复使用会插入多个参数;

    ESC + * insert-completions

    插入所有可能的补全

    列出参考

    ESC + ? 显示所有可用候选项

    ESC + ! complete-command

    ESC + / complete-filename

    ~TabTab | ESC + ~ complete-username列出所有系统用户

    $TabTab | ESC + $ complete-variable 列出所有系统变量

    @TabTab | ESC + @ complete-hostname列出所有主机

    =TabTab 列出当前目录下的所有文件和目录

III. 常用配置

    避免重复和无用的命令加入历史记录

    export HISTIGNORE="&:ls:ls *:mutt:[bf]g:exit"

    定制上下箭头补全bash历史命令:

    bind '"\e[A": history-search-backward'

    bind '"\e[B": history-search-forward'

    定制Ctrl+Alt+f/b在多个文件路径之间快速移动,即以空格作为word边界移动:

    bind '"\e\C-b": shell-backward-word'

    bind '"\e\C-f": shell-forward-word'

IV. 其它命令

    如果频繁地在多个较长的目录之间转换,使用pushd代替cd或者使用export CDPATH=/path1:/path2(类似PATH)

    删除某个文件之外的所有文件:(shopt -s extglob; rm -rf !(filename))

    查看指定进程id但不显示grep的id:ps aux | grep 'ss[h]' #grep和正则结合,利用正则和本身字面值不同

    汇总文本第三列数字的和: awk '{ x += $3 } END {print x }' myfile

    快速创建一个大文件:dd if=/dev/zero of=/tmp/test bs=1M count=2048

    临时修改影响程序的环境变量,而不影响其它进程:  ENV_VAR=VALUE your_program

    使用{}构造字符串,使用` ` 或 ()做命令替换

        develop@localhost:~$cp file.c{,.bak} —> cp file.c file.c.bak

        develop@localhost:~$vim {a,b,c}file.c —> vim afile.c bfile.c cfile.c

        develop@localhost:~$touch {01..5}.txt —> 01.txt 02.txt 03.txt 04.txt 05.txt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bash 高效技巧