find命令的梳理与归纳

一切皆文件,这句linux的最高哲学思想,注定了对文件的学习是linux学习中的重点之一;我们每天和各类文件打交道,但文件系统错综复杂,文件名品类繁多,你是否经常遇到忘记某个文件的路径或文件名?我想这是一个无法回避的问题,所以有一个快速准确高效的文件查找工具对我们来说是意义重大的;接下来梳理两种我们日常用得较多的文件查找工具,方便自己日后的查找和使用;

首先是locate命令:findfiles by name

Locate是一个依赖于事先构建好的索引库进行文件查找的工具,具有以下三个特性:

1.查找速度快:之所以locate具有高效的查找效率,是因为locate利用事先构建好的索引库进行检索,不需要遍历文件系统;

2.非实时查找       :而正是因为locate利用索引库进行检索,索引库是系统周期性地更新,所以locate无法做到实时查找;

3.模糊查找:这个很好理解,locate在查找时,不需要做到精确匹配,文件名中含有pattern字符串即可;

注意:我们在使用时也可以使用updatedb命令手动更新文件索引库,但是更新索引库需要遍历整个文件系统,极其耗费资源;

格式及常用选项:

格式:locate [OPTION]...PATTERN...

常用选项:

-b:只匹配文件基名(basename);

-c:统计出符合条件选项的文件个数;

-r,--regexp:支持正则表达式的格式进行检索;

总的来说,locate命令具有明显的优势,也具有突出的短板;接下来说说更常见,应用更为广泛,功能也更强大的文件查找工具:find;

Find:实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;

工作特性:

1.   查找速度略慢:因为需要遍历整个文件系统,所以速度相对locate较慢;

2.   精确查找:除了字符串匹配,还有很多的匹配条件,可以做到相对精确的查找;

3.   实时查找:直接遍历文件系统,实时查找;

用法:find  [ OPTIONS ]   [查找起始路径]    [查找条件 ]   [处理动作];

查找起始路径:

指定具体搜索目标所在的路径;默认为遍历整个根目录;这样指定有利于减小查找的范围,提高效率,较少资源消耗;

查找条件:

指定的查找标准;根据文件名,大小,类型,从属关系,权限等;默认为找出指定路径下所有文件;

匹配文件名/pattern/;

-name“PATTERN” 支持glob通配符机制;

-iname  “PATTERN”不区分大小写;支持glob通配符机制;

-regex pattern:基于正则表达式查找文件,匹配的是整个路径,而非基名;

根据文件的从属关系查找:

-user:查找属主为指定用户的所有文件;

-group:查找属组为指定组的所有文件;

-uid:查找属主为指定uid的所有文件;

-gid:查找属组指定的gid的所有文件;

-nouser:查找没有属主的文件;

-nogroup:查找没有属组的文件;

根据文件类型查找:

-type:f;d;l;b;c;p;s;

组合测试:

与:-a,默认组合条件;

或:-o,一个条件满足就行了;

非:-not,!;

例如:查找tmp目录下属主不是root,并且文件名含有fstab字符的文件;

find /tmp -not \( -uid 0 -o -iname"*fstab*" \);

根据文件大小查找:

-size[+|-]=unit,常用单位:k,m,G;

#unit:(#-1,#]

-#unit:[0,#-1]

+#unit:(#,oo);

根据时间戳来查找:

以天为单位:(下面的#都表示过去时间,为负更好理解;)

-atime:

#:(#-1,#]

-#:(#,0]

+#:(oo,#-1]

-mtime:

-ctime:

以分钟为单位:

-amin:

-mmin:

-ctime:

根据权限来查找:

-perm(/|-)mode:

mode:精确权限匹配;

/mode:任何一类用户(u,g,o)的权限中的任何一位符合条件及满足;九位权限之间存在“或”关系;

-mode:每一类用户的权限中的每一位同时符合条件即可;九位权限之间存在“与”关系

注意:find  /PATH/TO/FILE  -perm /|-###  /和-两个选项,为0的权限位可以直接忽略,不用作相应匹配;

处理动作:对符合条件的文件做出的,例如删除(-delete);默认为输出至标准输出;经常使用的是列出(-ls)找到文件的具体信息;

处理动作;

-print:输出至标准输出;默认动作;

-ls:类似与对查找到的文件执行“ls -l”,输出文件的详细信息;

-delete:删除,危险!

-okCOMMAND {} \;   :对找到的每个文件执行command命令;每次操作由用户确认;

-exec  COMMAND {} \;   :对找到的文件直接执行命令,没有交互动作;

几个练习题:

查找/usr目录下不属于root,bin或hadoop的所有文件或目录,两种方法;

查找/etc目录下最近一周内容修改过,且属主不是root也不是hadoop的文件或目录;

查找系统下最近一周被访问过,而且没有属主或属组的文件或目录;

注意这里加了-o有可能会影响到后面的选项;

查找/etc下大于1M且类型为普通文件的目录;

查找/etc下所有用户都没有写权限的文件;

查找/etc下至少有一类用户没有执行权限的文件;

查找/etc/init.d/目录下,所有用户都有执行权限,且其他的用户有写权限的所有文件;

时间: 2024-10-21 14:09:13

find命令的梳理与归纳的相关文章

sed命令使用详解归纳

用法 sed [option] 'Address Command' yourfile e.g. sed -n '2,13p' lineuser #打印文件lineuser中第2~13行的内容,-n为option, 2,13为Address,p为Command Address与Command中间的空格也可以省略 sed处理过程 待处理的文件一行一行地被sed读入到模式空间(pattern space)中,根据匹配及相应的处理命令进行输出显示,默认下每个模式空间的内容都会输出 sed常用option

操作和维护经常使用的命令

实习前,有一种做法是兄弟一起过来问我"操作和维护有一些东西你不经常使用的命令状?".我当时就诧异了.好像真没好好归纳一下.所以趁着这几个月时间比較闲,慢慢把平时的经常使用命令归纳一下.然后就我感觉的话,运维命令靠背别人的归纳是非常难学的. 可能每一个人习惯不一样吧,然后最重要还是自己敲的多.所以就当是纯碎是个人笔记.备忘录.假设有记错或者不对的地方,希望大家能够帮忙指正一下 1.find  -name filename find searchparth -name filename 2

[文件]Linux文本处理常用命令总结

转自:https://www.cnblogs.com/sheeva/p/6406285.html 引子 作为一个偏爱windows的程序员,以前做文本处理的时候总是喜欢在windows下用notepad++等图形化工具处理,比如有时需要把linux服务器上一个文件进行一次全局字符串替换这样简单的操作,还得把文件down到本地编辑好再传回去.这两天买了本<鸟哥的Linux私房菜>,终于静下心系统的学习了一下linux下的文本处理,感觉其实没有想象的难,如果早点学会节约下来的大量时间肯定远超过学习

Commvault Oracle备份常用命令

在进行Oracle数据库备份的配置.发起和恢复的过程中,需要用到许多Oracle数据库本身的命令.在此章节中进行命令的梳理,供大家参考. Oracle用户和实例相关命令 Linux/Unix平台 # ps -ef | grep [p]mon orauxdb 18751 1 0 13:47 ? 00:00:00 ora_pmon_uxdb oraprod 19026 1 0 13:49 ? 00:00:00 ora_pmon_prod 每个" pmon"进程中都有Oracle实例名称.

前端工具目录

前面的话 工欲善其事,必先利其器.随着前端工程化愈演愈烈的态势,前端工具在前端领域也占据着重要的作用.小火柴将前端工具的知识体系进行了梳理和归纳,总结成以下目录 目录 前端架构 协作流程 接口设计 版本设计 版本管理 Git基础 Git commit Git基本操作 命令行工具 WindowsCMD Shell常用命令 编辑器 Sublime 预处理器 Markdown Sass

海量数据MySQL项目实战

你好,我是你的数据库老师周彦伟,欢迎来到第 10 课时“MySQL 亿级数据库项目实战”,这是本系列课程的最后一课时,本课时的主要内容包含 MySQL 典型数据库架构介绍.MySQL 主流数据库架构对比等理论性知识,然后从“订单.用户”两个项目实战,抛砖引玉,介绍亿级互联网业务数据库项目如何设计. MySQL 典型数据库架构 数据库架构 我们想要更好地规划和设计 MySQL 数据库架构,首先需要了解典型的数据库架构,它通常由三部分组成: 数据库[原生]架构 高可用组件 中间件 然而,数据库架构又

STM32环境搭建/学习观点/自学方法 入门必看

文章转自armfly开发板V4软件开发手册,分享学习~ 今天有幸看到armfly的开发板软件开发手册,开头的基础知识,真的很有用,还好有看到,一切都不迟,感悟很多,摘抄部分,学习分享~ 关于开发环境的搭建 (个人认为,好用的工具,顺手的开发环境,对于编程是一种好的习惯,也是一种好的享受,所以,在环境搭建方面,我还是比较在意软件的互相联合使用,工程建立的规范化等等,这样可以尽量少的在后期更换不同的环境,变软会很浪费时间,一次到位,一路顺风顺水~) 个人偏好的环境搭建: 集成开发环境(IDE):Ke

HTTP学习目录

前面的话 除了HTML.CSS.javascript这三门前端基础知识之外,HTTP恐怕是前端工程师最需要掌握的知识了,它是前端和后端沟通的桥梁,前端工程师需要能够调试HTTP.修复网络传输中可能遇到的BUG,进而认识到HTTP协议的局限性,从而了解网络性能和安全性等 小火柴将HTTP的知识体系进行了梳理和归纳,总结成以下目录 基础 网络基础 数据传输 网站架构演化 连接管理 组成 URL 报文起始行 报文首部 结构 Web服务器 代理 缓存 网关.隧道和中继 安全 Web攻击技术 客户端识别及

Sqlserver数据库总结

由于公司项目需要这段时间一直在做有关于数据库方面的工作.趁这段时间有空,对数据库方面的知识进行一个梳理和归纳,以便以后需要时,查看起来方便. 使用的数据库主要有ORACLE10g和Sqlserver2008两种,对两种数据库进行分别的展示,内容涉及 数据库基础知识.数据库原理应用.sql语法的使用.函数.存储过程.游标.事务.异构数据的转换.亿级数据的优化等. 1.Sqlserver数据库基础知识 1.1Sqlserver数据库简介 1.2Sqlserver语句执行顺序 1.3Sqlserver