1. 程式人生 > >第8章,文件查找與壓縮工具

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

find locate 文件查找 文件解壓

筆記整理開始時間: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


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