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 \;