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