linux find命令總結

2021-10-04 06:41:54 字數 4646 閱讀 9594

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的...