Linux Shell 基礎知識(二)
- 2019 年 10 月 10 日
- 筆記
1.本文知識結構
2.文件的查詢與檢索
2.1. cd 目錄切換
- 找到文件/目錄位置:cd
- 切換到上一個工作目錄: cd –
- 切換到home目錄: cd or cd ~
- 顯示當前路徑: pwd
- 更改當前工作路徑為path: $cd path
2.2. locate 查找目錄及文件
- find 實時查找
- locate 為文件系統建立索引資料庫,如果有文件更新,需要定期執行更新命令來更新索引庫,在查找文件之前要先更新資料庫
# 搜尋文件或目錄: $find ./ -name "core*" | xargs file # 查找目標文件夾中是否有obj文件: $find ./ -name '*.o' # 遞歸當前目錄及子目錄刪除所有.o文件 $find ./ -name "*.o" -exec rm {} ; # 尋找包含有string的路徑 $updatedb $locate string
2.3. chown 文件與目錄許可權修改
- 改變文件的擁有者 chown
- 改變文件讀、寫、執行等屬性 chmod
- 遞歸子目錄修改: chown -R tuxapp source/
- 增加腳本可執行許可權: chmod a+x myscript
2.4. 管道和重定向
- 批處理命令連接執行,使用 |
- 串聯: 使用分號 ;
- 前面成功,則執行後面一條,否則,不執行:&&
- 前面失敗,則後一條執行: ||
- 重定向: >
3.文本處理
3.1. find 文件查找
find命令用來在指定目錄下查找文件。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件,並且將查找到的子目錄和文件全部進行顯示。
一般來說,其語法格式為:
find path -option [ -print ] [ -exec -ok command ] {} ;
find 後分為兩部分: path 和 expression ,以 第一個 – 為分隔線。如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 為預設 expression。
常用的expression選項
選項 | 含義 |
---|---|
-mount, -xdev | 只檢查和指定目錄在同一個文件系統下的文件,避免列出其它文件系統中的文件 |
-amin n | 在過去 n 分鐘內被讀取過 |
-anewer file | 比文件 file 更晚被讀取過的文件 |
-atime n | 在過去 n 天內被讀取過的文件 |
-cmin n | 在過去 n 分鐘內被修改過 |
-cnewer file | 比文件 file 更晚被更新過的文件 |
-ctime n | 在過去 n 天內被修改過的文件 |
-empty | 空的文件 |
-gid n , -group name | gid 是 n 或是 group 名稱是 name的文件 |
-ipath p , path p | 路徑名稱符合 p 的文件,ipath 會忽略大小寫 |
-name name , -iname name | 文件名稱符合 name 的文件。iname 會忽略大小寫 |
-size n | 文件大小 是 n 單位。b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組 |
-type c | 文件類型是 c 的文件。d 代表目錄,c 代表字型裝置文件,b 代表區塊裝置文件,p 代表具名貯列,f 代表一般文件,l 代表符號連結,s 代表socket |
-pid n | process id 是 n 的文件 |
另外,在find查找文件也是可以使用正則表達式的。
使用正則表達式查詢需要的選項有兩個:-regextype 和 -regex。—-regextype 指定正則匹配的類型,可用的選項有很多,常見的有:’awk’ , ‘egrep’ , ‘ed’, ’emacs’, ‘grep’, ‘sed’ 等,不同匹配模式匹配的結果不一樣。默認是emacs。
-regex pattern 表示文件名與正則表達式 pattern 匹配。這是對整個路徑的匹配,不是搜索文件。即書寫正則表達式時要考略前面的路徑。
3.2. grep 文本搜索
grep 指令用於查找內容包含指定的範本樣式的文件,如果發現某文件的內容符合所指定的範本樣式,預設 grep 指令會把含有範本樣式的那一列顯示出來。
其一般語法為:
grep [ options ] pattern [file]
常見的 options 選項
短命令 | 長命令 | 含義 |
---|---|---|
-a | –text | 不要忽略二進位的數據 |
-A | –after-context = 行數 | 除了顯示符合範本樣式的那一行之外,並顯示該行之後的內容 |
-b | –byte-offset | 在顯示符合樣式的那一行之前,標示出該行第一個字元的編號 |
-c | –count | 計算符合樣式的列數 |
-C | –context = 行數 | 除了顯示符合樣式的那一行之外,並顯示該行之前後的內容 |
-d | –directories = 動作 | 當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep指令將回報資訊並停止動作 |
-e | –regexp = 範本樣式 | 指定字元串做為查找文件內容的樣式 |
-E | –extended-regexp | 將樣式為延伸的正則表達式來使用 |
-f | –file = 規則 | 指定規則文件,其內容含有一個或多個規則樣式,讓grep查找符合規則條件的文件內容,格式為每行一個規則樣式 |
-F | –fixed-regexp | 將樣式視為固定字元串的列表 |
-G | –basic-regexp | 將樣式視為普通的表示法來使用 |
-h | –no-filename | 在顯示符合樣式的那一行之前,不標示該行所屬的文件名稱 |
-H | –with-filename | 在顯示符合樣式的那一行之前,表示該行所屬的文件名稱 |
-i | –ignore-case | 忽略字元大小寫的差別 |
-l | –file-with-match | 列出文件內容符合指定的樣式的文件名稱 |
-L | –file-without-match | 列出文件內容不符合指定的樣式的文件名稱 |
-n | –line-number | 在顯示符合樣式的那一行之前,標示出該行的列數編號 |
-o | –only-matching | 只顯示匹配 pattern 部分 |
-q | –quiet , –silent | 不顯示任何資訊 |
-r | –recursive | 此參數的效果和指定"-d recurse"參數相同 |
-s | –no-messages | 不顯示錯誤資訊 |
-v | –revert-match | 顯示不包含匹配文本的所有行 |
-V | –version | 顯示版本資訊 |
-w | –word-regexp | 只顯示全字元合的列 |
-x | –line-regexp | 只顯示全列符合的列 |
-y | 此參數的效果和指定 -i 參數相同 |
3.3. xargs 命令行參數轉換
xargs 是給命令傳遞參數的一個過濾器,也是組合多個命令的一個工具。xargs 可以將管道或標準輸入(stdin)數據轉換成命令行參數,也能夠從文件的輸出中讀取數據。之所以能用到這個命令,關鍵是由於很多命令不支援|管道來傳遞參數,而日常工作中有有這個必要,所以就有了 xargs 命令。xargs 一般是和管道一起使用。
其一般語法為:
somecommand | xargs -item command
常見的item選項
選項 | 含義 |
---|---|
-a file | 從文件中讀入作為sdtin |
-e flag | 當xargs分析到含有flag這個標誌的時候就停止,默認為’_’ |
-p | 當每次執行一個argument的時候詢問一次用戶 |
-n num | 後面加次數,表示命令在執行的時候一次用的argument的個數,默認是用所有的 |
-t | 先列印命令,然後再執行 |
-r | no-run-if-empty 當xargs的輸入為空的時候則停止xargs,不用再去執行了 |
-s num | 命令行的最大字元數,指的是 xargs 後面那個命令的最大命令行字元數 |
-L num | 從標準輸入一次讀取 num 行送給 command 命令 |
-d delim | 分隔符,默認的xargs分隔符是回車,argument的分隔符是空格,這裡修改的是xargs的分隔符 |
-x | exit的意思,主要是配合-s使用 |
-P | 修改最大的進程數,默認是1,為0時候為as many as it can |
3.4. uniq 刪除重複
uniq 命令用於檢查及刪除文本文件中重複出現的行列,一般與 sort 命令結合使用。
# 消除重複行 $ sort unsort.txt | uniq # 統計各行在文件中出現的次數 $ sort unsort.txt | uniq -c # 找出重複行 $ sort unsort.txt | uniq -d
3.5. tr 字元轉換
tr 命令用於轉換或刪除文件中的字元。它從標準輸入設備讀取數據,經過字元串轉譯後,將結果輸出到標準輸出設備。
其一般語法為:
tr [options] SET1 [SET2]
常見options選項
短命令 | 長命令 | 含義 |
---|---|---|
-c | –complement | 反選設定字元。也就是符合 SET1 的部份不做處理,不符合的剩餘部份才進行轉換 |
-d | –delete | 刪除指令字元 |
-s | –squeeze-repeats | 縮減連續重複的字元成指定的單個字元 |
-t | –truncate-set1 | 削減 SET1 指定範圍,使之與 SET2 設定長度相等 |
常見SET字元含義
字元 | 含義 |
---|---|
NNN | 八進位值為NNN的字元 |
\ | 反斜杠 |
a | 終端鳴響 |
b | 退格 |
f | 換頁 |
n | 換行 |
r | 回車 |
t | 水平製表符 |
v | 垂直製表符 |
char1-char2 | 從char1到char2的升序遞增過程中經歷的所有字元 |
[:alnum:] | 所有的字母和數字 |
[:alpha:] | 所有的字母 |
[:blank:] | 所有呈水平排列的空白字元 |
[:cntrl:] | 所有的控制字元 |
[:digit:] | 所有的數字 |
[:graph:] | 所有的可列印字元,不包括空格 |
[:lower:] | 所有的小寫字母 |
[:print:] | 所有的可列印字元,包括空格 |
[:punct:] | 所有的標點字元 |
[:space:] | 所有呈水平或垂直排列的空白字元 |
[:upper:] | 所有的大寫字母 |
[:xdigit:] | 所有的十六進位數 |
[=char=] | 所有和指定char相等的字元 |
3.6. cut、paste 裁剪與拼接
cut命令用於顯示每行從開頭算起 num1 到 num2 的文字。
-
cut 取的範圍
N- 第N個欄位到結尾
-M 第1個欄位為M
N-M N到M個欄位
-
cut 取的單位
-b 以位元組為單位
-c 以字元為單位
-f 以欄位為單位(使用定界符)
paste 指令會把每個文件以列對列的方式,一列列地加以合併。
其一般語法為:
$ paste [-s] [-d <間隔字元>] [文件...]
參數:
- -d<間隔字元>或–delimiters=<間隔字元> 用指定的間隔字元取代跳格字元。
- -s或–serial 串列進行而非平行處理。
- –help 在線幫助。
- –version 顯示幫助資訊。
- [文件…] 指定操作的文件路徑
3.7. sed 文本替換
sed 命令可依照腳本的指令來處理、編輯文本文件,它主要用來自動編輯一個或多個文件、簡化對文件的反覆操作、編寫轉換程式等。sed 命令是一行一行的處理文件內容的,一般在動作前加數字以確定對應的行。
其一般語法為:
$ sed [-hnV][-e<script>][-f<script文件>][文本文件]
參數說明:
- -e script 或–expression=script 以選項中指定的script來處理輸入的文本文件。
- -f script文件 或–file=script文件 以選項中指定的script文件來處理輸入的文本文件。
- -h或–help 顯示幫助。
- -n或–quiet或–silent 僅顯示script處理後的結果。
- -V或–version 顯示版本資訊。
- -r或–regexp-extended 在腳本中使用擴展的正則表達式
動作說明:
- a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)
- c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行
- d :刪除,因為是刪除啊,所以 d 後面通常不接任何東西
- i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
- p :列印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行
- s :取代,可以直接進行字元級的替換的工作
# sed 命令需要多練習,可參考菜鳥教程實例
3.8. awk 數據流處理
awk 是一種處理文本文件的語言,是一個強大的文本分析工具。
其一般語法為:
awk [選項參數] 'script' var=value file(s) 或 awk [選項參數] -f scriptfile var=value file(s)
選項參數說明:
- -F fs or –field-separator fs
指定輸入文件折分隔符,fs是一個字元串或者是一個正則表達式,如-F:。 - -v var=value or –asign var=value
賦值一個用戶定義變數。 - -f scripfile or –file scriptfile
從腳本文件中讀取awk命令。 - -mf nnn and -mr nnn
對nnn值設置內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。 - -W compact or –compat, -W traditional or –traditional
在兼容模式下運行awk。所以gawk的行為和標準的awk完全一樣,所有的awk擴展都被忽略。 - -W copyleft or –copyleft, -W copyright or –copyright
列印簡短的版權資訊。 - -W help or –help, -W usage or –usage
列印全部awk選項和每個選項的簡短說明。 - -W lint or –lint
列印不能向傳統unix平台移植的結構的警告。 - -W lint-old or –lint-old
列印關於不能向傳統unix平台移植的結構的警告。 - -W posix
打開兼容模式。但有以下限制,不識別:/x、函數關鍵字、func、換碼序列以及當fs是一個空格時,將新行作為一個域分隔符;操作符和=不能代替^和^=;fflush無效。 - -W re-interval or –re-inerval
允許間隔正則表達式的使用,參考(grep中的Posix字元類),如括弧表達式[[:alpha:]]。 - -W source program-text or –source program-text
使用program-text作為源程式碼,可與-f命令混用。 - -W version or –version
列印bug報告資訊的版本。
4.進程管理
4.1. lsof 查看進程狀態
lsof 命令的全稱是 list open files ,它是一個列出當前系統打開文件的工具。在 Linux 環境中,所有的事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網路連接和硬體。
其一般語法為:
$ lsof [options] filename
常用參數列表:
選項 | 含義 |
---|---|
lsof filename | 顯示打開指定文件的所有進程 |
lsof -a | 表示兩個參數都必須滿足時才顯示結果 |
lsof -c string | 顯示COMMAND列中包含指定字元的進程所有打開的文件 |
lsof -u username | 顯示所屬user進程打開的文件 |
lsof -g gid | 顯示歸屬gid的進程情況 |
lsof +d /DIR/ | 顯示目錄下被進程打開的文件 |
lsof +D /DIR/ | 顯示目錄下被進程打開的文件,它會搜索目錄下的所有目錄,時間相對較長 |
lsof -d FD | 顯示指定文件描述符的進程 |
lsof -n | 不將IP轉換為hostname,預設是不加上-n參數 |
lsof -i | 用以顯示符合條件的進程情況 |
$ lsof -i[46] [protocol][@hostname|hostaddr][:service|port] # 46 –> IPv4 or IPv6 # protocol –> TCP or UDP # hostname –> Internet host name # hostaddr –> IPv4地址 # service –> /etc/service中的 service name (可以不只一個) # port –> 埠號 (可以不只一個)
4.2. pmap 分析執行緒棧
Pmap 提供了進程的記憶體映射,pmap命令用於顯示一個或多個進程的記憶體狀態。其報告進程的地址空間和記憶體狀態資訊
其一般語法為:
$ pmap [options] PID
常見的options選項為:
- -x:顯示擴展格式;
- -d:顯示設備格式;
- -q:不顯示頭尾行;
- -V:顯示指定版本。
5.性能監控
5.1. sar 性能監控
sar 命令是系統維護的重要工具,主要幫助我們掌握系統資源的使用情況,特別是記憶體和CPU 的使用情況。
其一般語法為:
$ sar [options] [-A] [-o file] t [n]
其中:t為取樣間隔,n為取樣次數,默認值是1;-o file表示將命令結果以二進位格式存放在文件中,file 是文件名。
常見的options選項有:
選項 | 含義 |
---|---|
-A | 所有報告的總和 |
-u | 輸出CPU使用情況的統計資訊 |
-v | 輸出inode、文件和其他內核表的統計資訊 |
-d | 輸出每一個塊設備的活動資訊 |
-r | 輸出記憶體和交換空間的統計資訊 |
-b | 顯示I/O和傳送速率的統計資訊 |
-a | 文件讀寫情況 |
-c | 輸出進程統計資訊,每秒創建的進程數 |
-R | 輸出記憶體頁面的統計資訊 |
-y | 終端設備活動情況 |
-w | 輸出系統交換活動資訊 |
參考材料:
Linux教程|菜鳥教程
Linux Tools Quick Tutorial
Linux 命令幫助文檔