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目錄下不屬于root、lp、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 23:40
下一篇 2017-08-14 08:54

相關推薦

  • shell腳本編程基礎練習

    這周,我們學習了shell腳本基礎,那么什么是shell腳本呢? shell script是利用shell的功能所寫的一個程序,這個程序是使用純文本文件,將一些shell的語法與指令寫在里面,然后用正則表達式,管道命令以及重定向向等功能,以達到我們所想要的處理目的。Shell腳本可以幫助我們系統、自動化的去管理和處理一些東西 下面是摘抄出的幾個練習: 首先,…

    2017-08-05
  • linux系統文件的元數據

    linux系統文件的元數據 什么是元數據 文件的數據分兩種: 一種元數據,既屬性數據:metadata 一種就是數據本身:data 如何查看元數據: stat stat命令用于顯示文件的狀態信息 [root@localhost ~]# stat /tmp/mylinux File: ‘/tmp/mylinux’ Size: 143 Blocks: 0 IO …

    Linux干貨 2018-03-11
  • 2016-11-4作業

    1、創建一個2G的文件系統,塊大小為2048byte,預留1%可用空間,文件系統ext4,卷標為TEST,要求此分區開機后自動掛載至/test目錄,且默認有acl掛載選項  mkfs.ext4 -b 2048  -L "TEST" -m 1 /dev/sdb6 2、寫一個腳本,完成如下功能: (1) 列出當前系統識別到…

    Linux干貨 2016-11-06
  • 計算機組成、Linux命令基礎

    計算機組成 控制器(Control):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。 運算器(Datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理。 存儲器(Memory):存儲器的功能是存儲程序、數據和各種信號、命令等信息…

    Linux干貨 2016-09-19
  • 一個簡單小例子來說一下Rescue營救模式

    昨天不小心將/lib64下的一個動態庫文件libc.so.6(很多命令都依賴的)給移動到了/root下,然后除了一些內部命令可用外,其余命令都不能用了,然后就想著看看重啟可不可以修復,結果重啟后就再也開不了機了,心想著這可咋整,要不用最快的方式進行快照恢復吧,結果老師就說了,不能使用快照,讓我們使用Rescue營救模式進行恢復,然后在恢復的過程中就發現一個問…

    Linux干貨 2017-08-21
  • CentOS 6.5 LVM磁盤管理學習筆記(二)

    ACTIVE            '/dev/vg51cto/LogVol04' [22.80 GiB]inherit  ACTIVE       …

    Linux干貨 2016-08-29
欧美性久久久久