文件查找和壓縮
之前,我們已經了解了系統的中有關文件創建,文件和目錄的復制,目錄創建,目錄刪除等相關的命令,但是很多時候,這些操作,都是需要指定文件的絕對路徑的(相對于根目錄的路徑),如果我們只知道文件或者目錄本身的名稱,但是不知道,文件以及目錄的上級目錄的名稱時,或者,我們需要查找一個歷史文件所在的位置,這個情況下,我們可以使用文件查找相關的命令搜尋到我們需要的信息,并直接顯示在屏幕上,以便我們進行獲取使用。
文件查找工具有兩個:locate 和 find 。文件查找命令分為非實時查找和實時查找,非實時查找是根據索引查找的,索引不是自動生成的,是需要提前建立的,若是很長時間沒有建立索引目錄,那么文件查找過程就不會準確。實時查找是從磁盤的指定目錄,遍歷目錄下的所有文件進行文字匹配,將匹配的項進行反饋的查找方式。
使用locate命令
locate 命令屬于非實時查找,需要對整個文件系統中的文件預先構建索引。系統中有周期性的任務,及時且自動的創建索引,若是,需要當前重新建立索引,可以使用 updatedb 命令構建索引,這個過程是遍歷根目錄下的所有的文件的,一般會比較占用系統的資源,耗費比較多的時間,建議在系統比較空閑的時間進行操作,同時,系統中周期性任務就是在空閑時段更新索引的。
locate 工具的特點包括:查找文件速度快;精度有所欠缺;同時是模糊形式的查找;搜索的是文件的全路徑,不僅僅是文件名,下面是locate 命令的具體用法。
使用find命令
find 命令查找工具是實時精確的搜索,會對指定的目錄中,所有的文件進行匹配。所以它的特點是:查找速度慢,但是有較高的準確率。
find 和locate 這兩個命令在特性中是相互補充的,都是非常的實用,但是,對應命令的使用者來說,一些沒有權限訪問的目錄,find 和 locate 可能是逃過查找的 ,這一點在使用中需要注意。
find 命令的使用語法:
find ? [選項]? [查找路徑] ? [查找條件]? [處理動作]
查找路徑:指定具體目標路徑;若是沒有指定,默認是對當前目錄下可訪問文件進行查詢
查找條件:指定的查找要求,比如文件名要求,大小要求,文件類型要求,權限要求,時間屬性要求。這個缺省的情況下,是指沒有要求,默認是顯示所有的文件。
處理動作:當查找出符合要求的文件后,可以同時指定對文件進行某些操作,缺省的情況下,是將搜索的結果標準輸出到屏幕。
查找路徑直接寫目錄的絕對路徑即可,比較復雜的是查找條件,處理動作相對復雜,這里分別進行說明。
一、查找條件(單橫線連接)
1、指定搜索層級(目錄最后面不要加斜線)
-maxdepth? n ? 這個是指最大搜索目錄深度,指定目錄為第1級,也可以理解為查找到第n層
-mindepth ? n ? 最小搜索目錄深度,可以理解為,從第n層開始進行查找
2、指定文件名稱和inode 進行查找
-name “文件名稱”:支持使用glob?? *, ?, [], [^]
-iname “文件名稱”:不區分字母大小寫
-inum n 按inode號查找
-samefile name 相同inode號的文件
-links n?? 鏈接數為n的文件
-regex “PATTERN”:以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
3、根據屬主、屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GRPNAME: 查找屬組為指定組(GID)的文件
-uid UserID:查找屬主為指定的UID號的文件
-gid GroupID:查找屬組為指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
4、根據文件類型查找:
-type TYPE:
- f: 普通文件
- d: 目錄文件
- l: 符號鏈接文件
- s:套接字文件
- b: 塊設備文件
- c: 字符設備文件
- p: 管道文件
5、根據文件大小來查找:
-size [+|-]#UNIT
- 常用單位:k, M, G,c(byte)
- #UNIT: (#-1, #]?? 如:? -size ?? 6k 表示(5k,6k] ? 理解為“接近 6k ”大小的 ,
- -#UNIT:[0,#-1]?? 如:-size ? -6k 表示 [0,5k] ?? 大小小于“接近 6k” 范圍的
- +#UNIT:(#,∞)?? 如:? -size? +6k 表示(6k,∞) ?? 大小大于“ 接近 6k ”范圍的
- 注意:根據文件大小查找,不應該是查找確定的數字,因為不同的單位(unit)之間是更小單位的范圍的,所以指定數字本身有范圍確認的功能。
6、根據時間戳:
以“天”為單位; ?? atime是代表(Access time)
-atime [+|-]#,
- #: [#,#+1) ? ? ?? 如 :-atime? 1 ?? 理解為昨天之前第1天(24小時)。不包括昨天
- +#: [#+1,∞] ? ? 如:-atime +1 ? 昨天之前第1天,之前的所有時間
- -#: [0,#) ? ? ? ? ? 如: -atime -1 ? 當前時間到昨天之前第1天,
-mtime? 表示(Modify time) ? -ctime? 表示(Change time)
注意:在時間上進行判斷時,是向前進行推算的。
以“分鐘”為單位:???? -amin???? -mmin???? -cmin
7、根據權限查找:
-perm [/|-]MODE
MODE 是權限的數字表示法
- MODE: 精確權限匹配
- /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配 即可,或關系,+ 從centos7開始淘汰
- -MODE:每一類對象都必須同時擁有指定權限,與關系
有三個數字,分別對應 user ,group ,other 的權限,數字0表示,權限不關心
7、多條件的組合使用
組合條件:
與:-a
或:-o
非:-not, !
? 德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
? 示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
find -not \( -user joe -o -user jane \)
find /etc/httpd ! \( -regex .*conf\.. -o -not -name conf \)
find /etc/httpd -not \( -regex .*conf\.. -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”
目錄進行剪切操作是,順序進行的(先掃描文件夾),剪切了就不會進入了,所以剪切掉的文件夾中什么都不會出現。
多個條件使用的情況下,默認是且的關系
二、處理動作
-print:默認的處理動作,顯示至屏幕(缺省默認)
-ls:類似于對查找到的文件執行“ls -l”命令
-delete:刪除查找到的文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; ? ? 對查找到的每個文件執行由COMMAND 指定的命令,對于每個文件執行命令之前,都會交互式要求用 戶確認
-exec COMMAND {} \; ? ? 對查找到的每個文件執行由 COMMAND指定的命令
{}: 用于引用查找到的文件名稱自身
find傳遞查找到的文件至后面指定的命令時,查找到所有符合 條件的文件一次性傳遞給后面的命令 ,xargs用于產生某個命令的參數,xargs 可以讀入 stdin 的數 據,并且以空格符或回車符將 stdin 的數據分隔成為 arguments
注意:文件名或者是其他意義的名詞內含有空格符的情況 v有些命令不能接受過多參數,命令執行可能會失敗,xargs可以解決。
示例:
ls f* |xargs rm
find /sbin -perm +7000 | xargs ls –l
? find和xargs格式:find | xargs COMMAND
xargs是將標準輸出作為管道后面命令的參數的,和標準輸入不同。
壓縮和解壓縮工具
1、cpio
功能:復制文件從或到歸檔
cpio命令是通過重定向的方式將文件進行打包備份,還原恢復 的工具,它可以解壓以“.cpio”或者“.tar”結尾的文件
cpio [選項] > 文件名或者設備名
cpio [選項] < 文件名或者設備名
選項 ?-o 將文件拷貝打包成文件或者將文件輸出到設備上
-i 解包,將打包文件解壓或將設備上的備份還原到系統
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-v 顯示打包過程中的文件名稱
-d 解包生成目錄,在cpio還原時,自動的建立目錄
-c 一種較新的存儲方式
將etc目錄備份:?? find ./etc -print |cpio -ov >etc.cpio
內容預覽 cpio –tv < etc.cpio
解包文件?? cpio –idv < etc.cpio
2、tar?? 不會刪除原文件
打包工具,可以是多個文件或者目錄,結合選項可以壓縮和解壓縮
-c 創建
-f 指定存儲文件 一般都有
-t 查看
-r 追加
-x 展開?? -C 展開后的文件存放到指定的目錄(必須先存在)
壓縮工具 -j:bzip2 ;-z:gzip;-J:xz;
-T:指定輸入文件的表格(批量設置)
-X:排除指定文件列表中的文件(批量設置)
split 分割大的tar文件?? -b 指定大小 -d數字結尾,不加是字母
split?? -b 1M -d?? 源文件?? 指定的小文件前綴
合并 cat 指定的小文件前綴* > 源文件名
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91068