1.locate:
locate是查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
依賴于事先構建的索引
索引的構建是在系統較為空閑時自動進行(周期性任務),管理 員手動更新數據庫(updatedb)
缺點:索引構建過程需要遍歷整個根文件系統,極消耗 資源
工作特點:
查找速度快
模糊查找
非實時查找
搜索的文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執行權限的目錄
locate KEYWORD
有用的選項:
-i:執行區分大小寫的搜索
-n:N 只列舉前N個匹配項目
locate foo:
搜索名稱或路徑中帶有“foo”的文件
locate -r '\.foo$'
使用Regex(正則表達式)來搜索以".foo"結尾的文件
find:
實時查找工具,通過指定路徑完成文件查找;
工作特點:
查找速度稍慢
精確查找
實時查找
可能只搜索用戶具備讀取和執行權限的目錄
語法:
find [OPTION]…[查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名、大小、類型、權
限等標準進行,默認為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認輸出至屏幕
查找條件:
根據文件名和inode查找:
-name "文件名稱";支持使用glob
* ? [] [^]
-iname "文件名稱"不區分字母大小寫
-inum n 按inode號查找
samefile name 相同inode號的文件
-links n 鏈接數為n的文件
-regex "PATTERN": 以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
根據屬主,屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group USERNAME:查找屬主為指定用戶(GID)的文件
-uid UserID:查找屬主為指定的UID號的文件
-gid GroupID:查找屬組為指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
根據文件類型查找:
-type TYPE:
f:普通文件
d:目錄文件
l:符號鏈接文件
s:套接字文件
b:塊設備文件
c:字符設備文件
p:管道文件
查找條件:
組合條件:
與:-a
或:-o
非:-not,!
!(A||B) =D AB的范圍是ABC,取反是D
!A && !B =D 不是A也不是B 取值是D
!(A && B)=ABD A && B在圖內是C部分 那么取值是ABD
德.摩根定律:
(非P)或(非Q)=非(P且Q)
(非P)且(非Q)=非(P或Q)
例如:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
例子:
1./tmp/目錄,不是目錄,并且還不能是套接字類型文件
find /tmp -not \( -type d -o -type s \)
2./tmp/目錄下,屬主不是user1,也不是user2的文件
find /tmp/test/* -not -user user1 -not -user user2
3./tmp/目錄下,屬主不是user1或不是目錄的文件
find /tmp/ -not \( -user user1 -a -type d \)
4.查找/usr/目錄下不屬于root,bin,或student的文件
find /usr -not \( -user root -o -user bin -o -user student \)
find示例:
find -name luyubo.png
搜索名以snow.png的文件
find -iname luyubo.png
不分大小寫地搜索名為luyubo.png、Luyubo.png、 LUYUBO.PNG等等的文件
find / -name "*.txt"
搜索所有以txt結尾的文件
find /var -name "*log*"
搜索var下面包含log的字段文件
find -user nzg -group nzg
搜索用戶nzg以及組nzg所擁有的文件
find -user nzg -not -group nzg
搜索屬主是nzg屬組不是nzg的文件
find -user nzg -o -uer nzg
搜索屬主是nzg或屬組是nzg的文件
find / user nzg -o uid 500
搜索屬主是nzg或uid是500的文件
find /tmp \( -not -user root -a -not -name 'f*' \) -ls
find /tmp -not \( -user root -o -name 'f*' \) –ls
找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
find /etc/ -path '/etc/sane.d' -a -prune -o -name "*.conf" -print
查找/etc/下,除/etc/sane.d目錄的其他所有.conf后綴的文件
文件大小查找:
-size [+|-]#UNIT 常用單位:k, M, G
#UNIT: (#-1, #] 如:6k 表示(5k,6k]
-#UNIT:[0,#-1] 如:-6k 表示[0,5k]
+#UNIT:(#,∞) 如:+6k 表示(6k,∞)
時間戳查找 :
以“天”為單位;
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以“分鐘”為單位:
-amin
-mmin
-cmin
查找條件:
權限查找:
perm [/|-]MODE
MODE:精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限,與關系0表示不關注
find -perm 755 會匹配權限模式恰好是755的文件
只要當任意人有寫權限時,find -perm +222就會匹配
只有當每個人都有寫權限時,find -perm -222才會匹配
只有當其他人(other)有寫權限時,find -perm -002才會匹配
處理動作:
-print:默認的處理動作,顯示至屏幕
-ls :類似與對查找到的文件執行"ls -l"命令
-delete:刪除查找到的文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \:對查找到的每個文件執行由COMMAND指令的命令
對于每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \;對查找到的每個文件執行由COMMAND執行的命令
{}:用戶引用查找到的文件名稱自身
find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
有些命令不能接受過多參數,此時命令執行可能會失敗,可以使
用這種方式:find | xargs COMMAND
示例:
find -name "*.conf" -exec cp {} {}.org \;
備份配置文件,添加.orig這個擴展名
find /tmp -ctime +3 -user joe -ok rm {} \;
提示刪除存在時間超過三天以上的joe的臨時文件
find ~ -perm -002 -exec chmod 0-w {} \;
在你的主目錄中尋找可被其他用戶寫入的文件
find /data -type f -perm 644 -name "*.sh" -exec chmod 755 {} \;
在data目錄尋找文件權限是644并以.sh結尾的文件,把權限改為755s
find /home -type d -ls
查找home 下面的目錄 并顯示
案例練習:
1、查找/var目錄下屬主為root,且屬組為mail的所有文件
find -user root -group mail -ls
2、查找/var目錄下不屬于root、lp、gdm的所有文件
find -not -user root -not -user lp -not -user gdm -ls
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為 root,也不是postfix的文件
find -not -user root -not -user postfix -mtime -7 -ls
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪 問過的文件
find / \( -nouser -o -nogroup\) -atime -7 -ls
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
find -size +1M -type f -ls
6、查找/etc目錄下所有用戶都沒有寫權限的文件
find -not -perm /222 -ls
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
find -perm -111 -ls
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它 用戶有寫權限的文件
find -perm -113 -ls
文件壓縮
compress [-dfvcVr] [-b maxbits] [file …]
-d:解壓縮,
-c:結果輸出至標準輸出,不刪除源文件
-v:顯示詳情
uncompress 解壓縮
zcat file.Z >file
gzip [OPTION]… FILE …
-d: 解壓縮,相當于gunzip
-c: 將壓縮或解壓縮的結果輸出至標準輸出
-#:1-9,指定壓縮比,值越大壓縮比越大
zcat:不顯式解壓縮的前提下查看文本文件內容
例如:
gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
bzip2 [OPTION]… FILE …
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為6
bzcat:不顯式解壓縮的前提下查看文本文件內容
xz [OPTION]… FILE …
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為6
xzcat: 不顯式解壓縮的前提下查看文本文件內容
打包壓縮
zip –r sysconfig sysconfig/
解包解壓縮
unzip sysconfig.zip
cat /var/log/messages | zip message
unzip -p message > message
tar [OPTION]…
創建歸檔
tar -c -f /PATH/TO/SOMEFILE.tar FILE…
tar cf /PATH/TO/SOMEFILE.tar FILE…
查看歸檔文件中的文件列表
tar -t -f /PATH/TO/SOMEFILE.tar
展開歸檔
tar -x -f /PATH/TO/SOMEFILE.tar
tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/
結合壓縮工具實現:歸檔并壓縮
-j: bzip2, -z: gzip, -J: xz
cpio復制 從或到文件:
cpio命令是通過重定向的方式將文件進行打包備份,還原恢復 的工具,它可以解壓以“.cpio”或者“.tar”結尾的文件。
cpio [選項] > 文件名或者設備名
cpio [選項] < 文件名或者設備名
選項:
-o 將文件拷貝打包成文件或者將文件輸出到設備上
-i 解包,將打包文件解壓或將設備上的備份還原到系統
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-v 顯示打包過程中的文件名稱。
-d 解包生成目錄,在cpio還原時,自動的建立目錄
-c 一種較新的存儲方式
例如:
將etc目錄備份:
find ./etc -print |cpio -ov >etc.cpio
內容預覽
cpio –tv < etc.cpio
要解包文件
cpio –iv < etc.cpio
cpio –idv < etc.cpio
原創文章,作者:鬧鐘哥,如若轉載,請注明出處:http://www.www58058.com/36609
find命令是我們工作中常用到的東西,我們需要多加練習,熟練掌握。