第8章,文件查找與壓縮工具

筆記整理開始時間:2018年4月13日20:39:04

 

本章內容:

        使用locate命令

        使用find命令

        壓縮和解壓縮工具

        

 

文件查找:

        在文件系統上查找符合條件的文件

        文件查找:locate,find

               非實時查找(數據庫查找):locate

               實時查找:find

        

locate:

        查詢系統上預建的文件索引數據庫

               /var/lib/mlocate/mlocate.db

        依賴於事先構建的索引

        索引的構建是在系統較爲空閒是自動進行(週期性任務),管理員手動更新數據庫

               updatedb

        索引構建過程需要便利整個根文件系統,極消耗資源

        工作特點:

               查找速度快

               模糊查找

               非實時查找

               搜索的是文件的全路徑,不僅僅是文件名

               可能只搜索用戶具備讀取和執行權限的目錄

                     (比如普通用戶不能搜索/root下的文件)

locate命令:

        locate KEY1 KEY2...        

               搜索文件,默認全路徑匹配,且key1 key2之間是或關係

               -i            忽略大小寫

               -n N       只列舉前N個匹配項目

               -r          使用正則表達式

               -b          只匹配文件名

               -c            只打印匹配條數,不顯示搜索到的文件

               -A key1 key2         搜索同時滿足所有關鍵詞的文件且關係

               -e           只顯示目前存在的文件

               -S            不搜索文件,顯示數據庫信息

        實例:

               locate -c net conf          

                     搜索路徑或文件名中帶有net或conf 的文件,僅顯示匹配的數量

                            [root@sentos7 ~]$locate -c  net  conf  

                            9616

               locate -A -c net conf

                     搜索路徑或文件名中帶有net和conf 的文件,僅顯示匹配的數量

                            [root@sentos7 ~]$locate -A -c  net  conf

                            238

               搜索.conf或者.net結尾的文件

               [root@sentos7 ~]$locate -c -r  '\(\.conf$\)\|\(\.net$\)'

               2439

               [root@sentos7 ~]$locate -c -r '\(\.net$\)'               

               6

               [root@sentos7 ~]$locate -c -r  '\(\.conf$\)'

               2433

        

        PS:使用正則表達式(regex)的時候,key只能有一個,不能多個

        

find:

        實時查找工具,通過遍歷指定路徑完成文件查找

        工作特點:

               查找速度略慢

               精確查找

               實時查找

               可能只搜索用戶具備讀取和執行權限的目錄

        

語法:

        find [option]..[查找路徑][查找條件][處理動作]

               查找路徑:指定具體目標路徑;默認爲當前目錄

               查找條件:指定的查找標準,可以文件名,大小,類型,權限等標準進行

                             默認爲找出指定路徑下的所有文件

               處理動作:對符合條件的文件做操作,默認輸出至屏幕

        

查找條件:

        指定搜索層級:

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

                     -mindepth level    最小搜索目錄深度

        

        根據文件名和inode查找:

               -name "文件名稱":    支持使用glob

                             *,?,[],[^]

               -iname "文件名稱":   不區分字母大小寫

               -inum n                       按照inode號查找

               -samefile name            相同inode號的文件

               -links n                  鏈接數爲n的文件

               -regex "pattern":       以pattern匹配整個文件路徑字符串,而不僅僅是文件名稱

               

               例:

                     find /etc/ -maxdepth 2  -name passwd

                     find / -name  f12*

                     find / -regex .*f123.*

                     find / -maxdepth 5  -mindepth 5 -links 4

                     find / -inum  68645312

        

        根據屬主、屬組查找:

               -user username            查找屬主爲指定用戶(UID)的文件

               -group groupname       查找屬組爲指定(GID)的文件

               -uid UserID                   查找屬主爲指定的UID號的文件

               -gid GroupID         查找屬主爲指定的GID號的文佳

               -nouser                        查找沒有屬主的文件

               -nogroup                     查找沒有屬組的文件

        

        根據文件類型查找:

               -type TYPE:

                            f             普通文件

                            d            目錄文件

                            l             符號鏈接文件

                            s             套接字文件

                            b            塊設備文件

                            c             字符設備文件

                            p            管道文件

               空文件或目錄

               -empty

                     find / -type d  -empty

        

        組合條件:

               與:        -a          

               或:        -o

               非:        -not,!

        德·摩根定律

               (非a)或(非b)=非(a且b)

               (非a)且(非b)=非(a或b)

        

               !A -a !B = !(A -o B)

               !A -o !B = !(A -a B)

 

        示例:

               find / -name snow

               find / -inmae Snow

               find / -name *.txt

               find /var -name *.log* -a -regex ".*log$"

               find -user joe -group joe

               fing / -user joe -o -group joe

               find -not \( -user joe -o -user jane  \)

               find -not -user joe -not -user jane

               find / -user joe -o -uid 500

        

               找出/目錄下,屬主不是root,且文件名不以f開頭的文件

                     find / -not -user root  -name "[^f]*"  |wc -l

                     563

                     find / \(  -not -user root -a -not -name "f*" \)|wc -l

                     563

                     find / -not \( -user root -o -name "f*" \)|wc -l

                     563

        排除目錄        

        示例:

               查找/etc下,除/etc/sane.d目錄的其他所有.conf後綴的文件

               find /etc -path "/etc/same" -a -prune -o -name *.conf

               查找/etc/下,除/etc/sane.d和/etc/fonts兩個目錄的所有.conf後綴的文件

               find /etc \( -path "/etc/sane.d" -o  -path "/etc/fonts" \) -a -prune  -o -name *.conf

 

 

        根據文件大小來查找:

               -size [+|-]#unit

                     常用單位:k M G c(byte)

                     #UNIT:(#-1,#]

                            如:6k表示(5k,6k]

                     -#UNIT:(0,#-1]

                            如:-6k 表示[0,5k]

                     +#UNIT: (#,以上]

                            如:+6k 表示(6k,以上)

        

        根據時間戳:

               以“天”爲單位;

                     -atime[+|-]#,

                            #:[#,#+1)        find / -atime 5  表示5-6天

                             +#:[#+1,以上]                     +5   6天以內

                            -#:[0,#)                             -5    5天以上

                     -mtime

                     -ctime

               以”分鐘“爲單位

                     -amin            find / -amin 5  5-6分鐘

                     -mmin                                -5    5分鐘以內

                     -cmin                                 +5   6分鐘以上

 

        根據權限查找:

               -perm[/|-]mode

                     mode            精確權限匹配

                     /mode           任何一類(u,g,o)對象的權限中只要能有一位匹配即可,或關係

                     -mode           每一類對象都必須同時擁有指定權限,與關係                      

               find -perm -222

               要轉換成010 010 010 ugo必須要都寫權限才符合             

               find -perm /421                   

                     100 010 001          u+r g+w o+x 只需要有一位滿足就行了

               0表示不關注

               find -perm 002             只要o 有 w 權限就匹配  不關注ug位

 

處理動作:

        -print     默認的處理動作,顯示至屏幕

        -ls           類似於對查找到的文件執行ls -l 命令

        -delete   刪除查找到的文件

        -fls file     查找到的所有文件的長格式信息保存至指定文件中

        -ok command  {} \;  找到的每個文件執行由command指定的命令,對於

               每個文件執行命令之前,都會交互式要求用戶確認

               find /root -name "f*" -ok cp {} /data {}.org \;

        -exec command {} \;

               對查找到的每個文件執行由COMMAND指定的命令,不需要確認

               {}:用於引用查找到的文件名稱本身

        find 傳遞查找到的文件至後面指定的命令是,查找到所有符合條件的文件一次

               性傳遞給後面的命令

        

xargs:參數替換

               由於很多命令不支持管道|來傳遞參數,而日常工作中有這個必要,所有就有了

               xargs命令

               xargs用於產生某個命令的參數,xargs可以讀入stdin的數據,並且以空格符

               或回車符將stdin的數據分隔成爲  arguments

        注意:文件名或者是其他意義的名詞內含有空格符的情況

               有些命令不能接受過多參數,命令執行可能會失敗,xargs可以解決

        示例:

               ls f* |xargs rm

               ls -R /data |xargs rm -rf

               find / -perm +666|ls -l              這個是個錯誤的,ls不支持stdin

               fing / -perm 666| xargs ls -l        用xargs 傳遞參數

               

               echo f{1..1000000} |xargs -n1 touch

               ls | xargs rm -f

        

find 示例:

        備份配置文件,添加.orig這個擴展名

        find /etc -name "*.conf" -exec cp -v {} {},orig  \;

               注意,如果更換目錄備份,比如備份到/data下

                     find -name "*.conf" -exec cp {} /data/{},orig \;

               這是個錯誤命令,會提示目錄不存在

                     /data//etc/mcelog/mcelog.conf,orig’: No such file or  directory

        提示刪除存在時間超過3天以上的joe的臨時文件

        find /tmp -ctime +2 -user joe -ok rm {} \;

        在主目錄中尋找可被其他用戶寫入的文件

        find ~ -perm -002

        查找/data下的權限爲644  後綴爲sh的普通文件,增加執行權限

        find /data -type f -perm 644 -name "*.sh" exec chmod +x {} \;

        查看/home的目錄

        find /home -type d   -ls

        

Gnome 搜索工具

        位置-->搜索文件。。

        圖形化搜索工具,可搜索

               命令、內容、用戶、組羣、大小、修改時間

               

 

壓縮、解壓縮及歸檔工具

        file-roller

        compress/uncompress: .Z

        gzip/gunzip:                  .gz

        bzip2/bunzip2                      .bz

        xz/unxz                                .xz

        zip/unzip                      

        tar

        cpoi

 

compress/uncompress

        compress [-dfvcVr] [-b maxbits] [file..]

               -d                  解壓縮,相當於uncompress

               -c > file.Z        壓縮和解壓縮結果輸出至標準輸出,不刪除源文件                    

               -v                  顯示詳情

               -r      如果對目錄使用compress -r dir  會將目錄內的文件分別進行壓縮

        uncompress:       解壓縮

        zcat file.Z >file       類似compress -c 利用重定向解壓  不刪除壓縮文件

        PS:

               壓縮比不高,且太小的文件不支持壓縮

        

gzip/gunzip

        gzip []option]... file...

               -d          解壓縮,相當於gunzip

               -c            將壓縮或解壓縮的結果輸出至標準輸出

               -#          指定壓縮比,1-9

        zcat:m.gz > m    不解壓的情況下查看內容,可以重定向解壓

 

bzip2/bunzip2/bzcat

        bzip2 [option].. file..

               -k           保留原文件

               -d          解壓縮

               -#          壓縮比,1-9,默認爲9

        bzcat:不解壓的情況下查看文本文件內容

        

xz/unxz/xzcat

        xz [option]..file..

               -k           保留原文件

               -d         解壓縮

               -#          壓縮比1-9 默認6

        xzcat:不顯示解壓縮的前提查看文本文件內容

        

zip/unzip

        zip -r file dir1 

               將dir1 打包壓縮到file.zip

        解包解壓縮:

               unzipfile file.zip

               man bash | zip man -  

                     接受輸入且打包爲man.zip(如果直接解壓出來,文件名爲 - )

               unzip -p man.zip > man      將文本解壓寫入文件

               

tar:

        tar -cpvf /pash/file.tar  /dir|file...

               將/dir或者file...  打包放到/pash/file.tar

               -c   指定文件file.tar

               -p   保留文件屬性

               -v  可視

               -f  後面(必須)跟文件     不可寫成-cfpv之類的

        tar -tvf file.tar

               預覽打包中的文件列表

        tar -xvf fiel.tar

               解包到當前文件

        tar -xvf file.tar -C /dir

               解包到目錄/dir

        

        打包的同時可以壓縮:

               tar   -zcvpf file.tar.gz /dir     打包同時壓縮成gz文件 .tgz

               tar -jcvpf file.tar.bz /dir 打包同時壓縮成bz文件  .tbz

               tar -Jcvpf file.tar.xz /dir         打包同時壓縮成xz文件  .txz

        解包不需要特殊處理,-xvf 可以全部解包解壓縮

        

        -T 選項指定輸入文件(目錄)

        -X 選項指定包含要排除的文件列表

               tar zcvf file.tgz   -T list.txt -X exlist.txt

               

split :分割大的tar文件爲多份小文件

        split -b 10M -d file.tar  a.tar

               -b size

               -d 指定後綴名爲數字

               將file.tar 按照10M大小分割,且文件名爲數字後綴 a.tar(00,01,..)

                     如不加-d 默認爲字母后綴(a,b,c...)

        合併

               cat a.tar* > file.tar

        

cpio:

        功能:複製文件或歸檔

        cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,他可以

        解壓以".cpio"或者".tar"結尾的文件

        cpio >|< 文件或者設備名

        選項:

               -o 將文件拷貝打包成文件或者將文件輸出到設備上

               -i 解包,將打包文件解壓或將設備上的備份還原到系統

               -t 預覽,查看文件內容或者輸出到設備上的文件內容

               -v 顯示打包過程中的文件名稱。

               -d 解包生成目錄,在cpio還原時,自動的建立目錄

               -c 一種較新的存儲方式

        示例:

               find /etc -print | cpio -ov > etc.cpio ;rm -rf  /etc

                     將/etc目錄備份;然後刪除/etc目錄

               cpio -tv < etc.cpio

                     預覽文件

               cpio -idv < etc.cpio

                     恢復/etc目錄

 

        

筆記整理完成時間:2018年4月15日17:52:26     

        

        

        

        


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章