linux之文件查找
locate本地文件查找
实际操作即检索其数据库文件
/var/lib/mlocate/mlocate.db 数据库文件
updatedb 更新数据库
locate [options] FILES
-i 忽略大小写
-n # 只列举前#个匹配项目
-r 支持基本正则表达式
locate可实现根据用户权限,只显示相关文件,可能只搜索用户具备读取和执行权限的目录(此功能在locate自身实现)
find详解find命令用来做什么?
find命令作用机制
find命令的优缺点
find命令的使用
find命令用来做什么?首先查看man文档中find命令的介绍,search for files in a directory hierarchy,在目录层级中查找文件。
由其意可知道该命令用来查找文件。
find命令作用机制那么find命令是如何查找文件的呢?
find命令使用的是遍历查询(逐个查找)的方法,在各个层级遍历,最终找到目标文件。
find命令的优缺点find命令有许多的条件限定,然后也是遍历当前文件系统所查询,因此有以下各优缺点:
优:
1 查找精确
2 实时查找
缺:
1 消耗资源,查询所需时间稍久
### find命令的使用格式: find [path...] [options] [tests] [actions]
path:查找路径;默认为当前目录
options:选项,find的各类选项
tests:匹配文本条件
actions:查找之后find对查询到的结果的执行动作
不写路径时,默认搜索当前目录
options:
-maxdepth levels:查找的路径最大层级深度
-mindepth levels:查找的路径最小层级深度
example:
查看/etc下的一级子文件
# find /etc -maxdepth 1
tests:
文件名
-iname pattern:忽略大小写
-name pattern:根据文件名查找
此处的pattern是globbing匹配的标准
example:
查询以s或S开头的文件
# find /etc -iname s*
-regex pattern:基于正则表达式模式查找文件,匹配的是整个路径,而不是文件名
example:
根据匹配条件匹配路径
# find /etc -regex '.*ts'
权限
权限分三类:u、g、o
-perm [-|/]mode
mode:精确查询,完全符合mode的文件
(如:222,匹配到的必须是222)
/mode: 三类权限中一类中达到mode标准即可
(如:222,匹配到的可以是121、112、211、222等,如:777,匹配到的是,只要有权限即可匹配)
-mode: 三类权限全部要达到标准
(如:222,匹配到的权限可以是222、333、444等等)
example:
查找/var目录下,所有用户都是只读权限的文件
# find /var -perm 222
查找/var目录下,至少有一类用户有读权限的文件
# find /var -perm -222
查找/var目录下,所有用户有读权限的文件
# find /var -perm /222
文件类型
-type #:
b:block,块设备文件
c:character,字符设备文件
d:directory,目录
p:pipe,管道
f:regular file,文件
l:symbolic link,符号链接
s:socket,套接字文件
example:
查找/dev目录下的字符设备
# find /dev -type c
文件属主属组:
-uid n:查找属主为指定uid的文件
-gid n:查找属组为指定gid的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
-user username:查找指定属主名的文件
-group groupname:查找指定属组名的文件
example:
查找/etc目录下uid为100的用户所拥有的文件
# find /etc -uid 100
查找/etc目录下没有属主的文件
# find /etc -nouser
查找/etc目录下属主名为sadan的文件
# find /etc -user sadan
以下参数代表意义:
+n:大于n
-n:小于n
n:等于n
时间戳:
按天查询:
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-mtime [+|-]n
-ctime [+|-]n
按分钟查询:
-amin [+|-]n
-mmin [+|-]n
-cmin [+|-]n
example:
查找/var目录下,三天前访问过的文件
# find /var -atime +3
查找/var目录下,五天内修改过的文件
# find /var -mtime -3
查找/var目录下, 昨天这个时间移动过的文件
# find /var -ctime 1
查找/var目录下,一分钟以前访问过的文件
# find /var -amin +1
文件大小:
-size [+|-]#UNIT
常用单位:k, M, G,c(byte)
#UNIT: (#-1, #]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)
example:
查找/etc目录下大于7k的文件
# find /etc -size +7k
查找/etc目录下小于10M的文件
find /etc -size -10M
查找/etc目录下等于15b的文件
find /etc -size 15b
actions:
-delete:删除查找到文件
-ls:相当ls -l命令,显示文件长格式信息
-fls file:将查找文件显示长格式并保存到指定文件中
-ok COMMAND {} \; 需要用户进行确定之后再执行指定操作
-exec COMMAND {} \; 直接执行指定操作
其{}代表的是前面匹配到的内容
条件关系:
不加关系符号时,默认为与关系
! | -not : ! expr2; 非
-o: expr1 -a expr2; 或
-a: expr1 -a expr2; 与
()需要加\ 如:\(\)
example:
查找/etc下,前天到今天为止访问过的大小为4k的文件,并删除
find /etc -atime -2 -a -size 4k -delete
查找/var目录下属主为root,且属组为mail的所有文件,并显示长格式信息
find /var -user root -a -group mail -ls
查找/var目录下属主不为root,且属组不为mail的所有文件,并将查找到的文件保存到/tmp目录中
find /var !\(-user root -o -group mail\) -fls /tmp
查找/etc目录下大于1M且类型为普通文件,并让交互式删除
find /etc -size +1M -a -type f -ok rm -rf {} \;
查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限,将查询到的文件改名为*.new
find /etc/init.d -perm -111 -a -perm 002 -exec mv {} {}.new \;