shell基礎知識及使用方法
shell基礎知識及使用方法
SHELL是用戶與操作系統之間完成交互式操作的一個接口程序,為用戶提供簡化了的操作。
第一代shell在上世紀70年代中於貝爾實驗室中誕生,名為bourne shell,簡稱sh,後期又衍生出多個版本,如csh,ksh等;而Linux系統中默認的shell程序是由GNU發行的bash,它是完全開源的。
下面就來說說bash的特性:
一:命令的別名--(自定義命令)
alias:(help alias查詢)定義或顯示別名
格式:alias [-p] [名稱[=值] ... ]
註意:如果alias命令不帶任何選項和參數,則表示顯示所有已經定義並生效的別名設置;使用如下:
unalias:從別名定義列表中刪除每一個“名字“。它的用法和alias差不多。
註意:無論使用alias命令或unalias命令,其功能都會立即生效;此命令的生命期僅為當前shell的生命期;一旦註銷登陸,相當於關閉bash,則使用alias命令定義的別名或使用unalias命令刪除的別名操作,會立即失效;
對於每個用戶來說,都有一個私有的bash的配置文件,在用戶家目錄中的一個隱藏文件,文件名為“.bashrc”,其主要功能時用來保存命令的別名的定義;
二.bash 的快捷鍵;
c:ctrl鍵
M:alt鍵
E:esc鍵
DEL:backspace鍵
C-l:清屏,相當於clear命令;
C-a:將光標跳轉至命令行編輯模式的行首;
C-e:將光標跳轉至命令行編輯模式的行尾;
C-k:刪除命令行編輯模式的光標所在位置至行尾的內容;
C-u:刪除命令行編輯模式的光標所在位置至行首的內容;
C-c:結束前臺進程;
M-:引用上一個命令的最後一個參數;
E:功能同M-;
三.命令歷史:
bash進程會保存其會話的用戶曾經執行過的命令,,以方便用戶重復執行某個命令操作;
命令的歷史包括兩個方面:
1.用戶曾經執行過的命令;
2.用戶曾經執行過的命令的路徑;
在bash中有一個內置的變量--PATH,PATH變量的值為當前系統中所有的命令的文件所在的路徑的集合;
命令是如何執行的?
bash會將命令行的內容按照空白符進行切片,分析第一個切片的內容;
1.判斷第一個切片的內容是內部命令還是外部命令;
如果是內部命令,則直接運行;
如果是外部命令,先找hash表中的路徑緩存,如果有,則直接執行,否則通過查找PATH變量中包含的路徑中,是否有對應名稱的文件;
使用hash命令查看被記住的命令文件的路徑;
-r:忘記所有記住的位置;
使用history命令查看被記住的命令的命令行參數;
history-顯示或操縱歷史列表。
格式:
history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 參數 [參數...]
常用選項:
-c:清空歷史緩沖區中的命令歷史記錄;
-d:刪除指定的歷史命令條目;
重復執行歷史緩沖區的命令:
!NUMBER:重復執行歷史緩沖區中編號為“NUMBER”的命令;
!STRING:重復執行歷史緩沖區中以“STRING”開頭的最後一次 執行過的命令;
!?STRING:重復執行歷史緩沖區中包含了“STRING”的最後一次 執行過的命令;
!-NUMBER:重復執行歷史緩沖區中倒數第“NUMBER”條命令;
使用上下Arrow可以從歷史緩沖區調用命令,回車之 後執行;
C-r:在歷史緩沖區實施搜索,回車之後執行;
!$:在歷史緩沖區中調用最後一個命令的最後一個參數;
!^:在歷史緩沖區中調用最後一個命令的第一個位置的參數;
!:NUMBER:在歷史緩沖區中調用最後一個命令的 第“NUMBER”個位置的參數;
在bash中與命令歷史相關的內置變量:
HISTSIZE:歷史緩沖區中能夠保存的命令歷史的最大條目數量,默 認值為1000.
HISTFILESIZE:~/.bash_history文件中能夠保存命令歷史的最大 條目數量,默認值為1000;
HISTIMEFORMAT:在命令歷史緩沖區中記錄歷史命令時,同時記錄 命令的執行的時間的時間戳標記;可以使用date命令 的format來表示時間的記錄格式;默認值為空;
HISTCONTROL:控制命令歷史的記錄方式:
ignoredups:連續且相同的命令不會被記錄到歷史緩沖區;此為 默認值;
ignorespace:以空白字符開頭的命令不會被記錄到歷史緩沖區;
ignoreboth:上述兩種情況都不會被記錄到歷史緩沖區;
四.命令補全
1.構成命令字符串的補全;
參考PATH變量中的路徑,對命令進行補全;
如果,給出的字符串在PATH變量對應的路徑時唯一的,則直接補全命令;
如果,給出的字符串在PATH變量對應的路徑時不是唯一的,則bash給出提 示;
2.命令中參數所對應的字符串補全;
根據給出的路徑進行補全;
如果,給出的字符串在給出的路徑中是唯一的,則直接補全命令;
如果,給出的字符串在給出的路徑中不是唯一的,則bash給出提示;
五.命令行展開
1.~展開:
~:bash會自動將其展開為當前登陸用戶的家目錄;
~STRING:bash會將其自動的展開為以“STRING”為用戶名的用戶的家目 錄;
~+:調用bash的內置變量的“PWD”的值;
~-:調用bash的內置變量的“OLDPWD”的值;
2.{}展開:
在{}中,可以填充一個以“,”分割的路徑判斷列表,bash 會將其展開為 多個獨立的路徑;
1.txt{,.bak}==1.txt 1.txt.bak(cp)
*六.命令的執行結果
在bash中,命令的執行有兩種結果:
1.執行命令的輸出結果;
根據用戶的需求獲取到的命令執行的正常輸出結果;
命令引用或命令替換;
``(反向單引號)相當於$()
示例:創建一個文件,文件名為test-系統時間;
~]:#touch test-~date +%F+%H-%M-%S~
2.執行命令的狀態返回值;
與此前的一個命令是否成功執行相關的返回內容;
bash使用一個特殊的內置變量來保存其內容:$?
$?實際上保存的是一個數值,保存範圍0-255
其中:
0:表示執行成功;
1-255:表示命令執行失敗;
1,2,127:bash中內置的命令執行的狀態返回值;
1:表示小問題;
2:表示大問題;
127:表示命令本身出現問題;
其余數字(3-126,128-255):用戶可以自定義的失敗狀態返回值;
七.引用功能;
``:強引用;
凡是被單引號引用的內容,bash在處理時,一律將其視為普通字符,,及 其本身是bash定義的具有特殊功能和作用字符亦是如此,但單引號本身除 外
“”:弱引用;
被雙引號引用的內容中,有些特殊字符仍然胡保留其特殊含義,如$,\,"";
八.轉義功能;
\:bash定義的轉義字符;大多數情況下,\只能將其後面的一個字符轉義;
\COMMAND取消定義過的,命令別名,而使用命令本身的功能;
*九.Globbing--文件名通配符,簡稱glob;
*:匹配任意長度的任意字符或字符串;(某些特殊位置的“.”字符不能 匹配;)
?:匹配任意單個字符;(某些特殊位置的“.”字符不能匹配;)
[]:匹配指定範圍內的任意單個字符,必須匹配且只能匹配一個字符;
指定範圍的方法:
1.枚舉法:列出所有有效字符;
2.範圍指定
[0-9]:表示所有單個的十進制數字;
[a-z]:a,A,b,B,c,C.......y,Y,z
[A-Z]:A,b,B,c,C........z,Z
3.bash內建字符集;
[:lower:]:所有的小寫字母;
[:upper]:所有的大寫字母;
[:alpha]:所有字母,包括大小寫;
[:digit]:所有單個的十進制數字;
[:alnum:]:所有的字母和十進制數字;
[:punct:]:所有的符號;
[:space:]:表示空白字符,包括空格和制表符;
4.反向匹配;
^
示例:#ls a [^[:digit:]]?? 表示文件名的第二個字符不能是十進制數 字;
註意:當括號中有“^”表示字符集反向匹配時,註意"*"的使用;因 為"*"通配範圍可能會導致反向匹配失敗,此類失敗是因為bashd的 globbing是在貪婪模式下匹配的;
十.管道
|
管道通常是用來連接多個命令的,將管道符號前面的命令的執行的輸出結 果通過管道傳遞給管道符號後面的命令,讓後面的命令將前面的命令的輸 出結果當成參數使用;
wc:
wc - 輸出文件中的行數、單詞數、字節數
格式: wc [選項列表]... [文件名列表]...
常用選項:
-c, --bytes, --chars輸出字節統計數。
-l, --lines輸出換行符統計數;
-m:僅顯示文件中有效字符的數量;
-w, --word:輸出單詞統計數;
註意:
1.一般來講,凡是被管道連接的命令,都應該能夠在執行成功之後完成命 令結果的輸出;否則管道無意義;
2.管道不是萬能的,有些場合無法使用管道;
十一.輸入輸出重定向
在使用計算機的時候,實現某個功能的主體是程序;
程序=指令+數據(數據至關重要!)
文件,IO--輸入輸出
在Linux系統中,能夠完成輸入輸出功能的實體:文件
可以用於輸入的設備:文件
鍵盤設備,文件系統中的常規文件,網卡設備,聲卡設備,磁盤設備等;
可以用於輸出的設備:文件
顯示器,文件系統中的常規文件,網卡設備,聲卡設備,磁盤設備等;
在內存中使用文件的方式是定義文件描述符,一個文件描述符對應一個文 件;
0:表示標準輸入,stdin,從鍵盤實現的輸入數據流;
1:表示標準輸出,stdout到顯示器的輸出數據流;
2:表示標準錯誤,stderr到顯示器的錯誤數據流;
輸入輸出重定向(IO重定向)
采用非標準設備文件實現的IO操作;
輸入重定向:
<
輸出重定向:
>:覆蓋輸出重定向;
~]# set -C 開啟防止意外覆蓋源文件開關,可以使用“>|”符號完成 覆蓋重定向輸出操作,而無需關心是否開啟此開關;
>>:追加輸出重定向;
錯誤重定向:
2>:覆蓋錯誤重定向;
2>>:追加錯誤重定向;
合並標準輸出和標準錯誤的重定向;
1.COMMAND{>|>>}/PATH/TO/SOMEFILE 2>&1
2.&>,&>>
特殊的設備文件;
/dev/null: BlackHole,Bitbucket(位桶);
/dev/zero:泡泡機,吐零機;
bash中的其他特殊符號:
*<<:here document:此處文檔,結束標記;
<<<:here string,此處字符串,結束標記;
上述就是我的收獲,但是還有很多沒有弄清楚,在後期我會多加練習,再加以修改。
本文出自 “計算機基礎” 博客,轉載請與作者聯系!
shell基礎知識及使用方法