1. 程式人生 > 其它 >Linux13--檔案查詢與壓縮、管道

Linux13--檔案查詢與壓縮、管道

1 檔案查詢

# find命令: 在linux系統中,按照我們的要求去查詢檔案


# 1.格式:
    find [查詢的路徑] [匹配模式] [匹配規則]

# 2.匹配模式:
    -name:按檔名去匹配 

    -type:按檔案型別匹配
      常見檔案型別:
        f:普通檔案
        d:普通資料夾
        b:塊裝置檔案
        c: 字元裝置檔案
        s:socket檔案
        l:連結檔案
        
    -perm :按檔案許可權匹配
     
           
    -user  :按檔案屬主匹配
    -nouser:查詢沒有屬主的檔案  # 即屬主使用者被刪除了的檔案
    
    -group  :按檔案屬組匹配
    -nogroup:查詢沒有屬組的檔案
     
    -size:按檔案大小匹配
        +  查詢超過n的檔案
        -  查詢小於n的檔案
         
    -mtime:按檔案的修改時間匹配
    -ctime:按檔案的建立時間匹配
    -atime:按檔案的訪問時間匹配
        + n 查詢n天前的檔案
        - n 查詢n天內的檔案
    
    
    -a:並且  # and 預設
    -o:或者  # or
    
    -exec:處理 匹配之後的內容  # xargs
     
     
# 3.匹配規則 (結合正則匹配)
    * : 匹配任意數量的任意字元(匹配零個或多個任意字元)
    ? : 匹配任意一個字元
    
    
# 補充:
# 常見的檔案許可權:
    755:資料夾的預設許可權
    644:檔案的預設許可權

# 刪除使用者及使用者組
    刪除使用者  :userdel   # -r 徹底刪除
    刪除使用者組 :groupdel
    
# 檢視檔案的各種時間
     stat

查詢案例

# 1.查詢出/etc目錄下的hosts檔案  
    find /etc -name "hosts"

# 2.查詢出/etc目錄下的以ifcfg開頭的檔案
    find /etc/ -name "ifcfg*"
            
# 3.查詢出/etc目錄下以.conf結尾的檔案
    find /etc/ -name "*.conf"

# 4.查詢出/etc目錄下,檔名中包含host的檔案有哪些
    find /etc/ -name "*host*"

# 5.查詢出/etc目錄下,所有的普通檔案。
    find /etc/ -type f

# 6.查詢出/etc目錄下,所有的資料夾
    find /etc/ -type d
            
# 7.查詢出/dev/目錄中的所有的塊裝置檔案
    find /dev/ -type b
    
# 8.查詢出/dev目錄中所有的字元裝置檔案
    find /dev/ -type c
    
# 9.查詢出/etc目錄中檔名包含nginx的普通檔案
    find /etc/ -name "*nginx*" -type f
            
# 10.查詢出/root目錄下,許可權為755的檔案
    find /root/ -perm 755
            
# 11.查詢出屬主為test01的檔案
    find /root/ -user test01
            
# 12.查詢屬主被刪除了的檔案
    find /root/ -nouser 

# 13.查詢屬組為test的檔案
    find /root/ -group test
            
# 14.查詢屬組被刪除了的檔案
    find /root/ -nogroup
            
# 15.查詢2天以前修改過的檔案
    find /root/ -mtime +2
            
# 16.查詢2天以內建立的檔案
    find /root/ -ctime -2

# 17.查詢2天以內訪問過的檔案
    find /root/ -atime -2
            
# 18.查詢大於1M的檔案
    find /root/ -size +1M
            
# 19.查詢小於1M的檔案
    find /root/ -size -1M
            
# 20.查詢在3天以內建立的檔案,並刪除
    find /tmp/ -ctime -3 -type f -exec rm -rf {} \;
        -exec :處理查詢之後的內容
        {}    :代表的是查詢到的內容、
        \;    : 固定搭配
        
    find /tmp/ -ctime -3 -type f | xargs -I {} rm -rf {} 
        
        
# 21.將所有3天前建立的普通檔案加上.bak字尾
    find /tmp -ctime -3 -type f -exec mv {} {}.bak \;
    
    find /tmp -ctime -3 -type f | xargs -I {} mv {} {}.bak
        
        
# 補充:
    xargs :將所有內容格式化成一行
    xargs -I {} :將所有內容格式化成一行,且放進{}中,其他命令就可以從{}中取出內容,進行命令執行
    
    因為前一個命令執行的結果可能包含換行,且將執行結果作為第二個命令引數傳遞時,命令就不能執行(有些命令執行時,引數不能有換行)
    所以可以通過xargs將引數過濾,將換行換成空格

2 壓縮軟體

1.gzip

# gzip
    壓縮軟體,將檔案做成一個壓縮包,會刪除原來的檔案,生成一個新的壓縮包檔案
    
# 格式:
    壓縮:gzip [檔案路徑]
    解壓:gzip -d [壓縮包路徑]
    
# 缺點:
    gzip不能壓縮目錄

2.bzip2

# bzip2
    壓縮軟體,將檔案做成一個壓縮包,會刪除原來的檔案,生成一個新的壓縮包檔案
    
# 格式:
    壓縮:bzip2 [檔案路徑]
    解壓:bzip2 -d [壓縮包路徑]
    
# 缺點:
    bzip2不能壓縮目錄
    
# 比較
    gzip 比 bzip2壓縮率更大

3.tar 常用

# tar
    打包檔案或目錄,不會刪除原檔案,也不會壓縮檔案;
    但可以跟gzip或bzip2共同使用,進行打包和壓縮
    
# 格式:
    tar [必要引數] [選擇引數] [壓縮包名稱] [原檔案或目錄]
 
    # 必要引數:
        -f: 指定壓縮包的名稱
        -c: 打包檔案  # 小寫

        -z: 指定使用gzip壓縮,一般使用gzip壓縮的檔案都以.tar.gz作為副檔名
        -j: 指定使用bzip2壓縮,一般使用bzip2壓縮的檔案都以.tar.bz2作為副檔名
        
        -x: 解壓,不需要指定壓縮包的壓縮型別,會自動匹配壓縮包的型別自行解壓
        
        -v: 顯示壓縮包壓縮的過程
        -P: 當壓縮包中存在根目錄時,自動移除根目錄   # 大寫
        -t: 檢視壓縮包中的內容
        
    # 注:引數共同使用時,f放在最後,緊跟壓縮包名稱
    
    # 選擇引數:
        -C: 解壓到指定目錄  #  大寫
    
         
# eg:
# 打包並壓縮一個檔案(使用gzip壓縮)
    tar -zcvf rumenz.tar.gz rumenz.txt
    
# tar.gz解壓縮到/tmp目錄
    tar -xzvf rumenz.tar.gz -C /tmp
      
# 列出壓縮包裡面的內容
    tar -ztvf rumenz.tar.bz2 rumenz.txt
    
    # 注:
    由於我們使用gzip壓縮的rumenz.tar.gz,
    所以要查閱rumenz.tar.gz包內的檔案時,就得要加上z這個選項了
      
# 將/etc目錄中的所有普通檔案壓縮成/tmp/etc.tar.gz檔案
    tar -czvPf /tmp/etc.tar.gz $(find /etc/ -type f | xargs)
    
# 補充:$():相當於數學中的括號,優先看括號中的內容,再執行tar

4.zip 常用

壓縮檔案或資料夾

# 安裝壓縮與解壓命令
    yum -y install zip unzip
    
    
# 壓縮
zip [選項] 壓縮包名 原始檔或源目錄列表
    -r  遞迴壓縮
    -m	將檔案壓縮之後,刪除原始檔案  # 相當於把檔案移到壓縮檔案中
    -v	顯示詳細的壓縮過程資訊

    eg: zip -r etc.zip /etc
    
    
# 解壓
unzip [引數]  壓縮包名
    -d 目錄名	將壓縮檔案解壓到指定目錄下
    -n 解壓時,不覆蓋已經存在的檔案
    -o 解壓時,覆蓋已經存在的檔案,並且無需使用者確認
    
    -v 檢視壓縮檔案的詳細資訊,包括壓縮包中的檔案大小、檔名以及壓縮比等,但是不解壓
    -t 檢查壓縮檔案是否正確、完整,但並不解壓

 
# eg: 
    zip -r tmp.zip /tmp 
    unzip tmp.zip
    
    zip install.log.zip install.log 
    unzip install.log.zip

3 管道

用於傳輸資料,將管道前的命令執行結果,交給管道之後的命令進行處理

# 格式:
    |

# 案例
# 1.刪除/tmp目錄下,一天以內建立的檔案
    find /tmp/ -ctime -1 -type f | xargs -I {} rm -rf {}
      
# 2.將etc中所有的普通檔案,複製到/tmp目錄中
    find /etc/ -type f | xargs -I {} cp -r {} /tmp/