- 文件查找
- locate:非實時(并不能反應當前硬盤上是否有該文件,只是從數據庫中提取信息)模糊查找,查找是根據全系統文件數據庫進行的 ?–用的不多
- # updatedb ?手動生成文件數據庫
- 格式:locate KEYWORD
- -i 不區分大小寫的搜索
- -n #只列舉前#個匹配項目
- locate conf:搜索名稱或路徑中包含“conf”的文件
- locate -r ‘\.conf$’:?使用正則表達式來搜索以“.conf”結尾的文件,因為.在正則中有特有的含義所以需要轉義
- find:實時精確查找(直接在硬盤上找),只搜索用戶具備讀取和執行權限的目錄
- 格式:find ?查找路徑 ?查找標準 ?查找到以后的處理動作
- 查找路徑:默認為當前目錄
- 查找標準:默認為指定路徑下的所有文件
- 處理動作:默認為輸出到標準輸出
- 根據文件名和inode查找
- -name:文件名區分大小寫,支持使用通配符,*, ?, [], [^]
- -inum #:按inode號查找
- -iname:文件名匹配時不區分大小寫(支持glob風格的通配符*,?,[],[^])
- -links#?:鏈接數為#的文件
- -regex PATTERN:基于正則表達式進行文件名匹配(用的不多)
- find /etc -name init
- 根據文件從屬關系查找
- -user:查找屬于該用戶的文件
- # find /home -user shenchao
- -nouser:查找沒有屬主的文件
- -group 根據組來查找
- -nogroup:查找沒有屬組的文件
- -uid UID:根據UID查找
- -gid GID:根據GID查找
- -user:查找屬于該用戶的文件
- -type根據文件類型查找 :f文件 d目錄 l軟連接文件
- # find /tmp -type f
- -size:根據文件大小查找,在根目錄下查找大于100MB的文件:
- find / -size +204800(204800表示多少個數據塊,在linux里一個數據塊=512字節=0.5K,100MB=102400K=204800個數據塊)
- 也可以指定單位:find / -size +100M
- +n 大于(#,oo)-n小于[0,#-1]?n等于(#-1,#]
- 根據時間戳查找:
- 天數:
- -atime[+|-]#:訪問時間,查找過去三天訪問過的文件:大于等于3小于4天
- -ctime:修改時間(文件屬性)
- -mtime:改變時間(文件內容)
- -atime[+|-]#:訪問時間,查找過去三天訪問過的文件:大于等于3小于4天
- 分鐘:-amin , -mmin , -cmin
- 在/etc下查找5分鐘內被修改過屬性的文件和目錄(-5負號表示5分鐘之內):# find /etc -cmin -5
- 天數:
- -perm :根據權限來查找,1=x ?2=w ?3=wx ?4=r ?5=rx ?6=rw ?7=rwx
- MODE:精確匹配每一位都必須相等
- /MODE:至少有一類用戶匹配上MODE權限即滿足條件,0表示該位置權限不關心,即0位置上的那個用戶擁有任意權限都可以
- find ./ -perm /333 -ls ?:表示查找或u或g或o,他們至少有一個擁有w或者x權限
- -MODE:每一類用戶都必須擁有指定的MODE權限才符合條件,0表示該位置權限不關心
- find ./ -perm -333 -ls ?:表示查找u且g且o,都同時擁有wx權限的文件
- 其他人需要有w權限或x權限,其他人需要有w權限和x權限:
- 條件組合:-a與(默認組合邏輯),-o或,-not,!非,
- ?在etc下查找大于80mb小于100mb的文件
- find /etc -size +163840 -a -size -204800
- ?注意區分以下情況:
- 第一組:
- find ./ -not -user user1 -a -not -user user2
- find ./-not \( -user user1 -o -user user2 \)
- 第二組:
- find ./ -not -user user1 -o -not -type d
- find ./ -not \( -user user1 -a -type d \)
- 第一組:
- ?在etc下查找大于80mb小于100mb的文件
- find的動作
- -print:顯示(默認的動作)
- -ls:類似ls -l的形式顯示每一個文件的屬性
- find /etc -name *.conf -o -type f -ls ?注意:這個會將-name *.conf和-type f -ls取或,而不是-name *.conf和-type f
- -delete:刪除查找到的文件
- -ok COMMAND {} \; 對查找到的每個文件執行由COMMAND表示的命令,{}表示引用找到的每一個文件的文件名
- -exec COMMAND {} \; 同上,每一個操作都不需要確認,{} \;為固定格式
- find ./ -perm -007 -exec chmod o-w {} \;
- find ./ -perm -020 -exec mv {} {}.new \;
- find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles \;
- find /etc -size +1M | xargsecho {} >> /tmp/etc.largefiles
- 注意:find傳遞查找到的文件路徑到后面的命令時,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令,但是有些命令不能接收過長的參數,此時命令執行會失敗,這種方式可以規避:find | xargs COMMAND,xargs傳參數的時候是一個個的傳給COMMAND處理,所以避免了參數過長導致的錯誤。xargs可以讀入stdin的數據并以空格符或回車符將stdin的數據分隔成為arguments,由于有些命令不支持標準輸入,如rm,ls,所以ls | rm 不會將參數傳遞給rm,需要 ls | xargs rm,find /etc -size +1M | xargs ls -l
- 格式:find ?查找路徑 ?查找標準 ?查找到以后的處理動作
- locate:非實時(并不能反應當前硬盤上是否有該文件,只是從數據庫中提取信息)模糊查找,查找是根據全系統文件數據庫進行的 ?–用的不多
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/102485