Linux哲學思想有一條是一切皆文件,Linux中一切東西都以文件的形式存在。面對如此多的文件查找和處理起來比較困難。所以須要藉助一些命令來查找和定位文件。node
文件查找:按照文件名或文件屬性來搜索文件正則表達式
locate:數據庫
用於模糊搜索:centos
基於專用的數據庫進行查找,數據庫應該事先建立而且按期更新ide
可使用updatedb命令手動更新locate數據庫ui
查找速度較快,精確度較低spa
find:orm
精確查找:rem
查找精度高,速度慢字符串
在指定位置進行文件名或文件屬性的遍歷掃描;不建議對根目錄進行find操做
實時查找
使用find命令只能搜索當前用戶具備讀和執行權限的目錄
find
search for files in a directory hierarchy
find [OPTIONS] [查找路徑] [查找條件] [ 處理動做]
查找路徑:默認爲當前工做目錄,能夠指定具體的目錄路徑
查找條件:進行本次搜索的標準,能夠是文件名,文件大小,文件類型,文件權限;默認是指定 目錄中全部文件
處理動做:對於符合條件的文件進行處理操做;默認是將查找結果輸出到顯示器
根據文件名查找:
-name 文件名稱,支持使用 通配符(* ? [] [^])
-iname 文件名稱,忽略字母大小寫,支持通配符
根據文件的inode編號 進行查找:
-inum inode編號:硬連接有相同的inode編號:經過給定的inode編號查找對應文件名和路徑
-samefile name:經過給定的文件名查找對應的inode編號,進而肯定具備相同inode編號文件
和路徑
-link n:查找鏈接數爲n的全部文件
根據正則表達式來匹配:
-regex pattern:以pattern匹配整個文件路徑字符串,而不單單是給定文件的名稱
根據文件的屬主和屬組進行查找:
-user uname:根據屬主爲指定用戶的用戶名進行查找
-uid UID:根據屬主爲某個UID進行查找
-group gname
-gid GID
-nogroup:在文件的額屬組上沒有對應的組名
-nouser:在文件的屬主上沒有對應的用戶名
根據文件理性查找
-type 文件類型
b:塊設備
c: 字符設備
d:目錄文件
f:普通文件
l:符號連接文件
p:普通文件
s:套接字文件
-xtype 文件類型: 符號連接文件的匹配須要配合其餘選項
根據時間戳進行查找:
-atime [+|-]n:根據訪問時間進行查找,以天爲單位
-ctime [+|-]n:根據改變時間進行查找
-mtime [+|-]n:根據修改時間進行查找
n:[n-n+1)
+n:[n+1- 以前的很長時間)
-n:[n- now)
-amin [+|-]n: 以分鐘爲單位
-cmin [+|-]n
-mmin [+|-]n
例子:查找/etc目錄下最近一週內內容修改過且不屬於root及suse用戶的文件;
find /etc -ctime -7 -a -user root -a -user suse
在/ l o g s目錄中查找更改時間在5日之前的文件並刪除它們:
find logs -type f -mtime +5 -exec -ok rm {} \;
根據文件的大小進行查找
-size[+|-]n[cwbkMG]
n:(n-1,n]
-n:[0,n-1]
+n:(n,zhengwuqiong)
例子:
find -size +2k
當前目錄下全部大於2KB的文件;
find -size 2k
當前目錄下全部1KB-2KB之間的文件;
find -size -2k
當前目錄下全部小於1KB的文件;
組合條件:
-a:邏輯與 默承認省略
-o:邏輯或
-not,| :邏輯非
邏輯組合條件遵循德摩根定律
例:查找/usr目錄下不屬於root、bin、centos等用戶的文件;
find /usr -not -user root -a -not -user bin -a -not -user centos
根據權限查找:
-perm [/|-]mode
mode:精確匹配指定的權限
/mode:隱含了邏輯或的關係,任何一個權限位的權限中只要有一個權限位匹配就爲真
-mode:隱含了邏輯與的關係,每一個權限位都必須同時包含指定的權限位
例:查找/etc/rc.d/init.d目錄下,全部用戶都有執行權限而且其餘用戶有寫權限的文件;
find /etc/rc.d/init.d -prem /111 -a -perm -002
全部都有 取反 任意一個沒有
! ( a與b與c ) = !a 或 !b 或 !c
全部都沒有 取反 任意一個有
! ( !a與!b與!c ) = a 或 b 或 c
全部都有 取反 任意一個沒有
!(a與b與c) = !a 或 !b 或!c
全部都沒有 取反 任意一個有
!(!a與!b與!c) = a或b或c
處理動做:
-print:輸出到顯示屏幕,默認的動做
-ls:對於查找道的結果執行 ls -li命令顯示
-exec COMMAND {} \; 非交互式
-ok COMMAND {} \; 交互式
對於查找到的結果執行COMMAND命令
{}:佔位符,用來引用被find命令查找到的全部文件的信息
-exec和-OK的取代操做
chmod a-r $(find -perm -444 -type f)
find -perm -444 -type f | xargs chmod a-r
xargs