文件查找與壓縮
Locate:非事實查找(數據庫查找)
查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
依賴于事先構建的索引;
索引的構建是在系統較為空閑時自動進行(周期性任務);
管理 員手動更新數據庫(updatedb);
工作特點:
查找速度快;
模糊查找;
非實時查找 搜索的是文件的全路徑,不僅僅是文件名 可能只搜索用戶具備讀取和執行權限的目錄
Locate的選項
–i執行區分大小寫的搜索
-n X 只列舉前X個匹配項目
Locate foo
搜索名稱或路徑中帶有“foo”的文件
Locate -r ‘\.foo$’
使用Regex來搜索以 “.foo”結尾的文件
Find:實時查找
實時查找工具,通過遍歷指定路徑完成文件查找; v
工作特點:
查找速度略慢
精確查找
實時查找
可能只搜索用戶具備讀取和執行權限的目錄
Find語法:
find [OPTION]… [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名、大小、類型、 權限等標準進行;默認為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認輸出至屏幕
查找條件
根據文件名和inode查找:
-name “文件名稱”:支持使用glob
*,?,[],[^]
-iname “文件名稱”:不區分字母大小寫
-iname n 按inode號查找
-samefile name 相同inode號的文件
-links n 鏈接數為n的文件
-regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不僅僅是文件名稱
根據屬主、屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件
-uid UserID:查找屬主為指定的UID號的文件
-gid GroupID:查找屬組為指定的GID號的文件
-nouser:查找沒有屬主的文件 -nogroup:查找沒有屬組的文件
根據文件類型查找:
-type TYPE:
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
s:套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
組合條件:
與:-a 或:-o
非:-not, !
德·摩根定律:
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 或 Q) = (非 P) 且 (非 Q)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
Find實例
? find -user joe -not -group joe
? find -user joe -o -user jane
? find -not \( -user joe -o -user jane \)
? find / -user joe -o -uid 500
找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件
find /tmp \( -not -user root -a -not -name 'fstab' \) ls
find /tmp -not \( -user root -o -name 'fstab' \) –ls v
排除目錄
find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print
據文件大小來查找:
-size [+|-]#UNIT
常用單位:k, M, G
#UNIT: (#-1, #],如:6k
-#UNIT:[0,#-1], 如:-6k
+#UNIT:(#,∞), 如:+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才 會匹配
處理動作
v -print:默認的處理動作,顯示至屏幕; v
-ls:類似于對查找到的文件執行“ls -l”命令 v
-delete:刪除查找到的文件; v
-fls file:查找到的所有文件的長格式信息保存至指定文件中 v
-ok COMMAND {} \; 對查找到的每個文件執行由 COMMAND指定的命令;
對于每個文件執行命令之前,都會交互式要求用戶確認
v-exec COMMAND {} \; 對查找到的每個文件執行由 COMMAND指定的命令 v {}: 用于引用查找到的文件名稱自身
vfind傳遞查找到的文件至后面指定的命令時,查找到所有符合 條件的文件一次性傳遞給后面的命令 v
有些命令不能接受過多參數,此時命令執行可能會失敗,下 面方式可規避此問題
find | xargs COMMAND
壓縮工具
compress [-dfvcVr] [-b maxbits] [file …]
-d: 解壓縮,相當于
-c: 結果輸出至標準輸出,不刪除原文件
-v: 顯示詳情 v
uncompress 解壓縮
vzcat file.Z >file
gzip [OPTION]… FILE …
-d: 解壓縮,相當于gunzip
-c: 將壓縮或解壓縮的結果輸出至標準輸出
-#:1-9,指定壓縮比,值越大壓縮比越大
vzcat:不顯式解壓縮的前提下查看文本文件內容 v
實例:
gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
bzip2 [OPTION]… FILE …
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為6
vbzcat:不顯式解壓縮的前提下查看文本文件內容;
xz [OPTION]… FILE …
-k: keep, 保留原文件;
-d:解壓縮 -#:1-9,壓縮比,默認為6; v
xzcat: 不顯式解壓縮的前提下查看文本文件內容;
v打包壓縮
zip –r sysconfig sysconfig/ v
解包解壓縮
unzip sysconfig.zip
cat /var/log/messages | zip message
unzip -p message > message
Tar
vtar [OPTION]…
(1) 創建歸檔
tar -c -f /PATH/TO/SOMEFILE.tar FILE…
tar cf /PATH/TO/SOMEFILE.tar FILE…
(2) 查看歸檔文件中的文件列表
tar -t -f /PATH/TO/SOMEFILE.tar
(3) 展開歸檔
tar -x -f /PATH/TO/SOMEFILE.tar tar -x -f /PATH/TO/SOMEFILE.
tar -C /PATH/ v
結合壓縮工具實現:歸檔并壓縮
-j: bzip2, -z: gzip, -J: xz
cpio
v 復制 從或到文件 v
cpio命令是通過重定向的方式將文件進行打包備份,還原恢復 的工具,它可以解壓以“.cpio”或者“.tar”結尾的文件。 v
cpio [選項] > 文件名或者設備名 v
cpio [選項] < 文件名或者設備名 v
選項
-o 將文件拷貝打包成文件或者將文件輸出到設備上
-i 解包,將打包文件解壓或將設備上的備份還原到系統
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-v 顯示打包過程中的文件名稱。
-d 解包生成目錄,在cpio還原時,自動的建立目錄
-c 一種較新的存儲方式
實例
v 將etc目錄備份:
find ./etc -print |cpio -ov >etc.cpio v
內容預覽
cpio –tv < etc.cpio v
要解包文件
cpio –iv <etc.cpio
cpio –idv < etc.cpio
1、查找/var目錄下屬主為root,且屬組為mail的所有文件
2、查找/var目錄下不屬于root、lp、gdm的所有文件
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
6、查找/etc目錄下所有用戶都沒有寫權限的文件
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
原創文章,作者:xiaoqiang512,如若轉載,請注明出處:http://www.www58058.com/37051
文章對find的常見選項和用法有了一個完整的總結,對linux而言最重要的是多在操作,只有在操作中你才知道自己哪里不會,哪里需要改進,理論結合實踐,才能真正的學好linux,多加練習。