12 文件查找--find命令
之前,我们学习过grep来过滤文件内容,而这种查找找的是某一个文件内的内容;以及 less 或者 man 或者上一节提到的 vim 编辑器中的 / 与 ? 都是用来查找单个文件内的内容。而这一节,我们提到的内容为查找符合条件的文件;
查找依据则大体离不开 ls -l 长整形里面的相关内容;
文件查找
我们先回顾下Linux下,通过 ls -l 查看文件的相关属性:文件类型“d”,表示目录文件,文件权限“rwxr-xr-x.”属主、属组、其他用户的权限,“2”表示软连接数,root属主,root属组,4096size大小(通过-h可以转换为有单位的大小值),Jan 30 18:28为change time(通过stat命令可以查看atime/mtime/ctime,通过touch加参数可以修改这三个时间),最后一个即文件名;
locate
非实时,模糊查找。可以通过“yum install mlocate”安装locate查找工具;
locate查找是先要建立一个数据库,让后再从数据库里面来查找对应的类容,我们可以通过 updatedb 命令来生成这个数据库;但是在最开始使用的时候,数据库生成会比较慢;
locate的优势是查找文件比较快速;但是该命令使用较少;
*find
接下来我们重点介绍find命令;
相对于locate而言,find实现的是实时查找,精确查找,因为他会遍历查找时所指定的所有文件内容,缺点是相对于locate而言,速度较慢;
用法:
find 查找路径 查找标准 查找后执行的处理动作
查找路径:如果不写,即默认为当前目录
查找标准:默认为指定路径下的所有文件
处理动作:默认为显示到屏幕上
查找标准:
常见参数
-name 'FILENAME' 对文件名做精确匹配
例如:find /etc/ -name 'passwd'
其中'FILENAME'还支持文件名通配符,* ? []
例如:find /etc/ -name '*passwd'
-iname 'FILENAME' 对文件做精确查找,但是不区分文件名的大小写
-regex PATTERN 使用正则表达式来进行文件查找
-user USERNAME 基于文件的属主来查找文件
例如:find /tmp -user hadoop
-group GROUPNAME 基于文件的属组来查找文件
例如:find /tmp -group hadoop
-uid UID 基于文件的UID来查找文件
-gid GID 基于文件的GID来查找文件
【这里需要注意的是,如果用户以及用户组一旦被删除掉,这个用户的属主和属组就没有了,就只能通过uid以及gid来进行查找】
-nouser 查找没有属主的文件【一般需要定期删除掉没有属主的文件,或者,将这些文件归到root用户下来,保证系统的安全性】
-nogroup 查找没有属组的文件
例如:find /tmp -nogroup
例如:find /tmp -nouser
-type 根据文件类型进行查找
f 表示普通文件
d 表示目录文件
c 表示字符文件
b 表示块文件
l 表示连接文件
p 表示管道文件
s 表示套接字文件
例如:find /etc -type l
-size 根据文件的大小来查找【这里要注意的是,大小并不是严格的大小,例如10M,可能找出来的文件是9M到11M之间大小的文件都会被过滤】
数字k
数字M
数字G
[+|-]数字k #这个表示查找大于,或者小于多少的文件
如果不加单位,默认查找的大小就是字节;
例如:find /etc -size +100k
条件组合
以上条件都可以根据 与 或 非的逻辑关系进行管理,同时使用多个条件来进行查找;
-a 与,同时满足多个条件时才能被赛选出来【默认多个条件之间就是“与”关系】
-o 或,多个条件中只需要满足一个条件即可被赛选出来
-not 非,不满足条件的文件才会被选出来
例如:find /tmp -nouser -a -type d
find /tmp -nouser -o -type d -ls
find /tmp -not -type d
find /tmp/test -not -user user1 -a -not -user user2
find /tmp/test -not \(-user user1 -o -user user2 \)
find /tmp -not -user user1 -o -not type d
find /tmp -not \(-user user1 -a type d \)
时间戳查找
-mtime 修改时间(一般是只的文件内容变更过的时间)
-atime 访问时间(被查看过的时间,没有修改任何内容)
-ctime 属性修改时间(比如属主、属组或者权限等内容改变的时间)
[+|-]数字 通过正负号来指定时间是几天内,还是几天外,正号表示几天外,而负号则表示几天内,如果没有正负号,则表示访问当天;
例如:find /tmp -mtime +5
上面的三个参数,都是以天来计算单位的,如果想要以分钟为单位来进行查找,则使用下面的三个option:
-mmin 修改时间(分钟)
-cmin 属性改变时间(分钟)
-amin 访问时间(分钟)
[+|-]数字 同样可以使用正负号来表示范围
例如:find /tmp -amin -5 #五分钟内访问过的文件
find /tmp -cmin +10 #十分钟前属性改变过的文件
【这里注意下/tmp目录,在该目录下30天没有访问的文件,会自动被系统删除掉】
根据权限来查找文件
-perm MODE 根据文件的权限来查找文件,这是精确查找
例如:find /tmp -perm 644
-perm -MODE 查找包含条件的文件
例如:find /tmp -perm -644 #即查找文件权限小于644的文件,均满足条件,例如文件权限如果是500权限,500被644包含,所以满足条件
-perm /MODE 九位权限只要有一位满足即可
例如:find /tmp /640 #在这九位权限中,只要有一位匹配到即可,例如640是rw-r-----,有一个文件权限为 --- r-- --- 其中属组的r权限匹配成功,此文件就满足条件
处理动作
一般在文件查找出来以后,我们需要对文件进行处理,常见的处理参数如下:
-print 显示查找文件内容
-ls 类似于ls -l的形式显示每一个文件的详细信息
-ok COMMAND {} \; -ok指定处理命令,{}表示调用前面查找出来的内容,必须以 \; 结尾,则是格式要求
例如:find /tmp -nouser -ok rm -rf {} \;
-exec COMMAND {} \; -exec后面的操作是不需要进行确认的,如果使用-ok,在使用命令的时候回需要进行确认;
例如:find /tmp -perm -006 -exec chmod o-w {} \; #查找只有其他用户拥有的读写权限,然后去掉这个文件的度权限,这个用法比较常用;
find /tmp -type d -ok chmod +x {} \;
find /tmp -perm -020 -exec mv {} {}.new \;
find /tmp -name "*.sh" -a perm /111 -exec chmod o-x {} \; #查找出以.sh结尾的文件,且具有执行权限的文件,让后将他们的执行权限全部去掉;
find命令再查找到文件后,除了可以使用-ok和-exec关联行为命令外,还可以使用 xargs结合管道符来时用;xargs build and execute command lines from standard input 从标准输入接收命令;
例如:find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles \;
find /etc -size +1M | xargs echo >> /tmp/etc.largefiles
【使用xargs功能就不用再通过{}来调用选出来的内容了;】
练习
12 文件查找--find命令的更多相关文章
- Linux下的文件查找类命令(转载)
如何快速有效的定位文件系统内所需要查找的文件呢?Linux为我们提供了一些文件查找类的命令,我们需要掌握以下几个命令: http://blog.csdn.net/sailor201211/articl ...
- linux文件查找find命令
linux文件查找find命令 1.文件查找 基本介绍 在文件系统上查找符合条件的文件 linux上常见的文件查找工具:find命令 查找分类 实时查找 精确查找 基本语法 find [option ...
- linux 文件查找 find命令详解
一,从索引库查找文件:locate 索引库:操作系统会周期性的遍历根文件系统,然后生成索引库 手动更新索引库:updatedb 语法:locate [OPTION]... PATTERN... 只匹配 ...
- linux文件查找-find命令
find命令:用于在文件树中查找文件,并作出相应的处理 1.find命令的格式: find pathname -options [-print -exec -ok ...] {}\ 2.find命令的 ...
- Linux中3个文件查找相关命令详解
源于:https://mp.weixin.qq.com/s/VPs-IXY6RoxbltHIxtIbng which命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令 ...
- 文件查找find命令
find命令总结: 常用选项: -name 查找/etc目录下以conf结尾的文件 find /etc -name '*conf' -iname 查找当前目录下文件名为aa的文件,不区分大小写 fin ...
- 13.Linux文件查找-find命令
find 命令的基本语法如下: 命令 路径 选项 表达式 动作 find [path...] [options] [expression] [action] 查找 地区 妹纸 18-25岁 约? (1 ...
- linux下find(文件查找)命令的用法总结
关联文章:http://blog.chinaunix.net/uid-24648486-id-2998767.html
- 第1章 Linux文件类基础命令
1. 关于路径和通配符 Linux中分绝对路径和相对路径,绝对路径一定是从/开始写的,相对路径不从根开始写,还可能使用路径符号. 路径展开符号: . :(一个点)表示当前目录 .. :(两个点)表示上 ...
随机推荐
- Python高阶函数_map/reduce/filter函数
本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...
- AIX系统日志
1.系统错误日志 存放路径:/var/adm/ras/errlog 说明:该日志记录了系统所检测到的软硬件故障和错误,尤其对系统的硬件故障有很大的参考价值,是AIX提供的最有价值的日志之一, errl ...
- 菜鸟如何学习vue
作为一个前端菜鸟,最近开始接触和学习vue. 以前用到的是bootstrap前端框架. Bootstrap,来自 Twitter,是目前最受欢迎的前端框架. Bootstrap 是基于 HTML.CS ...
- 【转】使用kettle工具遇到的问题汇总及解决方案
使用kettle工具遇到的问题汇总及解决方案 转载文章版权声明:本文转载,原作者薄海 ,原文网址链接 http://blog.csdn.net/bohai0409/article/details/ ...
- linux找不到动态链接库 .so文件的解决方法
linux找不到动态链接库 .so文件的解决方法 如果使用自己手动生成的动态链接库.so文件,但是这个.so文件,没有加入库文件搜索路劲中,程序运行时可能会出现找不到动态链接库的情形. 可以通过ldd ...
- 检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005" 《终结篇》
可以看到报出的异常类型为:UnauthorizedAccessException,没有权限访问,表明我们需要配置执行操作账户的COM访问权限. 由于系统是Windows Server 2008 64位 ...
- ALGO-125_蓝桥杯_算法训练_王、后传说(DFS)
问题描述 地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横.坚.斜线位置. 看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地.各皇后都有自己的势力范围,但也总能找到相安无事的办 ...
- STL基础--迭代器和算法
1 迭代器 Iterators 5种迭代器类型 随机访问迭代器: vector, deque, array // 允许的操作 vector<int> itr; itr = itr + 5; ...
- Netty Tutorial Part 1: Introduction to Netty [z]
Netty Tutorial, Part 1: Introduction to Netty Update: Part 1.5 Has Been Published: Netty Tutorial P ...
- java安装1.8和1.7,报错:Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVers
进入:C:\ProgramData\Oracle\Java\javapath; 删除:java.exe.javaw.exe.javaws.exe 删除:path的C:\ProgramData\Orac ...