find命令用法詳解

find

find命令是用于實現精確查找,實時查找指定目錄下面的文件。在工作中常用。優點是:實時,精確。缺點是:比較占用系統資源,比較慢一點。
在總結find之前,先簡單總結一下which,whereis,locate簡單用法。他們都是用于查找和定位文件的命令。

1.which命令 查找命令的二進制文件位置

例如:
[root@dxlcentOS ~]# which id
/usr/bin/id
[root@dxlcentOS ~]# which cd
/usr/bin/cd

2.whereis 文件名字的查找

選項 -b,只查找二進制文件
-m 只查找使用手冊路徑下的文件

例如:
[root@dxlcentOS ~]# whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
[root@dxlcentOS ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
查找文件名為passwd 的文件 默認情況下使用手冊所在的章節都會查找出來。

3.locate 快速定位給定的文件名,也可以給定文件的部分名字。

常用選項:
-i 忽略大小寫
-l 輸出前幾行,例如 -l 5 輸出找到的結果前5行
-S 輸出locate使用的數據庫信息
-b 只匹配路徑中基名
-c 只統計查到的符合條件文件數量
-r 使用正則表達式
locate的優點是速度非???,但是不能實現精確查找,同時依賴于已建立的數據庫/var/lib/mlocatel里面的數據進行查找,不用搜索硬盤,所有很快。但是當你新建文件時,數據庫還沒有更新,默認是每天自動執行執行一次更新,這時候locat是無法查到的,這時候需要手動執行updatedb更新即可。

例如:
[root@dxlcentOS ~]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/home/dxl/passwd
[root@dxlcentOS ~]# locate -S
數據庫 /var/lib/mlocate/mlocate.db:
14,196 文件夾
82,472 文件
4,403,787 文件名中的字節數
2,007,138 字節用于存儲數據庫


find命令詳解

功能:對文進行實時,精確查找。
用法:find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]
查找起始路徑:指定查找范圍,默認是當前工作目錄下進行查找
查找條件:指定查找目標的查找標準,可以根據文件名、大小、類型、從屬關系、權限等標準進行;默認為找出指定路徑下的所有文件。
處理動作:對查找出來的文件進行刪除,移動等操作,默認為輸出到屏幕上。

1.根據文件名查找:-name 可以支持glob風格文件名通配

用法:find 查找路徑 -name 文件名
例如:

[root@dxlcentOS tmp]# find . -name “*.txt” 查找/tmp目錄下所有的txt文件
./maxusers.txt
./we/dd1.txt
./we/dd2.txt
./we/dd3.txt

[root@dxlcentOS tmp]# find . -name “[A-Z]*” -print 查找當前目錄及子目錄中查找文件名以一個大寫字母開頭的文件
./man/man3/Git.3pm.gz
./man/man3/Git::I18N.3pm.gz

[root@dxlcentOS tmp]# find . -name “f*” 查找/tmp目錄下以f開頭的文件
./functions
./fenzu
./fenz

[root@dxlcentOS tmp]# find /usr -name “[a-z][0-9]” 查找/usr目錄下以小寫字母開頭,后面跟數字0-9開頭的文件
/usr/bin/m4
/usr/share/gcc-4.8.2/python/libstdcxx/v6

2.根據文件從屬關系查找:

  • -user USERNAME:查找屬主為指定用戶的所有文件。

例如:查找/var目錄下文件屬主為centos用戶的所有文件
[root@dxlcentOS tmp]# find /var -user centos
/var/spool/mail/centos

  • -group GRPNAME:查找屬組為指定組的所有文件.

例如:查找 /home目錄里面屬組為nologin的文件
[root@dxlcentOS tmp]# find /home -group nologin -ls
6292165 0 drwx—— 2 nologin nologin 76 10月 20 20:55 /home/nologin
6292166 4 -rw-r–r– 1 nologin nologin 18 9月 7 00:25 /home

  • -uid UID:查找屬主指定的UID的所有文件。

例如:查找/var目錄下uid為48的文件
[root@dxlcentOS tmp]# find /var -uid 48 -ls
771874 0 drwx—— 2 apache apache 6 10月 12 01:17 /var/lib/dav
17148123 0 drwx—— 3 apache apache 19 10月 12 01:17 /var/cache/httpd

  • -gid GID:查找屬組指定的GID的所有文件。

例如:查找/var目錄下gid為91的文件
[root@dxlcentOS tmp]# find /var -gid 91 -ls
17133941 0 drwxr-xr-x 3 root tomcat 21 10月 13 10:30 /var/lib/tomcat
25354344 0 drwxrwxr-x 2 root tomcat 6 8月 7 12:32 /var/lib/tomcat/webapps

  • -nouser:查找沒有屬主的文件。

例如:查找/home目錄里面沒有屬主的文件
[root@dxlcentOS tmp]# find /home -nouser
/home/mandriva
/home/mandriva/.bash_logout
/home/mandriva/.bash_profile
/home/mandriva/.bashrc

  • -nogroup:查找沒有屬組的文件。

例如:查找/tmp目錄里面沒有屬組的文件
[root@dxlcentOS tmp]# find /tmp -nogroup -ls
16798173 0 -rw-r–r– 1 root 2050 0 10月 18 17:37 /tmp/fenz

3.根據文件的類型查找,常見的文件類型有如下

用法:find 查找路徑 -type 文件類型
f: 普通文件
d: 目錄文件
l:符號鏈接文件
b:塊設備 文件
c:字符設備文件
p:管道文件
s:套接字文件

例如: 查找/dev目錄下的所有塊設備
[root@dxlcentOS tmp]# find /dev -type b
/dev/sda6
/dev/sda5
/dev/sda4

綜合練習:

1、找出/tmp目錄下屬主為非root的所有文件;
[root@dxlcentOS tmp]# find . ! -user root -ls 方法一:用!號表示非
16819217 20 -rw-r–r– 1 dxl distro 17480 10月 21 17:57 ./functions
17126623 0 drwxr-xr-x 3 dxl root 61 10月 22 18:10 ./we
[root@dxlcentOS tmp]# find . -not -user root -ls 方法2:加-not,表示非
16819217 20 -rw-r–r– 1 dxl distro 17480 10月 21 17:57 ./functions
17126623 0 drwxr-xr-x 3 dxl root 61 10月 22 18:10 ./we

2、找出/tmp目錄下文件名中不包含fstab字符串的文件;

[root@dxlcentOS tmp]# find . -name “fstab” 先找出帶fstab字符的文件
./fstab
./fstab222
[root@dxlcentOS tmp]# find . ! -name “fstab

3、找出/tmp目錄下屬主為非root,而且文件名不包含fstab字符串的文件;
[root@dxlcentOS tmp]# find . ! -name “fstab” ! -user root -ls
16819217 20 -rw-r–r– 1 dxl distro 17480 10月 21 17:57 ./functions
17126623 0 drwxr-xr-x 3 dxl root 61 10月 22 18:10 ./we

組合條件:邏輯表達式
-a 與:前后條件要通時滿足,find默認為這個選項
-o: 或者
!,-not:非

4.根據指定的文件的大小查找

-size  [+|-]指定文件的大小

常用單位有:k(千字節), M(兆字節), G(1024M字節)
1G=1024M=1024K
例如:我要在某目錄查找并指定為10k的文件,有三種輸入方式表示三種不同的查找結果
10k:查找到的結果為大于9k,小于或等10k的文件
-10k:查找大于0小于10k的文件
+10k:查找大于大于10k的文件

查找/var目錄下,查找深度到 2級子目錄,大于11k的文件
[root@dxlcentOS etc]# find /var -maxdepth 2   -size +11k  -type f  -exec ls -lh  {} \; 
-rw-r--r--. 1 root root 585K 10月 28 10:32 /var/log/lastlog
-rw-rw-r--. 1 root utmp 131K 10月 28 10:32 /var/log/wtmp
.........

5.根據時間戳查找:就是根據文件的修改時間,訪問時間,文件屬性改變時間來查找文件。

1.以“天”為單位:
find  查找目標   -atime  [+|-]n   

:[#, #-1)

-#:(#, 0]

 

000.png

000.png

“4” :4天前的那一天,表示查找第5天00:00到23.59分59秒創建的文檔
“-4” :表示查找小于等于過去4天內的文檔
“+4” :查找大于等于過去5天的文件

查找/var目錄內過去4天內的修改過的文件
[root@dxlcentOS etc]# find  /var   -mtime  -4 -exec ls   -rlt {} \;           

以“分鐘”為單位:
-amin
-mmin
-cmin

6.根據權限查找:

-perm  [/|-]mode
  • mode:精確權限匹配,按給出的權限進行精確查找
例如:
[root@dxlcentOS dir3]# find . -perm 646 -exec ls -l {} \;    
-rw-r--rw-. 1 root root 0 10月 28 12:58 ./ddd.txt
  • /mode:權限前加斜線,任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足,權限之間存在“或”關系。
例如:要查找權限位的其他人有寫權限的文件,
[root@dxlcentOS dir3]# find . -perm /002 -exec ls -l {} \;   
-rw-r--rw-. 1 root root 0 10月 28 12:58 ./ddd.txt
-rw-r--rw-. 1 root root 0 10月 28 12:58 ./ddd.txt
[root@dxlcentOS dir3]# find . -perm /222 -exec ls -l {} \;  查找任何有寫入權限的文件
總用量 0
-rw-r--rw-. 1 root root  0 10月 28 12:58 ddd.txt
drwxr-xr-x. 2 root root 38 10月 28 13:00 dir1
..........
說明:第一個實例/002,表示只對其他用戶的權限位的寫權限進行查找。
002就是不進行屬主和屬組的權限位進行查找的意思。
但是在centos6上面有區別,centos6上/002也可以用+002表示,centos7上面find不再使用+號。
centos6上/002表示任意權限位存在寫入的都會找到
  • -mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足,權限之間存在“與”關系。
例如
[root@dxlcentOS dir3]# find . -perm -664 -exec ls -l {} \;
-rw-rw-rw-. 1 root root 0 10月 28 12:58 ./ddd.txt

處理動作:對find查找出的的結果進行的一列處理,例如刪除,復制等。

  • -print:輸出至標準輸出;默認的動作
  • -ls:類似于對查找到的文件執行“ls -l”命令,輸出文件的詳細信息;
  • -delete:刪除查找到的文件;
  • -fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中;
  • ok COMMAND {} ; :對查找到的每個文件執行由COMMAND表示的命令;每次操作都由用戶進行確認;
  • -exec COMMAND {} ; :對查找到的每個文件執行由COMMAND表示的命令;

注意:find傳遞查找到的文件路徑至后面的命令時,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令;
但是有些命令不能接受過長的參數,此時命令執行會失敗;另一種方式可規避此問題:
find | xargs COMMAND
xargs命令通俗來講就是將標準輸入轉成各種格式化的參數,所以命令[command 1] | xargs [command 2]就是將command 1的標準輸出結果,通過管道|變成xargs的標準輸入,然后xargs再將此標準輸入變成參數,傳給[command 2]。這樣一來,通過xargs命令,我們便可以在管道后面使用那些不接收標準輸入的命令了。例如[command 1]|xargs ls。

練習:

1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;
[root@dxlcentOS dir3]# find /var -user root -group mail -ls
8446487 0 drwxrwxr-x 2 root mail 260 10月 29 11:48 /var/spool/mail
9436072 4 -rw——- 1 root mail 680 10月 29 11:48 /var/spool/mail/root

2、查找/usr目錄下不屬于root, bin或hadoop的所有文件或目錄;用兩種方法;

[root@dxlcentOS dir3]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls   
注意小括號前后的空格
[root@dxlcentOS dir3]# find /usr  -not  -user root -not  -user bin  -not -user hadoop  -ls

3、查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄;
~]# find /etc -mtime -7 -a -not ( -user root -o -user hadoop ) -ls
~]# find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls

4、查找當前系統上沒有屬主或屬組,且最近一周內曾被訪問過的文件或目錄;
[root@dxlcentOS dir3]# find / ( -nouser -o -nogroup ) -atime -7 -ls
82 0 drwx—— 2 1006 distro 62 10月 3 17:35 /home/mandriva
4215538 0 drwx—— 2 we55 2050 76 10月 24 11:33 /home/we55
4215539 4 -rw-r–r– 1 we55 2050 18 9月 7 00:25 /home/we55/.bash_logout
……..

5、查找/etc目錄下大于1M且類型為普通文件的所有文件;
~]# find /etc -size +1M -type f -exec ls -lh {} ;

6、查找/etc目錄下所有用戶都沒有寫權限的文件;
~]# find /etc -not -perm /222 -type f -ls

7、查找/etc目錄至少有一類用戶沒有執行權限的文件;
~]# find /etc -not -perm -111 -type f -ls

8、查找/etc/init.d/目錄下,所有用戶都有執行權限,且其它用戶有寫權限的所有文件;
~]# find /etc -perm -113 -type f -ls

  1. ~] # find /test ! -name “test” -type d -prune -o -type f -name “*.txt” -print
    查找/test下的.txt的普通文件,不查找子目錄。
  2. ~] # find . ! -name “.” -type d -prune -o -type f -print
    查找當前目錄下的普通文件,不查找子目錄。

-maxdepth<目錄層級>:設置最大目錄層級; -mindepth<目錄層級>:設置最小目錄層級,設定查找目標的目錄查找層級,有利于加快查找速度。
例如:查找/etc一級目錄下的所有txt文件,不查找子目錄里面的文件。
-prune 排除指定某個不要進行查找的目錄

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88120

(0)
N27_dxldengN27_dxldeng
上一篇 2017-10-29
下一篇 2017-10-29

相關推薦

  • linux系統故障排除總結

    常見的系統故障 1.確定文體的故障特征 2.重現故障 3.使用工具收集進一步信息,確定根源在何處 4.排除不可能的原因 5.定位故障:             從簡單的問題入手      &…

    Linux干貨 2016-09-15
  • CentOS 5.0系統啟動流程

    注:CentOS系統5.x,6.x和7.x的啟動流程不同,所以本文僅討論CentOS 5.x的啟動流程。 1. POST加電自檢 服務器在開機之后首先會先進行硬件的檢測,在開機界面我們可能會看到檢測硬盤,cpu或raid卡等信息,此界面即硬件自檢界面。 2. BIOS引導 BIOS(BootSequence)用于通過指定的引導裝置引導系統啟動。 3. Boo…

    2017-05-14
  • Tomcat基于MSM+Memcached實現Session共享

    前言 在Tomcat集群中,當一個節點出現故障,其他節點該如何接管故障節點的Session信息呢?本文帶來的解決方案是基于MSM+Memcached實現Session共享。 相關介紹 MSM MSM–Memcached Session Manager是一個高可用的Tomcat Session共享解決方案,除了可以從本機內存快速讀取Session信…

    Linux干貨 2015-07-03
  • 有關磁盤管理與文件系統

    硬盤物理結構      扇區  磁頭  磁道   柱面   磁道數      扇區*一個磁道上的扇區個數*磁頭數=柱面      柱面*磁道數=硬盤大小      一個扇區512字節   &…

    2017-08-19
  • 筆記整理:權限管理1-基礎權限管理&默認權限

    權限管理: 權限的分配根據owner和group來進行分配的   對于文件,各個權限的意義: r:可以使用工具查看內容 w:往里寫 x:運行,提請內核發起一個進程 對于目錄,各個權限的意義: r:用ls 查看目錄列表   w:可以創建或刪除目錄中的文件   x:可以使用ls -l查看文件列表,也可cd進去   管理命令…

    Linux干貨 2016-08-05
  • 文本

    一,復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒 有任何訪問權限; cp -r /etc/skel/ /home/tuser1 chmod -R go= /home/tuser1 二,編輯/etc/group文件,添加組hadoop; vim /etc/group hadoop:x:100…

    Linux干貨 2016-11-20

評論列表(1條)

  • N27_dxldeng
    N27_dxldeng 2017-11-07 16:51

    非常感謝老師后期對作業有錯漏的地方批改修正。

欧美性久久久久