歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> find、xargs命令使用及方法詳解

find、xargs命令使用及方法詳解

日期:2017/2/28 14:35:22   编辑:Linux教程

find是linux命令,它將檔案系統內符合expression的檔案列出來,你可以指要檔案的名稱、類別、時間、大小、權限等不同命令的組合,只有完全相符的才會被列出來。
find可以在當前目錄下甚至整個文件系統來查找某些文件或目錄;

注意:find命令是相當耗資源的不得以的時候不要find的,比如說根 / 目錄;

功能說明:查找文件或目錄
find-->實時查找:速度慢、精確匹配

命令語法:
find [options] [查找路徑] [查找條件] [處理動作]
查找路徑:默認為當前目錄
查找條件:默認為查找指定路徑下的所有文件
處理動作:默認為顯示

下面就來一起看下find的用法吧:

1.查找條件:根據文件名稱查找時是嚴格區分字母大小寫的

-name "文件名稱": 支持使用globbing
* :重復0次或者任意多次前面字符
? :單個字符
[] :字符范圍
[^]:排除字符范圍


應用實例:
1).查看/etc目錄下有多少passwd文件:
[root@xiaomazi ~]#
[root@xiaomazi ~]# find /etc -name "passwd"
/etc/pam.d/passwd
/etc/passwd
[root@xiaomazi ~]#

2).查看/etc目錄下所有以passwd開頭的文件:
[root@xiaomazi ~]# find /etc -name "passwd*"
/etc/pam.d/passwd
/etc/passwd-
/etc/passwd
[root@xiaomazi ~]#

3).查看/etc目錄下所有以passwd結尾的文件:
[root@xiaomazi ~]# find /etc -name "*passwd"
/etc/pam.d/passwd
/etc/passwd
/etc/security/opasswd
[root@xiaomazi ~]#

2.-iname "文件名稱":查找時不區分字符大小寫
應用舉例:

1).查找/etc下所有以passwd開頭的文件(並不區分大小寫):
[root@xiaomazi ~]# touch /etc/Passwd -->創建測試文件
[root@xiaomazi ~]# find /etc -iname "passwd*"
/etc/pam.d/passwd
/etc/passwd-
/etc/passwd
/etc/Passwd
[root@xiaomazi ~]# rm -rf /etc/Passwd
注意不要再/etc目錄下隨便創建文件吆.

3. 根據屬主屬組來查找:

-user UserName: 根據屬主查找
-group GroupName: 根據屬組查找


應用舉例:
1).查找文件的屬主是Hadoop用戶的文件:
[root@xiaomazi ~]# su - hadoop
[hadoop@xiaomazi ~]$ cp/etc/fstab/tmp/-->注意以誰的身份復制文件,文件的屬主屬組就是誰的.
[hadoop@xiaomazi ~]$ ls-l /tmp/
total 28
-rw-r--r-- 1 hadoop hadoop 921 Feb 26 18:14 fstab
[hadoop@xiaomazi ~]$
[root@xiaomazi ~]# find /tmp -user hadoop
/tmp/fstab
[root@xiaomazi ~]#

2).查找文件的屬組是hadoop用戶的文件:
[root@xiaomazi ~]# find /tmp -group hadoop
/tmp/fstab
[root@xiaomazi ~]#

4.根據UID/GID來查找:
-uid UID
-gid GID
如果我將Fedora用戶刪除,沒有加選項-r,就不會刪除用戶文件的;如果文件的屬主屬組不在了,會發生什麼問題呢?但是,如果此前不確定用戶名,也可以使用uid的;


應用舉例:
1).查找/tmp目錄下uid是501的所有文件:
[root@xiaomazi ~]# useradd fedora -->創建用戶
[root@xiaomazi ~]# su - fedora -->切換到fedora用戶
[fedora@xiaomazi ~]$ cp/etc/inittab/tmp/-->以fedora用戶來復制文件
[fedora@xiaomazi ~]$ ls-l /tmp/
total 28
-rw-r--r-- 1 hadoop hadoop 921 Feb 26 18:14 fstab
-rw-r--r-- 1 fedora fedora 884 Feb 26 18:22 inittab
[fedora@xiaomazi ~]$ exit
logout
[root@xiaomazi ~]# userdel fedora -->模擬刪除用戶
[root@xiaomazi ~]# ls -l /tmp/
total 28
-rw-r--r-- 1 hadoop hadoop 921 Feb 26 18:14 fstab
-rw-r--r-- 1 501 501 884 Feb 26 18:22 inittab -->注意:現在屬主屬組屬於501
[root@xiaomazi ~]# find /tmp -user fedroa -->這是找不到的啦!
find: `fedroa' is not the name of a known user
[root@xiaomazi ~]# find /tmp -uid 501 -->假設我們知道fedora的uid,就可以全局范圍的查找fedora的文件了.
/tmp/inittab
[root@xiaomazi ~]#


5.根據-nouser、-nogroup: 查找沒有屬主、屬組的文件;
-nouser:查找沒有屬主的文件,即該文件的屬主在/etc/passwd中不存在。
-nogroup: 查找沒有屬組的文件,即該文件所屬的組在/etc/group中不存在。


應用舉例:
1).假如說現在就在系統上找沒有屬主的文件應該怎麼樣找呢?
[root@xiaomazi ~]# find /tmp -nouser
/tmp/inittab
[root@xiaomazi ~]#

6.組合條件:
-a: 與,同時滿足(可以不寫的)
-o: 或,表示一個滿足就可以
-not, !:非,取反

應用舉例:

1).查找/tmp目錄下沒有屬主或屬主為hadoop的文件:

[root@xiaomazi ~]# find /tmp -nouser -o -user hadoop
/tmp/inittab
/tmp/fstab
[root@xiaomazi ~]#

2).查找/tmp目錄下屬主為hadoop,並且文件以.txt結尾的文件:
[hadoop@xiaomazi ~]$ whoami
hadoop -->當前用戶
[hadoop@xiaomazi ~]$ cd /tmp/
[hadoop@xiaomazi tmp]$ touch word.doc hello.txt
[hadoop@xiaomazi tmp]$ ll -->新建文件以便測試.
total 28
-rw-r--r-- 1hadoop hadoop 921Feb 2618:14fstab
-rw-rw-r-- 1hadoop hadoop 0Feb 2618:58hello.txt
-rw-r--r-- 1501501884Feb 2618:22inittab
-rw-rw-r-- 1hadoop hadoop 0Feb 2618:58word.doc
root用戶
[root@xiaomazi ~]# find /tmp -user hadoop -name "*.txt"
/tmp/hello.txt
[root@xiaomazi ~]#

3).查找/tmp目錄下屬主為hadoop,並且也不是以.txt結尾的文件:

[root@xiaomazi ~]# find /tmp -user hadoop -a -not -name "*.txt"
/tmp/fstab
/tmp/word.doc
[root@xiaomazi ~]#

4).查找/tmp目錄下屬主不是hadoop,並且也不是以.txt結尾的文件
I.使用的是-a選項:
[root@xiaomazi tmp]# find /tmp -not -user hadoop -a -not -name "*.txt"
/tmp
/tmp/inittab
/tmp/.ICE-unix
[root@xiaomazi tmp]#

II.使用的是-o選項:

[root@xiaomazi tmp]#
[root@xiaomazi tmp]# find /tmp -not \( -user hadoop -o -name "*.txt" \)
/tmp
/tmp/inittab
/tmp/.ICE-unix
[root@xiaomazi tmp]#

5).查找/tmp目錄下屬主不是hadoop,或者不是以.txt結尾的:
[root@xiaomazi tmp]# find /tmp -not -user hadoop -o -not -name "*.txt"
/tmp
/tmp/inittab
/tmp/fstab
/tmp/word.doc
/tmp/.ICE-unix
[root@xiaomazi tmp]#

6.根據文件類型查找:

-type: 根據文件類型查找
f: 普通文件
d: 目錄
b: 塊設備
c: 字符設備
l: 符號鏈接文件
p: 命名管道
s: 套接字


應用舉例:
1).將/tmp目錄下的目錄顯示出來:
[root@xiaomazi tmp]# find /tmp -type d
/tmp
/tmp/.ICE-unix
[root@xiaomazi tmp]#

2).查找/tmp目錄下的普通文件顯示出來:
[root@xiaomazi tmp]# find /tmp -type f
/tmp/inittab
/tmp/fstab
/tmp/word.doc
/tmp/hello.txt
[root@xiaomazi tmp]#

Copyright © Linux教程網 All Rights Reserved