Linux學習之文件搜索命令


一.文件搜索命令locate

locate 文件名

在后台數據庫中按文件名搜索,搜索速度最快

/var/lib/mlocate

#locate命令所搜索的后台數據庫(數據庫不會實時刷新,所以新建的文件馬上使用localte命令是無法搜索到的,更新頻率大概一天一次)

updatedb

#更新數據庫(更新后就可以使用locate命令進行搜索了)

  • 缺點

1)只能搜索文件名

2)存在不搜索的文件或目錄(可以使用vi /etc/updatedb.conf命令查看不搜索的部分有哪些,如圖中不搜索的部分為yes那一行下面的所有內容,換句話說,打比方你在/tmp目錄下創建了個文件,那么即使你updatedb后也是無法搜索到那個文件的)

image

二.命令搜索命令whereis與which

whereis 命令名

#搜索命令所在路徑及幫助文檔所在位置

選項:

-b:只查找可執行文件

-m:只查找幫助文件

限制條件:

只能搜索系統命令,不能搜索普通文件

 

which 命令

#搜索命令所在路徑及別名

不是所有命令都有別名,所以使用which有時候會不顯示別名

image

  • 注意事項:

shell自帶的內置命令使用which或whereis是無法查找到可執行文件的例如cd命令,只有外部命令才可以使用which和whereis來進行查找,之所以pwd、ls這種命令可以直接使用是因為linux自動為這些系統命令配置了環境變量。如果是我們自己寫的程序如果想不打絕對路徑就運行的話需要自己手動配置環境變量,就像windows那樣

可以使用命令”echo $PATH”來查看環境變量

image

 

三.字符搜索命令find

find [搜索范圍] [搜索條件]

#搜索文件

find / install.log    #在/目錄下遍歷查找install.log文件

#避免大范圍搜索,會非常消耗系統資源

選項

描述

例子

-name 按文件名搜索(區分大小寫) find /root –name install.log
-iname 按文件名搜索(不區分大小寫) find /root –iname install.log
-user 按所有者搜索(搜索屬於所有者的所有文件) find /root –user root
-nouser 查找沒有所有者的文件(搜索當前沒有所有者的所有文件)
注意:
1./sys和/proc兩個目錄中如果存在沒有所有者的文件請不要手動清除,因為他可能是內核直接產生的文件,內核直接產生的文件不一定會存在所有者
2.外來文件,比如拿U盤從windows中copy到linux中的
3.除了以上兩種情況,其他沒有所有者的文件可以全部清除,基本都是垃圾文件
find /root –nouser
-mtime 按修改時間查詢文件
atime        文件訪問的時間
ctime        修改文件屬性的時間
mtime       修改文件內容的時間
find /var/log/ –mtime +10
#查找10天前修改的文件
-10         10天內修改的文件
10           10天當天修改的文件
+10        10天前修改的文件
-size 按文件大小查詢
-a and 邏輯與,兩個條件都滿足
-o or    邏輯或,兩個條件滿足一個即可

-exec/-ok 命令 {}\;    對搜索結果執行操作,非常有用
注意事項:
1.也可以按照M字節去查詢,但是這里有個注意事項,k是小寫M要寫大寫才可以,這個要嚴格區分大小寫
2.如果不加單位,默認的單位是扇區單位也就是512kb,計算十分麻煩
find . –size 25k
#當前目錄查詢文件大小是25kb的文件
-25k       小於25kb的文件
  25k       等於25kb的文件
+25k      大於25kb的文件

find /etc –size +20k –a –size –50k
#查找/etc目錄下,大於20k並且小魚50k的文件
find /etc –size -20k –o –size +50k

find /etc –size +20k –a –size –50k –exec ls –lh {} \;
#超找/etc目錄下,大於20k小魚50k的文件,並顯示詳細信息
-inum 按i節點查詢文件(也就是ID號) find . –inum 262422
#查找節點是26244的文件
     

find是在系統當中搜索符合條件的文件名。如果需要匹配,使用通配符匹配,通配符是完美匹配,相當於是模糊查詢例如:

通配符

描述

例子

* 匹配任意內容 find /root –name “install.log*”(之所以加了引號是有可能不會識別通配符)
匹配任意一個字符 find /root –name “ab?”
[] 匹配任意一個中括號內的字符 find /root –name “ab[cd]”

 

四.字符串搜索命令grep

grep [選項]  字符串 文件名

#在文件當中匹配符合條件的字符串

選項

說明

例子

    grep “size” test.txt
在test.台下聽眾搜索包含size這個字符串的行
-i 忽略大小寫 grep –i “size” test.txt
在test.台下聽眾搜索包含size這個字符串的行,不區分大小寫
-v 排除指定字符串 grep –v “size” test.txt
在test.台下聽眾搜索包不含size這個字符串的行

五.find命令與grep命令的區別

find:在系統當中搜索符合條件的文件名,如果需要匹配,使用通配符匹配,通配符是萬全匹配

 

grep:在文件當中搜索符合條件的字符串,如果需要匹配,使用正則表達式進行匹配,正則表達式包時包含匹配


免責聲明!

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



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