您好,登錄后才能下訂單哦!
文件查找和解壓縮
在文件系統上查找符合條件的文件,文件查找的工具有兩個,locate 和 find
文件查找分為:
locate 非實時查找 (在數據庫查找)
updatedb 更新數據庫
經常用于搜索穩定的文件,比如配置文件
var/lib/mlocate/mlocate.db 數據庫路徑
find 實時查找
locate :
查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
依賴于實現構建的索引;索引的構建實在系統較為空閑時自動進行(周期性任務)
管理員可以手動更新數據庫 updatedb
索引構建過程需要遍歷整個根文件系統,及其消耗資源
工作特點:查找速度快
模糊查找
非實時精準查找
搜索的是文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執行權限的目錄
locate 選項 關鍵字
locate -i AAA 執行時不區分大小寫的搜索
locate -n 2 aa 只列出前幾個的匹配項目
locate makangbo 搜索名稱或路徑中帶有makangbo的文件
locate -r ‘\.bash$’ 使用正則表達式來搜索以 bash結尾的文件
find 實時查找工具,通過遍歷指定路徑完成文件查找;
特點:精確查找、精準查找、速度慢 、可能只搜索用戶具備讀取和執行權限的目錄
語法:find [選項] [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名,大小,類型,權限等標準進行;默認為指定路徑下的所有文件
處理動作: 對符合條件做操作,默認輸出至屏幕
查找條件:
根據文件名和inode查找
-name "file" 支持使用正則表達式 ]# find -name makangbo 搜索名為makangbo 的文件
* ? [] [^] ~]# find / -name "*.txt" 搜索根目錄以 *.txt為結尾前面是任意字符的文件
-iname "file" 不區分字母的大小寫 ]# find -iname MAkangbo 不去分大小寫的搜索名為makango 或者MAkangbo 等文件
-inum inode 按照inode號查找 ]# find -inum 5555 節點號文件搜索
-samefile filename 相同inode號的文件
-links 鏈接數 鏈接數為多少的文件 ]# find -in -links 5 鏈接數為6的文件
-regex "表達式" 以表達式匹配整個文件路徑字符串,而不僅僅是文件名稱
-user 用戶名 根據文件的屬主查找
-group 組名 根據文件的屬組查找
-uid UID 根據UID查找文件
-gid GID 根據GID查找文件
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
根據文件類型查找:
-]# find -user makangbo -type f 例如查找用戶之下的普通文件
f 普通文件
d 目錄文件
l 符號鏈接文件
s 套接字文件
b 塊設備文件
c 字符設備文件
p 管道文件
組合條件查找:
-a 與
-o 或
-not ,! 非
-not A-a -not B = -not(A -o B) 不是A 也不是B
-not A-o -not B = -not(A -a B) 不是A或者不是B
!A -a !B=!(A -o B) 不是A 也不是 B
!A -O !B=!(A -a B) 不是A 或者不是B
注意:括號需要轉義\(\)
德摩根定律:
非P 或 非Q = 非(P 且 Q) 前面兩個第一個不是P 或者不是Q,那就是不是的意思,同等與不是(P與Q)
非P 且 非Q = 非(P 或 Q) 前面兩個第一個不是P 并且不是Q ,那就是,兩個都是非的意思,同等與 不是(P或者Q)
~]# find /var -name "*log*" 搜索/var目錄下以 log為關鍵字的搜索文件前后匹配任意字符
~]# find -user makangbo -group makangbo 搜索 用戶makangbo 以及組群makangbo 所擁有的文件
]# find -user makangbo -not -group makangbo 搜索用戶makangbo 組不是makangbo的文件
]# find -user makangbo -o -user root 搜索用戶makangbo 或者 用戶root 的文件 滿足一個條件即可
]# find -not \( -user makangbo -o -user root \) 搜索不是 和用戶makangbo 或者 用戶root 的文件
]# find / -user makangbo -o -uid 500 搜索根目錄下 用戶makangbo 或者 uid 500 的文件
]# find /tmp \( -not -user root -a -not -name "f*" \) 找出/tmp目錄下,用戶屬主不是root,且 文件名不是以f開頭的文件
]# find /tmp -not \( -user root -o -name "f*" \) 不是用戶root 或 不以f開頭的文件
根據文件大小查找:
~]# find -size +10k
常用單位:k,m,g
find -size 10k 表示9k到10k之間 (9k,10k)在原有的數字上面-1
find -size +10k 表示10k以上不包括10 無限大(10k,∞)
find -size -10k 表示0k到9k 包括9k(0,9k)
根據時間戳:
以天為單位
~]# find -atime 5
find -atime 5 表示最近5天到6天 (5,6)在原有的數字上面+1
find -atime +5 表示5天以上,至無限大 (5,∞)
find -atime -5 表示0天到5天 (0-5)
-mtime
-ctime
以分鐘為單位
-amin
-mmin
-cmin
根據權查找:
-perm [/|-] 模式 精確的權限匹配
~]# find -perm 644
任何一類用戶的權限只要能包含對其指定的任何一位權限即可,或關系,+從7版本跟換為/ 表示或者 - 表示并且
find -perm 755 會匹配權相模式正好是755的文件
find -perm +222 匹配只要當任意用戶都有寫權限時
find -perm -222 表示每一位中的權限小于等于2就匹配
find -perm -002 只有當其他人(other)有寫權限時,才會匹配
find -perm -666 包括666 650 550 111 等,但不包括766 等
find -perm +621 表示屬主有讀或者寫,或者屬組有寫,或者其他有執行權限的都可以
-002 中的0表示不匹配屬主和屬組的權限,而不是說屬主和屬組沒有任何的權限 0表示不關注
處理動作:
例如 find -perm 222 -print
跟搜索條件的后綴
-print 默認的處理動作,顯示,打印到屏幕 ~]# find f1 -print -ls 默認輸出打印顯示,不加也一樣
-ls 類似于對查找到的文件執行 ls -l 命令 ~]# find f1 -ls
-delete 刪除查找到的文件 ~]# find f1 -delete 對查找到的文件直接刪除,不提示,擅用此命令
-fls /路徑文件/查找到的所有文件的長格式信息保存至指定文件中 ~]# find f1 -fls /root/f1.log 這時會生成一個f1.log的文件 ,就是查到的命令導入一個指定文件內 ;同等與重定向文件
-ok 命令 {}\; 對查找的每個文件執行由指定命令的命令
對于每個文件執行命令之前都會交互式的要求用戶確認
其中{}表示前面查找到的所有內容引用 ~]# find f1 -ok rm {} \; 是否刪除引用前面的搜索內容
-exec 命令 {}\; 對查找到的每個文件執行由命令指定的命令 ,不提示用戶執行 ~]# find f1 -exec rm {} \; 直接執行 ,不提示
find 傳遞查找到的文件至后面指定的命令時,查找到所有的符合條件的文件一次性傳遞給后面的命令
有些名看客不能接受過多參數,此時命令執行可能會失敗,
可以用這條命令規避此問題 : find | xargs 命令
~]# find -name "*.sh" -exec cp {} {}.bak \;
將搜索.sh為結尾的文件進行備份,添加.bak 擴展名
~]# find /tmp -ctime +3 -user makangbo -ok rm {} \;
提示刪除存在時間超過3天以上的用戶makangbo的臨時文件
~]# find -perm -002 -exec chmod o-w {} \;
在家目錄中尋找可以被其他用戶寫入的文件
~]# find /home/ -type d -ls
搜索home下的 目錄文件
練習
1、查找/var目錄下屬主為root,且屬組為mail的所有文件
~]# find /var -user root -a -group mail
2、查找/var目錄下不屬于root、lp、gdm的所有文件
~]# find /var -not -user root -a -not -user lp -a -not -user gdm
~]# find /var -not \( -user root -o -user lp -o -user gdm \)
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是xiaomag的文件
~]# find /var -mtime -7 -a -not -user root -a -user xiaomag
~]# find /var -mtime -7 -not \( -user root -o -user xiaomag\)
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
~]# find / -atime -30 \( -nouser -o -nogroup \)
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
~]# find /etc -size +1M -type f
查找路徑, 根據大小查找大于1M,查找普通文件
6、查找/etc目錄下所有用戶都沒有寫權限的文件
~]# find /etc -not -perm +222 -ls
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
~]# find /etc -not -perm -222 -ls
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
~]# find /etc/init.d/ -perm -113
解壓縮 和歸檔工具
早期有compress 和 uncompress ,對應的是.Z結尾的壓縮格式文件,
gzip 和 gunzip 對應的是.gz 結尾的壓縮格式文件
bizp2 和 bunzai2 對應的是.bz結尾的壓縮格式文件
xz 和 nuxz 對應的是.xz結尾的壓縮格式文件
zip 和 unzip 對應的.zip結尾的壓縮格式文件
tar 歸檔
cpio 打包
compress 和 uncompress
語法 compress 選項 文件
compress file 壓縮文件 不保留原始的文件
compress -d file 解壓縮,同等于uncompress
compress -c file 將壓縮或解壓縮的結果輸出值標準輸出,保留原始文件 ~]# compress -c file > file.Z
compress -v file 顯示詳情
zcat file.Z >file 解壓縮 后綴是Z
gzip 和 gunzip
語法 gzip 選項 文件
gzip -# file #為數字 指明壓縮比;1-9,默認為6,數字越大,壓縮比越大 例如最大壓縮比:gzip -9 file
gzip -d file.gz 解壓縮文件 ,同等與解壓縮的命令gunzip
gzip -c file 將壓縮或解壓縮的結果輸出值標準輸出,保留原始文件
例如 gzip -c file > file.gz 重定向到文件,保留了原來的文件
gizp -r file 遞歸至目錄中對每個文件進行壓縮
zcat file.gz >file 無須顯示解壓縮查看壓縮文件的內容 > 可以重定向文件
例如 gzip -c -d file.gz > /目標路徑/file 壓縮文件后綴是gz
bzip2 和 bunzip2 /bzcat
語法 bzip2 選項 文件
bizp2 -# file #為數字 指明壓縮比;1-9,默認為6,數字越大,壓縮比越大 例如最大壓縮比:bzip2 -9 file
bzip2 -k file 壓縮后保留原文件
bzip2 -d file 解壓縮,同等于 bunzip2 壓縮文件后綴是bz2
bzcat /目標路徑/file.bz2 無須顯示解壓縮查看壓縮文件的內容 > 可以重定向文件
xz /unxz /xzcat
語法 xz 選項 文件
xz -# file #為數字 指明壓縮比;1-9,默認為6,數字越大,壓縮比越大 例如最大壓縮比:bzip2 -9 file
xz -k file 壓縮后保留原文件
xz -d file 解壓縮,同等于 bunzip2 壓縮文件后綴是xz
xzcat /目標路徑/file.xz 無須顯示解壓縮查看壓縮文件的內容 > 可以重定向文件
zip / unzip
打包壓縮
zip -r file路徑 源路徑
命令選項 生成路徑 源文件路徑 可以多個文件壓縮歸檔成單個文件 壓縮文件后綴是zip
解包解壓縮
unzip file
性能排行:xz ;bzip ; gzip 從高到底,但是經常用的是gzip
歸檔工具
歸檔就是將多個文件打包為單個文件以便于管理,默認的歸檔不會執行壓縮
常用的工具有 tar ; cpio
語法 tar 選項 file
創建歸檔tar
tar -c -f /PATH/TO/SOMEFILE.tar FILE
tar cf /PATH/TO/SOMEFILE.tar FILE
~]# tar -c -f /root/f2.tar f2 歸檔文件f2到f2.tar中
注意:歸檔不會刪除原文件
查看歸檔文件中的文件列表
~]# tar -t -f /root/f2.tar 查看f2.tar中的文件列表
展開歸檔
~]# tar -x -f /root/f2.tar
~]# tar -x -f /root/f2.tar -C /PATH/
結合壓縮工具實現:歸檔并壓縮
-z gzip
后綴名:.tar.gz
歸檔并壓縮:tar-zcf ~]# tar -zcf /root/f3.tar.gz f3
展開歸檔:tar -zxf ~]# tar -zxf f3.tar.gz
-j bzip2
后綴名:.tar.bz2
歸檔并壓縮:tar -jcf ~]# tar -jcf /root/f3.tar.bz2 f3
展開歸檔:tar -jxf ~]# tar -jxf f3.tar.bz2
-J xz
后綴名:.tar.xz
歸檔并壓縮:tar -Jcf ~]# tar -Jcf /root/f3.tar.xz f3
展開歸檔:tar -Jxf ~]# tar -Jxf f3.tar.xz
注意:展開歸檔可以直接使用tar -xf 而無視指定對應的壓縮工具選項
cpio 歸檔文件及從包中提取文件
cpio 命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,他可以解壓以.cpio 或者 .tar 結尾的文件
cpio 選項 > 文件名或者設備名
cpio 選項 < 文件名或者設備名
cpio -o 將文件拷貝打包成文件或者將文件輸出到設備上
cpio -i 解包,將打包文件解壓或將設備上的備份還原到系統
cpio -t 預覽,查看文件內容或者輸出到設備上的文件內容
cpio -v 顯示打包過程中的文件名稱
cpio -d 解包生成目錄,在cpio還原時,自動建立的目錄
cpio -c 一種比較新的存儲方式
舉例
將etc 目錄備份
~]# find /etc -print | cpio -ov >etc.cpio
搜索etc目錄下的文件打印輸出到設備 將文件拷貝打包過程中將文件輸出到設備 顯示文件名稱 重定向名稱
內容預覽
~]# cpio -tv <etc.cpio
預覽輸出設備 顯示過程中的文件名稱
解包文件
~]# cpio -iv <etc.cpio
~]# cpio -idv <etc.cpio
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。