find命令
find命令是乙個實時查詢工具,通過遍歷指定路徑而完成對檔案的查詢;在使用該命令時,如果不選定引數,則在當前目錄下查詢子目錄與檔案並顯示之;另外,任何位於引數之前的字串,都將視為欲查詢的目錄名。由於是實時遍歷查詢,find有如下特性:精確實時查詢,速度慢可能只搜尋使用者具備讀取和執行許可權的目錄。
find 命令格式:find [path|filename] -options [-print -exec -ok…]
查詢條件:
根據檔名查詢:
-name 「檔名稱」:支援使用glob: *, ?, , [^]
-iname 「檔名稱」:不區分字母大小寫
-regex 「pattern」:以pattern匹配整個檔案路徑字串,而不僅僅是檔名稱;
根據屬主、屬組查詢:
-user username:查詢屬主為指定使用者的檔案;
-group grpname: 查詢屬組為指定組的檔案;
-uid userid:查詢屬主為指定的uid號的檔案;
-gid groupid:查詢屬組為指定的gid號的檔案;
-nouser:查詢沒有屬主的檔案;
-nogroup:查詢沒有屬組的檔案;
根據檔案型別查詢:
-type type:
f: 普通檔案
d: 目錄檔案
l: 符號鏈結檔案
s:套接字檔案
b: 塊裝置檔案
c: 字元裝置檔案
p: 管道檔案
組合條件:
與:-a
或:-o
非:-not, !
!a -a !b = !(a -o b)
!a -o !b = !(a -a b)
找出/tmp目錄下,屬主不是root,且檔名不是fstab的檔案;
find /tmp \( -not -user root -a -not -name 'fstab' \) -ls
find /tmp -not \( -user root -o -name 'fstab' \) -ls
根據檔案大小來查詢:
-size [+|-]#unit
常用單位:k, m, g
#unit: (#-1, #] (代表大小從 #-1到#,不包含#-1)
-#unit:[0,#-1]
+#unit:(#,oo)
根據時間戳:
以「天」為單位;
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,oo]
-#: [0,#)
-mtime
-ctime
以「分鐘」為單位:
-amin
-mmin
-cmin
根據許可權查詢:
-perm [/|-]mode
mode: 精確許可權匹配
/mode:任何一類(u,g,o)物件的許可權中只要能一位匹配即可;
-mode:每一類物件都必須同時擁有為其指定的許可權標準;
處理動作:
-print:預設的處理動作,顯示至螢幕;
-ls:類似於對查詢到的檔案執行「ls -l」命令;
-delete:刪除查詢到的檔案;
-fls/path/to/somefile:查詢到的所有檔案的長格式資訊儲存至指定檔案中;
[root@ansible-client ~]# find / -name *.yml
/root/*.yml
/usr/lib/python2.7/site-packages/ansible/config/base.yml
/usr/lib/python2.7/site-packages/ansible/config/module_defaults.yml
/opt/omni/lib/perl/cpan/meta.yml
/opt/omni/lib/perl/extutils/meta.yml
[root@ansible-client ~]# find / -name *.yml -fls a.txt
[root@ansible-client ~]# cat a.txt
67154366 16792 -rw-r----- 1 root root 17190917 dec 5 17:33 /root/*.yml
101882813 76 -rw-r--r-- 1 root root 73955 aug 16 07:08 /usr/lib/python2.7/site-packages/ansible/config/base.yml
101882816 12 -rw-r--r-- 1 root root 11117 aug 16 07:08 /usr/lib/python2.7/site-packages/ansible/config/module_defaults.yml
412114 4 -r--r--r-- 1 root sys 313 may 18 2006 /opt/omni/lib/perl/cpan/meta.yml
101303300 4 -r--r--r-- 1 root sys 470 may 18 2006 /opt/omni/lib/perl/extutils/meta.yml
-ok command {} \ : 對查詢到的每個檔案執行由command指定的命令; 對於每個檔案執行命令之前,都會互動式要求使用者確認;
-exec command {} ; 對查詢到的每個檔案執行由command指定的命令; {}: 用於引用查詢到的檔名稱自身;
eg:查詢當前目錄下所有.txt檔案並把他們拼接起來寫入到all.txt檔案中
find . -type f -name "*.txt" -exec cat {} \;> all.txt
將30天前的.log檔案移動到old目錄中
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
找出當前目錄下所有.txt檔案並以「file:檔名」的形式列印出來
find . -type f -name "*.txt" -exec printf "file: %s\n" {} \;
因為單行命令中-exec引數中無法使用多個命令,以下方法可以實現在-exec之後接受多條命令
-exec ./text.sh {} \;
查詢/var目錄下屬主為root,且屬組為mail的所有檔案或目錄;
# find /var -user root -group mail
查詢/usr目錄下不屬於root、bin或hadoop的所有檔案或目錄;
# find /usr -not -user root -a -not -user bin -a -not -user hadoop
# find /usr -not \( -user root -o -user bin -o -user hadoop \)
查詢/etc目錄下最周一周內其內容修改過,同時屬主不為root,也不是hadoop的檔案或目錄;
# find /etc -mtime -7 -a -not -user root -a -not -user hadoop
# find /etc/ -mtime -7 -a -not \( -user root -o -user hadoop \)
查詢當前系統上沒有屬主或屬組,且最近乙個週內曾被訪問過的檔案或目錄;
# find / -nouser -a -nogroup -a -atime -7
查詢/etc目錄下大於1m且型別為普通檔案的所有檔案;
# find /etc -size +1m -type f
查詢/etc目錄下所有使用者都沒有寫許可權的檔案;
# find /etc -not -perm /222
查詢/etc目錄下至少有一類使用者沒有執行許可權的檔案;
# find /etc -not -perm -111
查詢/etc/init.d目錄下,所有使用者都有執行許可權,且其它使用者有寫許可權的檔案;
# find /etc/init.d -perm -113
Linux find 命令總結
查詢檔案是非常常見的系統操作,linux可以使用find命令來進行檔案查詢,用好find命令,會讓你感受到前所未有的痛快。find有眾多選項和引數,熟練運用它們,你才能真正感受到find命令的強大,總結如下。命令格式 find pathname option print exec ok comman...
linux find 命令總結
這裡總結一些常用到的關於find的命令的操作 b find命令的一般形式為 b find pathname options print exec ok 讓我們來看看該命令的引數 pathname find命令所查詢的目錄路徑。例如用.來表示當前目錄,用 來表示系統根目錄。print find命令將匹...
Linux Find 命令總結
三豐雲,免費虛擬主機和免費雲伺服器相當不錯,使用起來非常快,對於個人使用者來說足夠用了,有需要的朋友來看看吧,我已經使用過了 體驗很不錯的 1 按檔名遞迴查詢 find name filename 2 按檔名遞迴查詢,不區分大小寫 find iname filename 3 查詢當前目錄及深度為1的...