Linux查詢命令整理


在linux中,查找命令主要有find和grep,以及mlocate/locate

  區別:
 (1)find命令是根據文件的屬性進行查找,如文件名,文件大小,所有者,所屬組,是否為空,訪問時間,修改時間等。
 (2)grep是根據文件的內容進行查找,會對文件的每一行按照給定的模式(patter)進行匹配查找。
 (3)mlocate(locate) 命令用來查找文件或目錄,速度快。

一、find命令

find 是文件層次的查找(包括子目錄,就是對當前路徑樹查找)   
基本格式:find  path  name

1、按照文件名查找    

(1)find  /opt  -name  abc.txt   #在/opt目錄下查找文件abc.txt   
(2)find  /opt  -name abc.txt  #在/opt目錄下文件abc.txt    
(3)find  /opt  -name  '*abc*'   #使用通配符*。表示在/opt目錄下查找文件名中含有字符串‘abc’的文件
(4)find  /  -name  'abc*'   #表示當前目錄下查找文件名開頭是字符串‘abc’的文件

2、可指定文件類型查找

     find / -name "abc*" -type  d   # 查找類型為目錄類型
     find / -name "abc*" -type  f   # 查找類型為文件類型
-type t
             True if the file is of the specified type.  Possible file types
             are as follows:
             b       block special
             c       character special
             d       directory     
             f       regular file  
             l       symbolic link
             p       FIFO
             s       socket

3、控制目錄查找深度

  -maxdepth number
     find / -name "abc*" -maxdepth  2  # 查找到二級目錄

4、按照文件特征查找

時間:
(1)find / -amin -10    # 查找在系統中最后10分鍾訪問的文件(access time)
(2)find / -atime -1     # 查找在系統中最后24小時訪問的文件
(3)find / -mmin -10   # 查找在系統中最后10分鍾里修改過的文件(modify time)
(4)find / -mtime -2   #查找在系統中最后48小時里修改過的文件
 補充:history 10 #表示查看系統最后使用的10條命令
大小:
(1)find / -size +100M  #查找出大於100M字節的文件(c:字節,w:雙字,k:KB,M:MB,G:GB)
(2)find / -size -100M   #查找出小於100M的文件
其他:
(1)find / -empty        # 查找為空的文件/夾     
(2)find / -user ljw      #查找屬於用戶是ljw的文件/夾
(3)find / -group ljw   # 查找group(組)為ljw的文件/夾

5.使用混合查找方式查找文件

參數有: !,-and(-a),-or(-o)  
(1) find  /opt  -size  +100M  -and  -mtime  +10   #在/opt目錄下查找大於100M並在最后10分鍾內修改的文件
(2) find  /  -user  ljw  -or  -user  ljw1   #在/目錄下查找多個用戶是ljw或者ljw1的文件文件
(3) find  /opt  !  -user  ljw  #在/opt目錄中查找所有不屬於用戶ljw的文件

二、grep 命令

基本格式:grep 字符串 路徑

1、主要參數

[options]主要參數: 
-c:只輸出匹配行的計數。 
-i:不區分大小寫
-h:查詢多文件時不顯示文件名。
-l:查詢多文件時只輸出包含匹配字符的文件名。
-n:顯示匹配行及行號。
-s:不顯示不存在或無匹配文本的錯誤信息。
-v:顯示不包含匹配文本的所有行。

2、grep -r "字符串"

(1)grep 'test' d*  #顯示所有以d開頭的文件中包含 test的行
(2)grep ‘test’ aa bb cc    #顯示在aa,bb,cc文件中包含test的行
(3)grep ‘[a-z]\{5\}’ aa   #顯示所有包含每行字符串至少有5個連續小寫字符的字符串的行
(4)grep magic /usr/src  #顯示/usr/src目錄下的文件(不含子目錄)包含magic的行
(5)grep -r magic /usr/src  #顯示/usr/src目錄下的文件(包含子目錄)包含magic的行
(6)grep -w pattern files :只匹配整個單詞,而不是字符串的一部分(如匹配’magic’,而不是’magical’),

3、grep 可以結合其他命令使用,效果也很好

例如利用通道‘|’查找文件
 grep -Rl  'name'  /opt     # 查找文件內容。其中查找的字符串,可不寫引號''。
遞歸查找文件,在路徑/opt下(包括子目錄),找出文件內容中含有字符串'找我'的文件。顯示為路徑和文件名。
1. find | grep name
     # 查找目錄
查找出當前目錄和子目錄的文件名中含有name的文件
即find查找出當前目錄和子目錄下的文件名,利用管道 | 交給grep過濾出含有name的那幾行,間接查找出文件。
其中find和grep可字行添加所需參數
 
2. find | xargs grep name    # 查找文件內容
查找出當前目錄和子目錄的文件內容中含有name的行
與 xargs 結合,可以傳遞各種選項來調整你的輸出,並刪除找到的那些文件。
 
3. ll | grep luoluo   # 查找文件
類似find | grep luoluo,只是不能遞歸查找子目錄下的文件名
 
4.rpm -qa | grep  '軟件名'    #查找安裝的軟件

三、mlocate/locate 文件查找

對於文件數量龐大的時候,可以使用此方法查找
mlocate和locate 命令一樣,下面就不再寫locate了。至於mlocate和locate的關系,最后面會具體說一下。
locate命令其實是“find -name”的另一種寫法,但是要比后者快得多。
Linux系統自動創建這個數據庫,並且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數據庫。

1、使用命令

mlocate  abc.txt   #直接搜索文件
mlocate ~/m    # 搜索用戶主目錄下,所有以m開頭的文件。
mlocate  /etc/abc    # 搜索etc目錄下所有以abc開頭的文件。
mlocate  -ie  abc.txt       #如果 abc.txt已經刪除了,使用-e會檢查文件是否真實存在,而不必updatedb,-i,忽略大小寫。
mlocate  /etc/*abc     #在/etc中查找含有字符串abc的文件。

2、准備工作

先安裝mlocate/locate工具命令,創建數據庫(創建索引),然后更新數據庫。
安裝工具命令:
yum  install mlocate
yum  install updatedb
updatedb    #updatedb更新數據庫,即文件庫。

3、整個locate/mlocate工作其實是由四部分組成的:

/usr/bin/updatedb   #主要用來更新數據庫,可通過crontab自動完成的
/usr/bin/locate         #查詢文件位置的程序(查詢時是改程序運行,進行查找),也可能是mlocate。
/etc/updatedb.conf   #updatedb的配置文件,用來配置數據庫中要放入或排除哪些目錄和文件等
/var/lib/mlocate/mlocate.db  #存放文件信息的文件,文件名和對於的目錄。

4、mlocate默認不搜索的文件:

即寫入 updatedb的配置文件 /etc/updatedb.conf的文件。
PRUNE_BIND_MOUNTS="yes"
PRUNEFS="ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf"
PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/afs /tmp /var/spool /media"
解釋:
第一行 "yes":是否進行限制搜索。
第二行 排除檢索的文件系統類型。
第三行 排除檢索的后綴文件。
第四行 排除檢索的路徑,且對路徑下的子文件夾也不檢索。

5、關於mlocate和locate:

mlocate有一個近親:slocate,它安全地( s 代表安全)記錄了相關的文件權限,以防止非特權用戶看到特權文件。此外,還有它們所起源的一個更老的,原始 locate 命令。
mlocate與locate和slocate的不同之處在於,在每次掃描文件系統,更新數據庫時,mlocate 不需要持續重新掃描所有的文件系統。mlocate 在數據庫中保存了時間戳信息,無需重新讀取,就能判斷目錄內容是否改變。所以更新的速度更快,對硬盤的占用也更少。
這是mlocate特有的功能。相反,它將其發現的文件(m代表合並)與現有的文件列表合並在一起,使其可以借助系統緩存從而性能更高、更輕量級。由於mlocate流行,所以也簡稱其為 locate。

mlocate和locate命令的一個關鍵組件,名為 updatedb,更新數據庫的命令。
updatedb 通過cron任務定期運行,通常在一天中的安靜時間運行。
在文件 /etc/cron.daily/mlocate.cron 的內部(該文件的路徑及其內容可能因發行版而不同)。每天如何觸發 “updatedb” 命令。
關於配置文件的內容可以參考該文章:https://linux.cn/article-9053-1-rel.html
 
 
 
 


免責聲明!

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



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