bash的基础特性(2)

一. 命令的别名(alias)

  • alias可以将复杂的命令简化, 来提高工作的效率. 例如系统中默认将"ls -l"alias成了"ll".
  • 通过alias来管理命令
    • (1) alias:显示当前shell进程中所有可用的命令别名
        $ alias  
        alias l.='ls -d .* --color=auto'  
        alias ll='ls -l --color=auto'  
        alias ls='ls --color=auto'  
        alias vi='vim'  
        alias which='alias | /usr/bin/which --tty-only --read-alias
        --show-dot --show-tilde'
    
    • (2) alias NAME='VALUE'定义别名NAME, NAME就相当于NAME了
        $ alias cdnet='cd /etc/sysconfig/network-scripts'
        $ cdnet
        $ pwd
        /etc/sysconfig/network-scripts
    	```
    

Note: 在命令行中定义的别名, 仅对当前shell进程有效, 要定义在配置文件中

  • 仅对当前用户有效: ~/.bashrc

  • 对所有用户有效: /etc/bashrc

    bash进程重新读取配置文件: source /path/to/config_file

  • 撤销别名(unalias)
    unalias [-a] name[name....]

      -a: 撤销所有别名
    

Note: 如果别名同原命令的名称相同, 想要执行原命令, 可使用"\COMMAND"

二. glob/globbing: 通配符

glob在bash中用于实现文件名"通配"
通配符: *, ?, []
  • (1) * 用于任意长度的的任意字符 例如a*b和aab,abb,acb,accccccb是一样的

        $ ls /etc/a*b 
        /etc/aliases.db  /etc/anacrontab
    
  • (2) ? 匹配任意单个字符 例如a?b和akb,a1b,acb是一样的

        $ ls -d Downloa?s
        Downloads
    
  • (3) [] 匹配指定范围内的任意单个字符 例如[a-z]

  • (4) [^] 匹配指定范围外的任意单个字符 例如[^0-9]表示除数字以外的任意字符

专用字符合集:

[:digit:] 任意数字,相当于0-9(实际用的时候要[[:digit:]]这样用)
[:lower:] 任意小写字符
[:upper:] 任意大写字符
[:alpha:] 任意大小写字符
[:alnum:] 任意数字或字母
[:space:] 任意空格字符
[:punct:] 标点符号
[:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]
[:digit:]  [:graph:]  [:lower:]  [:print:]
[:punct:]  [:space:]  [:upper:]  [:xdigit:]

三. bash的快捷键

  • Ctrl+l: 清屏, 相当于clear
  • Ctrl+a: 将光标跳转至命令开始处
  • Ctrl+e: 跳转至命令结尾处
  • Ctrl+c: 取消命令执行
  • Ctrl+u: 删除命令行首至光标所在处的所有内容
  • Ctrl+k: 删除光标所在处至命令尾部的所有内容

四. bash的I/O重定向及管道

程序: 指令+数据
    读入数据: Input
    输出输入: Output

打开的文件都有一个fd: file description(文件描述符)

标准输入: keyboard, 0
标准输出: monitor, 1
标准错误输出: monitor, 2

I/O重定向: 改变标准位置

  • 输出重定向: COMMAND > NEW_POSITION, COMMAND >> NEW_POSITION

    • >: 覆盖重定向, 目标文件中的原有内容会被清除

    • >>: 追加重定向, 新内容会追加到目标文件中

    • # set -C: 禁止将内容覆盖输出至已有文件中

        强制覆盖: >|  
      
    • # set +C: 允许将内容覆盖输出至已有文件中

    • 2>: 覆盖重定向错误输出数据流

    • 2>>: 追加重定向错误输出数据流

  • 将标准输出和错误输出各自定义向不同位置

      COMMAND > /path/to/file.out 2> /path/to/error.out
    
  • 合并标准输出和错误输出为同一数据流进行定向

    • &>: 覆盖重定向
    • &>>: 追加重定向
    • COMMAND > /path/to/file.out 2> &1
    • COMMAND >> /path/to/file.out 2>> &1
  • 输入重定向: <

  • HERE Documentation: <<

    $ cat << EOF
    > fdsfadfads
    > fdsfs
    > EOF
    fdsfadfads
    fdsfs
    
    • cat > /path/to/somefile << EOF: 输入字符以EOF结尾并输出至somefile
  • 管道(将前一个命令的结果作为后一个命令的参数)

      COMMAND1 | COMMAND2 | COMMAND3.....
    

Note :最后一个命令会在当前shell的子进程中执行

五. tee命令:

tee [OPTION]... [FILE]...
    Copy standard input to each FILE, and also to standard output.