文件查找:
locate,非实时查找,在临时数据库里进行查找,模糊匹配。
[root@localhost ~]# locate passwd 查找当前系统里有没有passwd这个文件
updatede 手动生成临时数据库
优势:速度快,占用资源少
find:实时查找,精确查找,遍历指定目录中的所有文件,速度慢。支持众多查找标准。支持正则表达式
格式:find 查找路径查找标准 查找到以后的处理动作
省略查找路径,就默认为当前目录
省略查找标准,默认为指定路径下的所有文件
处理动作:默认为显示
匹配标准:-name 根据文件名精确查找
[root@localhost~]# find /etc -name ‘passwd‘ 查找etc下是否有passwd这个文件
文件名通配:
? 匹配文件名中的任何单个字符。
[...] 匹配[ ]中所包含的任何字符。
[!...] 匹配[ ]中非感叹号!之后的字符。
* 匹配文件名中的任何字符串,包括空字符串。
如:
5* 5开头的所有字符串
*5 5结尾的所有字符串
*5? 以5为倒数第二个字符的字符串
[0-9] 所有以数字的字符
[1,2] 1或者2
[!0-9] 不是数字的字符
[root@localhost ~]# find /etc -name ‘passwd*‘ 查找etc下passwd开头的所有文件
[root@localhost ~]# find /etc -name ‘*passwd‘ 查找etc下passwd结尾的所有文件
[root@localhost ~]# find /etc -name ‘*passwd*‘查找etc下名字包含passwd的所有文件
-iname 文件名匹配不区分大小写
-regex PATTERN基于正则表达式进行文件名匹配
-user 根据文件的属主进行进行查找
[root@localhost ~]# find /tmp -user root 查找tmp下属于root的文件
-group 根据属组进行查找
-uid根据uid查找
-gid 根据gid查找
-nouser 查找没有属主的文件
[root@localhost ~]# find /tmp –nouser 查找 tmp下没有属主的文件
-nogroup 查找没有属组的文件
-type根据文件类型查找
f 普通文件
d 目录
c字符设备
b 块设备
l 链接文件
p 管道设备
s套接字文件
[root@localhost ~]# find /tmp -type d 查找tmp下的目录
[root@localhost ~]# find /tmp -type s查找tmp下的套接字文件
-size 指定查找文件的大小
[+|-]#K
#M
[root@localhost ~]# find /etc/ -size 1M –ls 查找etc下1M或接近1M的文件。并执行ls
[root@localhost ~]# find /etc/ -size -1M –ls 查找etc下 所有小于1M的文件并执行ls
[root@localhost ~]# find /etc/ -size +1M –ls查找etc下 所有大于1M的文件并执行ls
#G
组合条件:
-a与
-o 或
-not 非
默认是与操作
[root@localhost ~]# find /tmp -nouser –a -type d 查找tmp下没有属主并且文件类型为目录的文件
[root@localhost ~]# find /tmp -nouser -o -type d 查找tmp下没有属主或者文件类型为目录的文件
[root@localhost ~]# find /tmp -not -type d 查找tmp下非目录的文件
1.查找tmp不是目录或者不是套接字文件的文件
[root@localhost ~]# find /tmp -not -type d -o -not -type s
2.查找当前文件属主下既不是user1又不是user2的文件
[root@localhost ~]# find ./ -not -user user1 -a -not -user user2
[root@localhost ~]# find ./ -not \( -user user2 -o -user user1 \)
3.查找当前目录下属主不是user1或者类型不是目录的文件
[root@localhost tmp]# find ./ -not -user user1 -o -not -type d
[root@localhost tmp]# find ./ -not \( -user user1 -a -not -type d \)
-mtime 最近一次的创建时间,多少天
-ctime 最近一次的改变时间
-atime 最近一次的访问时间
[+|-]# +表示至少几天没访问
-5表示5天之内没有访问过
5表示刚好5天没有访问过
-mmin 多少分钟
-cmin
-amin
[+|-]#
[root@localhost~]# find /tmp -amin +5 查找tmp下至少5分钟没有访问过的文件,或者说5分钟之前访问过的文件
[root@localhost ~]# find /tmp -atime +7 查找tmp下至少7天没有访问过的文件
-perm MODE 根据文件权限查找,默认为精确匹配,9位权限都必须匹配
[root@localhost~]# find /tmp -perm 755 -ls 查找tmp下文件权限为755的文件并显示
-perm –MODE包含匹配9位权限 ,列如查找644权限的文件,755也会显示,只要权限包含有644的9位权限都能被查找
-perm /MODE9位权限中有1位匹配就行
[root@localhost~]# find /tmp -perm /755 -ls 查找 tmp下9个权限中有一个权限能匹配到的文件
查找当前文件下 其他用户有执行权限的文件
[root@localhost~]# find ./ -perm -001
动作:
-print:显示
-ls:类似类似ls- l的形式显示每个匹配到的详细文件
-ok COMMAND {} \; -ok会让用户确认每一个操作 。{}表示引用查找到的文件
-exec COMMAND {} \;
[root@localhost~]# find ./ -perm -006 -exec chmod o-w {} \; 查找当前目录下其他用户有读和写权限的文件,并把写权限去掉
[root@localhost~]# find ./ -type d -exec chmod +x {} \;找到当前文件下为目录的文件并把属主,属组合其他用户 都加上执行权限
[root@localhost~]# find ./ -perm -020 -exec mv {} {}.new \;查找当前文件下属组有写权限的文件并把其名字改成原名字加.new
查找当前目录下文件名为.sh结尾并且所有用户都有执行权限的文件,然后把其他用户的执行权限删除
[root@localhost~]# find ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \;
1、 查找/var目录下属主为root并且属组为mail的所有文件
[root@localhost ~]# find /var -user‘root‘ -a -group ‘mail‘
2、 查找/usr目录下不属于root,bin,或student的文件
[root@localhost ~]# find /usr -not-user ‘root‘ -a -not -user ‘bin‘ -a -not -user ‘student‘
3、 查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件
[root@localhost ~]# find / -ctime -7-a -not -user ‘root‘ -a -not -user‘student‘
4、 查找当前系统上没有属主或者属组且最近1天内容曾被访问过的文件,并将其属组属主改为root
[root@localhost ~]# find / \( -nouser-o -nogroup \) -a -atime -1 -exec chown root:root {} \;
5、 查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefile文件中
[root@localhost ~]# find /etc -size+1M >> /tmp/etc.largefiles
[root@localhost tmp]# find /etc -size+1M -exec echo {} >> /tmp/etc.largefiles \;
[root@localhost tmp]# find /etc -size+1M | xargs echo > /tmp/etc.largefiles
6、 查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息
[root@localhost ~]# find /etc -not -perm /222 –ls
xargs: 不用占位符{} ,也不需要\ 。但是需要管道|放到xargs前面
本文出自 “linux运维” 博客,谢绝转载!
原文地址:http://coolcl.blog.51cto.com/4514424/1785786