Linux操作系統中對文件內容中的指定關鍵字進行查找(grep命令)|| Linux操作系統中查找指定目錄下的指定文件(find命令)


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、[ ] 表示 通配括號里面的任意一個字符


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM