find命令常见用法

 

 


find是linux系统中的一种实时查找工具,通过遍历指定起始路径下文件系统层级结构完成对文件的查找。
find命令的这种查找机制决定了它的一些工作特性:

 

  • 查找速度略慢(只是略慢)
  • 精准查找
  • 实时查找

名称及简要说明

find - search for files in a directory hierarchy
find - 在一个目录层级中查找文件

用法格式简要说明

[OPTIONS]  [查找起始路径]  [查找条件]  [处理动作]

查找起始路径

查找起始路径:指定具体搜索目标起始路径;默认为当前目录;

查找条件

查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等标准进行;默认为找出指定路径下的所有文件;

根据文件名查找

-name
  • -name “pattern”:查找符合“parrtern”模式的文件
#-name示例
[root@centos7u6 ~]# find /etc/ -name fstab
/etc/fstab
[root@centos7u6 ~]# find /etc/ -name fstab1
[root@centos7u6 ~]# 
  • -iname “pattern”:方法同 -name,但是不区分大小写
#-iname示例,为了显示效果,预先/tmp目录下创建了测试文件
[root@centos7u6 ~]# find /tmp/ -name "fstab" 
/tmp/fstab
[root@centos7u6 ~]# find /tmp/ -iname "fstab" 
/tmp/fstab
/tmp/Fstab
/tmp/FSTAB

其中,parrtern支持glob风格的通配符:*, ?, [], [^]等,而不是正则表达式。

  • -regex pattern:基于正则表达式模式查找文件,匹配范围是整个路径,而非基名(不常用)

根据文件从属关系查找

-user
  • -user USERNAME:查找属主为某指定用户的所有文件;
#-user示例,已预先创建好测试用户
[root@centos7u6 ~]# ls -l /tmp/
-rw-rw-r--. 1 test  test    0 Mar 27 16:19 test
-rw-rw-r--. 1 user3 user3   0 Mar 27 16:20 user3
-rw-rw-r--. 1 user4 user4   0 Mar 28 00:43 user4
[root@centos7u6 ~]# find /tmp/ -user test
/tmp/test
-group
  • -group GRPNAME:查找属组为某指定组的所有文件;
#-group示例
[root@centos7u6 ~]# ls -l /tmp/
total 12
-rw-r--r--. 1 user3 user3 465 Mar 27 16:20 fstab
-rw-r--r--. 1 root  root  465 Mar 28 00:33 Fstab
-rw-r--r--. 1 root  root  465 Mar 28 00:33 FSTAB
-rw-rw-r--. 1 test  test    0 Mar 27 16:19 test
-rw-rw-r--. 1 user3 user3   0 Mar 27 16:20 user3
-rw-rw-r--. 1 user4 user4   0 Mar 28 00:43 user4
[root@centos7u6 ~]# find /tmp/ -group user3
/tmp/fstab
/tmp/user3
-uid
  • -uid UID:查找属主为某指定的UID的所有文件;
#-uid示例,实验环境同上,先确认一下几个测试用户的uid
[root@centos7u6 ~]# tail -4 /etc/passwd
test:x:1000:1000:test:/home/test:/bin/bash
user3:x:1001:1001::/home/user3:/bin/bash
user4:x:1002:1002::/home/user4:/bin/bash
user5:x:1003:1003::/home/user5:/bin/bash
[root@centos7u6 ~]# find /tmp/ -uid 1002
/tmp/user4
[root@centos7u6 ~]# 
-gid
  • -gid GID:查找属组为某指定的GID的所有文件;
#-gid示例,实验环境同上
[root@centos7u6 ~]# find /tmp/ -gid 1000
/tmp/test
-nouser
  • -nouser:查找没有属主的文件;
#实验环境同上,先删除测试用户user3
[root@centos7u6 ~]# userdel -r user3
[root@centos7u6 ~]# ll /tmp/
total 12
-rw-r--r--. 1  1001  1001 465 Mar 27 16:20 fstab
-rw-r--r--. 1 root  root  465 Mar 28 00:33 Fstab
-rw-r--r--. 1 root  root  465 Mar 28 00:33 FSTAB
-rw-rw-r--. 1 test  test    0 Mar 27 16:19 test
-rw-rw-r--. 1  1001  1001   0 Mar 27 16:20 user3
-rw-rw-r--. 1 user4 user4   0 Mar 28 00:43 user4
#-nouser示例
[root@centos7u6 ~]# find /tmp/ -nouser
/tmp/fstab
/tmp/user3
-nogroup
  • -nogroup:查找没有属组的文件;
#-nogroup示例,实验环境同上
[root@centos7u6 ~]# find /tmp/ -nogroup
/tmp/fstab
/tmp/user3

根据文件的类型查找

-type TYPE
  • f: 查找普通文件,包括隐藏文件,默认为当前目录
#-type f示例
[root@centos7u6 ~]# ls
anaconda-ks.cfg  test
[root@centos7u6 ~]# find  -type f
./.bash_logout
./.bash_profile
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./.bashrc
./test/fstab
./test/fstab.new
./test/fstab.patch
./test/myfirst.sh
./test/mysecond.sh
  • d: 查找目录文件,查找结果包括目录本身
#-type d示例
[root@centos7u6 ~]# find /dev/ -type d |head -5
/dev/
/dev/vfio
/dev/net
/dev/snd
/dev/hugepages
[root@centos7u6 ~]# 
  • l:符号链接文件
#-type l示例
[root@centos7u6 dev]# find /dev/ -type l  |head -2
/dev/cdrom
/dev/initctl
[root@centos7u6 dev]#
  • b:块设备 文件
#-type b示例
[root@centos7u6 dev]# find /dev/ -type b 
/dev/dm-1
/dev/dm-0
/dev/sr0
/dev/sda2
/dev/sda1
/dev/sda
  • c:字符设备文件
#-type c示例,由于/dev/下有很多字符设备,这里使用tail命令截取2个显示
[root@centos7u6 dev]# find /dev/ -type c |tail -2
/dev/mem
/dev/vga_arbiter
  • p:管道文件
#-type p示例,命令最后的-ls为处理命令,相当对查找到文件进行ls -l操作
[root@centos7u6 dev]# find /run/  -type p -ls
 21651    0 prw-------   1 root     root            0 Mar 27 22:14 /run/dmeventd-client
 21650    0 prw-------   1 root     root            0 Mar 27 22:14 /run/dmeventd-server
 36668    0 prw-------   1 root     root            0 Mar 27 22:14 /run/systemd/inhibit/1.ref
 50539    0 prw-------   1 root     root            0 Mar 28 09:04 /run/systemd/sessions/6.ref
 39251    0 prw-------   1 root     root            0 Mar 27 22:15 /run/systemd/sessions/1.ref
 21646    0 prw-------   1 root     root            0 Mar 27 22:14 /run/systemd/initctl/fifo
[root@centos7u6 dev]# 
  • s:套接字文件
#-type s示例
[root@centos7u6 dev]# find /run/systemd/   -type s  -ls
 21649    0 srw-------   1 root     root            0 Mar 27 22:14 /run/systemd/shutdownd
 21470    0 srwxrwxrwx   1 root     root            0 Mar 27 22:14 /run/systemd/private
  9003    0 srw-rw-rw-   1 root     root            0 Mar 27 22:14 /run/systemd/journal/socket
  9001    0 srw-rw-rw-   1 root     root            0 Mar 27 22:14 /run/systemd/journal/stdout
  8982    0 srwx------   1 root     root            0 Mar 27 22:14 /run/systemd/cgroups-agent
  8980    0 srwxrwxrwx   1 root     root            0 Mar 27 22:14 /run/systemd/notify

根据文件的大小查找

-size
  • -size [+|-]#UNIT
    UNIT常用单位:k, M, G
    #UNIT:(#-1, #]
#-size 9k示例,可以看到查询到的文件大小在8k-9k之间
[root@centos7u6 log]# find  /var/log/ -size 9k  |xargs ls -lh
-rw-------. 1 root root 8.1K Mar 28 10:36 /var/log/boot.log-20190328
-rw-r--r--. 1 root root 8.5K Mar 28 09:04 /var/log/vmware-vmsvc.log

  -#UNIT:[0,#-1]

#-size 2k示例,查找到的文件大小为小于等于1k,包括0k
[root@centos7u6 log]# find /var/log/ -size -2k -ls
16841389    0 -rw-------   1 root     root            0 Mar 13 12:16 /var/log/tallylog
16909558    4 -rw-r--r--   1 root     root          193 Mar 13 12:16 /var/log/grubby_prune_debug
33886056    0 drwxr-xr-x   2 root     root           23 Mar 13 13:44 /var/log/tuned
17137903    0 drwx------   2 root     root           23 Mar 13 13:44 /var/log/audit
    70    0 drwxr-xr-x   2 root     root          176 Mar 13 12:22 /var/log/anaconda
998730    0 -rw-------   1 root     root            0 Mar 13 12:22 /var/log/anaconda/ks-script-dfZNA7.log
16960223    0 drwxr-xr-x   2 root     root            6 Mar 13 12:22 /var/log/rhsm
17111828    0 -rw-------   1 root     root            0 Mar 28 10:36 /var/log/boot.log
17111837    0 -rw-r--r--   1 root     root            0 Mar 13 13:44 /var/log/firewalld
16777697    4 -rw-------   1 root     root          124 Mar 27 14:14 /var/log/yum.log
17138403    0 -rw-------   1 root     root            0 Mar 13 12:17 /var/log/spooler-20190327
16777742    0 -rw-------   1 root     root            0 Mar 27 10:12 /var/log/spooler
17111836    4 -rw-r--r--   1 root     root          678 Mar 13 13:44 /var/log/vmware-network.8.log
17111846    4 -rw-r--r--   1 root     root          700 Mar 13 16:44 /var/log/vmware-network.7.log
17111842    4 -rw-r--r--   1 root     root          678 Mar 25 21:48 /var/log/vmware-network.6.log
16777289    4 -rw-r--r--   1 root     root          700 Mar 25 23:39 /var/log/vmware-network.5.log
17111835    4 -rw-r--r--   1 root     root          678 Mar 26 22:41 /var/log/vmware-network.4.log
16777757    4 -rw-r--r--   1 root     root          678 Mar 27 22:14 /var/log/vmware-network.2.log
[root@centos7u6 log]# 

  +#UNIT:(#, oo)

#-size +300k示例,可以看到+300k,无法查找到大小正好为300k的文件
[root@centos7u6 log]# dd if=/dev/zero of=/var/log/300k.testfile bs=300k count=1
1+0 records in
1+0 records out
307200 bytes (307 kB) copied, 0.000866204 s, 355 MB/s
[root@centos7u6 log]# ll -l /var/log/300k.testfile 
-rw-r--r--. 1 root root 307200 Mar 28 18:36 /var/log/300k.testfile
[root@centos7u6 log]# ll -lh /var/log/300k.testfile 
-rw-r--r--. 1 root root 300K Mar 28 18:36 /var/log/300k.testfile
[root@centos7u6 log]# find /var/log/ -size +300k  |xargs ls -lh
-rw-------. 1 root root 1.4M Mar 13 12:22 /var/log/anaconda/journal.log
-rw-------. 1 root root 323K Mar 28 18:01 /var/log/audit/audit.log
-rw-------. 1 root root 395K Mar 27 10:01 /var/log/messages-20190327

根据时间戳查找

-atime
  • 以“天”为单位:
    -atime [+|-]#
    #:[#, #-1)
    -#:(#, 0]
    +#:(oo, #-1]
#-atime 1示例,命令查找结果为距离当前系统时间,24<=$date<48小时,被访问过的文件
[root@centos7u6 log]# date
Thu Mar 28 19:36:50 CST 2019
-rw-r--r--. 1 root root 5.7K Mar 27 22:14 tuned.log
[root@centos7u6 log]# find /var/log/ -atime 1 |xargs ls -lh
-rw-------. 1 root root  25K Mar 27 10:12 /var/log/boot.log-20190327
-rw-------. 1 root root 5.9K Mar 28 19:01 /var/log/cron
-rw-r--r--. 1 root root 120K Mar 26 22:41 /var/log/dmesg.old
-rw-------. 1 root root 107K Mar 28 09:03 /var/log/maillog
-rw-------. 1 root root 136K Mar 28 19:01 /var/log/messages
-rw-------. 1 root root 4.1K Mar 28 09:04 /var/log/secure
-rw-------. 1 root root    0 Mar 27 10:12 /var/log/spooler
-rw-r--r--. 1 root root 4.1K Mar 27 09:22 /var/log/vmware-network.3.log
-rw-r--r--. 1 root root  678 Mar 26 22:41 /var/log/vmware-network.4.log
-rw-------. 1 root root  124 Mar 27 14:14 /var/log/yum.log
#-atime +7示例,查找大于7天没被访问过的文件
[root@centos7u6 log]# find /etc/  -atime +7 |tail -5 | xargs ls -lh
-rw-r--r--. 1 root root  12K Mar 13 13:44 /etc/aliases.db
-rw-r-----. 1 root root 1.8K Oct 30 22:38 /etc/sudo.conf
-r--r-----. 1 root root 4.3K Oct 30 22:38 /etc/sudoers
-rw-r-----. 1 root root 3.2K Oct 30 22:38 /etc/sudo-ldap.conf
-rw-r--r--. 1 root root  163 Mar 13 12:15 /etc/.updated
#atime -1示例,查找/root/下,被访问时间<24小时的文件
[root@centos7u6 tmp]# find /root/ -atime -1 -ls
33574977    0 dr-xr-x---   3 root     root          183 Mar 28 14:42 /root/
33915950    4 -rw-r--r--   1 root     root          176 Dec 29  2013 /root/.bash_profile
33575020    8 -rw-------   1 root     root         4747 Mar 28 01:17 /root/.bash_history
33575031    0 drwxr-xr-x   2 root     root           92 Mar 28 09:09 /root/test
33619012    4 -rw-------   1 root     root           40 Mar 28 14:41 /root/.lesshst
33960893    4 -rw-r--r--   1 root     root           80 Mar 28 14:41 /root/test_fls.txt
-mtime
-ctime
  • 以“分钟”为单位:
-amin
-mmin
-cmin

根据权限查找

-perm
  • -perm [/|-]mode
    mode:精确权限匹配;
#mode示例,查找/root/test/目录下,权限为777的文件
[root@centos7u6 test]# ll
total 20
-rwxrwxrwx. 1 root root   0 Mar 28 20:09 a
-r--r-----. 1 root root   0 Mar 28 20:09 b
-rw-r--r--. 1 root root 478 Mar 27 14:29 fstab
-rw-r--r--. 1 root root 522 Mar 27 14:26 fstab.new
-rw-r--r--. 1 root root  79 Mar 27 14:27 fstab.patch
-rwxr-xr-x. 1 root root  92 Mar 26 23:08 myfirst.sh
-rw-r--r--. 1 root root  46 Mar 26 23:25 mysecond.sh
[root@centos7u6 test]# 
[root@centos7u6 test]# 
[root@centos7u6 test]# find /root/test -perm 777
/root/test/a
[root@centos7u6 test]# find /root/test -perm 777 -ls
33619011    0 -rwxrwxrwx   1 root     root            0 Mar 28 20:09 /root/test/a
[root@centos7u6 test]# 

/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;
9位权限之间存在“或”关系;

#-perm /mode示例,查找/root/test/目录下,属主、属组、其他中至少一个有写权限的文件
[root@centos7u6 test]# ll
total 20
-rwxrwxrwx. 1 root root   0 Mar 28 20:09 a
-r--r-----. 1 root root   0 Mar 28 20:09 b
-rw-r--r--. 1 root root   0 Mar 28 20:13 c
-rw-r--r--. 1 root root 478 Mar 27 14:29 fstab
-rw-r--r--. 1 root root 522 Mar 27 14:26 fstab.new
-rw-r--r--. 1 root root  79 Mar 27 14:27 fstab.patch
-rwxr-xr-x. 1 root root  92 Mar 26 23:08 myfirst.sh
-rw-r--r--. 1 root root  46 Mar 26 23:25 mysecond.sh
[root@centos7u6 test]# find /root/test/ -perm  /222 -ls
33575031    0 drwxr-xr-x   2 root     root          119 Mar 28 20:13 /root/test/
33575033    4 -rw-r--r--   1 root     root          478 Mar 27 14:29 /root/test/fstab
33960891    4 -rw-r--r--   1 root     root          522 Mar 27 14:26 /root/test/fstab.new
33960889    4 -rw-r--r--   1 root     root           79 Mar 27 14:27 /root/test/fstab.patch
33575032    4 -rwxr-xr-x   1 root     root           92 Mar 26 23:08 /root/test/myfirst.sh
33575038    4 -rw-r--r--   1 root     root           46 Mar 26 23:25 /root/test/mysecond.sh
33619011    0 -rwxrwxrwx   1 root     root            0 Mar 28 20:09 /root/test/a
33960890    0 -rw-r--r--   1 root     root            0 Mar 28 20:13 /root/test/c
[root@centos7u6 test]# 

-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;
9位权限之间存在“与”关系;

#-mode示例,查找/root/test/目录下,权限至少为755的文件
[root@centos7u6 test]# ls -l
total 20
-rwxrwxrwx. 1 root root   0 Mar 28 20:09 a
-r--r-----. 1 root root   0 Mar 28 20:09 b
-rw-r--r--. 1 root root   0 Mar 28 20:13 c
-rw-r--r--. 1 root root 478 Mar 27 14:29 fstab
-rw-r--r--. 1 root root 522 Mar 27 14:26 fstab.new
-rw-r--r--. 1 root root  79 Mar 27 14:27 fstab.patch
-rwxr-xr-x. 1 root root  92 Mar 26 23:08 myfirst.sh
-rw-r--r--. 1 root root  46 Mar 26 23:25 mysecond.sh
[root@centos7u6 test]# find /root/test -perm -755 -ls
33575031    0 drwxr-xr-x   2 root     root          119 Mar 28 20:13 /root/test
33575032    4 -rwxr-xr-x   1 root     root           92 Mar 26 23:08 /root/test/myfirst.sh
33619011    0 -rwxrwxrwx   1 root     root            0 Mar 28 20:09 /root/test/a

处理动作

处理动作:对符合查找条件的文件做出的操作,例如删除等操作;默认为输出至标准输出;

常用选项

-print
  • -print:输出至标准输出;默认的动作;
[root@centos7u6 dev]# find /etc/ -name fstab
/etc/fstab
[root@centos7u6 dev]# 
-ls
  • -ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
[root@centos7u6 dev]# find /etc/ -name fstab -ls
16777282    4 -rw-r--r--   1 root     root          465 Mar 13 12:15 /etc/fstab
-delete
  • -delete:删除查找到的文件;(危险操作)
[root@centos7u6 tmp]# ls /tmp/
fstab  Fstab  FSTAB  test  user3  user4  vmware-root_6179-1991648272
[root@centos7u6 tmp]# find /tmp/  -name FSTAB -delete
[root@centos7u6 tmp]# ls /tmp
fstab  Fstab  test  user3  user4  vmware-root_6179-1991648272
-fls
  • -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
[root@centos7u6 ~]# find /root/ -name test -fls /root/test_fls.txt
[root@centos7u6 ~]# ls
anaconda-ks.cfg  test  test_fls.txt 
-ok COMMAND {} ;
  • -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
[root@centos7u6 tmp]# ls /tmp/
fstab  Fstab  test  user3  user4  vmware-root_6179-1991648272
[root@centos7u6 tmp]# find /tmp/ -iname "fstab" -ok rm {} \; 
< rm ... /tmp/fstab > ? y
< rm ... /tmp/Fstab > ? y
[root@centos7u6 tmp]# ls /tmp
test  user3  user4  vmware-root_6179-1991648272
-exec COMMAND {} ;
  • -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;不再每次操作都进行确认;
#-exec示例,查找/tmp/下的权限为644的文件,并对其文件名添加.new后缀
[root@centos7u6 tmp]# ls -l
total 0
-rw-rw-r--. 1 test test 0 Mar 27 16:19 test
-rw-r--r--. 1 root root 0 Mar 28 20:33 user3
-rw-r--r--. 1 root root 0 Mar 28 20:33 user4
drwx------. 2 root root 6 Mar 28 09:02 vmware-root_6179-1991648272
[root@centos7u6 tmp]# find /tmp/ -perm 644 -exec mv {} {}.new \;
[root@centos7u6 tmp]# ls -l
total 0
-rw-rw-r--. 1 test test 0 Mar 27 16:19 test
-rw-r--r--. 1 root root 0 Mar 28 20:33 user3.new
-rw-r--r--. 1 root root 0 Mar 28 20:33 user4.new
drwx------. 2 root root 6 Mar 28 09:02 vmware-root_6179-1991648272
[root@centos7u6 tmp]# 

注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,再一次性传递给后面的命令;但是有些命令不能接受过长的参数(例如有些命令只能有一个参数),此时命令执行会失败;另一种方式可规避此问题:
find | xargs COMMAND

其他

前面的一些示例,也简单的使用了xargs,对于xargs较为详细的用法,将在后面进行总结。

 

转载于:https://www.cnblogs.com/Demon-Loong/p/10618103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值