Linux的文件查找
概述:
本章將主要介紹在Linux中怎樣查找文件和解壓縮。需要我們掌握的知識有:locate和find 命令的使用,以及如何使用壓縮和解壓縮工具。
一、Linux文件查找
在文件系統上常常需要根據文件的各種屬性去查找符合條件的文件,此前使用的grep,egrep,fgrep屬于文本過濾、文本搜索工具;而文件查找工具有兩個,locate和find
1.文件查找分為兩類:
□實時查找:偏歷所有文件進行條件匹配 find
□非實時查找(數據庫查找):根據索引查找 locate
2.locate
□查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
依賴于事先構建的索引
索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動更新數據庫使用 updatedb 命令
索引構建過程需要遍歷整個根文件系統,極消耗資源
工作特點:
查找速度快
模糊查找
非實時查找
搜索的是文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執行權限的目錄
□locate KEYWORD
有用的選項
-i執行區分大小寫的搜索
-n N只列舉前N個匹配項目
示例:
locate foo 搜索名稱或路徑中帶有“foo”的文件
locate -r ‘\.foo$ 使用Regex來搜索以“.foo”結尾的文件
二、find
1.實時查找工具,通過遍歷指定路徑完成文件查找;
工作特點:
查找速度略慢
精確查找
實時查找
可能只搜索用戶具備讀取和執行權限的目錄
2.語法:
find [OPTION]… [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認輸出至屏幕
3.查找條件:
□根據文件名和inode查找:
-name "文件名稱":支持使用glob *, ?, [], [^] 文件名稱一定加引號!
-iname"文件名稱":不區分字母大小寫
-inumn 按inode號查找
-samefilename 相同inode號的文件
-links n 鏈接數為n的文件
-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
□根據屬主、屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件
-uid UID:查找屬主為指定的UID號的文件
-gid GID:查找屬組為指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
□根據文件類型查找:
-type TYPE: 如: find /etc/ -type f
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 -name snow.png 搜索名為snow.png的文件
find -iname snow.png 不分大小寫地搜索名為snow.png、Snow.png、SNOW.PNG等等的文件
find / -name “*.txt” 搜索根目錄下所有以.txt結尾的文件
find /var –name “*log*”
find -userjoe -group joe 搜索被用戶joe 以及組群joe所擁有的文件
找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
find /tmp \( -not -user root -a -not -name 'f*' \) -ls
find /tmp -not \( -user root -o -name 'f*' \) –ls
排除目錄
示例:查找/etc/下,除/etc/sane.d目錄的其它所有.conf后綴的文件
find /etc -path‘/etc/sane.d’ -a -prune -o -name “*.conf” -print
□根據文件大小來查找:
-size [+|-] #UNIT 如:find /etc/ -size 6k
常用單位:k, M, G
注意:這里這里的區間,包含和不包含的關系。
#UNIT: (#-1, #] 如:6k 表示(5k,6k]
-#UNIT:[0,#-1] 如:-6k 表示[0,5k]
+#UNIT:(#,∞) 如:+6k 表示(6k,∞)
□根據時間戳:
以“天”為單位; 如: find /etc/ -atime 7
-atime [+|-]#,
#: [#,#+1) 如:7 表示[7,8)
+#: [#+1,∞] 如: +7 表示 [8,∞)
-#: [0,#) 如: -7 表示 [0,7)
-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才會匹配
4.處理動作
-print:默認的處理動作,顯示至屏幕;
-ls:類似于對查找到的文件執行“ls -l”命令
-delete:刪除查找到的文件;(不建議使用)
-fls file:查找到的所有文件的長格式信息保存至指定文件中(相當于重定向)
-ok COMMAND {} \;(固定格式) 對查找到的每個文件執行由COMMAND指定的命令;
對于每個文件執行命令之前,都會交互式要求用戶確認(-exec 不用確認,直接操作)
-exec COMMAND {} \;對查找到的每個文件執行由COMMAND指定的命令
{}: 用于引用查找到的文件名稱自身
find 傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題
find | xargs COMMAND
示例:
find -name “*.conf” -exec cp {} {}.org \; (一定要注意格式,后面加斜杠和分號)
備份配置文件,添加.orig這個擴展名
find /tmp -ctime +3 -userjoe -ok rm {} \;
提示刪除存在時間超過3天以上的joe的臨時文件
find ~ -perm -002 -exec chmod o-w {} \;
在你的主目錄中尋找可被其它用戶寫入的文件
find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
找到/data 目錄下所有文件名以.sh后綴,且權限為644的普通文件,然后把權限改為755
find /home –type d -ls
Linux系統解壓縮
概述
本章將介紹Linux系統中的壓縮和解壓縮的工具,以及歸檔工具(tar,cpio)
compress/uncompress: 對應 .Z 結尾的壓縮格式文件;
gzip/gunzip: 其對應的是 .gz 結尾的壓縮格式文件;
bzip2/bunzip2: 其對應的是 .bz2 結尾的壓縮格式文件;
xz/unxz: 其對應的是 .xz 結尾的壓縮格式文件;
zip/unzip 其對應的是 .zip 結尾的壓縮格式文件
一、compress和uncompress
□語法:compress [-dfvcVr] [-b maxbits] [file …]
-d: 解壓縮,相當于 (可以配合 -c 保留壓縮文件)
-c: 結果輸出至標準輸出,不刪除原文件
-v: 顯示詳情
uncompress解壓縮
zcat file.Z > file
二、gzip和gunzip(使用最多)
□語法:gzip[OPTION]… FILE …
-d: 解壓縮,相當于gunzip
-c: 將壓縮或解壓縮的結果輸出至標準輸出
-#:1-9,指定壓縮比,值越大壓縮比越大 如:gzip -9 m
zcat:不顯式解壓縮的前提下查看文本文件內容
實例:
gzip -c messages > messages.gz
gzip -c -d messages.gz > messages
zcatmessages.gz > messages
三、bzip2/bunzip2/bzcat
□語法:bzip2 [OPTION]… FILE …
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為6
bzcat:不顯式解壓縮的前提下查看文本文件內容
四、xz/unxz/zxcat(壓縮比最強)
□語法:xz[OPTION]… FILE …
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為6
xzcat: 不顯式解壓縮的前提下查看文本文件內容
五、zip/unzip
語法:zip zipfile.zip /path/to/somefile
□打包壓縮
zip –r sysconfigsysconfig/
解包解壓縮
unzip sysconfig.zip (解壓到當前目錄中)
cat /var/log/messages | zip message -(代表前面命令的標準輸出)
unzip -p message > message
六、tar
□語法:tar [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/
結合壓縮工具實現:歸檔并壓縮
-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
原創文章,作者:zhumengxiaotao,如若轉載,請注明出處:http://www.www58058.com/37438