文件查找
在文件系統上查找符合條件的文件;
文件查找:locate, find
非實時查找( 數據庫查找) :locate
實時查找:find
locate
查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db
依賴于事先構建的索引;
索引的構建是在系統較為空閑時自動進行( 周期性任務) ;管理員手動更新數據庫(updatedb); ;
索引構建過程需要遍歷整個根文件系統,極消耗資源;
工作特點:查找速度快;模糊查找;非實時查找
搜索的是文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執行權限的目錄
locate KEYWORD
有用的選項
? -i 執行區分大小寫的搜索
? -n X 只列舉前X 個匹配項目
例如:locate foo 搜索名稱或路徑中帶有“foo ”的文件
locate -r ‘\.sh$’ 使用Regex 來搜索以“.sh結尾的文件
find工具
實時查找工具,通過遍歷指定路徑完成文件查找;
工作特點:
查找速度略慢
精確查找
實時查找
可能只搜索用戶具備讀取和執行權限的目錄
語法:
find [OPTION]… [ 查找路徑] [ 查找條件] [ 處理動作]
查找路徑:指定具體目標路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認輸出至屏幕
find查找條件:
根據文件名和inode 查找:
-name " 文件名稱" :支持使用glob *, ?, [], [^]
-iname "文件名稱":不區分字母大小寫
-inum n 按inode 號查找
-samefile name 相同inode 號的文件
-links n 鏈接數為n 的文件
-regex "PATTERN":以PATTERN 匹配整個文件路徑字符串,而不僅僅是文件名稱
根據屬主、屬組查找:
-user USERNAME :查找屬主為指定用戶(UID) 的文件
-group GRPNAME: 查找屬組為指定組(GID) 的文件
-uid UserID :查找屬主為指定的UID 號的文件
-gid GroupID :查找屬組為指定的GID 號的文件
-nouser :查找沒有屬主的文件
-nogroup查找沒有屬組的文件
根據文件類型查找:
-type TYPE:
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
s:套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
查找當前路徑下連接數為2 的普通文件
組合條件:
與:-a
或:-o
非:-not, !
德·摩根定律:
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 或 Q) = (非 P) 且 (非 Q)
!A -a !B = !(A -o B) 非A 與 非B=非(A 或 B)
!A -o !B = !(A -a B) 非A 或 非B=非(A 與 B)
find實例:找出/tmp 目錄下,屬主不是root ,且文件名不是fstab 的文件
find /tmp \( -not -user root -a -not -name 'fstab' \) -ls find /tmp -not \( -user root -o -name 'fstab' \) -ls
搜索結果并沒有這種文件
排除目錄:
find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print
根據文件大小來查找:
-size [+|-]#UNIT
常用單位:k, M, G
#UNIT: (#-1, #] ,如:20k:大于19k,小于等于20k
-#UNIT :[0,#-1], 如:-20k:大于等于0k,小于等于19k
+#UNIT :(#, ∞ ), 如:+20k:大于20k
例:find -size 1024k 實際上是(1023k,1024k)
find -size 1M 實際上是查找的0<x< =1M的文件
根據時間戳:
以“天”為單位;
-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指定的命令,直接執行,不詢問yes or no
{}: 用于引用查找到的文件名稱自身
find 傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題 find | xargs COMMAND
find實例:
1 find -name “*.conf” -exec cp {} {}.org \;
? 備份配置文件,添加.orig 這個擴展名
2 find /tmp -ctime +3 -user joe -ok rm {} \;
? 提示刪除存在時間超過3天以上的joe 的臨時文件
3 find ~ -perm -002 -exec chmod o-w {} \;
? 在你的主目錄中尋找可被其它用戶寫入的文件
4 find /data –type f -perm 644 -name *.sh –exec chmod 755 {} \;
·在date目錄下搜索權限是644,后綴為.sh的普通文件,并把權限改成755
5 find /home –type d -ls
· 搜索家目錄下的文件 只列出文件夾名,并顯示其屬性
find練習
1、查找/var 目錄下屬主為root ,且屬組為mail 的所有文件
2 、查找/var 目錄下不屬于root 、lp 、gdm 的所有文件
3 、查找/var 目錄下最近一周內其內容修改過,同時屬主不為root ,也不是postfix 的文件
[root@localhost ~]# find /var -mtime -7 -not -user root -a -not -user postfix -ls
[root@localhost ~]# find /var -mtime -7 -not \( -user root -o -user postfix \) -ls
4 、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
[root@localhost ~]# find / \( -atime -7 -nouser -o -nogroup \) -ls
5 、查找/etc 目錄下大于1M 且類型為普通文件的所有文件
6 、查找/etc 目錄下所有用戶都沒有寫權限的文件
7 、查找/etc 目錄下至少有一類用戶沒有執行權限的文件
[root@localhost ~]# find /etc/ -not -perm /111 -ls
部分搜索結果圖:
8 、查找/etc/init.d 目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
[root@localhost ~]# find /etc/init.d/ -perm -111 -a -perm /002
[root@localhost ~]# find /etc/init.d/ -perm -113
Gnome搜索工具
位置-> 搜索文件……
圖形化搜索工具,可搜索:
? 命令
? 內容
? 用戶/ 組群
? 大小
? 修改時間
壓縮、解壓縮、歸檔工具
file-roller圖形化工具 圖形界面,輸入命令file-roller
compress/uncompress工具
compress [-dfvcVr] [-b maxbits] [file …]
-d: 解壓縮
-c: 結果輸出至標準輸出, 不刪除原文件
-v: 顯示詳情
需要重定向
uncompress 解壓縮 zcat file.Z >file 重定向
gzip/gunzip工具
gzip [OPTION]… FILE …
-d: 解壓縮,相當于gunzip
-c: 將壓縮或解壓縮的結果輸出至標準輸出
-# :1-9 ,指定壓縮比,值越大壓縮比越大
zcat :不顯式解壓縮的前提下查看文本文件內容
實例:
gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
效果跟 gzip -c -d messages.gz > messages一樣
bzip2/bunzip2/bzcat工具
? bzip2 [OPTION]… FILE …
-k: keep, 保留原文件
-d :解壓縮
-# :1-9 ,壓縮比,默認為6
bzcat:不顯示解壓縮的前提下查看文本文件內容,顯示解壓縮的過程
xz/unxz/xzcat工具
? xz [OPTION]… FILE …
-k: keep, 保留原文件;
-d :解壓縮
-# :1-9 ,壓縮比,默認為6;
xzcat: 不顯式解壓縮的前提下查看文本文件內容;
zip/unzip工具
? 打包壓縮
zip –r sysconfig sysconfig/ 壓縮目錄,要加上-r
解包解壓縮
unzip sysconfig.zip
cat /var/log/messages | zip message –
unzip -p message > message
tar工具
tar [OPTION]… 打包工具
(1) 創建歸檔
tar -c -f / PATH/TO/SOMEFILE .tar FILE…
tar cf / PATH/TO/SOMEFILE .tar FILE…
[root@localhost ~]# tar zcfv /testdir/etc.tar.gz /etc/
打包并壓縮/etc/目錄到/testdir目錄下,顯示過程
(2) 查看歸檔文件中的文件列表
tar -t -f /PATH/TO/SOMEFILE .tar
(3) 展開歸檔
tar -x -f /PATH/TO/SOMEFILE .tar
tar -x -f /PATH/TO/SOMEFILE .tar -C /PATH/
結合壓縮工具實現:歸檔并壓縮
-j: bzip2, -z: gzip, -J: xz
[root@localhost ~]# tar Jcfv /testdir/etc.tar.xz /etc/
壓縮比更高,圖為三種壓縮的對比圖
[root@localhost ~]# tar tvf /testdir/etc.tar.gz
解壓縮前預覽文件,默認解壓到當前目錄下 ;-C 解壓到指定目錄下
cpio工具
cpio:cp復制 i:input o:output
復制 : 從某處復制,或者復制到某個文件
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 –iv <etc.cpio cpio –idv < etc.cpio
原創文章,作者:舊城以西,如若轉載,請注明出處:http://www.www58058.com/35990
總結的很詳細,find命令是我們以后筆試中常出現的考點,需要我們多加練習,能進行熟練運用。