文件的查找
使用locate命令
默認從根開始搜索
非實時查找(數據庫查找)
locate 文件名
查詢系統上預建的的文件索引數據庫
/var/lib/mlocate/mlocate.db 依賴于事先構建的索引 索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動更新數據庫(updatedb)。注意工作中不能輕易使用updatedb
locate 選項
-i 執行區分大小寫的搜索 -n N 只列舉前N個匹配的項目 locate foo 搜索名稱或路徑中帶有“ foo”的文件 locate -r ‘\.foo$‘:支持正則表達式 使用Regex來搜索以“ .foo”結尾的文件
find
? 實時查找工具,通過遍歷指定路徑完成文件查找; ? 工作特點: ? 查找速度略慢 ? 精確查找 ? 實時查找 ? 可能只搜索用戶具備讀取和執行權限的目錄
語法
? find [OPTION]... [查找路徑] [查找條件] [處理動作] 查找路徑:指定具體目標路徑;默認為當前目錄 查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件 處理動作:對符合條件的文件做操作,默認輸出至屏幕
查找條件
根據文件名和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: 管道文件
組合條件:
? 組合條件: 與: -a 或: -o 非: -not, ! ? 德·摩根定律: (非 P) 或 (非 Q) = 非(P 且 Q) (非 P) 且 (非 Q) = 非(P 或 Q) ? 示例: !A -a !B = !(A -o B) !A -o !B = !(A -a B)
find示例
? find -name snow.png ? 搜索名為snow.png的文件 ? find -iname snow.png ? 不分大小寫地搜索名為snow.png、 Snow.png、 SNOW.PNG等等的文件 ? find / -name “*.txt” ? find /var –name “*log*” ? find -user joe -group joe ? 搜索被用戶joe 以及組群joe所擁有的文件 ? find -user joe -not -group joe ? find -user joe -o -user jane ? find -not \( -user joe -o -user jane \) ? find / -user joe -o -uid 500 ? 找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件 find /tmp \( -not -user root -a -not -name 'f*' \) -ls find /tmp -not \( -user root -o -name 'f*' \) –ls ? 排除目錄 ? 示例:查找/etc/下,除/etc/sane.d目錄的其它所有.conf后綴 的文件 find /etc -path ‘/etc/sane.d’ -a -prune -o -name “*.conf” -print
根據文件大小來查找:
-size [+|-]#UNIT 常用單位: k, M, G #UNIT: (#-1, #] 如: 6k 表示(5k,6k] -#UNIT: [0,#-1] 如: -6k 表示[0,5k] +#UNIT: (#,∞) 如: +6k 表示(6k,∞)
根據時間戳:
以“天”為單位; -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指定的命令 ? {}: 用于引用查找到的文件名稱自身 ? find傳遞查找到的文件至后面指定的命令時,查找到所有符合 條件的文件一次性傳遞給后面的命令 ? 有些命令不能接受過多參數,此時命令執行可能會失敗,下 面方式可規避此問題 find | xargs COMMAND
find示例
? find -name “*.conf” -exec cp {} {}.org \; ? 備份配置文件,添加.org這個擴展名 ? find /tmp -ctime +3 -user joe -ok rm {} \; ? 提示刪除存在時間超過3天以上的joe的臨時文件 ? find ~ -perm -002 -exec chmod o-w {} \; ? 在你的主目錄中尋找可被其它用戶寫入的文件 ? find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \; ? find /home –type d -ls
練習:
? 1、查找/var目錄下屬主為root,且屬組為mail的所有文件
find /var -user root -group mail
? 2、查找/var目錄下不屬于root、 lp、 gdm的所有文件
find /var -not -user root -not -user lp -not -user gdm
? 3、查找/var目錄下最近一周內其內容修改過,同時屬主不為 root,也不是postfix的文件 ? 4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪 問過的文件 ? 5、查找/etc目錄下大于1M且類型為普通文件的所有文件 ? 6、查找/etc目錄下所有用戶都沒有寫權限的文件 ? 7、查找/etc目錄下至少有一類用戶沒有執行權限的文件 ? 8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它 用戶有寫權限的文件
Gnome 搜索工具
? 位置->搜索文件…… ? 圖形化搜索工具,可搜索 ? 命令 ? 內容 ? 用戶/組群 ? 大小 ? 修改時間
壓縮、解壓縮及歸檔工具
? file-roller ? compress/uncompress: .Z ? compress [-dfvcVr] [-b maxbits] [file ...] -d: 解壓縮,相當于 -c: 結果輸出至標準輸出,不刪除原文件 -v: 顯示詳情 ? uncompress 解壓縮 ? zcat file.Z >file ? gzip/gunzip: .gz ? gzip [OPTION]... FILE ... -d: 解壓縮,相當于gunzip -c: 將壓縮或解壓縮的結果輸出至標準輸出 -#: 1-9,指定壓縮比,值越大壓縮比越大 ? zcat:不顯式解壓縮的前提下查看文本文件內容 ? 實例: gzip -c messages >messages.gz gzip -c -d messages.gz > messages zcat messages.gz > messages ? bzip2/bunzip2: .bz2 ? bzip2 [OPTION]... FILE ... -k: keep, 保留原文件 -d:解壓縮 -#: 1-9,壓縮比,默認為6 ? bzcat:不顯式解壓縮的前提下查看文本文件內容 ? xz/unxz: .xz ? xz [OPTION]... FILE ... -k: keep, 保留原文件 -d:解壓縮 -#: 1-9,壓縮比,默認為6 ? xzcat: 不顯式解壓縮的前提下查看文本文件內容 ? zip/unzip p/unzip ? 打包壓縮 zip –r sysconfig sysconfig/ ? 解包解壓縮 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... (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 ? 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 –iv <etc.cpio cpio –idv < etc.cpio
作業:
? 1、查找/var目錄下屬主為root,且屬組為mail的所有文件
[root@ Mr zhou ~]# find /var -user root -a -group mail
? 2、查找/var目錄下不屬于root、 lp、 gdm的所有文件
[root@ Mr zhou ~]# find /var -not \( -user root -o -user lp -o -user gdm \) -ls
? 3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
[root@ Mr zhou ~]# find /var -mtime -7 -not \( -user root -o -name postfix \) -ls
? 4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
[root@ Mr zhou ~]# find -atime -7 -a \( - nouser -o - nogroup \)
? 5、查找/etc目錄下大于1M且類型為普通文件的所有文件
[root@ Mr zhou ~]# find /etc -size +1M -a -type f -l
? 6、查找/etc目錄下所有用戶都沒有寫權限的文件
[root@ Mr zhou ~]# find /etc -not -perm -222
? 7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
[root@ Mr zhou ~]# find /etc/ -perm /111 -ls |head -4
? 8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
[root@ Mr zhou ~]# find /etc/init.d -perm -113 -ls
原創文章,作者:15152188070,如若轉載,請注明出處:http://www.www58058.com/36718
文章整體層次分明,思路清晰,對命令的常見用法總結的和詳細,find命令在工作中是用的比較多的,也是以后筆試必考的知識點,所以下來后多加練習,達到熟練掌握。