(1)文件查找
作用:在文件系統(tǒng)上查找符合條件的文件 ?
文件查找:locate, find
<a>非實(shí)時(shí)查找(數(shù)據(jù)庫(kù)查找):locate——基于數(shù)據(jù)庫(kù)的查找,不會(huì)隨著磁盤的變化而變化,因此新建的文件不會(huì)被查找出來紧卒,但可以通過'updatedb'來更新數(shù)據(jù)庫(kù)
新建了一個(gè)'initscript.sh'文件材诽,但是通過locate無法查找贱傀,更新數(shù)據(jù)庫(kù)后嫂冻,才可以發(fā)現(xiàn)
查詢系統(tǒng)上預(yù)建的文件索引數(shù)據(jù)庫(kù) /var/lib/mlocate/mlocate.db ? ? ?
工作特點(diǎn): ? 查找速度快 ? 模糊查找 ? 非實(shí)時(shí)查找 ? 搜索的是文件的全路徑恤批,不僅僅是文件名 ? 可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄? 索引構(gòu)建過程需要遍歷整個(gè)根文件系統(tǒng),極消耗資源- locate有用選項(xiàng)
-i 不區(qū)分大小寫的搜索 : locate -i ISSUE?
-n N 只列舉前N個(gè)匹配項(xiàng)目 : locate -n3 issue?
locate conf ? 搜索名稱或路徑中帶有“conf”的文件 ?locate -r ‘.conf$’——'.'轉(zhuǎn)義- <b>實(shí)時(shí)查找:find
實(shí)時(shí)查找工具尔艇,通過遍歷指定路徑完成文件查找 ?
工作特點(diǎn): ? 查找速度略慢 ? 精確查找 ? 實(shí)時(shí)查找 ? 可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄
語法: ?find [OPTION]... [查找路徑] [查找條件] [處理動(dòng)作]
查找路徑:指定具體目標(biāo)路徑尔许;默認(rèn)為當(dāng)前目錄
查找條件:指定的查找標(biāo)準(zhǔn),可以文件名终娃、大小味廊、類型、 權(quán)限等標(biāo)準(zhǔn)進(jìn)行;默認(rèn)為找出指定路徑下的所有文件
處理動(dòng)作:對(duì)符合條件的文件做操作余佛,默認(rèn)輸出至屏幕(2) 查找條件
指搜索層級(jí)
-maxdepth level 最大搜索目錄深度,指定目錄為第1級(jí)
-mindepth level 最小搜索目錄深度 ?
如果只要第二層目錄則輸入:find /etc -maxdepth 2 -mindepth 2 -name "*.con"
- 根據(jù)文件名和inode查找:
-name "文件名稱":支持使用glob , ?, [], [^]——find /etc -name '.conf'
-iname "文件名稱":不區(qū)分字母大小寫
-inum n 按inode號(hào)查找 ——find /etc inum 2
-samefile name 相同inode號(hào)的文件
-links n 鏈接數(shù)為n的文件
-regex "PATTERN":以PATTERN匹配整個(gè)文件路徑字 符串柠新,而不僅僅是文件名稱,以正則表達(dá)式的方式搜索
根據(jù)屬主、屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件 ——find / -user wang -group wang 這是并列關(guān)系
-uid UserID:查找屬主為指定的UID號(hào)的文件
-gid GroupID:查找屬組為指定的GID號(hào)的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件- 根據(jù)文件類型查找:
-type TYPE:
? f: 普通文件 ——find /etc -type f
? d: 目錄文件 ——find /etc -type d
? l: 符號(hào)鏈接文件 ——軟連接搜索方式 :find /etc -type l
? s:套接字文件
? b: 塊設(shè)備文件
? c: 字符設(shè)備文件
? p: 管道文件
組合條件:
與:-a 或:-o 非:-not, !
-a:find / -user wang -a(不寫默認(rèn)為與的關(guān)系) -user mage -a -type d
-b:find / -user wang -o -user mage
德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)——find ! \(- user wang -o -user mage)=find ! -user wang -a ! -user mage
(非 A) 且 (非 B) = 非(A 或 B) ?
示例: !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” ?
find /var –name “log” ?
find -user joe -group joe ——搜索用戶joe 以及組群joe所擁有的文件(省略-a)
find -user joe -not -group joe ——用戶是joe,但是用戶組不是joe
find -user joe -o -user jane ——用戶是joe红氯,或者用戶是jane
find -not ( -user joe -o -user jane ) ——除了用戶Joe和Jane的其他用戶
find / -user joe -o -uid 500——尋找根下面的的用戶是joe框咙,且Id號(hào)為500
找出/tmp目錄下咕痛,屬主不是root痢甘,且文件名不以f開頭的文件
查找/etc/下,除/etc/sane.d目錄的其它所有.conf后 綴的文件
find /etc -path '/etc/sane.d' -a prune -o -name "*.conf"
——表現(xiàn)意思是搜索變量/etc/sane.d,并且出現(xiàn)剪切掉茉贡,再顯示以.conf結(jié)尾的文件查找條件
根據(jù)文件大小來查找:
-size [+|-]#UNIT 常用單位:k, M, G塞栅,c(byte) #UNIT: (#-1, #] 表示搜索范圍是(9k,10k]
-#UNIT:(0,#-1]表示搜索范圍為(0,9k] -10k
+#UNIT:(#,∞) 如:+6k 表示(6k,∞)——不包括6k- 根據(jù)時(shí)間戳:
以“天”為單位;
-atime [+|-]#,
: [#,#+1) ——find / -atime 10:時(shí)間范圍為[10,11)
+#: [#+1,∞] ——find / -atime +10: 時(shí)間范圍是[11,+無窮]
-#: [0,#) ——時(shí)間范圍是[0,10)
-mtime -ctime
以“分鐘”為單位:
-amin -mmin -cmin
示例:userdel -r wang 腔丧; find / (-path "/proc" -o -path "sys") -a prune -o -mmin -1- 根據(jù)權(quán)限查找:
-perm [/|-]MODE
MODE: 精確權(quán)限匹配
/MODE:任何一類(u,g,o)對(duì)象的權(quán)限中只要能一位匹配 即可放椰,或關(guān)系,+ 從centos7開始淘汰——如圖只要有一個(gè)(u,g,o)滿足r的權(quán)限就可以
-MODE:每一類對(duì)象都必須同時(shí)擁有指定權(quán)限
如圖顯示每個(gè)權(quán)限都至少要意思要擁有r的權(quán)限find -perm -440:表示不在乎'o'的權(quán)限愉粤,只要用戶和用戶組具有r權(quán)限即可
find -perm 755 會(huì)匹配權(quán)限模式恰好是755的文件
只要當(dāng)任意人有寫權(quán)限時(shí)砾医,find -perm /222就會(huì)匹配
只有當(dāng)每個(gè)人都有寫權(quán)限時(shí),find -perm -222才會(huì)匹配
只有當(dāng)其它人(other)有寫權(quán)限時(shí)衣厘,find -perm -002才 會(huì)匹配(3)處理動(dòng)作
-print:默認(rèn)的處理動(dòng)作如蚜,顯示至屏幕 ?
-ls:類似于對(duì)查找到的文件執(zhí)行“l(fā)s -l”命令 ?
-delete:刪除查找到的文件 ?——find /etc -perm /022 -a-type f -delete
:找到/etc目錄下權(quán)限為022的文件,找到后并且刪除改文件
-fls file:查找到的所有文件的長(zhǎng)格式信息保存至指定文件中——find /etc -perm /002 -a -type f -ls (不寫-ls表示不顯示長(zhǎng)格式保存)-fls /root/find.log
?
-ok COMMAND {} ; 對(duì)查找到的每個(gè)文件執(zhí)行由COMMAND 指定的命令影暴,對(duì)于每個(gè)文件執(zhí)行命令之前错邦,都會(huì)交互式要求 用戶確認(rèn)——find /etc -perm /002 -a -type f -ok chmod o-w {} \;
但是如果修改文件較多的時(shí)候,每次提示會(huì)很麻煩煩型宙,因此引用下面的命令
-exec COMMAND {} ; 對(duì)查找到的每個(gè)文件執(zhí)行由 COMMAND指定的命令 ——不提示用戶撬呢,直接對(duì)文件進(jìn)行批量修改,但是安全性不如-ok?——find /etc -perm /002 -a -type f -exec chmod o-w {} \;
{}: 用于引用查找到的文件名稱自身 ——find /etc -name 'f*' -a -type f exec mv {} {}.bak o-w {} \;
find傳遞查找到的文件至后面指定的命令時(shí)妆兑,查找到所有符合 條件的文件一次性傳遞給后面的命令(4)參數(shù)替換xargs
由于很多命令不支持管道|來傳遞參數(shù)魂拦,而日常工作中有這個(gè) 必要,所以就有了xargs命令 ?
xargs用于產(chǎn)生某個(gè)命令的參數(shù)搁嗓,xargs 可以讀入 stdin 的數(shù) 據(jù)晨另,并且以空格符或回車符將 stdin 的數(shù)據(jù)分隔成為 arguments ?
注意:文件名或者是其他意義的名詞內(nèi)含有空格符的情況 ?
有些命令不能接受過多參數(shù),命令執(zhí)行可能會(huì)失敗谱姓,xargs可 以解決 ?
find /sbin -perm +7000 | xargs ls –l ?
find和xargs格式:find | xargs COMMAND——echo f* | xargs touch:批量創(chuàng)建以f開頭的文件
echo f* |xargs rm: 批量刪除以f開頭的文件
find -name “.conf” -exec cp {} {}.orig ; —— 備份以.conf結(jié)尾的配置文件借尿,并為該文件添加.orig這個(gè)擴(kuò)展名
find /tmp -ctime +3 -user joe -ok rm {} ; —— 找到存在時(shí)間(元數(shù)據(jù))超過3天以上的joe的臨時(shí)文件 并將其刪除(交互式提醒)?
find ~ -perm -002 -exec chmod o-w {} ; —— 在你的主目錄中尋找可被其它用戶寫入的文件 ,并將該其他用戶去掉寫權(quán)限?
find /data –type f -perm 644 -name “.sh” –exec chmod 755 {} ; ——尋找在/data下的權(quán)限為644并以.sh后綴命名的文件,將其權(quán)限改為755?
find /home –type d -ls——找目錄(5)壓縮路翻、解壓縮及歸檔工具
compress [-dfvcVr] [-b maxbits] [file ...]注意后綴 '.Z'
-d: 解壓縮狈癞,相當(dāng)于uncompress
-c: 結(jié)果輸出至標(biāo)準(zhǔn)輸出,不刪除原文件
-v: 顯示壓縮過程詳情 ?
uncompress 解壓縮 =-d?
zcat file.Z >file——解壓縮重定向到新的文件
gzip [OPTION]... FILE ... ——也會(huì)將原始文件刪除,只顯示壓縮后的文件茂契,但是壓縮比相對(duì)強(qiáng)大
-d: 解壓縮蝶桶,相當(dāng)于gunzip,作用原理類似上述壓縮方式
-c: 將壓縮或解壓縮的結(jié)果輸出至標(biāo)準(zhǔn)輸出 如圖保留了壓縮文件掉冶,并解壓文件
-#:1-9真竖,指定壓縮比,值越大壓縮比越大 ?
zcat:不顯式解壓縮的前提下查看文本文件內(nèi)容 ——直接解壓縮厌小,既支持.Z恢共,也支持.gz?
實(shí)例: gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
bzip2 [OPTION]... FILE ...
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比璧亚,默認(rèn)為9 ?
bzcat:不顯式解壓縮的前提下查看文本文件內(nèi)容
xz [OPTION]... FILE ...
-k: keep, 保留原文件
-d:解壓縮
-#:1-9讨韭,壓縮比,默認(rèn)為6 ?
xzcat: 不顯式解壓縮的前提下查看文本文件內(nèi)容
打包壓縮 zip –r /testdir/sysconfig /etc/sysconfig/ ?
解包解壓縮
unzip sysconfig.zip
cat /var/log/messages | zip messages
unzip -p message > message
tar工具
Tar(Tape ARchive癣蟋,磁帶歸檔的縮寫) ?
tar [OPTION]...
(1) 創(chuàng)建歸檔 tar -c -f /PATH/TO/SOMEFILE.tar FILE...—— "tar -cvf /app/scripts.tar /root/bin/:將bin下的內(nèi)容打包到app下的scripts.tar下"
--exclude:排除某文件—— tar -cfv /app/scripts.var --exclude filename /root/bin/
(2) 追加文件至歸檔: 注:不支持對(duì)壓縮文件追加
tar -r -f /PATH/TO/SOMEFILE.tar FILE...
(3) 查看歸檔文件中的文件列表 tar -t -f /PATH/TO/SOMEFILE.tar
(4) 展開歸檔 tar -x -f /PATH/TO/SOMEFILE.tar tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/
(5) 結(jié)合壓縮工具實(shí)現(xiàn):歸檔并壓縮 -j: bzip2, -z: gzip, -J: xz
-T選項(xiàng)指定輸入文件,-X選項(xiàng)指定包含要排除的文件列表
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist ?
分割大的 tar 文件為多份小文件: split –b Size –d tar-file-name prefix-name
split -b 1M –d mybackup.tgz mybackup-parts
split -b 1M mybackup.tgz mybackup-parts
(6)示例:
將etc目錄備份: find ./etc -print |cpio -ov >etc.cpio ?
內(nèi)容預(yù)覽 cpio –tv < etc.cpio ?
要解包文件 cpio –idv < etc.cpio
練習(xí)題
1透硝、查找/var目錄下屬主為root,且屬組為mail的所有文件 ?
2疯搅、查找/var目錄下不屬于root濒生、lp、gdm的所有文件
3幔欧、查找/var目錄下最近一周內(nèi)其內(nèi)容修改過罪治,同時(shí)屬主不為 root,也不是postfix的文件 ?
4琐馆、查找當(dāng)前系統(tǒng)上沒有屬主或?qū)俳M规阀,且最近一個(gè)周內(nèi)曾被訪 問過的文件
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
6瘦麸、查找/etc目錄下所有用戶都沒有寫權(quán)限的文件
7谁撼、查找/etc目錄下至少有一類用戶沒有執(zhí)行權(quán)限的文件
8、查找/etc/init.d目錄下滋饲,所有用戶都有執(zhí)行權(quán)限厉碟,且其它 用戶有寫權(quán)限的文件