locate:用来在预先建立好的文件索引数据库中查找文件,所以必须先建立或更新索引数据库
updatedb用来生成或更新所以数据库
用locate并不只是查找某一个文件,而是会将所有路径下的相关信息全部列出,但是locate只能显示出索引数据库中存在的文件,假如当前某个文件被删除或又新建了一个文件,而没有及时更新索引库,就会导致查找的结果与实际不符
locate 关键字
查找于指定关键字有关的所有文件或目录
用locate查询文件速度很快,因为不需要遍历目录或磁盘,直接读取索引数据库,但是查找结果不精确,实际上反而降低了查找效率,所以一般不推荐用locate
find:精确查找,命令后可跟路径或关键字,不指定路径则默认在当前目录下查找, 实时查找,不读取数据库,速度比locate慢一些,但查找的精准度很高,所以也是最常用的文件查找工具
使用find时,通常除了指定关键字,还会附带一些条件参数,以使查找结果更符合我们的需求,比如需要查找/etc路径下名称为passwd的文件就需要-name这个条件参数
SolidCaptureImage9056015
需要说明的是,默认情况下,linux系统是区分大小写的,所以-name也是区分大小写的,如果查找Passwd就肯定找不到了,如果我们在查找的时候不确定文件名的大小写,就需要-i参数,忽略大小写
不过这样查找文件有时会出问题,因为/etc属于系统路径,有很严格的权限限制,如果换作普通用户去执行上面的命令就会报很多错误
SolidCaptureImage9262218
日常维护过程中不会总是用root进行操作的,更多的时候还是以普通用户身份进行,所以在使用find命令时,权限问题是必须要考虑的
find的使用实际上不仅仅只是这么简单,有很多种用法
1、按属性
现在有这么一组文件
SolidCaptureImage5442500
查找属主为user2的文件
SolidCaptureImage4671421
查找属组为root的文件
SolidCaptureImage4708218
还可以和一些逻辑操作符结合使用
查找属主为user1并且属组为user2的文件
SolidCaptureImage4843718
查找属主为root但属组不为root的文件
SolidCaptureImage4924781
查找属组为root或者是user2的文件
SolidCaptureImage5066343
2、按权限
还是刚才这组文件
查找权限为664的文件
SolidCaptureImage5477921
查找属组有些权限的文件
SolidCaptureImage5344125
查找其他用户有执行权限的文件
SolidCaptureImage5551718
查找任意位有写权限的文件
SolidCaptureImage5647468
3、按大小
有三个文件,大小分别为1M、2M、3M
SolidCaptureImage5869687
查找大小为2M的文件
SolidCaptureImage5947906
查找小于2M的文件
SolidCaptureImage6009140
查找大于2M的文件
SolidCaptureImage6028031
4、按时间
有3种选项
atime:被访问的时间
mtime:内容被更改的时间
ctime:内容以及元数据被更改的时间
参数后面需要附加一个条件,1个整数,单位为天
查找/var/log/下面5天之内任意数据被改动过的文件
SolidCaptureImage8553015
查找/var/log/下面5天内未被改动过的文件
SolidCaptureImage8537984
按各种条件找来找去,到底有什么用呢,和实际结合起来,又有很多种用法,这里需要两个参数
ok和exec
假设,一个目录下,用三个文件作测试
SolidCaptureImage9212453
1、为了文件安全,不希望其他人对文件有写权限,但是又不想一个一个的输入修改权限的命令,就可以用find配合执行参数来帮忙
SolidCaptureImage9401218
解释一下,首先先按权限找出other上有写权限的文件,然后查找结果被-exec参数传给后面的chmod命令,执行删除写权限的操作,两条命令一次执行完毕,省时省力
“{}”表示调用-exec前的find命令查找出来的所有文件
“ \;”前面有个空格(空格斜杠分号)为该命令的固定语法格式
-ok和-exec在命令的执行结果上没有区别,但是在执行过程中-ok会询问用户是否继续执行后面的命令,而-exec不询问直接执行
2、希望把当前目录下大于1M的文件进行压缩以节省空间
SolidCaptureImage10006796
Orz,真强,bzip2竟然把3M的文件压缩成了8K!!!