檔案查找
小編在學這堂課的前一天夜里打嗝打了半宿,第二天上課的時候迷迷糊糊,所以,導致檔案查找這章我放了好久的鴿子,
這里是回看視頻摘出來的筆記,如有理解有偏差,請留言,
本篇只有3個命令,重點是find,時間有限的朋友可以只看find命令,這太過重要了,
whereis命令
在一些特定的目錄搜索,搜索二進制檔案、幫助檔案、源檔案等
選項:
不加任何選項就會列出所有檔案,
-b 只搜索二進制檔案
-m 只搜索幫助檔案
-s 只搜索源檔案
-l 列出whereis搜索的路徑,也就是whereis會在這些路徑下搜索內容
-u 不是上述三類檔案的其它型別檔案,
locate命令
用來快速搜索檔案的工具,是根據索引資料庫搜索的,資料路位置/var/lib/mlocate/mlocate.db
1、新系統可能沒有這個資料庫,updatedb命令可以手工更新資料庫
2、updatedb這個命令會消耗大量的IO 需要在系統不繁忙的時候更新
3、updatedb命令會根據/etc/updatedb.conf的設定取搜索硬碟內的檔案名,并保存在/var/lib/mlocate目錄下的資料庫內,
locate命令 主要用來搜索靜態檔案
-i 不區分大小寫搜索
-r 使用基本正則運算式
-b 只搜索檔案名,而不搜索全路徑,默認是搜索全路徑
-c 計數
-n # 只顯示前幾個搜索結果
-S 顯示locate資料庫資訊
備注:
locate不能指定檔案搜索路徑,要想指定搜索路徑需要手工使用正則運算式指定,祥看示例
locate不是實時搜索,而且是模糊搜索
locate默認會搜索檔案的全路徑,不僅僅是檔案名,意思是如果目錄包含某個關鍵詞,目錄下的所有檔案都會被搜索到
locate只會搜索當前用戶能訪問到的目錄,意思是如果某個用戶對某個目錄沒有訪問權限,該目錄就不會被搜索
示例說明:指定搜索路徑{
[root@CentOS7 scripts]#locate -r "^/data/scripts/.*\.sh"
/data/scripts/FOOT.sh
/data/scripts/adddescrption.sh
/data/scripts/arg.sh
/data/scripts/arg2.sh
/data/scripts/argsnum.sh
/data/scripts/backup_etc.sh
/data/scripts/bim.sh
/data/scripts/checkdisk.sh
/data/scripts/checkint.sh
/data/scripts/createuser.sh
/data/scripts/df_warning.sh}
find命令
實時查找,精確查找,查找條件豐富,只搜索具有權限的目錄
find [OPTIONS] [查找路徑] [查找條件] [處理動作]
默認是遞回搜索,默認是搜索當前目錄
選項:
-maxdepth # 最大搜索深度,指定搜索目錄下搜索到第幾級
-mindepth # 最小搜索深度,
-depth或-d 一般是先搜索檔案夾,再去搜索檔案夾內的檔案,如果加上該選項-d,就會先搜索檔案,在搜索目錄
查找條件:
根據檔案名搜索
-name 檔案名 根據檔案名搜索,精確匹配而不是模糊搜索,支持通配符
如果想要模糊搜索,可以使用 "*檔案名*" 建議在使用通配符的時候要加上雙引號,要不會產生各種莫名奇妙的問題
-iname 檔案名 不區分大小寫搜索
-inum INODE 根據INODE節點號搜索,可以用來搜索硬鏈接
-samefile 文 件名 搜索相同節點編號的檔案,需要注意的是,需要搜索同一磁區內的相同節點編號
-links # 根據鏈接數為#這個條件進行搜索
-regex "PATTERN" 以PATTERN匹配整個檔案路徑,而非檔案名稱
根據屬性資訊搜索
-user 用戶名 根據所有者搜索
-group 組名 根據所屬組搜索
-nouser 用戶名 搜索沒有所有者的檔案
-nogroup 組名 搜索沒有所屬組的檔案
-uid UID 根據UID查找
-gid GID 根據GID查找
根據檔案型別搜索
-type TYPE 根據檔案型別搜索
TYPE:
d 查找檔案型別為目錄的所有檔案
f 查找檔案型別為普通檔案的所有檔案
p 查找檔案型別為管道檔案的所有檔案
s 查找檔案型別為套接字的所有檔案
c 查找檔案型別為字符設備的所有檔案
b 查找檔案型別為塊設備的所有檔案
l 查找檔案型別為軟連接的所有檔案
搜索空檔案或目錄
-empty 搜索空檔案或者檔案夾
組合條件
-a 與 默認就是按照并且條件搜索多個條件
-o 或
-not|! 非
因為與的優先級高于或的優先級,可以使用()擴起或的選項以提高或的優先級,()需要轉義寫成\( \)
德*摩根定律:
(非A)或(非B)=非(A且B)
(非A)且(非B)=非(A或B)
排除特定目錄搜索
-path 排除檔案夾路徑 -a -prune -o -name 檔案名 指定不搜那些檔案夾
例:
find / \( -path "/sys" -o -path "/proc"\) -a -prune -o -name "*.conf"
# 搜索除/proc和/sys目錄以外的所有路徑下的以.conf結尾的檔案
find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -name "*.conf"
根據檔案大小搜索
-size [+|-] #UNIT
常用單位k M G c(byte) 注意大小寫
6k 表示 (5k,6k],包括6K不包括5K
-6k 表示 [0k,6-1k],包括0k也包括5k,兩個之間
+6k 表示(6K,oo),不包含6k
-size 1024k和-size 1M的區別
-size 1024k 會搜索到1023k到1024k之間的檔案
-size 1M 會搜索到0到1M之間的檔案
根據時間戳查找
-atime [+|-]#
+10 表示11天以前的檔案
-1 表示最近一天內的檔案
10 表示10天到11天內,
-mtime [+|-]#
-ctime [+|-]#
-mmin [+|-]# 表示按分鐘搜索
-amin [+|-]#
-cmin [+|-]#
根據權限搜索
-perm [/|-] MODE
MODE:精確權限匹配
/MODE 任何一類(u g o)物件的任何一位權限(r w x)中,只要能匹配一位權限就能搜索到,是或的關系
-MODE 表示任何一類(u g o)物件的權限中r w x三者都完滿條件才匹配,是并且的關系
如果MODE中三類物件中有一位是0,表示對應該類物件無論有沒有權限無所謂
備注,在centos7后,+的寫法開始淘汰,使用/代替了
find -perm 755 會精確搜索權限是755的檔案
find -perm /222 只要任何一類用戶有寫權限就會匹配,或者說,至少有一類用戶有寫權限就會匹配
find -perm /111 只要任何一類用戶有寫權限的就會匹配,或者說,至少有一類用戶有執行權限就會匹配
find -perm /666 只要任何一類用戶有讀或者有寫權限就會匹配,
find -perm /001 其他用戶有執行權限的檔案才會匹配
find -perm /002 其他用戶有寫權限的檔案才會匹配
find -perm -222 只有當檔案的所有者、所屬組、其他人三類用戶都有寫權限才會匹配
find -perm -002 只要其它人具有寫權限就會匹配,和find -perm /002的作用相同
find -perm -022 所屬組和其他人都具有寫權限就會匹配
find -perm 002 只匹配 --- --- -w-權限的檔案
處理動作
-print 默認,會把搜索結果列印螢屏,默認是以空格作為分割符,可以使用pring0選項改成使用nul作為分隔符
-ls 把搜索的檔案的詳細屬性顯示出來
-fls /PATH/TO/FILE 查找到的每個檔案長格式顯示保存至指定檔案,相當于 -ls > /PATH/TO/FILE
-delete 把搜索到的檔案洗掉,太危險,慎用
-ok COMMAND {} \; 對查找到的每個檔案交由COMMAND指定的命令執行,但是在執行前會互動式提問
-exec COMMAND {} \; 對超找到的每個檔案交由COMMAND指定的命令執行,不會互動提問直接執行
{} 指的是find搜索的的檔案,可以想成一個變數,此變數參考find搜索到的檔案
\; 交由COMMAND執行 必須要有\;結束
find /data -exe rm {} \ 洗掉搜索到的檔案
find /var -size +10M -mtime +10 -ok mv {} /data \ 把在VAR下搜索到的大于10M時間超過10天之前的檔案移動到data目錄下
find /data -name "*.txt" -exec cp {} {}.bak \; 批量加后綴,注意雙{}的使用
小技巧:利用find 和 mv 組合批量加后綴名:
[root@CentOS7 tmp]# ll total 0 -rw-r--r-- 1 root root 0 May 3 05:40 a -rw-r--r-- 1 root root 0 May 3 05:40 b -rw-rw-rw- 1 root root 0 May 3 05:40 c -rw-r--r-- 1 root root 0 May 3 05:40 d -rw-r--r-- 1 root root 0 May 3 05:40 e -r-------- 1 root root 0 May 3 05:40 f -rw-r--r-- 1 root root 0 May 3 05:40 g [root@CentOS7 tmp]# find . -type f -exec mv {} {}.haha \; #小技巧利用find和mv組合批量加后綴名 [root@CentOS7 tmp]# ll total 0 -rw-r--r-- 1 root root 0 May 3 05:40 a.haha -rw-r--r-- 1 root root 0 May 3 05:40 b.haha -rw-rw-rw- 1 root root 0 May 3 05:40 c.haha -rw-r--r-- 1 root root 0 May 3 05:40 d.haha -rw-r--r-- 1 root root 0 May 3 05:40 e.haha -r-------- 1 root root 0 May 3 05:40 f.haha -rw-r--r-- 1 root root 0 May 3 05:40 g.haha [root@CentOS7 tmp]#
練習:
1、查找/var目錄下屬主為root,且屬組為mail的所有檔案或目錄;
find /var -user root -a -group mail -ls
2、查找/usr目錄下不屬于root,bin或hadoop的所有檔案或目錄;用兩種方法;
find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
find /user -not -user root -a -not -user bin -a -not -user hadoop -ls
3、查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是hadoop用戶的檔案或目錄;
find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
4、查找當前系統上沒有屬主或屬組,且最近一周內曾被訪問過的檔案或目錄;
find \( -nouser -o -nogroup \) -a -atime -7 -ls
5、查找/etc目錄下大于1M且型別為普通檔案的所有檔案;
find /etc/ -size +1M -a -type f -ls
6、查找/etc目錄下所有用戶都沒有寫權限的檔案;
find /etc -not -perm /222 -type f -ls
7、查找/etc目錄至少有一類用戶沒有執行權限的檔案;
find /etc -not -perm -111 -type f -ls
8、查找/etc/init.d/目錄下,所有用戶都有執行權限,且其它用戶有寫權限的所有檔案;
find /etc/init.d -perm -113 -type f -ls
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/87931.html
標籤:Linux
上一篇:初步進入Linux世界
下一篇:ubuntu 使用 vsftpd 基于系統用戶配置相互隔離的 ftp (ftps) 服務并禁止賬戶 ssh shell 登陸功能
