有些时候我们是想要在系统中查找某个具体的文件,却不知道路径在哪里,只是知道其中的某些特性,比如大小或者名字什么的。这时候就要用到查找工具啦。
在文件系统上查找符合条件的文件命令有两个,locate和find,其中locate是非实时查找即数据库查找。而find是实时查找
locate:
用法:locate [OPTION]… [PATTERN]…
【option】
-i 不区分大小写
-n # 只列举前N个匹配项目
-r 使用扩展正则表达式 查询
locate foo 搜索名称或路径中带有foo的文件
locate -r '\.foo$' 使用扩展正则表达式来搜索以 ".foo" 结尾的文件
查询系统上的文件索引数据库
/var/lib/mlocate/mlocate.db
依赖于实现构建的索引,
索引的构建是在系统较为空闲时自动进行的(周期性任务),也可管理员手动更新数据库(updatedb)
索引构建过程需要遍历整个根文件系统,极消耗资源
工作特点:
查找速度快(只查找数据库中有的数据)
模糊查找
非实时查找(在索引构建之后创建的文件时不能找到的)
搜索的是文件的全路径,不仅仅是文件名
可能只搜索用户具备读取和执行权限的目录
find:
find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]
即:find [option] [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径,【默认为当前目录】
查找条件:指定的查找标准,可以文件名、大小、类型、权限等。默认找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
【查找条件】
根据文件名和inode查找:
-name “文件名称”: 支持使用glob (文件名通配符) *,?,[],[^]
-iname “文件名称” : 不区分字母大小写
inum n 按inode号查找
-samefile name 相同inode号的文件
-links n 链接数为n的文件
-regex “PATTERN”:以pattern匹配整个文件路径字符串,而不仅仅是文件名称
根据属主属组查找:
-user username:
-group groupname:
-uid userid:
-gid groupid:
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
根据文件类型查找:
-type type: f,d,l,s,b,c,p
根据组合条件查找:
-a -o -not=!
根据文件大小来查找:
-size [+|-]#UNIT (k,M,G)
#UNIT (#-1,#] –> 如6k 即(5k,6k] 5k到6k 但不包括5k
-#UNIT:[0,#-1] –>如6k 即[0,5k]
+#UNIT:(#,∞) 大于# 但不包括#
根据时间戳查找:
以 【天】为单位
-atime[+|-]# : [0,#) [#,#+1) [#+1,∞]
-mtime[+|-]# :
-ctime[+|-]# :
以【分钟】为单位
-amin[+|-]# :
-mmin[+|-]# :
-cmin[+|-]# :
根据权限查找:
-perm [/|-] mode
mode : 精确匹配,不能多不能少
/mode 或+mode : 或关系 ugo中 只要有一个匹配即可
-mode : ugo必须至少拥有或比mode更多权限
【处理动作】
-print:默认处理动作
-ls:类似于对查找到的文件执行 ls -l
-delete:删除查找到的文件
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-ok commond {} \; 对查找到的每个文件执行有commond指定的命令,每个文件执行前都要交互式确认
-exec commond {} \; 对查找到的每个文件执行有commond指定的命令
{}:用于引用查找到的文件名称自身
例:
find -name “*.conf” -exec cp {} {}.orig \;
•备份配置文件,添加.orig这个扩展名
find /tmp -ctime +3 -user joe -ok rm {} \;
•提示删除存在时间超过3天以上的joe的临时文件
find ~ -perm -002 -exec chmod o-w {} \ ;
•在你的主目录中寻找可被其它用户写入的文件
find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
•在 /data 目录中 找出所有 以.sh 结尾没有执行全选的文件 增加执行权限
find /home -type d -ls
找出所有/home 目录下的 目录 列出详细信息
find /var -u root -g mail
find /var not \(-user root -o -user lp -o -user gdm \)
find /var -ctime -7 -not \( -user root -o -user postfix \)
find / -nouser -nogroup -atime -7
find /etc -size +1M -type f
find /etc -not \( -perm +222 \)
find /etc -not \( -perm -222 \)
find /etc/init.d -perm /113
find /etc -path '/etc/sane.d' -a -prune -o -name "*.conf" -print
find /etc -path '/etc/front*' -prune -o -path '/etc/hu*' -prune -o -path '/etc/lib*' -prune -o -path '/etc/se*' -prune -o -path '/etc/init' -prune -o -name "*.conf" -print
–joker的部落阁
原创文章,作者:joker,如若转载,请注明出处:http://www.178linux.com/61122