命令选项
组合条件
处理动作
实例
1,按名称查找
2,按类型查找
3,按用户名,组名,uid,gid查找
4,按权限查找
5,按大小查找
6,按时间查找


find 查找命令

命令格式
find 查找路径 [选项] 查找内容

find [OPTION]... [查找路径] [查找条件] [处理动作]

命令选项

-name   --按名字查找 
    -i  忽略字母大小写
支持使用glob(通配符)   *, ?, [], [^] 

-teyp --按文件类型查找
b:块设备文档
d:目录
c:字符设备文档
P:管道文档
l:符号链接文档
f:普通文档

-size --通过文件大小查找
+n 查找出大于n的文件
-n 查找出小于n的文件

-uid 按uid查找
-gid 按gid查找
-user 按用户名查找
-nouser 查找没有属主的文件
-group 按属组名查找
-nogroup 查找没有属组的文件

-perm   通过权限查找

组合条件
与:-a
或:-o
非:-not, !
例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)

找出/tmp目录下,属主不是root,且文件名不是fstab的文件;
find /tmp ( -not -user root -a -not -name 'fstab' ) -ls
find /tmp -not ( -user root -o -name 'fstab' ) -ls


处理动作
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令; —— {}: 用于引用查找到的文件名称自身;
-print:默认的处理动作,显示至屏幕;
-ls:类似于对查找到的文件执行“ls -l”命令;
-delete:删除查找到的文件;
-fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中;
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;
对于每个文件执行命令之前,都会交互式要求用户确认;

注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;
有些命令不能接受过多参数,此时命令执行可能会失败;另一种方式可规避此问题:
find 查找路径 [选项] 查找内容 | xargs COMMAND


实例

1,按名称查找

find /etc/ -name grub.conf  --查找/etc目录下的grub.conf文件
find /etc/ -name "*.conf"   --使用通配符,查找/etc/目录下的以.conf结尾的文件,这里一定加上引号,否则会出现问题
find /etc/ -name ".*"   --查找etc下所有隐藏文件

find /test/  -iname Aaa --忽略大小写加上-i

通配符(不是正则表达式):
?       --匹配单个任意字符
*       --0个或多个任意字符
[a-z]   --匹配单个字母
[0-9]   --匹配单个数字

--定义查找的目录层次

find /test/ -maxdepth 1 -name aaa

/test/aaa
# find /test/ -maxdepth 2 -name  aaa
/test/aaa
/test/a/aaa

2,按类型查找

find /etc  -type l |grep grub.conf
find /etc  -type l -name grub.conf  --与-name参数一起写

find /  -type f         --普通文件
find /  -type b         --块文件
find /  -type s         --socket文件
find /  -type c         --字符文件
find /  -type p         --管道文件
find /  -type d         --目录
find /  -type l         --链接文件

3,按用户名,组名,uid,gid查找

        find / -user a
    find / -group a
    find / -uid 533
    find / -gid 533
    find / -nouser      --查出系统的无头文件,就是指没有属主的文件  
    find / -nogroup     --查出系统的没有属组的文件
没有属主和属组的文件,系统管理一般是要去注意的

4,按权限查找

find / -perm  777   --查出所有权限为777的文件,一般也是管理员要注意的

练习:

ll

total 0
-rwxr-xrwx. 1 root root 0 Jul 23 11:42 1
---------x. 1 root root 0 Jul 23 11:42 10
-rwx--xr--. 1 root root 0 Jul 23 11:42 2
-rw-rw--wx. 1 root root 0 Jul 23 11:42 3
-r-xrwx---. 1 root root 0 Jul 23 11:42 4
-r---w--w-. 1 root root 0 Jul 23 11:42 5
--wx-wx-wx. 1 root root 0 Jul 23 11:42 6
--w-r-x--x. 1 root root 0 Jul 23 11:42 7
---xrw-r-x. 1 root root 0 Jul 23 11:42 8
----rwxr--. 1 root root 0 Jul 23 11:42 9

# find . -perm +422 --只有7和10两个文件不符合。+号的意思表示把权限写成9位,然后位与位对比,只要有一位重合,则找出来

# find . -perm -422 --只查出3和5两个文件。-号的意思表示位与位对比,要全部包含重合,则找出来

例:假设/etc/目录下所有文件owner和group为root.root,我要查找一个普通用户user1在/etc/下能读能写的文件.

find /etc/ -perm   -006

5,按大小查找

find / -size +500M  --单位有k,m,g等
find / -size +1G
find /etc -size +50k
find /etc -size +50b    (b在这里不是代表byte,是代表block,并且还不是系统的4096大小的block,这里的大小为512byte)
find /  -size -1M
find /  -size +3c   (c在这里代表byte)vimn
find /   -size +80M -size -100M 

6,按时间查找

# stat 1 |tail -3
    Access: 2014-07-23 11:56:42.297572398 +0800 --atime 阅读过,用cat,tail,head,more,less命令等或者vi访问过,但没有修改;执行过也会改变

Modify: 2014-07-23 11:56:44.836572907 +0800 --mtime 修改过内容,用vi修改过或者echo一个值重定向
Change: 2014-07-23 11:56:44.856885177 +0800 --ctime 改变过内容,属主,属组,权限,创建软链接,硬链接等

-mtime  n   --代表n天前的24小时内   
    +n  --代表n天前(不包含n天本身的24小时)
    -n  --代表n天内

    1   2   3   4   5   6   7
            |-- 2 --|
    <-------    -2  |   | +2    --------------->

find / -mtime 0     --0代表目前当天的24小时
find / -mtime  +1   --修改时间48小时之前
find . -mtime -1    --修改时间往推24小时到现在甚至到将来
find / -mtime  1    --往前推24小时到推48小时之内

    -mmin
    -amin   --与mtime,atime,ctime的单位不同,这是以分钟为单位
    -cmin   

# find / -mmin +30 -mmin -150   --查看30分钟前到150分钟前之内的两个小时内有哪些文件被修改过内容

现在的时间为2014年7月23号14:35分,我现在想查出7月20号那一天哪些文件被修改过内容怎么做?
find / -mtime  3  --这样做代表的是7月19号14:35分到7月20号14:35分