一、含义
find是linux命令,可以将系统内符合expression的文件列出来。指定文件按名称、类别、时间、大小、权限等不同属性组合时,只有完全相符的才会被列出来。
相对于locate查找命令,find具有精确匹配、实时查找的优势,但是同时由于需要遍历指定路径下的文件,所以查找速度慢,比较耗费系统资源。
二、find命令
find [option] [查找路径] [查找条件] [处理动作]
查找路径:默认当前目录
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示
查找条件:
-name "文件名称":根据文件名称进行查找,支持文件名通配(globbing)
1
2
3
4
|
#查找/etc/下文件名为network的文件
[Linux]
#find /etc/ -name "network"
/etc/sysconfig/network
/etc/rc.d/init.d/network
|
-iname "文件名称":查找时忽略大小写
1
2
3
|
[Linux]
#find /tmp/ -iname abc
/
tmp
/
Abc
/
tmp
/
abc
|
-u username:根据文件属主查找
1
2
3
4
5
|
[Linux]
#find /tmp/ -user hadoop
/
tmp
/
abc.tar.xz
/
tmp
/
etc
/
tmp
/
etc
/
netconfig
[Linux]
#
|
-g groupname:根据文件属组查找
1
2
3
4
5
6
|
[Linux]
#find /tmp/ -group hadoop
/
tmp
/
Abc
/
tmp
/
abc.tar.xz
/
tmp
/
etc
/
tmp
/
etc
/
netconfig
[Linux]
#
|
-uid UID:根据文件UID查找
1
2
3
4
|
[Linux]
#find /tmp/ -uid 500
/
tmp
/
1M
.txt
/
tmp
/
1.5M
.txt
[Linux]
#
|
-gid GID:根据文件GID查找
1
2
3
4
5
|
[Linux]
#find /tmp/ -gid 501
/
tmp
/
2M
.txt
/
tmp
/
1.5M
.txt
/
tmp
/
2.1M
.txt
[Linux]
#
|
-nouser:查找没有属主的文件
1
2
3
4
5
6
|
[Linux]
#find /tmp/ -nouser
/
tmp
/
myMBR
/
tmp
/
3M
.txt
/
tmp
/
abc
/
tmp
/
512K
.txt
[Linux]
#
|
-nogroup:查找没有属组的文件
1
2
3
4
|
[Linux]
#find /tmp/ -nogroup
/
tmp
/
abc
/
tmp
/
512K
.txt
[Linux]
#
|
对查找条件可以组合一起使用:
-a:与;同时满足
1
2
3
4
|
#查找用户为root,且组为hadoop的文件
[Linux]
#find /tmp/ -user root -a -group hadoop
/
tmp
/
Abc
[Linux]
#
|
-o:或;至少一个满足
1
2
3
4
5
6
|
[Linux]
#find /tmp/ -nouser -o -user stu7
/
tmp
/
myMBR
/
tmp
/
3M
.txt
/
tmp
/
abc
/
tmp
/
512K
.txt
[Linux]
#
|
-not|!:非;取反
1
2
3
4
5
6
7
8
9
10
11
|
[Linux]
#find /tmp/ -not -user root
/
tmp
/
myMBR
/
tmp
/
1M
.txt
/
tmp
/
1.5M
.txt
/
tmp
/
abc.tar.xz
/
tmp
/
3M
.txt
/
tmp
/
etc
/
tmp
/
etc
/
netconfig
/
tmp
/
abc
/
tmp
/
512K
.txt
[Linux]
#
|
type:根据文件类型查找文件
f:普通文件
d:目录文件
b:块设备
c:字符设备
l:符号链接
1
2
3
4
5
6
7
8
|
[Linux]
#find /dev/ -type l
/
dev
/
myvg
/
mylv
/
dev
/
myvg
/
snap
-
mylv
/
dev
/
dvd
/
dev
/
cdrom
/
dev
/
md
/
station73.magelinux.com:
5
/
dev
/
MAKEDEV
/
dev
/
core
|
s:套接字
1
2
3
|
[Linux]
#find /dev/ -type s
/
dev
/
log
[Linux]
#
|
p:管道
-size:根据文件大小查找
-size [+|-]#Unit{K|M|G}
#Unit:精确匹配到#到#-1个单位内的文件
1
2
3
4
|
[Linux]
#find /tmp/ -size 2M
/
tmp
/
2M
.txt
/
tmp
/
1.5M
.txt
[Linux]
#
|
+#Unit:匹配大于#个单位的文件
1
2
3
4
|
[Linux]
#find /tmp/ -size +2M
/
tmp
/
3M
.txt
/
tmp
/
2.1M
.txt
[Linux]
#
|
-#Unit:匹配大小为#-1个单位之外的文件
1
2
3
4
5
6
|
[Linux]
#find /tmp/ -size -2M
/
tmp
/
/
tmp
/
myMBR
/
tmp
/
1M
.txt
/
tmp
/
scripttest
/
tmp
/
rc.sysinit
|
根据时间戳查找:
以天为单位(time):支持[+|-]
-atime:访问时间
+#:表示(#+1)天之外访问过的文件
1
2
3
4
5
6
7
|
[Linux]
#find /tmp/ -atime +2
/
tmp
/
myMBR
/
tmp
/
rc.sysinit
/
tmp
/
abc.tar.xz
/
tmp
/
etc
/
netconfig
/
tmp
/
script
[Linux]
#
|
-mtime:修改时间
-#:表示#天之内被修改过的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[Linux]
#find /tmp/ -mtime -2
/
tmp
/
/
tmp
/
2M
.txt
/
tmp
/
1M
.txt
/
tmp
/
1.5M
.txt
/
tmp
/
Abc
/
tmp
/
3M
.txt
/
tmp
/
2.1M
.txt
/
tmp
/
network
/
tmp
/
abc
/
tmp
/
512K
.txt
/
tmp
/
NetworkManager
/
tmp
/
.ICE
-
unix
[Linux]
#
|
-ctime:改变时间
#:表示大于#+1> # >=#天内改变的文件
1
2
3
4
|
[Linux]
#find /tmp/ -ctime 1
/
tmp
/
network
/
tmp
/
NetworkManager
[Linux]
#
|
以分钟为单位(min):支持[+|-]
用法与以天为单位是一样的;就不再举例说明
-amin [+|-]#
-mmin [+|-]#
-cmin [+|-]#
根据权限查找:
-perm [+|-]MODE
MODE:精确匹配
1
2
3
4
5
6
|
#匹配权限精确为444的文件
[Linux]
#find /tmp/ -perm 444
/
tmp
/
1M
.txt
/
tmp
/
1.5M
.txt
/
tmp
/
3M
.txt
[Linux]
#
|
+MODE:任何一类用户的任何一位权限匹配;通常查找某类用户的某特定权限是否存在
1
2
3
4
5
6
7
|
#查找其他用户是否有写权限,0代表不查找
[Linux]
#find /tmp/ -perm +002
/
tmp
/
/
tmp
/
Abc
/
tmp
/
abc
/
tmp
/
.ICE
-
unix
[Linux]
#
|
-MODE:每类用户的指定要检查的权限位都匹配
1
2
3
4
5
|
#查找每类用户都有写权限的
[Linux]
#find /tmp/ -perm -222
/
tmp
/
/
tmp
/
.ICE
-
unix
[Linux]
#
|
处理动作:
-print:打印在标准输出上
-ls:以长格式输出匹配文件的信息
1
2
3
4
|
[Linux]
#find /tmp/ -perm -222 -ls
262145
4
drwxrwxrwt
6
root root
4096
Mar
1
14
:
23
/
tmp
/
262146
4
drwxrwxrwt
2
root root
4096
Mar
1
13
:
48
/
tmp
/
.ICE
-
unix
[Linux]
#
|
-exec COMMAND {} \;:对匹配到的文件执行指定的命令
1
2
3
4
5
6
7
8
9
10
|
[Linux]
#find /tmp/ -iname "*.txt" -exec mv {} {}x \;
[Linux]
#find /tmp/ -iname "*.txtx"
/
tmp
/
512K
.txtx
/
tmp
/
1M
.txtx
/
tmp
/
3M
.txtx
/
tmp
/
ccc.txtx
/
tmp
/
1.5M
.txtx
/
tmp
/
2.1M
.txtx
/
tmp
/
2M
.txtx
[Linux]
#
|
-ok COMMAND {} \;:同于-exec,但是是交互式操作
find ...| xargs COMMAND
1
2
3
4
5
6
7
8
9
|
[Linux]
#find /tmp/ -iname "*.txtx" | xargs ls -lh
-
r
-
-
r
-
-
r
-
-
1
centos gentoo
1.6M
Mar
1
11
:
45
/
tmp
/
1.5M
.txtx
-
r
-
-
r
-
-
r
-
-
1
centos root
1.0M
Mar
1
11
:
43
/
tmp
/
1M
.txtx
-
rw
-
r
-
-
r
-
-
1
root gentoo
2.1M
Mar
1
11
:
44
/
tmp
/
2.1M
.txtx
-
rw
-
r
-
-
r
-
-
1
root gentoo
2.0M
Mar
1
11
:
43
/
tmp
/
2M
.txtx
-
r
-
-
r
-
-
r
-
-
1
stu7 stu7
3.0M
Mar
1
11
:
43
/
tmp
/
3M
.txtx
-
rw
-
r
-
-
r
-
-
1
514
515
512K
Mar
1
11
:
44
/
tmp
/
512K
.txtx
-
rw
-
r
-
-
r
-
-
1
root root
0
Mar
1
14
:
23
/
tmp
/
ccc.txtx
[Linux]
#
|
三、具体实例
1、查找/var/目录属主为root且属组为mail的所有文件;
1
2
3
|
[Linux]
#find /var/ -user root -a -group mail
/
var
/
spool
/
mail
[Linux]
#
|
2、查找/usr目录下不属于root、bin或hadoop的所用文件;
1
2
3
4
5
6
|
[Linux]
#find /usr/ -not \( -user root -o -user bin -o -user hadoop \) |less
/
usr
/
libexec
/
abrt
-
action
-
install
-
debuginfo
-
to
-
abrt
-
cache
/
usr
/
local
/
apache
/
cgi
-
bin
/
test
-
cgi
/
usr
/
local
/
apache
/
cgi
-
bin
/
printenv.wsf
/
usr
/
local
/
apache
/
cgi
-
bin
/
printenv.vbs
/
usr
/
local
/
apache
/
cgi
-
bin
/
printenv
|
3、查找/etc/目录下最近一周内其内容修改过的,且不属于root或hadoop的文件;
1
2
3
|
[Linux]
#find /etc/ -atime -7 -not \( -user root -o -user hadoop \)
/
etc
/
keystone
/
policy.json
[Linux]
#
|
4、查找当前系统上没有属主或属组,且最近1个月内曾被访问过的文件;
1
2
3
|
[Linux]
#find /tmp/ -atime -30 -a \( -nouser -o -nogroup \)
/
tmp
/
abc
[Linux]
#
|
5、查找/etc/目录下大于1M且类型为普通文件的所有文件;
1
2
3
4
5
|
[Linux]
#find /etc/ -size +1M -a -type f
/
etc
/
selinux
/
targeted
/
modules
/
active
/
policy.kern
/
etc
/
selinux
/
targeted
/
policy
/
policy.
24
/
etc
/
gconf
/
gconf.xml.defaults
/
%
gconf
-
tree.xml
[Linux]
#
|
6、查找/etc/目录所有用户都没有写权限的文件;
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[Linux]
#find /etc/ -not -perm +222
/
etc
/
pam.d
/
cups
/
etc
/
openldap
/
certs
/
password
/
etc
/
shadow
/
etc
/
dbus
-
1
/
system.d
/
cups.conf
/
etc
/
shadow
-
/
etc
/
ld.so.conf.d
/
kernel
-
2.6
.
32
-
358.el6
.x86_64.conf
/
etc
/
gshadow
/
etc
/
rc.d
/
init.d
/
lvm2
-
monitor
/
etc
/
rc.d
/
init.d
/
blk
-
availability
/
etc
/
rc.d
/
init.d
/
lvm2
-
lvmetad
/
etc
/
sudoers
[Linux]
#
|
7、查找/etc/目录下至少有一类用户没有写权限;
1
2
3
4
5
6
7
8
9
10
|
[Linux]
#find /etc/ -not -perm -222 | less
/
etc
/
pam.d
/
etc
/
pam.d
/
system
-
auth
-
ac
/
etc
/
pam.d
/
config
-
util
/
etc
/
pam.d
/
runuser
-
l
/
etc
/
pam.d
/
remote
/
etc
/
pam.d
/
setup
/
etc
/
pam.d
/
gdm
-
fingerprint
/
etc
/
pam.d
/
system
-
config
-
users
/
etc
/
pam.d
/
password
-
auth
-
ac
|
8、查找/etc/init.d/目录下,所有用户都有执行权限且其它用户有写权限的文件;
1
2
|
[Linux]
#find /etc/init.d/ -perm -113
[Linux]
#
|
find相对较占用系统资源,所以建议不要经常使用,不过当别人不小心进了你的服务器,这时查找就会方便很多的。
本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1365559,如需转载请自行联系原作者