Linux之檔案查詢命令locate與find詳解
一,檔案查詢
檔案查詢就是在檔案系統上查詢符號條件的檔案
檔案查詢可以通過使用locate和find命令
locate :非實時查詢(資料庫查詢)
find :實時查詢
locate命令
查詢系統上預建的檔案索引資料庫 : /var/lib/mlocate/mlocate.db
依賴於事先構建的索引
索引是構建在系統較為空閒時自動進行(週期性任務);管理員可以通過 updatedb 手動更新資料庫
索引構建過程中需要遍歷整個根檔案系統,極其消耗資源
工作特點:
查詢速度快
模糊查詢
非實時查詢
搜尋的是檔案的全路徑,不僅僅是檔名
可能只搜尋使用者具備讀取和執行許可權的目錄
語法:
locate KEYWORK
-i :執行區分大小寫的搜尋
-n X :只列舉前X個匹配專案
比如:locate nine :搜尋名稱或路徑中帶有 nine 的檔案
locate -r '\.sh$'
使用Regex來搜尋以 ".sh"結尾的檔案
find命令
find是實時查詢工具,通過遍歷指定路徑完成檔案查詢
工作特點
查詢速度略慢
精確查詢
實時查詢
可能只搜尋使用者具備讀取和執行許可權的目錄
語法:
find [OPTION]... [查詢路徑] [查詢條件] [處理動作]
查詢路徑 :指定具體目標路徑,預設為當前目錄
查詢條件 :指定的查詢標準,可以通過檔名,大小,型別,許可權等標準進行,預設為找出指定路徑下的所有檔案
處理動作 :對符合條件的檔案做操作,預設輸出值螢幕
1,通過檔名和inode查詢
-name filename :支援使用glob *,?,[],[^]等
-iname filename :不區分字母大小寫
-inum n :按inode號查詢
-samefile name :相同inode號的檔案
-links n :連線數為n的檔案
-regex "PATTERN" :以PATTERN匹配整個檔案路徑字串,而不僅僅是檔名稱
2,通過屬主,屬組查詢
-user USERNAME :查詢屬主位指定使用者(UID)的檔案
-group GROUPNAME :查詢陣列位指定組(GID)的檔案
-uid UserID :查詢屬主為指定的UID號的檔案
-gid GroupID :查詢屬組為指定的GID號的檔案
-nouser :查詢沒有屬主的檔案
-nogroup :查詢沒有屬組的檔案
3,根據檔案型別查詢
-type TYPE:
f :普通檔案
d :目錄檔案
l :符號連結檔案
s :套接字檔案
b :塊裝置檔案
c :字元裝置檔案
p :管道檔案
4,組合條件查詢
與 : -a
或 : -o
非 : -not , !
德摩根定律:
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 或 Q) = (非 P) 且 (非 Q)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
比如:
find / -name che.sh #搜尋名為che.sh的檔案 find -iname che.sh #不區分大小寫搜尋檔案 find / -name *.txt #搜尋字尾為.txt的檔案 find -user nineven -group cent #搜尋被使用者nineven 以及組群cent所擁有的檔案 find -user cent -not -group root #搜尋屬於使用者cent並且不屬於root組的檔案 find -user root -o -user nineven #搜尋屬於root使用者或者nineven使用者的檔案 find -not \( -user root -o -user cent \) #搜尋不屬於root使用者也不屬於cent使用者的檔案
找出/tmp目錄下,屬主不是root,且檔名不是fstab的檔案
[[email protected] Desktop]# find /tmp \( -not -user root -not -name 'fstab' \) -ls #方法一 [[email protected] Desktop]# find /tmp -not \( -user root -o -name 'fstab' \) -ls #方法二 103812749 0 srwxrwxrwx 1 gdm gdm 0 Aug 8 12:48 /tmp/.ICE-unix/2065 103813790 0 srwxrwxrwx 1 gdm gdm 0 Aug 8 16:17 /tmp/.ICE-unix/2751 103813763 0 srwxrwxrwx 1 cent cent 0 Aug 8 19:41 /tmp/.ICE-unix/15068
排除目錄
find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print
5,根據檔案大小來查詢
-size [+|-]#UNIT
常用單位: k,M,G
# : (#-1,#] ,如 :8k
-# : [0,#-1] ,如 :-8k
+# : (#,∞) ,如 :+8k
注意:檔案大小查詢時是按照位元組大小來進行查詢的
6,根據時間戳查詢
以 '天'為單位:
-atime [+|-]# :訪問時間
-mtime [+|-]# :修改時間
-ctime [+|-]# :改變時間
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
以“分鐘”為單位:
-amin
-mmin
-cmin
7,根據許可權查詢:
-perm [/|-]MODE
MODE :精確許可權匹配
/MODE :任何一類(u,g,o)物件的許可權中只要能有一位匹配即可,是或的關係
-MODE :每一類物件都必須同時擁有指定許可權,是與的關係
0 :表示不關注
比如:
find -perm 755 #只匹配許可權模式恰好是755的檔案 find -perm /222 #匹配任意人有寫的許可權,意思是隻有檔案有寫的許可權,就能匹配到 find -perm -222 #只有當每個人都有寫許可權才能匹配到 find -perm -002 #只有其他人(other)有寫的許可權時才會匹配到
8,處理動作:
-print :預設的處理動作,顯示至螢幕
-ls :類似於對查詢到的檔案執行 "ls -l" 命令
-delete :刪除查詢到的檔案
-fls file :查詢到的所有檔案的長格式資訊儲存至指定檔案中
-ok COMMAND {} \; :對查詢到的每個檔案執行有COMMAND指定的命令,對於每個檔案執行命令前,都會互動式要求使用者確認
-exec COMMAND {} \; :對查詢到的每個檔案執行由COMMAND指定的命令
{} :由於引用找到的檔名稱自身
find傳遞查詢到的檔案至後面指定命令時,查詢到所有符合條件的檔案一次性傳遞給後面的命令有些命令不能接受過的的引數,此時命令執行可能會失敗,下面方式可避免此問題
find | xargs COMMAND
比如:
find -name "*.sh" -exec cp {} {}.bak \; #備份本目錄下所有 .sh 結尾的檔案,新增.bak這個副檔名
find /tmp -ctime +3 -user cent -ok rm {} \; #提示刪除存在時間超過3天以上的cent的臨時檔案
find命令引數 | |
引數 | 詳情 |
根據檔名和inode查詢 | |
-name "filename" | 支援使用glob萬用字元 |
-iname "filename" | 不區分字母大小寫 |
-inum n | 按inode號查詢 |
-samefile name | 相同inode號的檔案 |
-links n | 連結數文n的檔案 |
-regex "PATTERN" | 以PATTERN匹配整個檔案路徑字串,而不僅僅是檔名稱 |
根據屬主屬組查詢 | |
-user USERNAME | 查詢屬主為指定使用者的檔案 |
-group GROUPNAME | 查詢屬組為指定組的檔案 |
-uid UserID | 查詢屬主為指定UID號的檔案 |
-gid GroupID | 查詢屬組為指定GID號的檔案 |
-nouser | 查詢沒有屬主的檔案 |
-nogroup | 查詢沒有屬組 的檔案 |
按檔案型別查詢 | |
-type f | 普通檔案 |
-type d | 目錄檔案 |
-type l | 符號連結檔案 |
-type s | 套接字檔案 |
-type b | 塊裝置檔案 |
-type c | 字元裝置檔案 |
-type p | 管道檔案 |
根據檔案大小來查詢 | |
-size [+|-]#UNIT | UNIT常用單位:k,M,G |
#UNIT | (#-1 ,3] |
-#UNIT | [0,#-1] |
+#UNIT | (#,∞) |
根據檔案時間戳查詢 | |
以天為單位 | |
-atime [+|-]# | 訪問時間 |
-mtime [+|-]# | 修改時間 |
-ctime [+|-]# | 改變時間 |
以分鐘為單位 | |
-amin [+|-]# | 訪問時間 |
-mmin [+|-]# | 修改時間 |
-cmin [+|-]# | 改變時間 |
# | [#,#+1) |
+# | [#+1,∞] |
-# | [0,#) |
根據許可權查詢 | |
-perm [/|-]MODE | |
MODE | 精確許可權匹配 |
/MODE | 任何一類(u,g,o)物件的許可權中只要有一位匹配即可,或關係 |
-MODE | 每一類物件都必須同時擁有指定許可權,與關係 |
0 | 表示不關注 |
條件組合 | |
-a | and,與 |
-o | or,或 |
-not , ! | 非 |
!A -a !B = !(A -o B) | 非(A 或 B) = (非 A) 且 (非 B) |
!A -o !B = !(A -a B) | 非(A 且 B) = (非 A) 或 (非 B) |
實戰訓練:
1、查詢/var目錄下屬主為root,且屬組為mail的所有檔案
[[email protected] Desktop]# find /var -user root -group mail /var/spool/mail /var/spool/mail/root
2、查詢/var目錄下不屬於root、lp、gdm的所有檔案
[[email protected] Desktop]# find /var -not \( -user root -o -user lp -o -user gdm \) -ls 34489031 0 drwxrwx--- 3 ods ods 19 Jul 21 11:27 /var/lib/softhsm 68414830 0 drwxrwx--- 2 ods ods 6 Nov 20 2015 /var/lib/softhsm/tokens 1191529 0 drwx------ 2 sssd sssd 6 Nov 20 2015 /var/lib/sss/db 34612192 0 drwxr-xr-x 2 sssd sssd 6 Nov 20 2015 /var/lib/sss/gpo_cache
3、查詢/var目錄下最近一週內其內容修改過,同時屬主不為 root,也不是postfix的檔案
[[email protected] Desktop]# find /var -mtime -7 -not \( -user root -o -user postfix \) -ls 10659 4 -rw-r--r-- 1 gdm gdm 43 Aug 13 15:25 103813776 0 -rw-rw---- 1 liuyu mail 0 Aug 11 17:30 /var/spool/mail/liuyu 103813780 0 -rw-rw---- 1 xixi mail 0 Aug 11 17:31 /var/spool/mail/xixi 106825848 0 -rw-rw---- 1 xi mail 0 Aug 11 17:33 /var/spool/mail/xi 106840464 0 -rw-rw---- 1 1005 mail 0 Aug 12 20:34 /var/spool/mail/user01
4、查詢當前系統上沒有屬主或屬組,且最近一個周內曾被訪 問過的檔案
[[email protected] Desktop]# find / -nouser -nogroup -atime -7 -ls 106840424 0 drwx------ 3 1005 1005 74 Aug 12 20:34 /home/user01 9574 0 drwxr-xr-x 4 1005 1005 37 Jul 21 11:23 /home/user01/.mozilla 33588923 0 drwxr-xr-x 2 1005 1005 6 Jun 10 2014 /home/user01/.mozilla/extensions 72866696 0 drwxr-xr-x 2 1005 1005 6 Jun 10 2014 /home/user01/.mozilla/plugins 106840459 4 -rw-r--r-- 1 1005 1005 18 Nov 20 2015 /home/user01/.bash_logout 106840462 4 -rw-r--r-- 1 1005 1005 193 Nov 20 2015 /home/user01/.bash_profile 106840463 4 -rw-r--r-- 1 1005 1005 231 Nov 20 2015 /home/user01/.bashrc
5、查詢/etc目錄下大於1M且型別為普通檔案的所有檔案
[[email protected] Desktop]# find /etc -type f -size +1M -ls 106733216 6852 -r--r--r-- 1 root root 7014922 Jul 21 11:48 /etc/udev/hwdb.bin 102496255 3772 -rw-r--r-- 1 root root 3858924 Nov 21 2015 /etc/selinux/targeted/policy/policy.29 69884684 1336 -rw-r--r-- 1 root root 1367395 Mar 6 2015 /etc/brltty/zh-tw.ctb
6、查詢/etc目錄下所有使用者都沒有寫許可權的檔案
[[email protected] Desktop]# find /etc/ -not -perm /222 -ls
7、查詢/etc目錄下至少有一類使用者沒有執行許可權的檔案
find /etc -not -perm -111 -ls
8、查詢/etc/init.d目錄下,所有使用者都有執行許可權,且其它 使用者有寫許可權的檔案
find /etc/init.d/ -perm -113
相關推薦
Linux之檔案查詢命令locate與find詳解
一,檔案查詢 檔案查詢就是在檔案系統上查詢符號條件的檔案 檔案查詢可以通過使用locate和find命令 locate :非實時查詢(資料庫查詢) find :實時查詢 locate命令 查詢系統上預建的檔案索引資料庫 : /var/lib/mloc
Linux之檔案查詢命令詳解
find 查詢檔案 find ./ -type f 查詢目錄 find ./ -type d 查詢名字為test的檔案或目錄 find ./ -name test 查詢名字符合正則表示式的檔案,注意前面的‘.*’(查詢到的檔案帶有目錄) find ./ -regex .*so.*\.gz 查詢目
Linux命令之檔案查詢命令
which命令 命令功能 在PATH變數指定的路徑中,搜尋某個系統命令的位置,並且返回第一個搜尋結果。 命令格式 which 可執行檔名稱 常用選項 空 查詢檔案、顯示命令路徑 例項 查詢pwd命令的路徑 命令 which pwd
linux 文件查找 (locate 與 find)
proc let bcb ado evel .com cat uid 普通 文件查找 目錄 1.locate2.find 一. locate locate命令基於數據庫db,所以不能實時更新 他有如下的特點: 1.查找速度快 2.是模糊查找
Linux之檔案處理命令和常見目錄
一、目錄或檔案處理命令: 1、建立目錄: mkdir -p [目錄名] -p:遞迴建立 注意:沒有-p 時,只能建立一級目錄;目錄也是檔案,稱為目錄檔案 2、切換所在目錄: cd [目錄] cd ~ :進入當前家目錄 cd - :返回上一次目錄 cd … :進入上一級目
linux定時任務crontab命令和crond服務詳解
linux 系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面原本就有非常多的計劃性工作,因此這個系統服務是預設啟動的。另 外, 由於使用者自己也可以設定計劃任務,所以, Linux 系統也提供了使用者控制計劃任務的命令 :cron
LINUX使用者管理——usermod命令的使用方法詳解
usermod命令 功能說明:修改使用者帳號。語 法:usermod [-LU][-c <備註>][-d <登入目錄>][-e <有效期限>][-f <緩衝天數>][-g <群組>][-G <群組>
linux下的top命令的各類引數詳解
2013的唯一的目標就是堅持每週寫一篇技術部落格。just do it! linux下的top命令是系統管理員分析系統執行現狀的法寶,但是每當top之後,除了幾個用得最多的引數,其他數字對於我來說,只是數字而已,完全不明白其具體含義。由此做一次top專題,對這個命令的
Linux常用命令之檔案查詢which、find、locate命令講解
在之前的課程中,我們介紹了Linux系統的常用檔案處理命令和許可權管理命令,今天我們繼續來學習Linux作業系統的其他處理命令。 1、檔案搜尋命令 `which` 命令解釋 - 命令名稱:`which` - 命令所在路徑: `/usr/bin/which` - 執行許可權:所有使用者 - 命令功能:顯示系
【Linux】比較幾個檔案查詢命令 find-locate-whereis-which
Linux中的檔案查詢命令很多,今天先學習一下find、locate 、whereis、which。 先看一下這幾個命令的主要區別: linux命令中find、locate 、whereis、which均可用來查詢檔案,主要區別有: find是最常用和最強大的查詢命令
linux下的find檔案查詢命令與grep檔案內容查詢命令
在使用linux時,經常需要進行檔案查詢。其中查詢的命令主要有find和grep。兩個命令是有區的。 區別:(1)find命令是根據檔案的屬性進行查詢,如檔名,檔案大小,所有者,所屬組,是否為空,訪問時間,修改時間等。
Linux 常用命令之——檔案搜尋命令find、locate、which、whereis、grep
一、命令名稱:find 命令所在路徑:/bin/find 執行許可權:所有使用者 語法: find [搜尋範圍] [匹配條件] $find /etc -name init -name 在某路徑下根據檔名稱搜尋檔案 $find
Linux檔案查詢命令詳解-which whereis find locate
原創BLog,轉載請註明出處 which命令 首先檢視man which的說明 which - shows the full path of (shell) commands. 在$PATH目錄下查詢命令的絕對路徑,PATH配置不同,查詢的結果也不同 檢視系統的PA
Linux的五個檔案查詢命令:find,locate,whereis,which,type
find:查詢檔案或目錄所在路徑 locate:根據檔案資料庫updatedb查詢檔案或目錄 locate不搜尋具體目錄,而是搜尋一個數據庫(/var/lib/locatedb),這個資料庫中含有本地所有檔案資訊(預設沒有掃描外接的行動硬碟或者掛載在/media下的其他
每天一個linux命令(20):常用檔案搜尋命令locate/find/which/whereis
004.檔案搜尋命令 04-01.檔案搜尋命令locate a.locate 功能單一,只搜尋檔名; &nbs
Linux命令——檔案查詢命令find
命令格式: find [path] [option] [action] 命令功能: 用於在檔案樹中查詢檔案,並作出相應處理 命令引數: [path]:find命令所查詢的目錄路徑。('.'表示當前目錄,
Linux下比find快N倍的檔案查詢命令
使用linux作業系統的人,一般都用過檔案查詢命令find,在檔案數量非常龐大的時候,比如在高通的android工程專案中,目錄大小有十幾個G,檔案數量非常多,用find命令就太慢了。下面介紹一個比f
Linux下各種查詢命令(find, grep, which, whereis, locate)
find命令 find < path > < expression > < cmd > path: 所要搜尋的目錄及其所有子目錄。預設為當前目錄。expression: 所要搜尋的檔案的特徵。cmd: 對搜尋結果進行特定的處理。 如果什麼引數也不加,find預設搜尋當
Linux檔案查詢命令find,xargs詳述
總結:zhy2111314來自:LinuxSir.Org整理:北南南北摘要: 本文是find 命令的詳細說明,可貴的是針對引數舉了很多的例項,大量的例證,讓初學者更為容易理解;本文是zhyfly兄貼在論壇中;我對本文進行了再次整理,為方便大家閱讀; 目錄 1、find命令的一般形式為;2、find
Linux檔案查詢命令及find詳解
一、linux的檔案查詢工具 1、locate工具 2、find工具 二、locate命令 1、特點: (1)依賴資料庫(可以用update更新資料庫,但費時長,現實企業環境最好不用) (2