-
以及特性bash
-
:表示的意思是外殼,也就是用于連入計算機使用的工具;shell
風格的GUI
包括shell
,Gnome,KDE,Xfce
風格的GLI
包括shell
(類似于C語言的程式設計風格),sh,csh
(支援的功能更多.商業化産品),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
-
預設為 1000 條 是一個變量,表示指令緩沖區大小;HISSIZE:
-
: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
- 1.指令曆史:自動記錄一些指令記錄,儲存在記憶體緩沖中;
- 指令行編輯
-
:跳轉到行首;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
-