1. 程式人生 > >菜鳥的linux成長日記-bash基礎特性2

菜鳥的linux成長日記-bash基礎特性2

alias 特性 mman 菜鳥 each 默認 NPU bash的基礎特性 dig

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) 用於任意長度的的任意字符 例如ab和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.

菜鳥的linux成長日記-bash基礎特性2