Linux下的查找命令有很多,常用的有grep、which、whereis、locate、find。使用linux系統難免會忘記文件所在的位置,小編就是如此。所以我們在文件系統上常常需要根據文件的各種屬性去查找符合條件的文件,所以小編今天特意寫一篇文章來介紹一下這幾個常用的查找命令。
一、Grep(Global search REgular expression and Print out the line)
作用:是一種強大的文本搜索工具,根據用戶指定的“模式”對目標文件逐行進行匹配檢查,并把匹配的行打印出來。
模式:由正則表達式字符及文本字符所編寫的過濾條件。
語法:
grep [選項] pattern [文件名]
–color 高亮顯示匹配到的字符串
-c 僅顯示各指定文件中包含模式的總行數
-i 模式中字母不區分大小寫
-h 不將包含模式的文件名顯示在該行上
-l 僅顯示包含模式的文件名
-n 顯示模式所在行的行號
-s 指定文件若不存在或不可讀,不提示錯誤信息
-v 顯示不能被pattern匹配到的行
正則表達式:
. 匹配任意一個字符
* 匹配0 個或多個*前的字符
^ 匹配行開頭
$ 匹配行結尾
[] 匹配指定范圍內中的任意一個字符
注意:
①其中,pattern為所要匹配的字符串。
②centos7上通過定義了grep的別名來高亮顯示匹配到的字符串,centos6沒有高亮顯示
想要用好grep這個命令,其實就是要寫好正則表達式,小編這里重點是要介紹查找命令的,所以這里不對grep的所有功能進行舉例介紹,只簡單舉例幾個。
例1:顯示用戶rpc默認的shell程序
* 這里-w用來匹配到指定單詞
例2:使用egrep取出/etc/rc.d/init.d/functions中其基名
* 這里-o僅顯示匹配到的字符串
例3:找出“netstat -tan”命令的結果中以‘LISTEN’后跟任意多個空白字符結尾的行
* 這里也用到了-w,匹配到LISTEN這個單詞以及后面\+表示的多個空格
例4;顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩種方法)
* 這里-i忽略字母大小寫,所以只以s開頭的就可以查找到
第二種方法:cat /proc/meminfo|grep “^[Ss]”
* 這里的[]是用來匹配到[]里面的大s跟小s
二:Which
which 可執行文件名稱
-n 指定文件名長度,指定的長度必須大于或等于所有文件中最長的文件名。
-p 與-n參數相同,但此處的包括了文件的路徑。
-w 指定輸出時欄位的寬度。
作用:主要是用來查找系統PATH目錄下的可執行文件。也就是說查找那些我們已經安裝好的可以直接執行的命令。比如:
* 這里 alias代表的是命令別名。由圖可以看出which是可以分辨出命令的別名的,并且查出命令所在路徑位置。
-v 顯示版本信息,比如:
三:Whereis
語法:
whereis [選項] 文件或者目錄名稱
-b : 只找二進制文件
-m: 只找在說明文件manual路徑下的文件
-s : 只找source源文件
-u : 沒有說明文檔的文件
作用:用來查找二進制(命令)、源文件、man文件。它是通過文件索引數據庫而非PATH來查找的,這點與which不同,所以查找的范圍比which要廣。比如:
* 我們由圖可以看到whereis還找到了ls命令的相關man文件。其他的選項小編就不一一舉例了,你們要多動手敲啊。
四:locate
Locate屬于非實時查找,用法簡單,在locate后面跟上所要查找的關鍵字即可,沒什么難度,但依賴于數據庫,也是通過數據庫查找文件。它可以找到任意你指定要找的文件,同時locte還可以通過-r選項使用正則表達式,功能十分強大。
特點:查找速度快、模糊查找,比如:
* 小編這里只截取了前三行,但是實際上locate輸出的內容是非常多的。它查出了包含cp這兩個字母的所有內容,說明它的模糊查找特點。
注意:locate使用的索引數據庫里的信息并不一定是實時有效的,可以使用updatedb命令手動更新索引數據庫。
五:find
find屬于實時查找工具,通過遍歷指定路徑下的文件系統完成文件查找,
它要比前面四個命令復雜的多,功能也強大的多。這條命令是通過直接搜索硬盤的方式查找的,所以可以保證查找的信息絕對可靠。但它的搜索速度慢。
特點:查找速度慢、精確查找
5.1語法:
Find [選項]…[查找路徑][查找條件][處理動作]
-name 基于名稱的精確查找
-iname 基于名稱忽略大小寫的精確查找查找
例1:查找/root/bin下以數字.sh結尾的文件
-user 用戶名 基于文件owner的查找
-group 組名 基于文件group的查找
例2:查找/var/目錄屬主為root且數組為mail的所有文件
-nouser 查找沒有owner的文件
-nogroup 查找沒有group的文件
5.2 -type 基于文件類型的查找
? f: 普通文件
? d: 目錄文件
? l: 符號鏈接文件
? s:套接字文件
? b: 塊設備文件
? c: 字符設備文件
? p: 管道文件
5.3 -size [+|-]#UNIT 根據文件大小來查找
常用單位:k, M, G,c(byte)
#UNIT: (#-1, #]如:6k 表示(5k,6k]
-#UNIT:[0,#-1]如:-6k 表示[0,5k]
+#UNIT:(#,∞)如:+6k 表示(6k,∞)
例3;查找/etc/目錄下大于1M且類型為普通文件的所有文件
5.4根據時間戳查找:
以“天”為單位;
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分鐘”為單位:
-amin
-mmin
-cmin
例4:查找/etc/目錄下最近兩天內其內容修改過的屬于root的文件
5.5根據權限查找
-perm [+|-]mode
mode:精確權限匹配
+mode[/mode] 任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ 從centos7開始淘汰
例5:查找/boot/下所有用戶都沒有寫權限的文件
* 這個是小編在centos7下用+號執行的根據權限查找文件,看到warning沒,警告最好用/表示,而且它查找出來的結果也不符合題意,有的user還有寫權限呢。
* 由圖可知,/表示的權限查找出來的文件才是正確的結果
-mode 每一類對象都必須同時擁有指定權限
例6;查找/app/目錄下至少有一類用戶沒有寫權限
處理動作:
-print 默認
-delete 直接刪除所查找到的文件,不詢問。
-ls 長列出所查找到的文件
-ok command {} \; 對查找到的文件當做下一命令的參數去執行(交互式)
-exec command {} \; 對查找到的文件當做下一命令的參數去執行(非交互式),比如:
* 小編這里使用-ok command {} \;來刪除查找到的首字母為大寫的文件,確定刪除詢問時輸入y
好了,小編本篇關于查找命令的分享到這里就結束了,還望大家踴躍評論,多多指教。
原創文章,作者:Qianzhihe,如若轉載,請注明出處:http://www.www58058.com/84616