1. 程式人生 > >Linux下的查找命令

Linux下的查找命令

指定權限 字母 name roc 必須 ctime oca 可靠 Owner

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

好了,小編本篇關於查找命令的分享到這裏就結束了,還望大家踴躍評論,多多指教。

Linux下的查找命令