Linux下which、locate、find 命令查找文件

Linux下我們經常要查找某個文件,但是又不記得文件位置,可以使用一些命令來搜索,目前接觸到的文件命令有以下幾個

which 查看可執行文件的位置

locate 基于數據庫查找文件位置

find 實時搜索文件

1、 Which

  語法:which 可執行二進制文件名稱

Linux下which、locate、find 命令查找文件

  Linux下which、locate、find 命令查找文件

Which是通過PATH環境變量查找文件的,在PATH 指定的路徑中,搜索某個命令的位置,也就是說使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪個位置的命令

注:對于一些命令使用which也查不出結果。有以下兩種可能

(1    (1) 命令所在的目錄不在PATH的查找路徑范圍內

(     (2) 命令屬于是內部命令,可以使用type命令確認命令類型

2、Locate

   locate命令用于查找文件,優點是搜索速度快,缺點是基于數據庫查找,缺乏實時性,而且是模糊查找。它在查找的時候需要一個數據庫,這個數據庫是由每天的例行工作(crontab)程序來建立。當我們建立好這個數據庫后,就可以方便地來搜尋所需文件了。

  即先運行:updatedb(無論在那個目錄中均可,可以放在crontab中 )后在 /var/lib/slocate/ 下生成 slocate.db 數據庫即可快速查找。在命令提示符下直接執行#updatedb 命令即可。

語法:locate 文件名

普通查詢:搜索包含給定字符串的文件路徑

 Linux下which、locate、find 命令查找文件

選項:

   -i 不區分大小寫的搜索

   -n X只列舉前X個匹配項目

   -r 支持正則表達式

3、Find

根據指定條件查找指定路徑(如果不指定路徑,默認是當前目錄)下的文件或者目錄(默認進行遞歸查詢),還可對查詢結果進行進一步的操作

工作特點:查詢速度較locate較慢(因為是實時查找)

          精準查找

          只能搜索用戶具備讀取和執行權限的目錄

語法 find 路徑 參數

參數選項說明

    -maxdepth level 最大搜索

    -mindepth level 最小搜索深度

Linux下which、locate、find 命令查找文件

find命令默認是進行遞歸查找,如果不行進行遞歸查找,可以將最大搜索深度設為1  

    -name 基于名稱的精確查找 可以使用通配符* 、? [] [^]

Linux下which、locate、find 命令查找文件

    -iname 忽略大小寫的查找

Linux下which、locate、find 命令查找文件

    -inum 基于inode號查找

Linux下which、locate、find 命令查找文件

-samefile 基于相同inode號的查找(查找硬鏈接)

   Linux下which、locate、find 命令查找文件

-links n 硬鏈接為n的文件

Linux下which、locate、find 命令查找文件 

-regex 支持正則 默認為(emacs標準)不支持[:upper:] [:alnum:],只能用[a-z] [0-9]之類的表達 
Linux下which、locate、find 命令查找文件

-regextype egrep -regex 支持egrep同標準的正則

-user 用戶名  基于文件owner的查找

 -group 組名 基于文件group的查找 


 Linux下which、locate、find 命令查找文件

-uid userid 基于文件uid的查找

-gid groupid 基于文件gid的查找

-nouser 查找沒有owner的文件

-nogroup 查找沒有group的文件

 
Linux下which、locate、find 命令查找文件

-type 基于文件類型的查找

       ? f: 普通文件

       ? d: 目錄文件

       ? l: 符號鏈接文件

       ? s:套接字文件

       ? b: 塊設備文件

       ? c: 字符設備文件


Linux下which、locate、find 命令查找文件

根據時間戳查找

以“天”為單位

-atime [+|-]#, 訪問時間

     #: [#,#+1)

     +#: [#+1,]

     -#: [0,#)

     -mtime  文件修改時間

         -ctime元數據時間

以“分鐘”為單位

-amin 訪問時間

-mmin 文件數據修改時間

    -cmin 文件元數據修改時間

-perm

  mode:精確權限匹配(這能匹配到指定權限的文件

Linux下which、locate、find 命令查找文件

  +mode[/mode] 任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ centos7開始淘汰

Linux下which、locate、find 命令查找文件 

/644 是指匹配owner位上有讀寫權限或者group位上有讀權限或者other位上有讀權限的文件

  -mode   每一類對象都必須同時擁有指定權限,與關系 0 表示不關注

Linux下which、locate、find 命令查找文件 

-421 匹配的是owner位上有讀權限且group位上有寫權限且other位上有執行權限的文件

-delete 直接刪除所查找到的文件,不詢問。

Linux下which、locate、find 命令查找文件

-ls 長列出所查找到的文件

Linux下which、locate、find 命令查找文件

-ls 屬于find命令的一個選項,并不是ls命令查出來的

-ok command \;(結束必須是空格加
\ ’再加 ;)對查找到的文件當做下一命令的參數去執行(交互式)(執行操作的時候每一個步驟會問,尤其是執行刪除操作的時候使用這種方式可以防止誤刪除)

-exec command \; 對查找到的文件當做下一命令的參數去執行(非交互式)
(直接執行不會詢問,當執行刪除操作時不安全)

xargs 用于產生某個命令的參數,xargs可以讀入stdin的數據,并且以空格符或回車符將stdin的數據分隔成為argumentLinux下which、locate、find 命令查找文件

使用這種可以大批量刪除一些文件,因為如果文件過多使用rm
–rf *
是刪不掉的,可以使用這種方法將參數一個一個的傳遞給rm命令 ,實現大批量刪除
  

練習:

1、查找/var目錄下屬主為root,且屬組為mail的所有文件

    find /var -user root -a -group mail -ls

2、查找/var目錄下不屬于rootlp、gdm的所有文件

    find /var -not \( -user root -o -user lp -o -user gdm \) -ls

3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件

    find /var/ -mtime -7 -not -user root -not -user postfix -ls

4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

    find / -nouser -o -nogroup -a -atime -7 -ls

5、查找/etc目錄下大于1M且類型為普通文件的所有文件

    find /etc/ -size +1M -a -type f -ls

6、查找/etc目錄下所有用戶都沒有寫權限的文件

    find /etc ! -perm /222 -ls

7、查找/etc目錄下至少有一類用戶沒有執行權限的文件

    find /etc ! -perm -111  -ls

8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

    find /etc/init.d/ -perm -113 -ls

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原創文章,作者:Melissa,如若轉載,請注明出處:http://www.www58058.com/84661

(0)
MelissaMelissa
上一篇 2017-08-13
下一篇 2017-08-14

相關推薦

  • 關于大型網站技術演進的思考(六):存儲的瓶頸(6)

    原文出處: 夏天的森林  在講數據庫水平拆分時候,我列出了水平拆分數據庫需要解決的兩個難題,它們分別是主鍵的設計問題和單表查詢的問題,主鍵問題前文已經做了比較詳細的講述了,但是第二個問題我沒有講述,今天我將會講講如何解決數據表被垂直拆分后的單表查詢問題。 要解決數據表被水平拆分后的單表查詢問題,我們首先要回到問題的源頭,我們為什么需要將數…

    2015-03-11
  • RPM包管理——運維必備技能之一

    軟件運行環境: API:Application Programming Interface     POSIX :Portable OS 程序源代碼 –> 預處理 –> 編譯 –> 匯編 –> 鏈接     …

    Linux干貨 2016-08-21
  • Linux基礎知識——文件查找

    Linux系統的核心思想之一就是一切皆文件,可想而知你要靠記憶去查找一個文件該是多么費勁;今天我們介紹幾個文件查找命令:whereis,locate,find whereis locate the binary, source, and manual page files for…

    Linux干貨 2016-10-11
  • yum用法第一篇-簡介及常見用法使用總結

    一、簡介     yum( 全稱為:Yellow dog Updater, Modified),是紅帽(RedHat)家族(RedHat、Fedora、CentOS)中的前端shell的軟件包管理器,主要基于對RPM包的管理,能夠根據配置文件(類似于svn資源庫配置文件)從指定的服務器自動下載RPM包進行安裝,其最大的優勢就是可…

    Linux干貨 2015-09-22
  • 馬哥教育網絡班22期中秋節課程練習1

    #!/bin/sh   set -e CheckRoot() { #check if currect use is root user     CUR_USER=`whoami`     if&nbs…

    Linux干貨 2016-10-09
  • Mariadb數據庫復制系列(四):復制過濾器的實現

       實驗四:復制過濾器的實現 復制過濾器的作用是讓從節點僅復制主節點的指定的庫,或指定數據庫的指定表,而不是全部復制。其配置方式有兩種,一種是在主節點上配置,通過定義主節點只記錄部分庫或表產生的二進制日志時間來實現;一種是通過從節點上配置,當復制了主節點的所有的二進制日志數據后,在SQL線程執行時,只執行指定的庫或表相關的二進制日志時間;一般采取在從節點上…

    Linux干貨 2016-11-24
欧美性久久久久