1. 程式人生 > >【Bash百寶箱】Linux shell學習

【Bash百寶箱】Linux shell學習

工作 目標 表示 ria views 行為 覆蓋 ruby ulimit

shell特點——

Linux有多種shell能夠使用,默認的為bash,bash有以下幾個主要特點。

1、命令記憶能力

在命令行中按上下鍵能夠找到一個前/後輸入的命令。這些命令記錄在~/.bash_history中,這個文件記錄的是上一次登錄shell曾經所運行過的全部命令,當前登錄shell所運行的命令則暫存在暫時內存中,成功註銷系統後這些命令更新到文件裏。歷史命令可通過history命令查看,再次運行某個歷史命令時可結合嘆號!一起使用,嘆號後面跟歷史命令的序號。假設多重登錄bash,即開幾個bash窗體時。最後註銷的那個bash會把前面bash的歷史記錄覆蓋掉。

2、Tab鍵

在部分命令或文件未輸入全然時。按Tab鍵一次可補全命令或文件,按Tab鍵兩次可列出全部可用的命令或文件。

3、命令別名設置功能

使用alias可給一個較長的命令設置一個簡單的別名。unalias取消設置,例如以下樣例:

$alias lm=‘ls -alt‘

上面alias命令設置別名僅僅對當前bash有效,且bash退出後別名也就失效了,怎樣設置一次就能夠永遠在全部的bash中都有效呢?方法是把上面的別名設置命令寫入~/.bashrc文件裏,這個文件讀入shell可使用source命令,也能夠使用句點,或者重新啟動電腦,這樣便一勞永逸了。

4、內置命令type

通過type命令我們能夠知道一個命令的類型。是內置命令,還是外部命令或者是一個別名。type

命令本身是一個內置命令。

type經常使用三個參數,-t顯示命令類型,-p僅當命令類型為外部命令時才顯示命令全路徑。-a顯示PATH環境變量中全部與命令相關的指令信息,也包括alias別名命令。

5、命令運行

命令運行須要按下Enter鍵,假設命令須要多行輸入時,可在Enter鍵前緊接著一個\字符進行轉義,之間不能有空格。

6、bash環境

1)路徑與命令查找有一定的順序,它們的先後順序為:相對或絕對路徑運行命令>alias命令>builtin命令>通過$PATH環境變量順序找到的第一個命令。

2)我們能夠自己定義Linux登錄與歡迎信息。配置文件為/etc/issue/etc/motd

,而/etc/issue.net是提供給telnet這個遠程登錄程序用的。

shell變量——

如其他編程語言一樣。shell中也能夠自己定義變量,但有一定的規則,總結例如以下。

1、比如常見的環境變量PATH。變量的顯示可通過echo命令查看,變量前要加$符號,變量可選擇性地使用一對花括號括起來。

2、變量通過等號=賦值,等號兩邊不能有空格。

3、變量名稱僅僅能是英文或數字,開頭字符不能為數字。

4、變量內容包括特殊字符時。可用轉義字符\轉義。雙引號內的特殊字符如$保持原本特性,單引號內的特殊字符如$就是個普通字符,引號成對出現,從左向右匹配。

5、在一串命令中包括了其他命令時。其他的命令能夠使用反單引號`命令`或者美元符號結合圓括號$(命令)的方式,這樣的命令會被先運行。運行結果作為輸入信息。

6、變量累加內容時可用"$變量名稱"${變量名稱}操作,例如以下:

$PATH="$PATH"xxx
$PATH=${PATH}xxx

7、變量須要在子進程生效時,export這個變量,使其成為環境變量。

進入一個子進程能夠使用bash命令,退出時使用exit命令。

8、取消變量時使用unset

9、環境變量查看可使用env命令,使用export命令也能夠。set命令查看全部變量。包括環境變量和自己定義變量。

10、declare命令用於聲明變量類型,相似於typeset-a表示數組。-i表示整數,-x相似於export-r指定變量僅僅讀。

11、幾個特殊變量:PS1為命令提示符,PS2為使用轉義字符後第二行命令的提示符,$為本shell的PID,?

為上個運行命令的回傳碼,回傳碼為0表示命令運行成功。

12、read命令能夠讀取鍵盤輸入到變量,-p參數能夠指定提示信息,比如:

$read -p "please input your name:" name

13、ulimit命令能夠設置用戶對系統資源使用的限制。

14、變量內容的刪除可使用###%%%符號,內容替換可使用///符號。

${變量#關鍵詞}——從左向右匹配,刪除最短數據。
${變量##關鍵詞}——從左向右匹配。刪除最長數據。

${變量%關鍵詞}——從右向左匹配。刪除最短數據。 ${變量%%關鍵詞}——從右向左匹配,刪除最長數據。 ${變量/舊字符串/新字符串}——從左向右匹配,刪除第一個匹配的數據。 ${變量//舊字符串/新字符串}——從左向右匹配,刪除全部匹配的數據。

15、變量值測試與替換可使用-+=?

:符號等,效果例如以下:

技術分享

經常使用組合鍵——

Ctrl + C:終止眼下的命令。
Ctrl + D:輸入結束EOF,可退出當前shell。
Ctrl + M:Enter鍵。


Ctrl + S:暫停屏幕的輸出。
Ctrl + Q:回復屏幕的輸出。


Ctrl + U:在提示字符下,將整行命令刪除。
Ctrl + Z:暫停眼下的命令。

常見通配符與特殊符號——

*:隨意數目個隨意字符。

?:隨意一個字符。 [abcd]:隨意一個方括號內的字符,即a、b、c、d中隨意一個。 [a-z]:隨意一個從a到z範圍內的字符。關鍵在於中間的減號。表示範圍。

[^abc]:^代表反向選擇,即除了abc之外。隨意一個其他的字符。

#:凝視符號。 \:轉義字符。

|:管線。 ;:分號,連續幾個命令間的分隔符。 ~:用戶主文件夾。 $:用於讀取變量。

&:工作控制。當前命令後臺作業。

!:邏輯非。 /:路徑分隔符。 >、>>:數據流重定向,輸出,各自是替換和追加。 2>、2>>:數據流重定向,錯誤輸出,數字2與尖括號之間沒有空格。 <、<<:數據流重定向。輸入。

‘ ‘:單引號。上面提到了。不具有變量替換功能。

" ":雙引號,具有變量替換功能 ` `:符號之間為可運行命令,等同於$()。 ( ):相當於子shell。 { }:命令區塊的組合。

數據流重定向使用方法舉例——

stdinstdoutstderr事實上是三個特殊的文件,文件標識符分別為0、1、2,以下的樣例用到了 這幾個數字。
把純文本文件from中的內容拷貝到文件to,使用數據流重定向有以下兩種方法:

$cat from > to
$cat > to < from

有時候運行某個命令時,有標準輸出,也有標準錯誤輸出,把標準輸出重定向到文件file

$command > file

把標準錯誤輸出重定向到文件file

$command 2> file

把標準輸出、標註錯誤輸出同一時候重定向到文件file有以下三種方法:

$command > file 2>&1
$command 2> file >&2
$command &> file

註意上面數字的使用方法。
/dev/null是一個特殊文件,能夠理解為一個無限大的垃圾站點,能夠把隨意不想要的數據重定向到這個文件裏。

命令行連續運行幾個命令——

方法一:使用分號

$command1; command2

方法二:使用&&||符號

$command1 && command2
$command1 || command2

&&||也就是通常所說的短路符號。

管線命令——

1、管線

管線即一個豎線|,左邊的命令要有標準輸出,且僅會處理標準輸出。標準錯誤則忽略,右邊的命令要能接受標準輸入,以下介紹幾個經常使用的管線命令。

2、cut

以行為單位。截取部分數據。

$echo $PATH | cut -d ‘:‘ -f 1

PATH環境變量中,-d指定分隔符為冒號,冒號把PATH環境變量中的內容切割開。-f指定截取切割後的第幾個字段,這裏為第1個字段。還能夠選擇多個字段。以逗號隔開。-d指定的分隔符能夠是空格,例如以下命令:

$last | cut -d ‘ ‘ -f 1
$export | cut -c 10-20

-c截取了每行第10個到第20個的字符。

3、grep

以行為單位,匹配目標字符串。匹配成功則輸出整行內容,如:

$top | grep init

以下介紹幾個經常使用的參數:

-c:計算字符串匹配的次數。
-i:忽略大寫和小寫。

-n:輸出行號。 -v:反向選擇,即輸出沒有匹配到字符串的行。

grep也能夠單獨使用,格式例如以下:

$grep [options] <string> <filename>

4、sort

sort即排序,如:

$ls | sort -r

-r表示反向排序。

5、uniq

uniq用於處理反復數據,僅僅篩選一次,如:

$last | cut -d ‘ ‘ -f 1 | uniq -c

顯示每個帳號登入總次數。

6、wc

wc統計文本中有多少行、字符串、字符,如:

$wc filename

當中,-l能夠統計行數,-w統計字符串。-c統計字符。

7、tee

從前面的幾個命令能夠看出,數據流重定向到文件後。屏幕就沒有輸出了。而這個tee就能夠雙向定向。一邊到文件,一邊到屏幕,如:

$ls | tee filename

ls的結果重定向到filename的同一時候也輸出到了屏幕。

8、tr

tr用來刪除或替換字符串。

$ls | tr [a-z] [A-Z]

如上樣例,trls的結果中的小寫字母全部替換為了大寫。

$ls | tr -d ‘string‘

-d參數指定要刪除的字符串。

9、col

col過濾一些數據,選項與參數:

-x:將tab鍵轉換成對等的空格鍵。
-b:在文件內有反斜杠/時。僅保留反斜杠最後接的那個字符。

10、join

把兩行數據合並為一行,格式例如以下:

$join [options] file1 file2

選項與參數例如以下:

-t <string>:join默認以空格符分隔數據。-t指定詳細的切割符。而且在file1和file2中查找string,查找成功時,把file1和file2的兩行數據連成一行,且string僅僅顯示一次。在行首顯示。

-i:忽略大寫和小寫。

-1 <num>:數字1,指定第一個文檔file1要用哪個字段來分析。

-2 <num>:數字2。指定第二個文檔file2要用哪個字段來分析。

11、paste

把多個文本行合並為一行,默認以Tab鍵作為分隔符號,語法格式例如以下:

$paste [options] [files]

經常使用參數為-d,指定分隔符。

12、expand

expandTab鍵轉換為空格。

13、split

將大文件分隔為多個小文件。語法格式例如以下:

$split [options] [file] PREFIX

經常使用選項為-b。指定小文件大小。-l參數指定小文件行數。PREFIX為小文件前綴。能夠選擇性地指定為自己定義的字符串。

14、xargs

xargs讀入標準輸入,以空格符或換行符作為分隔,把標準輸入分隔成多個參數,然後運行指定的命令,格式例如以下:

$xargs [options] command

比如,以下的命令,在/tmp文件夾下查找名字為core的文件,

$find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f 

……….

【Bash百寶箱】Linux shell學習