1. 程式人生 > >SHELL訓練營--day1

SHELL訓練營--day1

shell 介紹

  • shell是一個殼,是基於核心提供的一個使用者介面,用來解釋使用者輸入資訊及執行和反饋使用者相關命令。
  • shell 具有自己的邏輯和判斷處理方法,支援特定語法
  • 使用者的shell設定: /etc/passwd 使用者登入shell設定。centos預設是bash.另外其它shell有zsh,ksh,tcsh等。

命令歷史

  • 使用者輸入命令,預設會儲存若干條。

    • 可通過shell中上下鍵進行查詢或重複執行命令。
    • 可通過快捷鍵 ctrl+R 進行查詢歷史命令。
    • 也可通過+命令的前些字元或是 +命令所在記錄的編號 進行執行命令。

      ``` shell
      #如 最近 執行的  ls -la /tmp 檢視 /tmp 目錄 檔案。可通過下面方法執行
      !ls
      #假如上條 ls -la /tmp 命令在命令歷史中 編號是 888 那麼可通過下面命令執行
      !888
      ```
    • 最近的一條命令相關資訊:
      #執行最近命令 
      !! 
      #檢視上條命令執行結果
      echo $?
  • 使用者預設的歷史命令儲存在家目錄下 ~/ .bash_history 檔案。
  • 預設歷史命令可存 1000條,通過 環境變數 $HISTSIZE 控制儲存條數。
  • 當前登入使用者在沒有退出前,預設輸入的命令會儲存在記憶體中,在退出時會寫入該檔案中。
  • 清空當前使用者 記憶體中儲存 的歷史命令: history -c
  • 系統設定 history 命令條數檔案:/etc/profile 可通過重宣告來修改。如:export HISTSIZE=5000
  • 預設系統是隻保留相關的命令,沒有命令執行時間 。可通過修改 環境變數儲存格式來儲存相關資訊:HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 。也可儲存在 profile 檔案中。
  • 使用者歷史命令儲存禁止刪除,可通過對儲存檔案.history新增隱藏追加許可權. 如:chattr +a ~/.bash_history

命令補全和別名

  • 為幫助使用者減少輸入和提醒使用者命令的全名和命令的引數,linux中提供命令補全,預設是TAB鍵。
  • 在centos6中只支援命令補全,centos7新增引數補全。相關的包是:yum install -y bash-completion。安裝後,需重啟伺服器。
  • 另外,有些命令和引數比較多,又比較常用,為幫助使用者減少重複輸入,引入別名。將長命令重命令以簡短不重複的單詞。
  • 檢視系統預設別名:alias
  • 設定命令別名:alias xxx="命令"。如常用 的ll命令:alias ll='ls -l --color=auto'
  • 取消別名設定:unalias xxx
  • 預設全域性別名設定:/etc/.bashrc 和 目錄/etc/profile.d/下指令碼檔案。個人設定別名存放於使用者家目錄下:~/.bashrc

萬用字元

  • 除命令補全外,linux對命令的物件也引入幫助機制--萬用字元。
  • 常見萬用字元如下:

    星號*:可匹配所有的字元,不限個數,如命令:ls 1*,可匹配1.txt,133.sh
    問號?:可匹配所有字元,只匹配一個。
    單個字元範圍:[123],[1-3],[abc],[a-z]等。
    單個字元範圍另種表示方法:{1,2,a,3,6}等。


輸入輸出重定向

  • 某些命令輸入輸出比較多時,或是輸出資訊需要儲存時,linux引入了輸入輸出重定向符號。
  • 重定向包含兩種型別:重定向和追加重定向。
  • 輸入重定向:< 常用來表示輸入檔案內容。
  • 輸入追加重定向:<<後需跟終止符 如"EOF" 。表示後續輸入資訊都是輸入的內容,直到遇見終止 符後。
     wc -l << EOF #此處回車
    hello
        world
        good
    EOF
  • 輸出重定向:&gt;。輸出追加重定向:&gt;&gt;
  • 輸出重定向表示:命令輸出的資訊 儲存在後面跟隨的檔案中,如果原檔案有內容,那麼之前資訊會刪除掉。
  • 輸出追加重定向:原檔案內容不變,將當前命令的輸出資訊追加到該檔案中。
  • 一般命令輸出分為兩類:正確輸出和錯誤輸出。檔案描述符是1和2。可通過指定檔案描述符輸出追加重定向來指定命令輸出 的儲存位置。

    如:cat 1.txt > ~/2.txt
    cat 3.txt 1&2 >> ~/2.txt
    cat 4.txt &>> ~/2.txt
    cat 6.txt 1>>~/2.txt 2>1