1、find命令的使用
在Linux中可以使用find命令在指定的目錄下查找文件。任何位於參數之前的字符串都將被視為欲查找的目錄名,當使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件,並將查找到的文件進行全部顯示。
(1)命令語法
find命令的語法如下:
find path -option [-print] [-exec -ok command] {} \;
find根據下面規則判斷path和exprssion,在命令列上的第一個-(),之前的部分為path,之后的是expression,如果path為空字符串,則使用當前路徑,如果expression是空字符串,則使用-print為預設的expression。
(2)常用選項說明
-mount,-xdev:只檢查和指定目錄在同一文件系統下的文件,避免列出其它文件系統的文件
-amin n:在過去n分鍾內被讀取過的文件
-anewer file:比文件file更晚被讀取過的文件
-atime n:在過去n天內被讀取過的文件
-cmin n:在過去n分鍾內被修改過的文件
-empty:空的文件
-gid n or -group name:gid是n或group是name的文件
-ipath p,-path p:路徑名稱符合p的文件,ipath會忽略大小寫
-name name,-iname name:文件名稱符合name的文件,iname會忽略大小寫
-size n:文件大小是n單位的文件
-type c:文件類型是c的文件
-pid n:process id是n的文件
(3)實例
將目前目錄及其子目錄下所有以.c結尾的文件列出來:
$ find . -name “*.c”
將目前目錄及其子目錄中的所有一般文件列出:
$ find . -type f
將當前目錄及其子目錄下所有最近20天內更新過的文件列出:
$ find . -ctime -20
查找/var/log目錄中更改時間在7日以前的普通文件,並在刪除之前詢問它們:
$ find /var/log -type f -mtime +7 ok rm {} \;
查找當前目錄中文件屬主具有讀寫權限,並且文件所屬組合其他用戶具有讀權限的文件:
$ find . -type f -perm 644 -exec ls -l {} \;
查找系統中所有文件長度為0的為普通文件,並列出它們的完整路徑:
$ find / -type f –size 0 –exec ls –l {} \;
2、grep命令的使用
Linux中grep命令用於查找文件中符合條件的字符串,grep指令用於查找內容包含指定的范本樣式的文件,如果發現某文件的內容符合指定的范本樣式,預設grep指令將會把含有范本樣式的哪一列顯示出來,若不指定任何文件名稱,或是所給與的文件名”-”,則grep將會從標准輸入設備讀取數據。
(1)命令語法
grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<范本樣式>][-f<范本文件>][--help][范本樣式][文件或目錄...]
(2)常用選項說明
-a:不要忽略二進制數據。
-A<顯示列數>:除了顯示符合范本樣式的那一行之外,並顯示該行之后的內容。
-b:在顯示符合范本樣式的那一行之外,並顯示該行之前的內容。
-c:計算符合范本樣式的列數。
-C<顯示列數>或-<顯示列數>:除了顯示符合范本樣式的那一列之外,並顯示該列之前后的內容。
-d<進行動作>:當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep命令將回報信息並停止動作。
-e<范本樣式>:指定字符串作為查找文件內容的范本樣式。
-E :將范本樣式為延伸的普通表示法來使用,意味着使用能使用擴展正則表達式。
-f<范本文件>:指定范本文件,其內容有一個或多個范本樣式,讓grep查找符合范本條件的文件內容,格式為每一列的范本樣式。
-F:將范本樣式視為固定字符串的列表。
-G:將范本樣式視為普通的表示法來使用。
-h:在顯示符合范本樣式的那一列之前,不標示該列所屬的文件名稱。
-H:在顯示符合范本樣式的那一列之前,標示該列的文件名稱。
-i:忽略字符大小寫的差別。
-l:列出文件內容符合指定的范本樣式的文件名稱。
-L:列出文件內容不符合指定的范本樣式的文件名稱。
-n:在顯示符合范本樣式的那一列之前,標示出該列的編號。
-q:不顯示任何信息。
-R/-r:此參數的效果和指定“-d recurse”參數相同。
-s:不顯示錯誤信息。
-v:反轉查找。
-w:只顯示全字符合的列。
-x:只顯示全列符合的列。
-y:此參數效果跟“-i”相同。
-o:只輸出文件中匹配到的部分。
(3)實例
在文件中搜索一個單詞,命令返回一個包含”match_pattern”的文本行:
$ grep match_pattern file_name or $ grep “match_pattern” file_name
在多個文件中查找:
$ grep “match_pattern” file1 file2 file3 …
輸出除之外的所有行:
$ grep -v “match_pattern” file_name
標記匹配顏色:
$ grep “match_pattern” file_name –color=auto
使用正則表達式:
$ grep -E “[1-9]+”
只輸出文件中匹配到的部分:
$ echo this is a test line. | grep -o -E “[a-z]+\.”
統計文本或者文本中包含匹配字符串的行數:
$ grep -c “text” file_name
輸出包含匹配字符串的行數:
$ grep “text” -n file_name
搜索多個文件並查找匹配文件在哪些文件中:
$ grep –l “text” file1 file2 file3 …
在多級目錄中對文本進行遞歸搜索:
$ grep “text” . -r -n
參考:
https://man.linuxde.net/find
https://man.linuxde.net/grep
https://www.runoob.com/linux/linux-comm-find.html
https://www.runoob.com/linux/linux-comm-grep.html