find 和 xargs 和 locate
?
?
Linux 中 find 常見用法示例:http://blog.csdn.net/freeking101/article/details/51203183
?
?
?
1. find 命令選項(xiàng)。
?
find 命令的一般形式為:find pathname -options [-print -exec -ok]
find 命令的參數(shù):
pathname find 命令所查找的目錄路徑。例如:用.來表示當(dāng)前目錄,用/來表示系統(tǒng)根目錄。
find 命令部分選項(xiàng)。find命令有很多選項(xiàng)或表達(dá)式,每一個(gè)選項(xiàng)前面跟隨一個(gè)橫杠-。
-name 按照文件名查找文件。 -perm 按照文件權(quán)限來查找文件。 -prune 使用這一選項(xiàng)可以使find命令不在當(dāng)前指定的目錄中查找,如果同時(shí)使用了-depth選項(xiàng),那么-prune選項(xiàng)將被find命令忽略。 -user 按照文件屬主來查找文件。 -group 按照文件所屬的組來查找文件。 -mtime -n +n 按照文件的更改時(shí)間來查找文件,-n表示文件更改時(shí)間距現(xiàn)在n天以內(nèi),+n表示文件更改時(shí)間距現(xiàn)在n天以前。 find命令還有-atime和-ctime選項(xiàng),但它們都和-mtime選項(xiàng)相似,所以我們?cè)谶@里只介紹-mtime選項(xiàng)。 -nogroup 查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在。 -nouser 查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在。 -newer file1 ! file2 查找更改時(shí)間比文件file1新但比文件file2舊的文件。 -type 查找某一類型的文件,諸如: b - 塊設(shè)備文件。 d - 目錄。 c - 字符設(shè)備文件。 p - 管道文件。 l - 符號(hào)鏈接文件。 f - 普通文件。 -size n[c] 查找文件長(zhǎng)度為n塊的文件,帶有c時(shí)表示文件長(zhǎng)度以字節(jié)計(jì)。 -depth 在查找文件時(shí),首先查找當(dāng)前目錄中的文件,然后再在其子目錄中查找。 -fstype 查找位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通常可以在配置文件 /etc/fstab中找到,該配置文件中包含了本系統(tǒng)中有關(guān)文件系統(tǒng)的信息。 -mount 在查找文件時(shí)不跨越文件系統(tǒng)mount點(diǎn)。 -follow 如果find命令遇到符號(hào)鏈接文件,就跟蹤至鏈接所指向的文件。 -cpio 對(duì)匹配的文件使用cpio命令,將這些文件備份到磁帶設(shè)備中。使用 name 選項(xiàng)
文件名選項(xiàng)是find命令最常用的選項(xiàng),要么單獨(dú)使用該選項(xiàng),要么和其他選項(xiàng)一起使用。 可以使用某種文件名模式來匹配文件,記住要用引號(hào)將文件名模式引起來。 不管當(dāng)前路徑是什么,如果想要在自己的根目錄$HOME中查找文件名符合*.txt的文件, 使用~作為'pathname參數(shù),波浪號(hào)~代表了你的$HOME目錄。 $ find ~ -name "*.txt" -print 在家目錄及子目錄中查找所有的‘*.txt’文件 $ find . -name "*.txt" -print 在當(dāng)前目錄及子目錄中查找所有的‘*.txt’文件 $ find . -name "[A-Z]*" -print 當(dāng)前目錄及子目錄中查找文件名以一個(gè)大寫字母開頭的文件 $ find /etc -name "host*" -print 在/etc目錄中查找文件名以host開頭的文件 $ find ~ -name "*" -pri或ntf ind . -print 查找$HOME目錄中的文件 $ find / -name "*" -print 從根目錄開始查找(太消耗系統(tǒng)資源,不建議使用,如果好似用可以加上 & ,讓后臺(tái)執(zhí)行) 如果想在當(dāng)前目錄查找文件名以兩個(gè)小寫字母開頭,跟著是兩個(gè)數(shù)字,最后是*.txt的文件,下面的命令就能夠返回名為ax37.txt的文件: $ find . -name "[a-z][a-z][0-9][0-9].txt" -print?使用 perm 選項(xiàng):
如果希望按照文件權(quán)限模式來查找文件的話,可以采用-perm選項(xiàng)。 你可能需要找到所有用戶都具有執(zhí)行權(quán)限的文件,或是希望查看某個(gè)用戶目錄下的文件權(quán)限類型。 在使用這一選項(xiàng)的時(shí)候,最好使用八進(jìn)制的權(quán)限表示法。 為了在當(dāng)前目錄下查找文件權(quán)限位為755的文件,即文件屬主可以讀、寫、執(zhí)行,其他用戶可以讀、執(zhí)行的文件,可以用: $ find . -perm 755 -print如果希望在當(dāng)前目錄下查找所有用戶都可讀、寫、執(zhí)行的文件(要小心這種情況),我們可以使用find命令的-perm選項(xiàng)。 在八進(jìn)制數(shù)字前面要加一個(gè)橫杠-。 在下面的命令中-perm代表按照文件權(quán)限查找,而‘007’和你在chmod命令的絕對(duì)模式中所采用的表示法完全相同。 $ find . -perm -007 -print忽略 某個(gè)目錄
如果在查找文件時(shí)希望忽略某個(gè)目錄,因?yàn)槟阒滥莻€(gè)目錄中沒有你所要查找的文件,那么可以使用-prune選項(xiàng)來指出需要忽略的目錄。 在使用-prune選項(xiàng)時(shí)要當(dāng)心,因?yàn)槿绻阃瑫r(shí)使用了-depth選項(xiàng),那么-prune選項(xiàng)就會(huì)被find命令忽略。 如果希望在/apps目錄下查找文件,但不希望在/apps/bin目錄下查找,可以用: $ find /apps -name "/apps/bin" -prune -o -print?使用 user 和 nouser 選項(xiàng)
如果希望按照文件屬主查找文件,可以給出相應(yīng)的用戶名。 例如,在$HOME目錄中查找文件屬主為dave的文件,可以用: $ find ~ -user dave -print 在/etc目錄下查找文件屬主為uucp的文件: $ find /etc -user uucp -print 為了查找屬主帳戶已經(jīng)被刪除的文件,可以使用-nouser選項(xiàng)。這樣就能夠找到那些屬主 在/etc/passwd文件中沒有有效帳戶的文件。在使用-nouser選項(xiàng)時(shí),不必給出用戶名; find命令 能夠?yàn)槟阃瓿上鄳?yīng)的工作。例如,希望在/home目錄下查找所有的這類文件,可以用: $ find /home -nouser -print使用 group 和 nogroup 選項(xiàng)
就像user和nouser選項(xiàng)一樣,針對(duì)文件所屬于的用戶組, find命令也具有同樣的選項(xiàng),為 了在/apps目錄下查找屬于accts用戶組的文件,可以用: $ find /apps -group accts -print 要查找沒有有效所屬用戶組的所有文件,可以使用nogroup選項(xiàng)。下面的find命令從文件 系統(tǒng)的根目錄處查找這樣的文件 $ fine/-nogroup-print按照更改時(shí)間查找文件
如果希望按照更改時(shí)間來查找文件,可以使用mtime選項(xiàng)。如果系統(tǒng)突然沒有可用空間了, 很有可能某一個(gè)文件的長(zhǎng)度在此期間增長(zhǎng)迅速,這時(shí)就可以用 mtime 選項(xiàng)來查找這樣的文件。用減號(hào)-來限定更改時(shí)間在距今n日以內(nèi)的文件, 用加號(hào)+來限定更改時(shí)間在距今n日以前的文件。希望在系統(tǒng)根目錄下查找更改時(shí)間在5日以內(nèi)的文件,可以用: $ find / -mtime -5 -print 為了在/var/adm目錄下查找更改時(shí)間在3日以前的文件,可以用: $ find /var/adm -mtime +3 -print查找比某個(gè)文件新或舊的文件
如果希望查找更改時(shí)間比某個(gè)文件新但比另一個(gè)文件舊的所有文件,可以使用-newer選項(xiàng)。 它的一般形式為: newest_file_name ! oldest_file_name 其中,!是邏輯非符號(hào)。這里有兩個(gè)文件,它們的更改時(shí)間大約相差兩天。 下面給出的find命令能夠查找更改時(shí)間比文件age.awk新但比文件belts.awk舊的文件: 如果想使用find命令的這一選項(xiàng)來查找更改時(shí)間在兩個(gè)小時(shí)以內(nèi)的文件, 除非有一個(gè)現(xiàn)成的文件其更改時(shí)間恰好在兩個(gè)小時(shí)以前,否則就沒有可用來比較更改時(shí)間的文件。 為了解決這一問題,可以首先創(chuàng)建一個(gè)文件并將其日期和時(shí)間戳設(shè)置為所需要的時(shí)間。這可以用 touch 命令來實(shí)現(xiàn)。 假設(shè)現(xiàn)在的時(shí)間是 23:40,希望查找更改時(shí)間在兩個(gè)小時(shí)以內(nèi)的文件, 可以首先創(chuàng)建這樣一個(gè)文件:一個(gè)符合要求的文件已經(jīng)被創(chuàng)建;這里我們假設(shè)今天是五月四日, 而該文件的更改時(shí)間是 21:40,比現(xiàn)在剛好早兩個(gè)小時(shí)。 現(xiàn)在我們就可以使用 find 命令的 -newer 選項(xiàng)在當(dāng)前目錄下查找所有更改時(shí)間在兩個(gè)小時(shí)以內(nèi)的文件: $ find . -newer dstamp -print使用 type 選項(xiàng)
UNIX 或 LINUX 系統(tǒng)中有若干種不同的文件類型,這部分內(nèi)容我們?cè)谇懊娴恼鹿?jié)已經(jīng)做了介紹,這里就不再贅述。 如果要在 /etc 目錄下查找所有的目錄,可以用: $ find /etc -type d -print 為了在當(dāng)前目錄下查找除目錄以外的所有類型的文件,可以用: $ find . ! -type d -print 為了在/ e t c目錄下查找所有的符號(hào)鏈接文件,可以用: $ find /etc -type l -print使用 size 選項(xiàng)
可以按照文件長(zhǎng)度來查找文件,這里所指的文件長(zhǎng)度既可以用塊( block)來計(jì)量,也可以用字節(jié)來計(jì)量。 以字節(jié)計(jì)量文件長(zhǎng)度的表達(dá)形式為 Nc;以塊計(jì)量文件長(zhǎng)度只用數(shù)字表示即可。 就我個(gè)人而言,我總是使用以字節(jié)計(jì)的方式,在按照文件長(zhǎng)度查找文件時(shí), 大多數(shù)人都喜歡使用這種以字節(jié)表示的文件長(zhǎng)度,而不用塊的數(shù)目來表示, 除非是在查看文件系統(tǒng)的大小,因?yàn)檫@時(shí)使用塊來計(jì)量更容易轉(zhuǎn)換。 為了在當(dāng)前目錄下查找文件長(zhǎng)度大于 1M字節(jié)的文件,可以用: $ find . -size +1000000c -print 為了在 /home/apache 目錄下查找文件長(zhǎng)度恰好為 100字節(jié)的文件,可以用: $ find /home/apache -size 100c -print 為了在當(dāng)前目錄下查找長(zhǎng)度超過 10 塊的文件(一塊等于 512字節(jié)),可以用: $ find . -size +10 -print使用 depth 選項(xiàng)
在使用find命令時(shí),可能希望先匹配所有的文件,再在子目錄中查找。使用 depth選項(xiàng)就 可以使find命令這樣做。這樣做的一個(gè)原因就是,當(dāng)在使用find命令向磁帶上備份文件系統(tǒng)時(shí), 希望首先備份所有的文件,其次再備份子目錄中的文件。 在下面的例子中, find命令從文件系統(tǒng)的根目錄開始,查找一個(gè)名為CON.FILE的文件。 它將首先匹配所有的文件然后再進(jìn)入子目錄中查找。 $ find / -name "CON.FILE" -depth -print使用mount選項(xiàng) 在當(dāng)前的文件系統(tǒng)中查找文件(不進(jìn)入其他文件系統(tǒng)),可以使用find命令的mount選項(xiàng)。 在下面的例子中,我們從當(dāng)前目錄開始查找位于本文件系統(tǒng)中文件名以X C結(jié)尾的文件: $ find . -name "*.XC" -mount -print使用 cpio 選項(xiàng)
cpio命令可以用來向磁帶設(shè)備備份文件或從中恢復(fù)文件。可以使用find命令在整個(gè)文件系 統(tǒng)中(更多的情況下是在部分文件系統(tǒng)中)查找文件,然后用cpio命令將其備份到磁帶上。 如果希望使用cpio命令備份/etc、/home和/apps目錄中的文件,可以使用下面所給出的命令, 不過要記住你是在文件系統(tǒng)的根目錄下:(在上面的例子中,第一行末尾的\告訴shell命令還未結(jié)束,忽略\后面的回車。) 在上面的例子中,應(yīng)當(dāng)注意到路徑中缺少/。這叫作相對(duì)路徑。 之所以使用相對(duì)路徑,是因?yàn)樵趶拇艓е谢謴?fù)這些文件的時(shí)候,可以選擇恢復(fù)文件的路徑。 例如,可以將這些文件先恢復(fù)到另外一個(gè)目錄中,對(duì)它們進(jìn)行某些操作后,再恢復(fù)到原始目錄中。 如果在備份時(shí)使用了絕對(duì)路徑,例如/etc,那么在恢復(fù)時(shí),就只能恢復(fù)到/etc目錄中去,別無其他選擇。 在上面的例子中,我告訴find命令首先進(jìn)入/ e t c目錄,然后是/home和/apps目錄,先匹配這些目錄下的文件, 然后再匹配其子目錄中的文件,所有這些結(jié)果將通過管道傳遞給cpio命令進(jìn)行備份。 順便說一下,在上面的例子中cpio命令使用了C65536選項(xiàng),我本可以使用B選項(xiàng),不過這 樣每塊的大小只有 512 字節(jié),而使用了C65536 選項(xiàng)后,塊的大小變成了 64K 字節(jié)(65536 / 1024)。使用 exec 或 ok 來執(zhí)行 shell 命令
當(dāng)匹配到一些文件以后,可能希望對(duì)其進(jìn)行某些操作,這時(shí)就可以使用 -exec選項(xiàng)。 一旦find命令匹配到了相應(yīng)的文件,就可以用 -exec選項(xiàng)中的命令對(duì)其進(jìn)行操作 (在有些操作系統(tǒng)中只允許 -exec 選項(xiàng)執(zhí)行諸如 ls 或 ls -l這樣的命令)。 大多數(shù)用戶使用這一選項(xiàng)是為了查找舊文件并刪除它們。 這里我強(qiáng)烈地建議你在真正執(zhí)行 rm 命令刪除文件之前,最好先用ls命令看一下,確認(rèn)它們是所要?jiǎng)h除的文件。exec選項(xiàng)后面跟隨著所要執(zhí)行的命令,然后是一對(duì)兒{ },一個(gè)空格和一個(gè)\,最后是一個(gè)分號(hào)。為了使用 exec 選項(xiàng),必須要同時(shí)使用 print 選項(xiàng)。 如果驗(yàn)證一下find命令,會(huì)發(fā)現(xiàn)該命令只輸出從當(dāng)前路徑起的相對(duì)路徑及文件名。 為了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的 -exec選項(xiàng)中,例如:上面的例子中,find命令匹配到了當(dāng)前目錄下的所有普通文件,并在 -exec 選項(xiàng)中使用ls -l 命令將它們列出。 為了在 /logs目錄中查找更改時(shí)間在5日以前的文件并刪除它們,可以用: $ find logs -type f -mtime +5 -exec rm {} \;記住,在shell中用任何方式刪除文件之前,應(yīng)當(dāng)先查看相應(yīng)的文件,一定要小心!當(dāng)使用諸如 mv 或 rm 命令時(shí),可以使用 -exec選項(xiàng)的安全模式。 它將在對(duì)每個(gè)匹配到的文件進(jìn)行操作之前提示你。在下面的例子中, find 命令在當(dāng)前目錄中查找所有文件名以 .LOG 結(jié)尾、更改時(shí)間在5日以上的文件,并刪除它們, 只不過在刪除之前先給出提示。按y鍵刪除文件,按n鍵不刪除。 任何形式的命令都可以在 -exec 選項(xiàng)中使用。在下面的例子中我們使用 grep 命令。首先匹配所有文件名為 “passwd*”的文件,例如passwd、passwd.old、passwd.bak, 然后執(zhí)行 grep 命令看看在這些文件中是否存在一個(gè) rounder用戶。find命令的例子 我們已經(jīng)介紹了find命令的基本選項(xiàng),下面給出find命令的一些其他的例子。 為了匹配 $HOME 目錄下的所有文件,下面兩種方法都可以使用: $ find $HOME -print $ find ~ -print為了在當(dāng)前目錄中查找 suid 置位,文件屬主具有讀、寫、執(zhí)行權(quán)限,并且文件所屬組的用 戶和其他用戶具有讀和執(zhí)行的權(quán)限的文件,可以用: $ find . -type f -perm 4755 -print為了查找系統(tǒng)中所有文件長(zhǎng)度為0的普通文件,并列出它們的完整路徑,可以用: $ find / -type f -size 0 -exec ls -l {} \;為了查找 /var/logs 目錄中更改時(shí)間在7日以前的普通文件,并刪除它們,可以用: $ find /var/logs -type f -mtime +7 -exec rm {} \;為了查找系統(tǒng)中所有屬于 audit 組的文件,可以用: $find /-name -group audit -print我們的一個(gè)審計(jì)系統(tǒng)每天創(chuàng)建一個(gè)審計(jì)日志文件。日志文件名的最后含有數(shù)字, 這樣我們一眼就可以看出哪個(gè)文件是最新的,哪個(gè)是最舊的。 admin.log 文件編上了序號(hào):admin.log.001、admin.log.002等等。下面的find命令將刪除 /logs 目錄中訪問時(shí)間在7日以前、含有數(shù)字后綴的 admin.log 文件。 該命令只檢查三位數(shù)字,所以相應(yīng)日志文件的后綴不要超過 999。 $ find /logs -name 'admin.log[0-9][0-9]'[-0a-t9i]me +7 -exec rm {} \;為了查找當(dāng)前文件系統(tǒng)中的所有目錄并排序,可以用: $ find . -type d -print -local -mount |sort為了查找系統(tǒng)中所有的r m t磁帶設(shè)備,可以用: $ find /dev/rmt -print?
?
?
2. xargs
?
在使用 find 命令的 -exec 選項(xiàng)處理匹配到的文件時(shí), find命令將所有匹配到的文件一起傳遞給exec執(zhí)行。
不幸的是,有些系統(tǒng)對(duì)能夠傳遞給exec的命令長(zhǎng)度有限制,這樣在find命令運(yùn)行幾分鐘之后,就會(huì)出現(xiàn)溢出錯(cuò)誤。
錯(cuò)誤信息通常是“參數(shù)列太長(zhǎng)”或“參數(shù)列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。
find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項(xiàng)那樣。
這樣它可以先處理最先獲取的一部分文件,然后是下一批,并如此繼續(xù)下去。
在有些系統(tǒng)中,使用-exec選項(xiàng)會(huì)為處理每一個(gè)匹配到的文件而發(fā)起一個(gè)相應(yīng)的進(jìn)程,并非將匹配到的文件全部作為參數(shù)一次執(zhí)行;這樣在有些情況下就會(huì)出現(xiàn)進(jìn)程過多,系統(tǒng)性能下降的問題,因而效率不高;而使用 xargs命令則只有一個(gè)進(jìn)程。
另外,在使用xargs命令時(shí),究竟是一次獲取所有的參數(shù),還是分批取得參數(shù),
以及每一次獲取參數(shù)的數(shù)目都會(huì)根據(jù)該命令的選項(xiàng)及系統(tǒng)內(nèi)核中相應(yīng)的可調(diào)參數(shù)來確定。
讓我們來看看xargs命令是如何同find命令一起使用的,并給出一些例子。
下面的例子查找系統(tǒng)中的每一個(gè)普通文件,然后使用xargs命令來測(cè)試它們分別屬于哪類文件: 下面的例子在整個(gè)系統(tǒng)中查找內(nèi)存信息轉(zhuǎn)儲(chǔ)文件(core dump) ,然后把結(jié)果保存到 /tmp/core.log 文件中: $ find . -name "core" -print | xargs echo "" >/tmp/core.log下面的例子在/apps/audit目錄下查找所有用戶具有讀、寫和執(zhí)行權(quán)限的文件,并收回相應(yīng)的寫權(quán)限: $ find /apps/audit -perm -7 -print | xargs chmod o-w在下面的例子中,我們用grep命令在所有的普通文件中搜索device這個(gè)詞: $ find / -type f -print | xargs grep "device"在下面的例子中,我們用grep命令在當(dāng)前目錄下的所有普通文件中搜索DBO這個(gè)詞: $ find . -name *\-type f -print | xargs grep "DBO" 注意,在上面的例子中, \用來取消find命令中的*在shell中的特殊含義。?
小結(jié)
find命令是一個(gè)非常優(yōu)秀的工具,它可以按照用戶指定的準(zhǔn)則來匹配文件。使用exec和xargs可以使用戶對(duì)所匹配到的文件執(zhí)行幾乎所有的命令。
?
?
?
3. locate 命令
?
locate,定位的意思,作用是讓使用者可以快速的搜尋系統(tǒng)中是否有指定的文件。
命令功能:
locate命令可以在搜尋數(shù)據(jù)庫時(shí)快速找到檔案,數(shù)據(jù)庫由updatedb程序來更新,updatedb是由cron daemon周期性建立的,locate命令在搜尋數(shù)據(jù)庫時(shí)比由整個(gè)由硬盤資料來搜尋資料來得快,但較差勁的是locate所找到的檔案若是最近才建立或 剛更名的,可能會(huì)找不到,在內(nèi)定值中,updatedb每天會(huì)跑一次,可以由修改crontab來更新設(shè)定值。(etc/crontab)
locate指定用在搜尋符合條件的檔案,它會(huì)去儲(chǔ)存檔案與目錄名稱的數(shù)據(jù)庫內(nèi),尋找合乎范本樣式條件的檔案或目錄錄,可以使用特殊字元(如”*” 或”?”等)來指定范本樣式,如指定范本為kcpa*ner, locate會(huì)找出所有起始字串為kcpa且結(jié)尾為ner的檔案或目錄,如名稱為kcpartner若目錄錄名稱為kcpa_ner則會(huì)列出該目錄下包括 子目錄在內(nèi)的所有檔案。
locate指令和find找尋檔案的功能類似,但locate是透過update程序?qū)⒂脖P中的所有檔案和目錄資料先建立一個(gè)索引數(shù)據(jù)庫,在 執(zhí)行l(wèi)oacte時(shí)直接找該索引,查詢速度會(huì)較快,索引數(shù)據(jù)庫一般是由操作系統(tǒng)管理,但也可以直接下達(dá)update強(qiáng)迫系統(tǒng)立即修改索引數(shù)據(jù)庫。
locate命令用于查找文件,Locate可以很快速的搜尋檔案系統(tǒng)內(nèi)是否有指定的檔案。其方法是先建立一個(gè)包括系統(tǒng)內(nèi)所有檔案名稱及路徑的數(shù)據(jù)庫,之后當(dāng)尋找時(shí)就只需查詢這個(gè)數(shù)據(jù)庫,而不必實(shí)際深入檔案系統(tǒng)之中了。所以它需要一個(gè)數(shù)據(jù)庫(默認(rèn):slocate.db),一個(gè)配置文件(updatedb.conf),一個(gè)crontab(定時(shí)執(zhí)行)?
- 先運(yùn)行updatedb, 可直接命令執(zhí)行,也可以放在crontab里面執(zhí)行
- 然后在生成的/var/lib/slocate/slocate.db數(shù)據(jù)庫中查找。
所以
- locate的速度比find快,因?yàn)樗⒉皇钦娴牟檎椅募?#xff0c;而是查數(shù)據(jù)庫
- locate的查找并不是實(shí)時(shí)的,而是以數(shù)據(jù)庫的更新為準(zhǔn),一般是系統(tǒng)自己維護(hù).
- locate的升級(jí)數(shù)據(jù)庫命令:locate -- u ? #注意之間有空格
locate 命令特點(diǎn):
- 1) "locate"的速度比"find"快,因?yàn)樗⒉皇钦娴牟檎椅募?#xff0c;而是查數(shù)據(jù)庫。
- 2) 新建的文件,我們立即用"locate"命令去查找,一般是找不到的,因?yàn)閿?shù)據(jù)庫的更新不是實(shí)時(shí)的,數(shù)據(jù)庫的更新時(shí)間由系統(tǒng)維護(hù)。
- 3) "locate"命令所搜索的后臺(tái)數(shù)據(jù)庫在"/var/lib/mlocate"這個(gè)目錄下,可能有些Linux系統(tǒng)位置不同,具體我們可以用"locate locate"查詢。
- 4) 我們可以用"updatedb"命令來更新數(shù)據(jù)庫,這樣就能查詢到剛才新建的文件了。
- 5) 并不是所有的目錄下的文件都會(huì)用"locate"命令搜索到,"/etc/updatedb.conf"這個(gè)配置文件中,配置了一些"locate"命令的一些規(guī)則。
/etc/updatedb.conf 配置文件解析:
1) PRUNE_BIND_MOUNTS = "yes"
? ? ? ?值為"yes"時(shí)開啟搜索限制,此時(shí),下邊的配置生效;為"no"時(shí)關(guān)閉搜索限制。
2) PRUNEFS =
? ? ? ?后邊跟搜索時(shí),不搜索的文件系統(tǒng)。
3) PRUNENAMES =?
? ? ? ?后邊跟搜索時(shí),不搜索的文件類型。
4) PRUNEPATHS =?
? ? ? ?后邊跟搜索時(shí),不搜索的文件所在的路徑。
?
1. 命令格式:locate [選項(xiàng)] 文件名
2. 常用選項(xiàng):
"locate -c" 查詢指定文件的數(shù)目。(c為count的意思) "locate -e" 只顯示當(dāng)前存在的文件條目。(e為existing的意思) "locate -h" 顯示"locate"命令的幫助信息。(h為help的意思) "locate -i" 查找時(shí)忽略大小寫區(qū)別。(i為ignore的意思) "locate -n" 最大顯示條數(shù)" 至多顯示"最大顯示條數(shù)"條查詢到的內(nèi)容。 "locate -r" 使用正則運(yùn)算式做尋找的條件。(r為regexp的意思)3. 常用范例:
1) 查找etc目錄下所有以sh開頭的文件
?
2) 查找etc目錄下所有以sh開頭的文件的數(shù)目
3) 查找etc目錄下所有以sh開頭的文件,并最多顯示2條
4) 新建的文件,更新數(shù)據(jù)庫后就能查詢到了
5) 查找文件時(shí),不區(qū)分大小寫
6) 使用正則表達(dá)式,查找以akefile結(jié)尾的文件,并最多顯示5條
7) 只顯示當(dāng)前存在的文件條目
# locate -S ? ? ? ? ? //-->查看統(tǒng)計(jì)信息,目錄,文件,比特?cái)?shù)適用情況
Database /var/lib/mlocate/mlocate.db:3,315 directories37,228 files1,504,439 bytes in file names594,851 bytes used to store database# locate -V ? ? ? ? ?//-->查看版本信息??
<pre name="code" class="plain">mlocate 0.22.2 Copyright (C) 2007 Red Hat, Inc. All rights reserved. This software is distributed under the GPL v.2. This program is provided with NO WARRANTY, to the extent permitted by law.# locate -h ? ? ? ? ?//-->查看幫助信息? ??
Usage: locate [OPTION]... [PATTERN]... Search for entries in a mlocate database.-b, --basename match only the base name of path names-c, --count only print number of found entries-d, --database DBPATH use DBPATH instead of default database (which is/var/lib/mlocate/mlocate.db)-e, --existing only print entries for currently existing files-L, --follow follow trailing symbolic links when checking fileexistence (default)-h, --help print this help-i, --ignore-case ignore case distinctions when matching patterns-l, --limit, -n LIMIT limit output (or counting) to LIMIT entries-m, --mmap ignored, for backward compatibility-P, --nofollow, -H don't follow trailing symbolic links when checking fileexistence-0, --null separate entries with NUL on output-S, --statistics don't search for entries, print statistics about eachused database-q, --quiet report no error messages about reading databases-r, --regexp REGEXP search for basic regexp REGEXP instead of patterns--regex patterns are extended regexps-s, --stdio ignored, for backward compatibility-V, --version print version information-w, --wholename match whole path name (default)# locate /etc/sh ? ? ? ? ??//-->查找/etc/sh*
/etc/shadow /etc/shadow- /etc/shadow.bup /etc/shadow.bup.20140725-214324 /etc/shells# locate -n 5 apache ? ? ??//-->只找?guī)в衋pache目錄,顯示其中5行
/etc/selinux/targeted/modules/active/modules/apache.pp /opt/ddd/oma/3rdparty/apache-tomcat /opt/ddd/oma/3rdparty/apache-tomcat/LICENSE /opt/ddd/oma/3rdparty/apache-tomcat/NOTICE /opt/ddd/oma/3rdparty/apache-tomcat/RELEASE-NOTES# locate -r makefile$ ? ? ?//-->查找結(jié)尾為makefile的文件目錄
/usr/share/doc/bcel-5.2/verifier/GNUmakefile# locate -n 3 -r ?^\/opt ? //-->查找以/opt開頭的目錄,且只顯示3行
/opt /opt/ddd /opt/sss#locate -i /HTTP ? ? ? ? ??//-->查找/HTTP目錄,忽略大小寫
/usr/share/perl5/Net/HTTP/NB.pm /usr/share/perl5/URI/http.pm /usr/share/perl5/URI/https.pm# locate -c httpd.conf ? ??//-->統(tǒng)計(jì)查找到的數(shù)量?
3# cat /etc/updatedb.conf ? //-->配置文件
PRUNE_BIND_MOUNTS = "yes" PRUNEFS="9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fusectl gfs gfs2 hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs efs100 lofs" PRUNENAMES = ".git .hg .svn" PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spool/cups /var/spool/squid /var/tmp" PRUNEPATHS="/efs /efsroots" export PRUNEPATHS?
?
?
總結(jié)
以上是生活随笔為你收集整理的find 和 xargs 和 locate的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 彻底搞懂 Scrapy 的中间件
- 下一篇: 安卓逆向_11 --- methodpr