一钉答、文件非實時查找 locate
- locate查詢系統(tǒng)預建文件索引數(shù)據(jù)庫
/var/lib/mlocate/mlocate.db
,所以查詢速度很快 - 由于數(shù)據(jù)庫不能實時更新文件變動娱据,所以locate可能查詢不到新建立、修改的文件
- 文件索引構(gòu)建更新為周期任務,文件遍歷過程非常消耗系統(tǒng)資源宝磨,一般在系統(tǒng)空閑時進行疮绷,手動更新使用命令
updatedb
- 屬于模糊查找翰舌,查找結(jié)果是文件的全路徑,可能只能搜索到用戶具有讀取和可執(zhí)行權限的目錄
- 語法:
locate [option] keyword
- 選項:
-i //不區(qū)分大小寫搜索
-n # //只顯示前#行匹配結(jié)果
-r regex //搜索符合正則表達式描述的文件
二冬骚、文件實時查找 find
通過遍歷指定目錄實時查找文件椅贱,屬于精確查找懂算,所以速度較慢,同樣可能只能搜索到用戶具有讀取和可執(zhí)行權限的目錄
(一)語法:
find [option] [查找路徑] [查找條件] [處理動作]
- 查找路徑:指定具體目標路徑庇麦;默認為當前目錄
- 查找條件:指定查找標準计技,可以文件名、大小山橄、類型垮媒、權限等標準進行;默認為找出指定路徑下的所有文件
- 處理動作:對符合條件的文件做操作航棱,默認輸出至屏幕
(二)查找條件詳述
- 指定搜索層級
-maxdepthlevel //最大搜索目錄深度睡雇,指定目錄為第1級
-mindepthlevel //最小搜索目錄深度
- 根據(jù)文件名和inode查找
-name //文件名稱:支持使用glob
-iname //文件名稱:不區(qū)分字母大小寫
-inum n //按inode號查找
-samefile name //相同inode號的文件
-links n //鏈接數(shù)為n的文件
-regex "PATTERN" //以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
- 根據(jù)屬主饮醇、屬組查找
-user USERNAME //查找屬主為指定用戶(UID)的文件
-group GRPNAME //查找屬組為指定組(GID)的文件
-uid UserID //查找屬主為指定的UID號的文件
-gid GroupID //查找屬組為指定的GID號的文件
-nouser //查找沒有屬主的文件
-nogroup //查找沒有屬組的文件
- 根據(jù)文件類型查找
-type f //普通文件
-type d //目錄文件
-type l //符號鏈接文件
-type b //塊設備文件
-type c //字符設備文件
-
組合條件
- 并且 -a
- 或者 -o
- 非 它抱!, -not
- 德摩根定律
!A -o !B = ! (A -a B)
驳阎!A -a !B = ! (A -o B) - 三種條件的判斷先后:“非”優(yōu)先級最高抗愁,“并且”次之,“或者”最低呵晚,當不按照此順序判斷時需要增加括號
\(\)
蜘腌,注意轉(zhuǎn)義字符
-purne 排除目錄
實驗:
-
根據(jù)文件大小來查找
語法:-size [+|-]#UNIT, UNIT: k, M, G
#UNIT: (#-1, #] UNIT,如-size 6M
表達的范圍為(5, 6]M
-#UNIT: [0, #-1] UNIT饵隙,如-size -6M
表達的范圍為[0, 5]M
+#UNIT: (#, ∞) UNIT撮珠,如-size +6M
表達的范圍為(6, ∞)M- 實驗:查找/etc目錄下大小大于1M的普通文件
-
根據(jù)時間戳查找
語法:- 以天為單位
-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]# - 以分鐘為單位
-amin [+|-]#
-mmin [+|-]#
-cmin [+|-]# - 范圍的意義
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
- 以天為單位
-
根據(jù)權限查找
- 語法:
--perm [/|-] MODE
MODE 精確匹配權限
/ MODE 只要u,g,o至少一方的權限與MODE聲明匹配,即權限或關系
-MODE 必須u,g,o都具有MODE聲明權限金矛,即權限與的關系 - 注意:當使用
/
或者-
時芯急,當MODE聲明中存在0,即表明對此位置的權限設置不關注 - 實驗:
1驶俊、/app目錄下有10個文件file1至file10娶耍,每個文件的權限如下:
2、執(zhí)行命令find /app -perm 766
饼酿,代表按照命令的權限要求精確搜索榕酒,結(jié)果如下:
3、執(zhí)行命令find /app -perm /111
故俐,代表只要文件的屬主想鹰、屬組、其他人中至少一方有可執(zhí)行權限即匹配搜索條件药版,結(jié)果如下:
4辑舷、執(zhí)行命令find /app -perm -424
,代表只有文件屬主有讀權限槽片、屬組有寫權限何缓、其他人有讀權限三個條件同時匹配才能被搜索到肢础,結(jié)果如下:
5、執(zhí)行命令find /app -perm -402
歌殃,代表只有文件屬主有讀權限乔妈、其他人有寫權限兩個條件同時匹配才能被搜索到,而屬組的權限設置搜索過程不關心氓皱,結(jié)果如下:
- 語法:
(三)處理動作
-
-print
默認動作路召,搜索結(jié)果輸出至屏幕 -
-ls
對搜索結(jié)果執(zhí)行ls -l
命令后的結(jié)果 -
-delete
刪除查找到的文件 -
-fls file
將搜索結(jié)果的長格式信息保存至文件file -
-ok COMMAND {} \;
對搜索結(jié)果執(zhí)行COMMAND命令,每個搜索文件執(zhí)行COMMAND命令前有交互式確認波材,大括號指代搜索結(jié)果股淡,命令結(jié)尾必須用\;
結(jié)束 -
-exec COMMAND {} \;
對搜索結(jié)果執(zhí)行COMMAND命令,命令直接執(zhí)行沒有提示廷区,語法類似-ok -
實驗:將/app目錄下其他人擁有寫權限的文件名稱增加后綴.bak
(四)參數(shù)替換 xargs
- xargs用于產(chǎn)生某個命令的參數(shù)唯灵,xargs可以讀入stdin的數(shù)據(jù),并且以空格符或回車符將stdin的數(shù)據(jù)分隔成為arguments
- 有些命令不能接受過多參數(shù)隙轻,使用xargs可以突破命令的參數(shù)數(shù)量限制
- find與xargs命令結(jié)合使用:find | xargs command
- 實驗:將/sbin目錄下屬主擁有讀埠帕、寫、可執(zhí)行權限的文件列表用
ls -l
命令顯示出來
三玖绿、壓縮敛瓷、解壓縮和歸檔工具
(一)compress/uncompress
- compress 壓縮,生成.Z后綴壓縮文件斑匪,程序?qū)缶Y名敏感
-d 解壓縮呐籽,相當于uncompress
-c 結(jié)果輸出至標準輸出,可使用重定向在壓縮/解壓縮時保留源文件
-v 顯示過程 - uncompress 解壓縮蚀瘸,程序?qū)缶Y名敏感
- zcat 解壓縮結(jié)果輸出至標準輸出狡蝶,可視作uncompress -c
-
實驗:
(二)gzip/gunzip
- gzip 壓縮,生成.gz后綴壓縮文件贮勃,程序?qū)缶Y名敏感
-d 解壓縮贪惹,相當于gunzip
-c 結(jié)果輸出至標準輸出,可使用重定向在壓縮/解壓縮時保留源文件
-# 指定壓縮比1-9寂嘉,值越大壓縮比越高奏瞬,默認為6 - gunzip 解壓縮,程序?qū)缶Y名敏感
- zcat 解壓縮結(jié)果輸出至標準輸出垫释,可視作gunzip -c
-
實驗:
(三)bzip2/bunzip2
- bzip2 壓縮丝格,生成.bz2后綴壓縮文件撑瞧,程序?qū)缶Y名敏感
-d 解壓縮棵譬,相當于bunzip2
-k 保留源文件
-# 指定壓縮比1-9,值越大壓縮比越高预伺,默認為9 - bunzip2 解壓縮订咸,程序?qū)缶Y名敏感
- zcat 解壓縮結(jié)果輸出至標準輸出曼尊,可視作gunzip -c
-
實驗:
(四)xz/unxz/xzcat
- xz 壓縮,生成.xz后綴壓縮文件脏嚷,程序?qū)缶Y名敏感
-d 解壓縮骆撇,相當于unxz
-k 保留源文件
-# 指定壓縮比1-9,值越大壓縮比越高父叙,默認為6 - unxz 解壓縮神郊,程序?qū)缶Y名敏感
- xzcat 解壓縮結(jié)果輸出至標準輸出,可視作unxz -c
- 實驗:
從結(jié)果可以看出趾唱,當改變壓縮文件的后綴.xz
后無法解壓涌乳。unxz
解壓對文件后綴名敏感。上文的uncompress
,gunzip
,bunzip2
都是后綴名敏感的甜癞。
(五)zip/unzip
- 可以打包壓縮解壓縮夕晓,而之前的compress,gzip,bzip2,xz只能壓縮單個文件
- 語法:
zip 壓縮后文件 壓縮前文件
-r 遞歸壓縮文件夾,用于打包壓縮
-p 解壓縮結(jié)果輸出至標準輸出悠咱,可重定向至文件 -
實驗:
(六)tar 磁帶歸檔
- 語法:
tar [option...] [file]...
- 用法:
tar cf file.tar file... //創(chuàng)建歸檔
tar rf file.tar file... //追加文件至歸檔蒸辆,不支持對壓縮文件追加歸檔
tar tf file.tar //查看歸檔文件中的文件列表
tar xf file.tar //展開歸檔,解包文件輸出至當前目錄
tar xf file.tar -C path //展開歸檔析既,解包文件輸出至指定目錄path
tar zcf file.tar.gz file... //創(chuàng)建歸檔并使用gzip壓縮躬贡,bzip2使用選項j,xz使用選項J
tar zxf file.tar.gz
//解壓縮tar.gz壓縮包渡贾,bzip2使用選項j逗宜,xz使用選項J,系統(tǒng)會自動識別壓縮文件類型空骚,z纺讲、j、J可以省略
tar zcf file.tar.gz -T includefilelist -X excludefilelist
//T選項指定壓縮文件列表includefilelist囤屹,X選項指定排除壓縮文件列表excludefilelist
- split 分割壓縮文件
split -b size -d tar-file-name prefix-name
- -b選項指定分割單位熬甚,-d選項指定被分割的壓縮文件和分割后的文件群前綴
- 使用cat配合重定向合并被分割壓縮文件
cat file-part* > file.tar.gz
- 實驗:
1、將/etc
目錄下所有以f開頭的文件和目錄壓縮為file.tar.gz
文件
2肋坚、查看file.tar.gz
文件內(nèi)的文件列表的前5行
3乡括、將file.tar.gz
文件解壓縮,解壓縮文件輸出至/boot
目錄
4智厌、分割file.tar.gz
文件诲泌,以3k為分割單位,分割文件前綴為file-part
5铣鹏、將分割的文件合并為文件file1.tar.gz
(七)cpio 從文件復制或復制文件到
- cpio 通過重定向方式將文件進行打包敷扫,或者恢復打包文件,可以解壓后綴名為.cpio或.tar的文件
- 語法:
cpio [option] < filename
cpio [option] > filename
- 選項:
-o 打包
-i 解包
-t 預覽
-v 顯示過程
-d 解包生成目錄
- 實驗:
1诚卸、將/app/etc目錄下的所有文件打包到/app下的etc.cpio文件
cd /app
find ./etc | cpio -ov > etc.cpio
2葵第、查看etc.cpio文件內(nèi)容
cpio -tv < etc.cpio
3绘迁、解包etc.cpio 文件到/mnt目錄下
cd /mnt
cpio -idv < /app/etc.cpio