日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

find、locate文件查找命令

發布時間:2024/1/3 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 find、locate文件查找命令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

find 命令

特征:是一個可以實時查找搜索的工具,通過遍歷指定路徑完成文件查找。

使用特性:

查詢速度相比locate工具較慢

可以更精確的查找

實時的查找

可以按特定且多樣的條件指定搜索

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

用法:

find [option]... /patn/to/file [where] [action]

path:指定查找的具體路徑,不指定默認為當前目錄下

where:指定的查詢條件,可以是文件名、文件大小、文件權限、文件屬組等權限,不指定默認會查找指定目錄下的所有文件以及子目錄下的所有文件

action:對指定好的條件匹配后,后面跟特定的動作,對前面指定的條件的文件列表做一些查找,可以是打印路徑、文件信息列表,默認不指定動作為顯示所有匹配條件的文件路徑

where(查找的常用條件):

根據文件名和inode查找:

-name “文件名關鍵字”:區分字母大小寫

-iname “文件名關鍵字”:不區分字母大小寫

-inum #:按照指定的inode編號進行查找對應編號的指定文件,#為inode編號

-samefile [filename]:通過指定的文件名來查詢與其inode編號相同的文件

-links #:查詢鏈接數為#的文件

-regex“PATTERN”:以PATTERN(正則表達式或關鍵字符)進行匹配整個文件路徑字符串,不僅僅是針對文件名稱,可能還有路徑、屬性等

根據文件的屬主、屬組查找:

-user [username]:查詢屬主為指定用戶(UID)的文件

-group [groupname]:查詢屬組為指定用戶組(GID)的文件

-uid [user_id]:查詢屬主為指定的UID號的文件

-gid [group_id]: 查找屬組為指定的GID號的文件

-nouser:查詢沒有屬組的文件(比如屬組位為空或只顯示UID)

-nogroup:查找沒有屬組的文件

注意:這里的通過用戶名、屬組名,在查詢時實際上是先去找用戶或組的ID號進行查詢,而不是真正通過用戶或組的名稱進程搜索。

[root@mzf ~]# find /home -user u2
/home/u2
/home/u2/.bash_logout
/home/u2/.bash_profile
/home/u2/.gnome2
/home/u2/.bashrc
/home/u2/.mozilla
/home/u2/.mozilla/extensions
/home/u2/.mozilla/plugins

View Code

根據文件類型查詢:

-type TYPE:

f 普通文件

d 目錄文件

l鏈接文件

s 套接字文件

b 塊設備文件

c 字符設備文件

p 管道文件

    查找目錄:find /(查找范圍) -name '查找關鍵字' -type d

條件的組合用法:

與:-a (注意與的優先級要高于或,前后位置不同可能條件也會有所變化)

或:-o

非:-not , !

德摩根定律:

非A或 非B = 非(A并B)

非A且 非B = 非(A或B)

例如:! -user u1 -a ! -user u2 = ! (-user u1 -o -user u2)

! -user u1 -o ! -user u2 = ! (-user u1 -a -user u2)

舉例說明:

單個條件

find  -name  aa.jpg        #搜索文件名為aa.jpg 的文件
find  -iname  aa.jpg       #不區分大小寫同時搜索aa.jpg AA.jpg AA.JPG等文件
find  /  -name  “*test*”   #搜索當前系統下文件名中包含test字符的文件
find  /var  -name  “*.sh”   #搜索/var的后綴為.sh腳步文件
find  -user  u1  -group u1   #搜索文件屬主和屬組名稱相同的文件

多個條件

find -user u1 -not -group u1         #查詢屬主為u1但屬組不為u1的文件
find -user u1 -o  -user  u2        #查詢屬主為u1或者u2的文件
find -not ( -user u1 -o -user u2 )    #查詢用戶屬組非u1和u2的文件
find -not -user u1 -a -not -user u2           #等價于上面帶括號的寫法
find / -user u1 -o -uid 500          #屬組名稱為u1或者uid為500的文件

#查詢/tmp目錄下,屬主不是root,且文件名不以f開頭的文件

方法一:

find /tmp ( -not -user root -a -not -name "f*" ) -ls

解析:因為后面的-ls動作默認會取最后一個條件作為顯示結果,所有這里使用括號進行包裹,注意,這里的()需要用轉義,然后括號里內開頭和結尾都要空格隔開

方法二:

find /tmp -not ( -user root -o -name "f*" ) -ls

安裝文件大小進行查找:

-szie [+|-][unit]unit表示單位,常用有:k,M,G

如:3k 表示2K+到3K,其中不包括2K整

如:-3k 表示0k到3K以內

如:+3K 表示3K以及以上

根據文件時間屬性查詢:

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

#:表示#天以及#+1天

+#:#天、#天以上

-#:0天到#天

-amin 查找在系統中最后#分鐘訪問的文件(access time)

-mtime查找在系統中最后#天里修改過的文件(modify time)

-mmin 查找在系統中最后#分鐘里修改過的文件(modify time)

-ctime查找在系統中最后#天里修改過屬性的文件

-cmin 查找在系統中最后#分鐘里修改過屬性的文件

根據文件權限位數值查詢:

-perm [/|-] MODE

MODE:精確匹配每個權限位都必須符合

/MODE:只要(u,g,o)有一類權限位包含有指定權限就匹配

-MODE:(u,g,o)其中必須每一位都包含對應位的權限

舉例:

find  -perm  755   #對應權限位必須為755全滿足
find  -perm  /222  #3個權限位任意人權限位有寫權限就滿足
find  -perm  -222  #3個權限位中都必須都包含有寫權限就滿足
find  -perm  -002  #3個權限位只有其它用戶必須包含寫權限

ACTION(動作處理):

-print:默認顯示文件集合路徑

-ls:對于匹配的文件進行類似ls -l的長模式格式顯示

-delete:刪除查找到的文件

-fls file:查找到的所有文件的長格式信息保存的指定文件中,類似重定向輸出

-ok COMMAND {} ;對查找到的每個文件執行指定的命令操作,每個文件被執行命令之前都會進行交互式判斷

-exec COMMAND {} ;對查找到的每個文件執行COMMAND指定的命令,每個文件被執行命令之前無需進行交互式判斷

{} :表示查詢到的每個文件自身路徑引用,find傳遞的文件到指定命令時,查詢的所有文件成一個集合保存為{}。

注意:COMMAND參數如果指定過多,可能會不支持,這時需要借助xargs命令,例如:

find  ./  -user  u1 | xargs  chmod  -o-x  {}  ;

注意:最后引用完一定要加上;,否則會報錯

#查詢/etc 下所有后綴名為.conf的配置文件并拷貝到/backup目錄下且后綴為.bak
find  /etc  -name “*.conf” exec  cp  {}  /backup/{}.bak  ;
#提示/tmp 下屬主為u1用戶且訪問時間超過3天的文件,并刪除
find  /etc  -user  u1  -atime  +3  -ok  rm  {}  ;
#查詢當前用戶家目錄下可被其它用戶寫入的文件,并去掉其它用戶的執行權限
find  ~  -perm  /002  -exec  chmod  o-x  {}  ;
#查詢/test 下權限為664且后綴為.sh普通文件,修改權限位為755
find  /test  -perm  664  -name  “*.sh”  -exec  chmod 755 {}  ;
#列出/home下所有的目錄
find  /home  -type  d  -ls

locate 命令:

原理:此命令查詢文件的準確度依賴于系統上預建的文件索引數據庫文件:

/var/lib/mlocate/mlocate.db

索引的構建:

索引的構建是在系統較為空閑時自動進行的周期性任務,當然系統管理員也可以手動更新和刪除數據庫(一般使用updatedb命令)。

索引的構建過程需要遍歷整個根文件系統,因此相當消耗系統資源。

locate命令查找特點:

查找速度快(在mlocate.db數據庫中查找)

模糊查找(正則查找)

非實時查找(數據庫周期性更新)

且搜索的是對文件的全路徑,不僅僅是針對文件名(不能指定文件名索引,只能通過正則指定文件名進行索引)

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

locate命令用法:

locate [option] keyword

option:

-i :執行時區分關鍵字大小寫

-n # :只列舉最前#個匹配項的匹配文件

-r reg :通過匹配正則表達式來匹配

例如:

通過關鍵字進行模糊查找

[root@mzf ~]# locate foo | wc -l    #查找當前系統下多少個含有foo關鍵字的文件
6223
[root@mzf ~]# locate foo | head -n 5  #因為上面統計搜索出6223行,這里只顯示5行
/etc/foomatic
/etc/foomatic/defaultspooler
/etc/foomatic/filter.conf
/usr/bin/foomatic-combo-xml
/usr/bin/foomatic-compiledb

View Code

解析:查找速度特別快,但是并非實時搜索,可能對于某些剛剛建立的文件搜素不到。這時可以使用updatedb命令或者刪除索引文件,再使用updatedb命令重新遍歷創建

通過正則表達式模式匹配查找

[root@mzf ~]# locate -r ".sh$"     #通過正則表達式來查詢所有腳步文件
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
/etc/X11/xinit/xinitrc.d/50-xinput.sh
/etc/X11/xinit/xinitrc.d/localuser.sh

通過正則表達式來匹配對應路徑

[root@mzf ~]# locate -r "^/root/ch.*.sh"    #雖然沒有指定路徑的條件,但是正則卻能完成
/root/checkdisk.sh
/root/checkint.sh

解析:從上一個例子可以看出,查找出來的都是一行一行的文件全路徑,那么把全路徑當作一個字符串進行精確匹配同樣也可以達到效果,當然也可能查找不到,這時就需要下面的更新或重建文件索引數據庫了:

通過updatedb命令來更新或者創建最新的索引文件以確保locate查詢的準確性:

解析:一般情況下不會去手動更新或者構建數據庫,當然locate命令在實際中也并不是用來查詢所有文件的,但是因為有索引庫的存在,所以可以用來查詢常見的系統及服務的配置文件,因為這類文件的位置一般不會改變。再加上locate依賴于庫文件,所以查找這些配置信息文件速度相對會很快,但是對于日志文件時常變化就不太好適用了。

總結

以上是生活随笔為你收集整理的find、locate文件查找命令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。