2017-07-29 文件查找和壓縮

(1)文件查找

作用:在文件系統上查找符合條件的文件 ?
文件查找:locate, find

  • <a>非實時查找(數據庫查找):locate——基于數據庫的查找,不會隨著磁盤的變化而變化,因此新建的文件不會被查找出來,但可以通過'updatedb'來更新數據庫


    image.png
  • 新建了一個'initscript.sh'文件,但是通過locate無法查找,更新數據庫后,才可以發現


    image.png

    image.png

    查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db ? ? ?
    工作特點: ? 查找速度快 ? 模糊查找 ? 非實時查找 ? 搜索的是文件的全路徑,不僅僅是文件名 ? 可能只搜索用戶具備讀取和執行權限的目錄? 索引構建過程需要遍歷整個根文件系統,極消耗資源

  • locate有用選項
    -i 不區分大小寫的搜索 : locate -i ISSUE?
    -n N 只列舉前N個匹配項目 : locate -n3 issue?
    locate conf ? 搜索名稱或路徑中帶有“conf”的文件 ?locate -r ‘.conf$’——'.'轉義
  • <b>實時查找:find
    實時查找工具,通過遍歷指定路徑完成文件查找 ?
    工作特點: ? 查找速度略慢 ? 精確查找 ? 實時查找 ? 可能只搜索用戶具備讀取和執行權限的目錄
    語法: ?find [OPTION]... [查找路徑] [查找條件] [處理動作]
    查找路徑:指定具體目標路徑;默認為當前目錄
    查找條件:指定的查找標準,可以文件名、大小、類型、 權限等標準進行;默認為找出指定路徑下的所有文件
    處理動作:對符合條件的文件做操作,默認輸出至屏幕

(2) 查找條件

指搜索層級
-maxdepth level 最大搜索目錄深度,指定目錄為第1級


image.png

-mindepth level 最小搜索目錄深度 ?


image.png

如果只要第二層目錄則輸入:find /etc -maxdepth 2 -mindepth 2 -name "*.con"
  • 根據文件名和inode查找:
    -name "文件名稱":支持使用glob , ?, [], [^]——find /etc -name '.conf'
    image.png

    -iname "文件名稱":不區分字母大小寫
    -inum n 按inode號查找 ——find /etc inum 2
    -samefile name 相同inode號的文件
    image.png

    -links n 鏈接數為n的文件
    -regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不僅僅是文件名稱,以正則表達式的方式搜索
    image.png
  • 根據屬主、屬組查找:
    -user USERNAME:查找屬主為指定用戶(UID)的文件


    image.png

    -group GRPNAME: 查找屬組為指定組(GID)的文件 ——find / -user wang -group wang 這是并列關系
    -uid UserID:查找屬主為指定的UID號的文件
    -gid GroupID:查找屬組為指定的GID號的文件
    -nouser:查找沒有屬主的文件
    -nogroup:查找沒有屬組的文件

  • 根據文件類型查找:
    -type TYPE:
    ? f: 普通文件 ——find /etc -type f
    ? d: 目錄文件 ——find /etc -type d
    ? l: 符號鏈接文件 ——軟連接搜索方式 :find /etc -type l
    ? s:套接字文件
    ? b: 塊設備文件
    ? c: 字符設備文件
    ? p: 管道文件
    組合條件:
    與:-a 或:-o 非:-not, !
    -a:find / -user wang -a(不寫默認為與的關系) -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號為500
找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件

image.png

查找/etc/下,除/etc/sane.d目錄的其它所有.conf后 綴的文件
find /etc -path '/etc/sane.d' -a prune -o -name "*.conf"——表現意思是搜索變量/etc/sane.d,并且出現剪切掉,再顯示以
.conf結尾的文件

查找條件

  • 根據文件大小來查找:
    -size [+|-]#UNIT 常用單位:k, M, G,c(byte) #UNIT: (#-1, #] 表示搜索范圍是(9k,10k]


    image.png

    -#UNIT:(0,#-1]表示搜索范圍為(0,9k] -10k


    image.png

    +#UNIT:(#,∞) 如:+6k 表示(6k,∞)——不包括6k
  • 根據時間戳:
    以“天”為單位;
    -atime [+|-]#,
    : [#,#+1) ——find / -atime 10:時間范圍為[10,11)
    +#: [#+1,∞] ——find / -atime +10: 時間范圍是[11,+無窮]
    -#: [0,#) ——時間范圍是[0,10)
    -mtime -ctime
    以“分鐘”為單位:
    -amin -mmin -cmin
    示例:userdel -r wang ; find / (-path "/proc" -o -path "sys") -a prune -o -mmin -1
  • 根據權限查找:
    -perm [/|-]MODE
    MODE: 精確權限匹配
    /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配 即可,或關系,+ 從centos7開始淘汰——如圖只要有一個(u,g,o)滿足r的權限就可以
    image.png

    image.png
    -MODE:每一類對象都必須同時擁有指定權限
    如圖顯示每個權限都至少要意思要擁有r的權限
    image.png
    find -perm -440:表示不在乎'o'的權限,只要用戶和用戶組具有r權限即可
    find -perm 755 會匹配權限模式恰好是755的文件
    只要當任意人有寫權限時,find -perm /222就會匹配
    只有當每個人都有寫權限時,find -perm -222才會匹配
    只有當其它人(other)有寫權限時,find -perm -002才 會匹配

(3)處理動作

-print:默認的處理動作,顯示至屏幕 ?
-ls:類似于對查找到的文件執行“ls -l”命令 ?
-delete:刪除查找到的文件 ?—— find /etc -perm /022 -a-type f -delete:找到/etc目錄下權限為022的文件,找到后并且刪除改文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中——find /etc -perm /002 -a -type f -ls (不寫-ls表示不顯示長格式保存)-fls /root/find.log ?
-ok COMMAND {} ; 對查找到的每個文件執行由COMMAND 指定的命令,對于每個文件執行命令之前,都會交互式要求 用戶確認——find /etc -perm /002 -a -type f -ok chmod o-w {} \; 但是如果修改文件較多的時候,每次提示會很麻煩煩,因此引用下面的命令
-exec COMMAND {} ; 對查找到的每個文件執行由 COMMAND指定的命令 ——不提示用戶,直接對文件進行批量修改,但是安全性不如-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傳遞查找到的文件至后面指定的命令時,查找到所有符合 條件的文件一次性傳遞給后面的命令

(4)參數替換xargs

由于很多命令不支持管道|來傳遞參數,而日常工作中有這個 必要,所以就有了xargs命令 ?
xargs用于產生某個命令的參數,xargs 可以讀入 stdin 的數 據,并且以空格符或回車符將 stdin 的數據分隔成為 arguments ?
注意:文件名或者是其他意義的名詞內含有空格符的情況 ?
有些命令不能接受過多參數,命令執行可能會失敗,xargs可 以解決 ?
find /sbin -perm +7000 | xargs ls –l ?
find和xargs格式:find | xargs COMMAND—— echo f* | xargs touch:批量創建以f開頭的文件 echo f* |xargs rm: 批量刪除以f開頭的文件
find -name “.conf” -exec cp {} {}.orig ; —— 備份以.conf結尾的配置文件,并為該文件添加.orig這個擴展名
find /tmp -ctime +3 -user joe -ok rm {} ; —— 找到存在時間(元數據)超過3天以上的joe的臨時文件 并將其刪除(交互式提醒)?
find ~ -perm -002 -exec chmod o-w {} ; —— 在你的主目錄中尋找可被其它用戶寫入的文件 ,并將該其他用戶去掉寫權限?
find /data –type f -perm 644 -name “
.sh” –exec chmod 755 {} ; ——尋找在/data下的權限為644并以.sh后綴命名的文件,將其權限改為755?
find /home –type d -ls——找目錄

(5)壓縮、解壓縮及歸檔工具

compress [-dfvcVr] [-b maxbits] [file ...]注意后綴 '.Z'

image.png

-d: 解壓縮,相當于uncompress
image.png

-c: 結果輸出至標準輸出,不刪除原文件
image.png

-v: 顯示壓縮過程詳情 ?
uncompress 解壓縮 =-d?
zcat file.Z >file——解壓縮重定向到新的文件
image.png

gzip [OPTION]... FILE ... ——也會將原始文件刪除,只顯示壓縮后的文件,但是壓縮比相對強大
image.png

-d: 解壓縮,相當于gunzip,作用原理類似上述壓縮方式
image.png

-c: 將壓縮或解壓縮的結果輸出至標準輸出 如圖保留了壓縮文件,并解壓文件
image.png

-#:1-9,指定壓縮比,值越大壓縮比越大 ?
zcat:不顯式解壓縮的前提下查看文本文件內容 ——直接解壓縮,既支持.Z,也支持.gz?
實例: gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
bzip2 [OPTION]... FILE ...
-k: keep, 保留原文件
image.png

-d:解壓縮
-#:1-9,壓縮比,默認為9 ?
bzcat:不顯式解壓縮的前提下查看文本文件內容
xz [OPTION]... FILE ...
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認為6 ?
xzcat: 不顯式解壓縮的前提下查看文本文件內容
打包壓縮 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) 創建歸檔 tar -c -f /PATH/TO/SOMEFILE.tar FILE...—— "tar -cvf /app/scripts.tar /root/bin/:將bin下的內容打包到app下的scripts.tar下"
--exclude:排除某文件—— tar -cfv /app/scripts.var --exclude filename /root/bin/

(2) 追加文件至歸檔: 注:不支持對壓縮文件追加
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) 結合壓縮工具實現:歸檔并壓縮 -j: bzip2, -z: gzip, -J: xz
-T選項指定輸入文件,-X選項指定包含要排除的文件列表
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 ?
內容預覽 cpio –tv < etc.cpio ?
要解包文件 cpio –idv < etc.cpio

練習題

1、查找/var目錄下屬主為root,且屬組為mail的所有文件 ?


image.png

2、查找/var目錄下不屬于root、lp、gdm的所有文件


image.png

3、查找/var目錄下最近一周內其內容修改過,同時屬主不為 root,也不是postfix的文件 ?
image.png

4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪 問過的文件
image.png

5、查找/etc目錄下大于1M且類型為普通文件的所有文件
image.png

6、查找/etc目錄下所有用戶都沒有寫權限的文件
image.png

7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
image.png

8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它 用戶有寫權限的文件
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容