Linux操作系統中對文件內容中的指定關鍵字進行查找(grep命令)
前言
Linux操作系統中 grep 命令用於查找指定文件里符合條件的字符串。
grep 指令用於查找某文件內容中包含指定的范本樣式的文件,如果發現某文件的內容符合所指定的范本樣式,預設 grep 指令會把含有范本樣式的那一列顯示出來。若不指定任何文件名稱,或是所給予的文件名為 -,則 grep 指令會從標准輸入設備讀取數據(當前終端所在的目錄就是grep命令的需要查找的文件路徑)。
-r 是遞歸查找 -n 是顯示行號 -R 查找所有文件包含子目錄 -i 忽略大小寫
-o 只輸出匹配的內容(一般用於獲取關鍵字在文件中出現的次數查找)
-w 按單詞位單位過濾
-v 取反(獲取不包含關鍵字的文件內容)
1、某文件已經使用vi或者vim命令的方式在命令行窗口打開
查找方法:
在vi/vim命令行模式下(當啟動vi/vim時便進入了命令行模式)直接輸入: /關鍵字 (區分大小寫)
然后回車,定位到第一個關鍵字,之后通過n鍵向下查找,通過N鍵向上查找。
例如:
2、某文件是在當前文件夾目錄下,且文件沒有通過vi/vim命令打開
查找方法:
在當前文件夾目錄中打開Linux命令行並輸入:cat 文件名 | grep "關鍵字" 或者 grep '關鍵字' 文件名
例如:
3、在某個目錄下的多個文件中查找文件內容中包含的關鍵字(沒有使用vi/vim命令打開文件)
查找方法:遞歸查找
grep -r "關鍵字" 目錄
例如1:查找《/home/xxx/桌面》目錄中的所有文件里內容包含《用例》的某一行數據。(指定路徑查找關鍵字所在的行數據)
例如2:在當前終端所在路徑的所有文件中內容包含《用例》的某一行數據。(沒有指定路徑查找關鍵字所在的行數據,默認為當前終端所在路徑)
4、查看文件中追加的含有關鍵字的內容
查找方法:查找的文件實時更新,查找的關鍵字內容也在實時更新
tail -f xxxxx.log | grep keyword
5、統計文件中關鍵字出現的次數
cat xxx.log | grep -o keyword | wc -l
例如:查找文件《備注.txt》中《版本》關鍵字出現的次數
Linux操作系統中查找指定目錄下的指定文件(find命令)(適用於當某目錄下文件太多而靈活運用find命令查找符合指定條件的文件)
前言
1、Linux find 命令用來在指定目錄下查找文件(相當與windows操作系統的在文件系統中搜索文件名,目的是為了找到文件)。任何位於參數之前的字符串都將被視為欲查找的目錄名。
2、如果使用 find 命令時,如果不設置任何參數,則 find 命令將在當前終端目錄下查找子目錄與文件。並且將查找到的子目錄和文件全部進行顯示。
- name 按文件名查找 - type 按文件類型查找 - exec 對搜索結果在處理 - mtime 按修改時間查找
find命令格式
find path -option [-print] [-exec -ok command] {} \
參數解釋:
1)path:要查找的目錄路徑。
~ 表示$HOME目錄
. 表示當前目錄
/ 表示根目錄
2)options :表示對目錄路徑中文件的查找方式
options常用的有下選項:
-name filename #查找名為filename的文件 -perm #按執行權限來查找(mode為完全匹配,-mode為包含) -user username #按文件屬主來查找 -group groupname #按組來查找 -mtime -n +n #按文件更改時間來查找文件,-n指n天以內,+n指n天以前 -atime -n +n #按文件訪問時間來查找文件,-n指n天以內,+n指n天以前 -ctime -n +n #按文件創建時間來查找文件,-n指n天以內,+n指n天以前 -nogroup #查找無有效屬組的文件,即文件的屬組在/etc/groups中不存在 -nouser #查找無有效屬主的文件,即文件的屬主在/etc/passwd中不存 -type b/d/c/p/l/f #查找是塊設備、目錄、字符設備、管道、符號鏈接、普通文件 -size n[c] #查找長度為n塊[或n字節]的文件 -mount #查找文件時不跨越文件系統mount點 -follow #如果遇到符號鏈接文件,就跟蹤鏈接所指的文件 -prune #忽略某個目錄
3)print:表示將結果輸出到標准輸出。
4)exec:對匹配的文件執行該參數所給出的shell命令。形式為command {} ;,注意{}與;之間有空格。
5)ok:與exec作用相同,區別在於,在執行命令之前,都會給出提示,讓用戶確認是否執行。
簡單一點來說,其實 find 命令的使用格式如下:
find [指定查找目錄] [查找規則] [查找完后執行的action]
find命令的常規使用
1、根據文件名查找
find -name //根據文件名查找(精確查找) find -iname //根據文件名查找,但是不區分大小寫
實例:
在當前目錄及子目錄中,查找大寫字母開頭的txt文件:
$ find . -name '[A-Z]*.txt' -print
在/etc及其子目錄中,查找host開頭的文件:
$ find /etc -name 'host*' -print
在$HOME目錄及其子目錄中,查找所有文件:
$ find ~ -name '*' -print
在當前目錄及子目錄中,查找不是out開頭的txt文件:
$ find . -name "out*" -prune -o -name "*.txt" -print
2、按目錄查找
在當前目錄除aa之外的子目錄內搜索 txt文件:
$ find . -path "./aa" -prune -o -name "*.txt" -print
在當前目錄,不在其子目錄中,查找txt文件:
find . ! -name "." -type d -prune -o -type f -name "*.txt" -print
3、按權限查找
①find 目錄 -perm 權限模式: 查找文件權限剛好等於“權限模式”的文件 ②find 目錄 -perm -權限模式: 查找文件權限全部包含“權限模式”的文件 ③find 目錄 -perm +權限模式: 查找文件權限包含“權限模式”的任意一個權限的文件
在當前目錄及子目錄中,查找屬主具有讀寫執行,其他具有讀執行權限的文件:
$ find . -perm 755 -print
4、按文件類型查找 (b/d/c/p/l/f )
find 搜索路徑 [選項] 搜索內容 ①-type d: 查找目錄
②-type f: 查找普通文件
③-type l: 查找軟鏈接文件
在當前目錄及子目錄下,查找符號鏈接文件:
$ find . -type l -print
5、按屬主及屬組
①-uid 用戶ID: 按照用戶 ID 查找所有者是指定 ID 的文件 ②-gid 組ID: 按照用戶組 ID 查找所屬組是指定 ID 的文件 ③-user 用戶名: 按照用戶名查找所有者是指定用戶的文件 ④-group 組名: 按照組名查找所屬組是指定用戶組的文件 ⑤-nouser: 查找沒有所有者的文件
查找屬主是www的文件:
$ find / -user www -type f -print
查找屬主被刪除的文件:
$ find / -nouser -type f -print
查找屬組 mysql 的文件:
$ find / -group mysql -type f -print
查找用戶組被刪掉的文件:
$ find / -nogroup -type f -print
6、按時間查找
Linux操作系統中的文件有三個時間: 數據訪問時間 atime 數據修改時間 mtime 狀態修改時間ctime find -atime [+|-]時間 按文件訪問時間搜索 find -mtime [+|-]時間 按文件數據修改時間搜索 find -ctime [+|-]時間 按文件狀態修改時間搜索 find -atime -n 將n*24小時內存取過的的文件列出來 find -ctime -n 將n*24小時內改變、新增的文件或者目錄列出來 find -mtime -n 將n*24小時內修改過的文件或者目錄列出來 find -newer file 把比file還要新的文件列出來
查找2天內被更改過的文件:
$ find . -mtime -2 -type f -print
查找2天前被更改過的文件:
$ find . -mtime +2 -type f -print
查找一天內被訪問的文件:
$ find . -atime -1 -type f -print
查找一天前被訪問的文件:
$ find . -atime +1 -type f -print
查找一天內狀態被改變的文件:
$ find . -ctime -1 -type f -print
查找一天前狀態被改變的文件:
$ find . -ctime +1 -type f -print
查找10分鍾以前狀態被改變的文件:
$ find . -cmin +10 -type f -print
7、按文件新舊
查找比 aa.txt 新的文件:
$ find . -newer "aa.txt" -type f -print
查找比 aa.txt 舊的文件:
$ find . ! -newer "aa.txt" -type f -print
查找比aa.txt新,比bb.txt舊的文件:
$ find . -newer 'aa.txt' ! -newer 'bb.txt' -type f -print
8、按文件大小查找
find -size [+|-]大小 注意: ①+ 是大於 ②- 是小於
查找超過1M的文件:
$ find / -size +1M -type f -print
查找等於6字節的文件:
$ find . -size 6c -print
查找小於32k的文件:
$ find . -size -32k -print
9、執行命令
1)查找 del.txt 並刪除,刪除前提示確認:
$ find . -name 'del.txt' -ok rm {} \;
2) 查找 aa.txt 並備份為aa.txt.bak:
$ find . -name 'aa.txt' -exec cp {} {}.bak \;
3)查當前目錄下的所有普通文件:
# find . -type f -exec ls -l {} \; -rw-r–r– 1 root root 34928 2003-02-25 ./conf/httpd.conf -rw-r–r– 1 root root 12959 2003-02-25 ./conf/magic -rw-r–r– 1 root root 180 2003-02-25 ./conf.d/README
解釋:查當前目錄下的所有普通文件,並在 - exec 選項中使用 ls -l 命令將它們列出。
4)在 /logs 目錄中查找更改時間在5日以前的文件並刪除它們:
$ find logs -type f -mtime +5 -exec -ok rm {} \;
5)查詢當天修改過的文件:
#find ./ -mtime -1 -type f -exec ls -l {} \;
6)查詢文件並詢問是否要顯示:
# find ./ -mtime -1 -type f -ok ls -l {} \; < ls … ./classDB.inc.php > ? y -rw-r–r– 1 cnscn cnscn 13709 1月 12 12:22 ./classDB.inc.php # find ./ -mtime -1 -type f -ok ls -l {} \; < ls … ./classDB.inc.php > ? n
關於 find命令中有沒有 -print參數 的區別
1)加 -print參數
查找目錄並列出目錄下的文件(為找到的每一個目錄單獨執行ls命令,沒有選項-print參數時文件列表前一行不會顯示目錄名稱)
find /home -type d -print -exec ls {} ;
運行結果:
2)不加 -print參數
拓展知識:文件名通配符
1、* 表示 通配任意的字符
2、?表示 通配任意的單個字符
3、[ ] 表示 通配括號里面的任意一個字符