方便實用的文件查找與壓縮

在平時的運維工作當中通常會編輯某些文件,但時間久了,突然一下子記不起文件的名字,遇到的事情又很緊急,需要立馬去處理,而自己只知道那個文件部分的特征信息,我們需要在系統中去搜索自己想要的文件,那么有沒有辦法去實現呢,當然有,在我們的系統中,文件查找的工具有兩個,locatefind。那么下面來介紹這兩個工具的用法以及兩個工具之間的差別。

在我們linux系統中文件查找分為:

      實時查找:遍歷所有文件進行匹配,速度相對較慢

      非實時查找:根據索引查找,通常是在數據庫中查找文件,查找速度快

 

※locate

       locate屬于非實時查找,依賴于實現構建的索引,索引的創建時在系統空閑時由系統自動進行創建,通常是用周期性任務來完成的,手動更新數據庫使用updatedb命令,索引構建過程需要遍歷整個根文件系統,及其耗費資源。

         工作特點:

         查找速度快

         模糊查找

         非實時查詢

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

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

         用法

         locate [OPTION]… PATTERN…

         locate的用法非常簡單,使用命令后面跟關鍵字,在locate后面跟所需要查找的關鍵字即可,沒有太大的難度,但依賴數據庫

         選項:

         -i:執行搜索時忽略大小寫的,在搜索的過程當中,有些文件可能是大寫的,但我也想把那個文件給找出來,這時候i選項就派上用場了

         locate   -iroot

        1.jpg

         -n #  :在搜索前加上此選項,搜索完成后,只列舉出前#個匹配的條目

        3.jpg

        

         -r:使用正則表達式來搜索

         比如我搜索以sh結尾的文件

         locate  –r \.sh$

        

 

find

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

         工作特點:

         查找速度慢

         精確查找

         實時查找

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

         用法:相對于locate來說,find的用法相對于復雜一些

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

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

         查找條件:指定的查找標準,可以是文件名,大小,類型,權限等標準進行,默認為找出路徑下的所有文件

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

        

         查找條件

         組合條件

                   與:-a

                   或:-o

                   非:-not,!

        

         德摩根定律

                   非(AB=(非A)或(非B

                   非(AB=(非A)且(非B

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

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

4.jpg

         根據文件名和inode查找

                   -name “文件名稱”:支持使用glob通配

                   *,?,[ ] , [^]

                   find /etc –name “.*?\.[^conf]查找以etc目錄下任意字符開頭以非.conf結尾的文件

            6.jpg

                  

                   -iname:不區分大小寫,跟locate用法相同

                   -inum n :按照inode號查找

                   find  / -inum 393313  查找根文件系統下inode號為393313的文件

          7.jpg

                   -samefile name :相同inode號的文件

                   find  /  -samefile   profile   查找inode號相同的文件,也就是查找硬鏈接文件,硬鏈接文件的inode號是相同的。

          8.jpg

                   -links n:根據鏈接數為n的文件來查找

                   find  /  -links  30  查找根文件系統中鏈接數為30的文件

         9.jpg

                   -regex pattern”以patter匹配真個文件路徑字符串,而不僅僅是文件名稱

         根據屬主、屬組查找, -name, -iname最大的區別就在于 -regex是把find輸出的整個結果(有別于絕對路徑名)作為要匹配的對象, 而不僅僅是結果的最后一部分

         find . -regex '.*/abc[^.]*'

        10.jpg

             -user username:查找屬主為指定用戶(UID)的文件,這個選項的作用在于,當我知道文件的屬主時,可以使用此選項來查找文件

                 find –user abc          查找文件系統中屬主為abc的文件

       11.jpg

                 -group group:查找屬組為指定組(GID)的文件,當我知道文件屬組,可是用這個這個選項來查找文件

                 find  -group  vuser   查找系統中屬組為vuser的文件

       

      12.jpg

                  -uid  uid:查找屬主為指定的uid號的文件

                  find  / -uid  503  查找系統中uid號為503的文件

      13.jpg

 

                 -gid  gid:查找屬組為指定的gid號的文件

                 find / -gid  500        查找系統中gid500的文件

     14.jpg

 

                 -nouser:查找文件沒有屬主的文件

                 find /  -nouser

    15.jpg

 

                 -nogroup:查找文件沒有屬組的文件

    16.jpg

 

         根據文件類型查找

                   -type  TYPE

                            f:普通文件

                            d:目錄文件

                            -l:符號鏈接文件

                            s:套接字文件

                            b:塊設備文件

                            c:字符設備文件

                            p:管道文件

  

        17.jpg

        18.jpg

 

         根據文件大小查找        

                   -size [+|-]#unit

                            常用單位:k,M,G

                            #unit:(#-1,#)如2M

                            -#unit[0,#-1],如 -2M

                            +#unit:(#,∞),如:+2M

                            2M表示文件大小大于1M小于2M

                            -2M:表示文件大小小于等于1M

                            +2M:表示文件大于2M

          19.jpg

          20.jpg

          21.jpg

         根據時間戳查找

                   以天為單位:

                            -atime[+|-]#  訪問時間

                            +#:表示查找訪問時間超過#+1天的文件

                            -#:表示查找訪問時間在#天之內的文件

                            #:表示查找訪問時間在#,,#x#+1天內的文件

                            -mtime:文件修改時間,用法同atime

                            -ctime:元數據發生改變的時間,用法同atime

                            2  表示文件訪問時間在大于等于2天小于3天之內的文件

                           -2:表示文件訪問時間在2天之內的文件,

                           +2:表示文件訪問時間超過3天的文件

           22.jpg

           23.jpg

           24.jpg

         根據權限查找

               -perm [/|-]MODE

          mode:精確權限匹配,如果我要查找文件的權限是644,那么我查找的條件寫的事644,那么查找出來的文件一定是   644權限的文件,查找的權限和匹配到文件的權限一致

             -MODE:每一類對象都必須同時擁有指定權限,權限0表示不關注,遇到權限為零,那組用戶的權限不用關注

             /MODE:任何一類用戶對象的權限中只要能一位匹配即可,

             find –perm 755 匹配權限模式恰好是755的文件

             find –perm /222 任意人有寫權限是都會匹配到

             find –perm -002,只有當其他人有寫權限時,才會匹配到

 

                          644:查找文件權限位644的文件,權限完全一致才匹配

                          /644:只要有一類用戶的權限大于等于644即匹配

                         -644:必須三類用戶的權限大于等于644才匹配

          25.jpg   

          26.jpg

          27.jpg

           

         處理動作

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

                   -ls:類似于對查到的文件執行’ls –l’命令

                   -delete:刪除查找到的文件,這個動作要慎用

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

             -ok command {} \;對查找到的文件指定有command指定的命令,通常提示交互信息例如:

                   find  -user  hadoop  -ok   rm –rf  { } \;查找文件屬主是hadoop的文件就刪除

      -exec command {}\;對查找到的文件執行有command指定的命令,跟ok不同的是,執行命令是不用提示,直接執行命令


28.jpg

                   { }:用于引用查找到的文件名稱自身

                   find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令

                   有些命令不能接受過多的參數,執行的過程中會報錯,使用xargs就會避免錯誤的產生

                find |xargs command  find查找到的內容作為comand的參數這就是xargs

的作用

29.jpg

示例:

find  -name  “*.conf”  -exec  cp {}  /tmp/{}.org  \;備份配置文件,添加.orig這個擴展名

       30.jpg

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目錄下以.sh結尾的普通文件且權限位644的 文 件,之后將查找到的文件更改權限為755

     find  /home –type d  -ls  查找出/home目錄下的所有目錄

 

locatefind的區別

命令

時效性

速度

精確性

搜索路徑

Locate

非實時

不精確

全路徑搜索

Find

實時

精確

對有讀寫執行的目錄進行搜索

 

 

壓縮工具

       在系統當中如果我們有些文件不想刪除,又不經常用時,存在在磁盤上勢必會占用一定的磁盤空間,這時候我們可以將這些文件打包壓縮存在到某一個位置儲存,這樣一來,即保存了文件,也縮小了文件占用磁盤的空間,在linux系統當中有許多壓縮文件的工具,早期的有compressuncompress,其對應的壓縮文件是以.Z結尾的壓縮格式的文件,現在使用較多的有:

gzip/gunzip.gz結尾的壓縮格式的文件

bzip2/bunzip2.bz2結尾的壓縮格式的文件

xz/unxz.xz結尾的壓縮格式的文件

zip/unzip.zip結尾的壓縮格式的文件

 

compress

         -d:解壓縮,相當于uncompress

         -c:結果輸出至目標輸出,不刪除源文件

         -v:顯示解壓縮的詳細過程信息

         zcat  file.Z>file

 

gzip/gunzip

         gzip [option]..filename

         -d:解壓縮,相當于gunzip

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

         -#:指定壓縮比,值越大壓縮比越大,壓縮比取值范圍1-9

         zcat:在不解壓文件的前提下,查看壓縮文件里面的內容

   31.jpg

bzip2/bunzip2

         bzip2 [option]… file

         -k:保留源文件,在壓縮的過程中,不刪除源文件

         -d:解壓縮,相當于bunzip2

         -#1-9,壓縮比,默認為6

         bzcat:不解壓文件的前提下,查看壓縮文件里面的內容

   32.jpg

xz/unxz

         -k:保留源文件,在壓縮的過程中,不刪除源文件

         -d:解壓縮,相當于bunzip2

         -#1-9,壓縮比,默認為6

         xzcat:不解壓文件的前提下,查看壓縮文件里面的內容

   33.jpg

 

zip/unzip

         打包壓縮

         zip  -r  /etc/sysconfig    sysconfig/

         解壓縮

         unzip         sysconfig.zip

         cat /var/log/messages |zip message – 查看文件顯示結果,通過管道輸入給zip作為參數

  

 

tar

         tar [option]

         創建歸檔

         tar  -c –f  /path/to/somefile.tar  file..

         tar  cf  /path/to/somefile.tar  file..

         查看歸檔文件中的文件列表

         tar –tf  /path/to/somefile.tar  file..

      34.jpg

         展開文檔

         tar xf   /path/to/somefile.tar  file..

         tar  xf  /path/to/somefile.tar  file.. –C   -C解壓后文件存放的目錄

     35.jpg

         結合壓縮工具實現歸檔并壓縮

         -j;bizp2

         tar jcf  etc.tar.bz2  /etc/  

         -z:gzip

         tar zcf etc.tar.gz  /etc/

         -J:xz

         tar Jcf etc.tar.xz  /etc/

      36.jpg

cpio

         復制 從或到文件

  cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“.cpio”或者“.tar”結尾的文件。

        cpio [選項] > 文件名或者設備名

        cpio [選項] < 文件名或者設備名

         選項

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

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

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

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

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

        -c 一種交心的存儲方式

 

示例

         /etc/目錄備份

                  find  /etc –print |cpio –ov > etc.cpio

     38.jpg

         查看內容

                 cpio –tv < etc.cpop

      39.jpg

    

         要解包文件    

cpio –iv <etc.cpio

cpio –idv <etc.cpio


作業:

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

       find   /var/   -user root  –group mail

        1.jpg

 

 

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

      find /var/ -not \ ( -user root  -o  -user lp  -o –user gdm \)

        2.jpg

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

       find –not \( –user root –o –user postfix\) –mtime -7

        3.jpg

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

      find  / \( -atime -7  -nouser –o –nogroup \) –ls

       4.png

5、  查找/etc目錄下大于1M且類型為普通文件

   find /etc/  -size  +1M -ls

  5.jpg

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

   任意一類用戶都有些權限,然后取反,最終的結果跟題目的意思想吻合,那只有使用-perm  -mode,任何一類用戶的任何 一位權限匹配即可,只要有一類用戶的權限匹配到有寫權限,取反后,那么就沒有寫權限了,所以最終結果如下:

     find /etc/ -not –perm /222

     6.png

    

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

 至少有一類用戶沒有執行權限相反的意思是,所有的用戶的權限都有執行權限取反,也就是至少有一類用戶沒有執行權限

   find /etc/ -perm  -111

     7.png

8、  查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

     find /etc/init.d/  -perm -111 -perm -002

     find /etc/init.d/  -perm -113

    8.jpg

    

    

 

 

 

原創文章,作者:fszxxxks,如若轉載,請注明出處:http://www.www58058.com/34696

(0)
fszxxxksfszxxxks
上一篇 2016-08-13 14:41
下一篇 2016-08-13 21:01

相關推薦

  • OpenSSL 的使用

    OpenSSL 是一個開源項目,其組成主要包括一下三個組件:     openssl:多用途的命令行工具     libcrypto:加密算法庫     libssl:加密模塊應用庫,實現了ssl及tls openssl可以實現:秘鑰證書管…

    Linux干貨 2017-06-07
  • CentOS 6 啟動流程

    CentOS6啟動流程 1.加載BIOS的硬件信息,獲取第一個啟動設備 2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息 3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備 4.核心執行init程序,并獲取默認的運行信息 5.init程序執行/etc/rc.d/rc.sysinit文件 6.啟動核心的外掛模塊 7.ini…

    2017-09-01
  • 文本處理工具

    文本處理工具 1、查看文件內容 cat -v 顯示非打印字符       -E 顯示$      -T 顯示TAB      -n 顯示行號      -s 將連續的重復空行變成一行      -A = -vE…

    2017-07-30
  • 系統時間與硬件時間

    1. “系統時間”與“硬件時間”    系統時間: 一般說來就是我們執行 date 命令看到的時間,linux系統下所有的時間調用(除了直接訪問硬件時間的命令)都是使用的這個時間。    硬件時間: 主板上BIOS中的時間,由主板電池供電來維持運行,系統開機時要讀取這個時間,并根…

    Linux干貨 2016-08-05
  • 根分區伸縮實驗

    眾所周知LVM是Linux環境下對 磁盤進行管理的一種機制。用戶在安裝Linux操作系統時,難以分配合適的硬盤空間,當一個分區存放不下某個文件時,這個文件因為文件系統的限制,也不能 跨越多個分區來存放。而遇到出現某個分區耗盡時,只有使用調整分區大小的工具。隨著LVM功能的出現,這些問題都迎刃而解,用戶在無需停機的情況下可以方 便…

    Linux干貨 2015-05-27
  • bash腳本進階

    case  變量引用  in PAT1)分支1 ;; PAT2)  分支2 ;; … *) 分支n ;; esac case支持glob風格的通配符:   *:任意長度任意字符: ?:任意單個字符: [ ]:指定范圍內的任意單個字符: a|b:a或b function:函數   &nbs…

    Linux干貨 2017-05-21

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 10:37

    文章整體思路清晰,內容豐滿有理有據,但是對find而言,這是筆試中的從常見考點,需要我們多加練習。

欧美性久久久久