天天看點

Linux雜記bash-shell

  • bash

    以及特性
    • shell

      :表示的意思是外殼,也就是用于連入計算機使用的工具;

      GUI

      風格的

      shell

      包括

      Gnome,KDE,Xfce

      ,

      GLI

      風格的

      shell

      包括

      sh,csh

      (類似于C語言的程式設計風格),

      Ksh

      (支援的功能更多.商業化産品),

      tcsh

      ;
    • Linux

      :

      bash_shell

      兼具以上

      Shell

      的所有特性,對于

      shell

      來說需要注意以下幾點
    • 當一個系統同時登入兩個以上的使用者,預設的

      shell

      隻有一個,相應的程序是有多個的;
    • shell

      是存在

      shell

      以及子

      shell

      的;
    • 程序是不會發現子程序存在的,哪怕是父子程序,對于父程序的設定對于子程序是無效的,反之亦然;,這個關于程序的特性說明 ,在子程序裡面的設定的

      bash

      特性對于上層的

      shell

      是不會生效的;
  • bash_shell

    的特性:
    • 1.指令曆史:自動記錄一些指令記錄,儲存在記憶體緩沖中;
      • history

        :用于檢視指令執行曆史;
        • -c

          :用于清除曆史指令;
        • -d

          :用于删除指定條數的曆史指令,可以指定

          num1 num2

          ,用于删除

          num1-->num2

          之間的曆史指令;

          bash

          正常退出之後,,指令的曆史記錄會被儲存在

          ~/.bash_history

          中;
        • -w

          :用于将緩沖區的指令,寫入曆史檔案中;
        • HISSIZE:

          預設為 1000 條 是一個變量,表示指令緩沖區大小;
        • !n

          :n 執行指令曆史中的第 n 條指令;
        • !-n

          :表示執行倒數第 n 個指令;
        • !!

          :執行上一條指令;
        • !string

          :執行最近一次字元串為

          string

          的指令;
        • !$

          :引用上一個指令最後一個參數
    • 2.管道,重定向;
    • 3.指令别名;
      • alias comman1=command2

        :用于定義别名,

        command2

        必須是一個已經存在于

        bash

        環境中的指令;使用這種方式定義的别名隻在目前的

        shell

        生命周期内有效, 僅用于目前

        shell

        程序,可以在

        bash

        環境中進行定義,也就是檔案

        bashrc

        ;
      • alias

        :用于顯示目前系統中的别名
      • unalias

        :可以用于撤銷别名;
    • 4.指令行展開;
      • 指令行展開: 将花括号裡面的參數進行展開.例如:

        mkdir –pv /mnt/test/{a,d}_{b,d}

        可以建立四個檔案;
    • 5.指令行通配:
      • *

        : 比對任意長度的任意字元字元, 包含空字元;
      • ?

        : 比對任意單個字元;
      • []

        :比對指定範圍被的任意單個字元

        [abc]

        ,其中

        [a-z]

        :表示比對

        [ ]

        中的任意字元. 還有

        [a-Za-z]

        ;
      • [^]:

        比對除了括号裡面的任意單個字元,例如

        [^0-9]

        : 表示不含

        0-9

        的檔案名;
      • 建立一個檔案名包含空格檔案,

        touch ‘a b’

        用于建立一個檔案,裡面含有空格;
      • 其他的比對規則:
        • [[:space:]]

          : 表示空白字元;
        • [:punct:]

          :表示标點符号;
        • [:lower:]

          :表示小寫字母;
        • [:upper:]

          :表示大寫字母;
        • [:alpha:]

          : 表示所有的大小寫字母;
        • [:digit:]

          : 表示數字;
        • [:alnum:]

          : 表示數字和大小寫字母;
        • ^

          :表示進行取反操作;
      • 對于上面的資訊可以使用

        man glob

        來進行檢視;
    • 6.支援指令替換:
      • 把指令中某個子指令替換為其執行結果的過程.

        echo the current directory is $(pwd)

        ,或者是這種類型:

        touch . /file-$(date+%F-%H-%M-%S).txt

        ;
      • 這兩種方式是等價的:

        $(command)

        或者

        command

    • 7.

      shell

      腳本;
  • 指令行編輯
    • Ctrl+a

      :跳轉到行首;
    • Ctrl+e

      :跳轉到行尾;
    • Ctrl+j

      :表示回車指令;
    • Ctrl+u

      :表示删除光标之前删除;
    • Ctrl+k

      :表示删除光标之後的字元;
    • Ctrl+左右箭頭

      :可以依次跳轉一個單詞;
    • Ctrl+l

      :表示清螢幕操作;
  • 指令曆史
    • bash

      會自動記錄執行過的指令,并且儲存在某個緩沖區裡面,使用

      histoty

      可以進行執行過得指令檢視;使用者正常推出

      shell

      終端,指令曆史會被儲存在

      ~/.bash_history

      裡面,

      bash

      一共可以儲存的指令大約有

      500

      條,可以

      HISTSIZE=1000,

      預設是

      1000

      ;
    • history

      :
    • -c

      :表示用于清空整個指令曆史;
    • -d

      :表示用于删除第幾個曆史指令,

      history -d 500 10

      表示删除

      500

      以後的

      10

      個指令;
    • -w

      :表示手動的将緩沖區的指令寫到檔案裡面;
    • !n

      :表示執行指令曆史中的第

      n

      條指令;
    • !-n

      :表示執行指令曆史中倒數第

      n

      條指令;
    • !!

      :表示執行上一條指令;
    • Ctrl+R

      :表示搜尋指令;
    • !COM

      :表示執行指令曆史中以指定字元串開頭的指令;
    • !$

      :表示引用前一指令的最後一個參數;
    • Esc .

      :表示最近一個變量;
    • Alt .

      :表示最近一個變量;
  • 指令别名
  • alias COMMANDalias=COMMAND

    ,定義的

    shell

    别名隻在目前

    shell

    生命周期裡面有效,切換

    shell

    無效;
  • 如果需要定義永久生效的别名,配置檔案進行更改,配置檔案通常是

    ~/.bashrc

    ;
  • 别名的撤銷

    ualias COMMANDALIAS

    ;
  • 指令替換
  • 把某個指令替換為起執行結果的過程,稱為指令替換,指令替換存在兩種方式:
    • echo "The current directory is $(pwd)"

      ;
      • touch ./file_$(date +%F-%H-%m-%S).txt

        ;
    • 指令替換可以使用

      ``

      來執行;
  • 關于

    bash

    支援的引号類型:
    • ``

      :用于表示指令替換;
    • " "

      :用于表示弱引用,用于實作變量替換;
    • ' '

      :用于表示強引用,不完成變量替換;
  • 關于

    shell

    補充資訊
  • shell

    的類型可以分為:
    • 登入

      shell

      :
      • 當使用者通過終端輸入帳号密碼登入的

        shell

        ;
      • 使用

        su - USERNAME

        切換的

        shell

        ;
      • 使用配置檔案的讀取順序:

        /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile -->~/.bashrc--> ~/etc/bashrc

    • 非登陸式

      shell

      :
      • su USERNAME

      • 圖形終端打開的

        shell

        ;
      • 自動執行的

        shell

        腳本;
      • 非登入式

        shell

        登入配置檔案的順序:

        ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

      • 關于

        su -

        su

        指令切換使用者在讀取配置檔案是由差別的;
    • bash的配置檔案

      :
      • 全局配置檔案:
        • /etc/profile

        • /etc/profile.d/*.sh

        • /etc/bashrc

      • 個人使用者配置:
        • ~/.bash_profile

          ;
        • ~.bashrc

          ;
    • profile

      類的檔案:
      • 設定環境變量;
      • 運作指令或者腳本;
    • bashrc

      :
      • 用于設定本地變量;
      • 定義指令别名
    • 當全局的配置檔案和個人的配置檔案時,按照個人配置資訊為準;
  • 檔案名通配
  • *

    : 表示顯示任意長度任意字元比對的;
  • ?

    :表示任意單個字元;
  • []

    :表示比對指定範圍内的任意單個字元;
  • [^]

    :表示指定範圍之外的單個字元;
  • [[:space:]]

    :表示空白字元;
  • [:punct:]

    :表示标點符号;
  • [:lower:]

    :表示小寫字母;
  • [:upper:]

    :表示大寫字母;
  • [:alpha:]

    :表示字母;
  • [:digit:]

    :表示數字;
  • [:alnum:]

    :表示數字和字母;
  • 重定向
  • 作業系統需要為應用程式設定預設的輸出和輸入裝置,
    • 預設的輸出裝置:标準輸出,

      stdout

      ,檔案描述符是

      1

      ;
    • 預設的輸入裝置:标準輸入,

      stdin

      ,檔案描述符是 ;
    • 标準錯誤輸出:

      STDERR

      ,檔案描述符是

      2

      ;
  • IO

    重定向 :
    • 輸出重定向: 表示的含義就是改變這些輸出資訊的走向,需要使用

      >(輸出重定向)

      ,

      >>

      表示的含義時追加,不會覆寫原有檔案的内容;
      • 2>

        表示重定向錯誤輸出;
      • 2>>

        :表示追加重定向錯誤輸出;
      • &>

        :表示重定向錯誤輸出和标準輸出到同一個檔案;
      • &>>

        :表示追加方式;
    • 輸入重定向:
      • <

        :表示輸入重定向;
      • <<

        :表示在此處生成文檔 後面的符号表示結束符号;
        • cat >> /tmp/a.hadoop << EOF

          :表示用于将一些資訊生成檔案;
    • 管道:
      • 将一個指令的輸出作為另一個指令的輸入,就要通過管道來完成,管道可以連續輸入;
    • set

      :
      • -C

        :表示禁止對于檔案使用輸出覆寫操作,如果在開啟這個功能的時候,需要強制進行覆寫使用

        >|

        代替

        >

        來執行覆寫操作;
      • +C

        :表示關閉上述功能;
    • 輸出重定向和錯誤重定向是不同的資料流;
    • tee

      :
      • read from standard input and write to standard output and files

        ,表示将得到的内容用于儲存并且一份用于輸出到标準輸出;
      • echo "Hello,world" | tee /tmp/a.hadoop

        ,這份資訊一份儲存到檔案裡面,一份輸出到标準輸出;
  • 關于重定向
  • 程式預設是從标準輸入,标準輸出來擷取程式的一部分資料的,常見的标準輸出輸入裝置包括:
    • STDIN

      :表示标準輸入,使用 進行表示;
    • STDOUT

      :表示标準輸出,使用

      1

      進行表示;
    • STDERR

      :表示标準錯誤輸出,使用數字

      2

      進行表示;
  • 重定向就是對上面輸入或者輸出流的改變;
    • >

      :表示輸出重定向,将本應該輸出到螢幕上的檔案資訊導入到其他檔案或者輸入流,如果導入的是檔案, 就會覆寫原有檔案;
    • >>

      :同樣表示的是輸出重定向,對于檔案是追加輸入,不會進行覆寫;
      • set -C

        :用于設定如果輸入覆寫原有資料,就不允許進行覆寫,如果需要強制進行覆寫,就是用

        >|

        來進行強制覆寫;如果需要關閉上述功能,可以使用

        set +C

        來實作;
      • 2>

        :表示用于定義标準錯誤輸出;
      • &>

        :表示用于将标準錯誤輸出和标準輸出都進行重定向,這個不存在

        &>>

        輸出定義;
    • <

      :表示輸入重定向,通常用于将一個檔案的内容交給一些檔案處理指令;
      • cat < ./filename

        :用于輸出一個檔案内容;
      • tr 'a-z' 'A-Z' < ./filename

        :用于将一個檔案裡面的内容進行轉換;
    • <<

      :通常是用于生成一個文檔的;
      • cat << end

        :

        end

        表示的是檔案結束符号;
      • cat >> filename << EOF

        :表示用于将内容追加到檔案裡面;
  • 管道指令:

    指令 1 | 指令 2 | …….

    把前一個指令的輸出作為後一個指令的輸入;
    • echo “hello, word” | tr ‘a-z’ ‘A-Z’

      :用于進行大小寫轉換;
    • cat /etc/passwd | sort

      :用于對輸出的檔案内容進行排序;
    • cut –d : -f 1 /etc/passwd |sort | tr ‘a-z’ ‘A-Z’

      :用于對使用者名進行排序;
    • tee

      :通常來說,輸入或者輸出流都是單項流出的,這個指令的作用就是複制出兩份,一份,可以對于兩份分别進行操作