11文件查找find和locate

有些时候我们是想要在系统中查找某个具体的文件,却不知道路径在哪里,只是知道其中的某些特性,比如大小或者名字什么的。这时候就要用到查找工具啦。

在文件系统上查找符合条件的文件命令有两个,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

(0)
jokerjoker
上一篇 2016-11-27 21:31
下一篇 2016-11-27 22:45

相关推荐

  • N26-第五周

    1、显示当前系统上root、fedora或user1用户的默认shell;[root@localhost ~]# grep -E ‘^(root|fedora|user1)\>’ /etc/passwdroot:x:0:0:root:/root:/bin/bashfedora:x:4002:4002:Fedora Core:/h…

    Linux干货 2017-03-13
  • 通过Xshell 5连接VirtualBox的centos

    环境:VirtualBox  centos6.5 1、使用VirtualBox Host-Only Network模式 2、打开宽带连接,设置属性,选择VirtualBox Host-Only Network共享。(在这里虚拟机centos的IP地址是自动获得,并且可以上网。) 3、虚拟机centos需要     关闭防火墙 :…

    Linux干货 2015-11-07
  • Linux基础之权限管理(含SUID\SGID\STICKY和ACL)

    概述     Linux系统是一个多人多任务的操作系统,系统上同时可能有很多人登录,每个人都会利用系统上的各类资源完成一定的操作。那么如何合理的规范这些用户的行为,保证资源的合理分配,则就需要用到权限管理的相关内容了。权限管理是Linux系统上最基础,也是最重要的一部分内容,本章就简要说明下权限管理的相关内容。内容主要…

    Linux干货 2016-08-04
  • Linux基础目录名称命名法则及功能规定

    Linux中有非常多的目录文件,那么这些目录文件的命令规则,和功能都有那些,今天学习了下,下面是我的学习记录,跟大家分享下。 文件命名规则 (1) 除了/之外,所有字符都合法 (2) 特殊字符如@、#、¥、&、()、-、空格等最好不要使用,当使用空格作为文件名时,执行命令会出错 (3) 避免使用”.”作为文件名的第一个字符,因为在Linux系统中以”…

    Linux干货 2016-08-15
  • 马哥教育网络班22期+第11周课程练习

    week11 1、详细描述一次加密通讯的过程,结合图示最佳。 2、描述创建私有CA的过程,以及为客户端发来的证书请求进行颁发证书。 3、描述DNS查询过程以及DNS服务器类别。 4、搭建一套DNS服务器,负责解析magedu.com域名(自行设定主机名及IP)   (1)、能够对一些主机名进行正向解析和逆向解析;   …

    Linux干货 2016-11-07
  • 马哥教育网络班22期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp vim /tmp/rc.sysinit :%s@^[[:space:]]\+@…

    Linux干货 2016-09-19