命令选项
组合条件
处理动作
实例
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分