文件查找和壓縮
文件查找和壓縮
本章內容
Locate
find
xargs
compress和uncompress
gzip和gunzip
bzip2和bunzip2
xz和unxz
zip和unzip
tar
cpio文件查找
在文件系統上查找符合條件的文件
文件查找:locate, find
非實時查找(數據庫查找):locate
實時查找:findnode
locate
查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
依賴於事先構建的索引
索引的構建是在系統較爲空閒時自動進行(週期性任務),管理員手動更新數據庫(updatedb)
索引構建過程須要遍歷整個根文件系統,極消耗資源
工做特色:
•查找速度快
•模糊查找
•非實時查找
•搜索的是文件的全路徑,不單單是文件名
•可能只搜索用戶具有讀取和執行權限的目錄正則表達式
locate命令
locate KEYWORD
有用的選項
-i 不區分大小寫的搜索
-n N 只列舉前N個匹配項目
-r 使用基本正則表達式
示例
搜索名稱或路徑中帶有「conf」的文件
locate conf
使用Regex來搜索以「.conf」結尾的文件
locate -r ‘.conf$’數據庫
find
實時查找工具,經過遍歷指定路徑完成文件查找
工做特色:
• 查找速度略慢
• 精確查找
• 實時查找
• 可能只搜索用戶具有讀取和執行權限的目錄centos
find
語法:
find [OPTION]... [查找路徑] [查找條件] [處理動做]
查找路徑:指定具體目標路徑;默認爲當前目錄
查找條件:指定的查找標準,能夠文件名、大小、類型、權限等標準進行;默認爲找出指定路徑下的全部文件
處理動做:對符合條件的文件作操做,默認輸出至屏幕app
查找條件
指搜索層級
-maxdepth level 最大搜索目錄深度,指定目錄下的文件爲第1級
-mindepth level 最小搜索目錄深度
先處理目錄內的文件,再處理指定目錄
-depth
根據文件名和inode查找:
-name "文件名稱":支持使用glob
*, ?, [], [^]
-iname "文件名稱":不區分字母大小寫
-inum n 按inode號查找
-samefile name 相同inode號的文件
-links n 連接數爲n的文件
-regex 「PATTERN」:以PATTERN匹配整個文件路徑,而非文件名稱ide
查找條件
根據屬主、屬組查找:
-user USERNAME:查找屬主爲指定用戶(UID)的文件
-group GRPNAME: 查找屬組爲指定組(GID)的文件
-uid UserID:查找屬主爲指定的UID號的文件
-gid GroupID:查找屬組爲指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件工具
查找條件
根據文件類型查找
-type TYPE
•f: 普通文件
•d: 目錄文件
•l: 符號連接文件
•s:套接字文件
•b: 塊設備文件
•c: 字符設備文件
•p: 管道文件
空文件或目錄
-empty
示例:find /app -type d -emptyui
查找條件
組合條件:
與:-a
或:-o
非:-not !
德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)centos7
find示例
找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
find /tmp ( -not -user root -a -not -name 'f' ) -ls
find /tmp -not ( -user root -o -name 'f' ) –ls
排除目錄
示例:
查找/etc/下,除/etc/sane.d目錄的其它全部.conf後綴的文件
find /etc -path ‘/etc/sane.d’ -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)
+#: [#+1,∞]
-#: [0,#)
-mtime
-ctime
以「分鐘」爲單位
-amin
-mmin
-cmin
查找條件
根據權限查找:
-perm [/|-]MODE
MODE: 精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配便可,或關係,+ 從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限,與關係
0 表示不關注
•find -perm 755 會匹配權限模式剛好是755的文件
•只要當任意人有寫權限時,find -perm +222就會匹配
•只有當每一個人都有寫權限時,find -perm -222纔會匹配
•只有當其它人(other)有寫權限時,find -perm -002纔會匹配
處理動做
-print:默認的處理動做,顯示至屏幕
-ls:相似於對查找到的文件執行「ls -l」命令
-delete:刪除查找到的文件
-fls file:查找到的全部文件的長格式信息保存至指定文件中
-ok COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令,對於每一個文件執行命令以前,都會交互式要求用戶確認
-exec COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令
{}: 用於引用查找到的文件名稱自身
find傳遞查找到的文件至後面指定的命令時,查找到全部符合條件的文件一次性傳遞給後面的命令
參數替換xargs
因爲不少命令不支持管道|來傳遞參數,xargs用於產生某個命令的參數,xargs 能夠讀入 stdin 的數據,而且以空格符或回車符將 stdin 的數據分隔成爲參數
許多命令不能接受過多參數,命令執行可能會失敗,xargs能夠解決
注意:文件名或者是其餘意義的名詞內含有空格符的狀況
find和xargs的組合:find | xargs COMMAND
示例:
ls | xargs rm 刪除當前目錄下的大量文件
find /sbin/ -perm +700 | ls -l 這個命令是錯誤的
find /bin/ -perm /7000 | xargs ls -Sl 查找有特殊權限的文件
find /bin/ -perm -7000 | xargs ls -Sl 此命令和上面有何區別?
find -type f -name 「*.txt」 -print0 | xargs -0 rm 以字符nul分隔
find示例
備份配置文件,添加.orig這個擴展名
find -name 「.conf」 -exec cp {} {}.orig \;
提示刪除存在時間超過3天以上的joe的臨時文件
find /tmp -ctime +3 -user joe -ok rm {} \;
在主目錄中尋找可被其它用戶寫入的文件
find ~ -perm -002 -exec chmod o-w {} \;
查找/data下的權限爲644,後綴爲sh的普通文件,增長執行權限
find /data –type f -perm 644 -name 「.sh」 –exec chmod 755 {} \;
查看/home的目錄
find /home –type d -ls
壓縮、解壓縮及歸檔工具
file-roller
compress/uncompress: .Z
gzip/gunzip: .gz
bzip2/bunzip2: .bz2
xz/unxz: .xz
zip/unzip
tar
cpio
compress/uncompress
compress [-dfvcVr] [-b maxbits] [file ...]
-d 解壓縮,至關於uncompress
-c 結果輸出至標準輸出,不刪除原文件
-v 顯示詳情
uncompress file.Z 解壓縮
zcat file.Z 不顯式解壓縮的前提下查看文本文件內容
示例:zcat file.Z >file
gzip/gunzip
gzip [OPTION]... FILE ...
-d 解壓縮,至關於gunzip
-c 結果輸出至標準輸出,保留原文件不改變
-# 指定壓縮比,#取值爲1-9,值越大壓縮比越大
gunzip file.gz 解壓縮
zcat file.gz 不顯式解壓縮的前提下查看文本文件內容
示例:
gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
cat messages | gzip > m.gz
bzip2/bunzip2/bzcat
bzip2 [OPTION]... FILE ...
-k keep, 保留原文件
-d 解壓縮
-# 1-9,壓縮比,默認爲9
bunzip2 file.bz2 解壓縮
bzcat file.bz2 不顯式解壓縮的前提下查看文本文件內容
xz/unxz/xzcat
xz [OPTION]... FILE ...
-k keep, 保留原文件
-d 解壓縮
-# 壓縮比,取值1-9,默認爲6
unxz file.xz 解壓縮
xzcat file.xz 不顯式解壓縮的前提下查看文本文件內容
zip/unzip
打包壓縮
zip –r /backup/sysconfig /etc/sysconfig/
解包解壓縮
unzip sysconfig.zip
cat /var/log/messages | zip messages -
unzip -p message > message
tar工具
tar(Tape ARchive,磁帶歸檔的縮寫)
tar [OPTION]...
(1) 建立歸檔,保留權限
tar -cpvf /PATH/FILE.tar FILE...
(2) 追加文件至歸檔: 注:不支持對壓縮文件追加
tar -r -f /PATH/FILE.tar FILE...
(3) 查看歸檔文件中的文件列表
tar -t -f /PATH/FILE.tar
(4) 展開歸檔
tar -x -f /PATH/FILE.tar
tar -x -f /PATH/FILE.tar -C /PATH/
(5) 結合壓縮工具實現:歸檔並壓縮
-j: bzip2, -z: gzip, -J: xz
tar工具
-exclude 排除文件
tar zcvf /root/a3.tgz --exclude=/app/host1 --exclude=/app/host2 /app
-T 選項指定輸入文件 -X 選項指定包含要排除的文件列表
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist
split:分割一個文件爲多個文件
分割大的 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
合併:
cat mybackup-parts* > mybackup.tar.gz
cpio
功能:複製文件從或到歸檔
cpio命令是經過重定向的方式將文件進行打包備份,還原恢復的工具,它能夠解壓以「.cpio」或者「.tar」結尾的文件
cpio [選項] > 文件名或者設備名
cpio [選項] < 文件名或者設備名
選項
-o 將文件拷貝打包成文件或者將文件輸出到設備上
-O filename 輸出到指定的歸檔文件名
-A 向已存在的歸檔文件中追加文件
-i 解包,將打包文件解壓或將設備上的備份還原到系統
-I filename 對指定的歸檔文件名解壓
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-F filename 使用指定的文件名替代標準輸入或輸出
-d 解包生成目錄,在cpio還原時,自動的創建目錄
-v 顯示打包過程當中的文件名稱
示例將etc目錄備份:find ./etc -print |cpio -ov >bak.cpio將/data內容追加bak.cpiofind /data | cpio -oA -F bak.cpio內容預覽cpio –tv < etc.cpio解包文件cpio –idv < etc.cpio