Linux Shell 基礎知識(二)

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 命令幫助文檔

原文出處:https://www.cnblogs.com/fang-ren/p/11647675.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章