find命令详解
我们在日常使用电脑的时候,经常需要查找某个文件,这时我们就可以是用find命令来进行查找,find命令可以基于文件各种属性,查找一个目录来查找文件,find命令是一个功能非常强大的命令,但是当服务器负载比较重的时候,还是等待系统空闲时候用比较好,find命令使用时对CPU,内存资源消耗是比较大的,为了服务的稳定性,还是建议等待系统空闲下来再使用find命令。(PS:如果能用locate解决的问题最好就不要使用find了,毕竟locate更加节省资源。)
find命令的语法
find[OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录;
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;默认输出至屏幕;
根据文件名或者正则表达是查找;
-neme "pattern"
例如:[root@localhost ~]# find /etc/sysconfig/ -name network
/etc/sysconfig/netwok
这个是区分大小写的,用find [查找路径] -ineme "pattern"查找是将不会区分大小写。
例如:[root@localhost ~]# find /etc/sysconfig/ -iname network
/etc/sysconfig/network
/etc/sysconfig/Network
在你的电脑上可能没有Network这个文件,因为这个文件是我自己建立的,不要误以为是-iname条件没有生效,另外这两个命令还支持支持glob风格的通配符。
例如:在/etc/sysconfig目录下查找以net开头的文件
[root@localhost~]# find /etc/sysconfig/ -name net*
/etc/sysconfig/netconsole
/etc/sysconfig/network-scripts
/etc/sysconfig/network-scripts/network-functions
/etc/sysconfig/network-scripts/network-functions-ipv6
/etc/sysconfig/network
根据文件从属关系查找:
-user USERNAME:查找属主指定用户的所有文件;
-group GRPNAME:查找属组指定组的所有文件;
例如: [root@localhost ~]# find /home/ -user root -group hadoop -ls
33859580 0 drwxr-xr-x 2 root hadoop 6 12月 17 20:20 /home/root
-uid UID:查找属主指定的UID的所有文件;
-gid GID:查找属组指定的GID的所有文件;
例如find /home/ -uid 0 -gid 1001 -ls
33859580 0 drwxr-xr-x 2 root hadoop 6 12月 17 20:20 /home/root
-nouser:查找没有属主的文件;
-nogroup:查找没有属组的文件;
使用方法如下:
抱歉,我的主机上没有这样没有属主和属组的文件
根据文件的类型查找:
-type TYPE [f][d][l][b][c][p][s]:
例如:[root@localhost ~]# find /home -type d
/home
/home/hadoop
/home/hadoop/.mozilla
/home/hadoop/.mozilla/extensions
/home/hadoop/.mozilla/plugins
/home/root
组合测试:
与:-a, 默认组合逻辑;
或:-o
非:-not, !
例如:[root@localhost~]# find /home -type d -user root就相当于
[root@localhost~]# find /home -type d -a -user root
/home
/home/root
[root@localhost~]# find /home -type d -o -user root
/home
/home/hadoop
/home/hadoop/.mozilla
/home/hadoop/.mozilla/extensions
/home/hadoop/.mozilla/plugins
/home/root
[root@localhost~]# find /home -type d -o -user root
/home
/home/hadoop
/home/hadoop/.mozilla
/home/hadoop/.mozilla/extensions
/home/hadoop/.mozilla/plugins
/home/root
根据文件的大小查找:
-size [+|-]文件大小n 常用单位:k, M, G
+nM则大于nM
-nM则小于nM
nM则等于nM
例如:
根据时间戳查找:以“天”为单位;
-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]#
这里的+-与上面size的+-类似只不过+变成了n天之前,-变成了n天以内。atime是指定时间之时被存取的文件或目录,mtime是指定时间之时被改动的文件或目录,ctime是指定时间之时被更改的文件或目录。
例如:[root@localhostroot]# find /home/root -atime +1
/home/root/Fedora-i386-20-20131211.1-sda.qcow2
以“分钟”为单位:
-amin [+|-]#
-mmin [+|-]#
-cmin [+|-]#
这个与上面以“天”为单位的操作类似就不多做说明了。
根据权限查找:
-perm [/|-]mode
mode:精确权限匹配;
/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;
9位权限之间存在“或”关系;
-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;
9位权限之间存在“与”关系;
例如find /home -typef -perm 777(查找/home目录下权限为rwxrwxrwx的文件)
find /home -type f -perm /222(查找/home目录下文件u,g,o权限中只要一个有w权限的文件)
find /home -type f -perm -222(查找/home目录下文件u,g,o权限中每个都有W权限的文件)