Linux命令之locate、find搜索命令
locate命令用于查找文件,比find命令的搜索速度快,它有一个数据库,这个数据库每天的例行工作(crontab)程序来执行updatedb。运行:updatedb在/var/lib/slocate/ 下生成 slocate.db 数据库即可快速查找。
示例:现场拷贝/etc/grub2.cfg到/tmp/grub2.cfg,这时如果不更新数据库,用locate搜索grub2.cfg是无法搜索到/tmp/下的grub2.cfg的
find语法:find pathname -options [-print -exec -ok ...]
常见参数选项:
pathname: find命令所查找的目录路径。如用.来表示当前目录,用/来表示系统根目录
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
-print: find命令将匹配的文件输出到标准输出
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } ;,注意{ }和;之间的空格
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行
-name:按文件名查找,支持使用globbing;-iname:不区分字符大小写,支持使用globbing
-perm:按文件权限来查找
-user:按文件属主来查找
-group:按文件所属组查找
-uid UserID:查找文件的属主指定uid的文件
-gid GroupID:查找文件的属组指定gid的文件
-mtime:-n 、+n,按文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项
-nogroup:查找无效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser:查找无效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer:FILE1! FILE2,查找更改时间比文件FILE1新但比文件LIFE2旧的文件。
-type:查找某一类型的文件,如:b:块设备文件;d:目录;c:字符设备文件;p:管道文件。l: 符号链接文件;f:普通文件
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息
-mount:在查找文件时不跨越文件系统mount点
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中
-amin n:查找最后N分钟访问的文件
-atime n:查找最后n*24小时访问的文件
-cmin n:查找最后N分钟被改变文件状态的文件
-ctime n:查找最后n*24小时被改变文件状态的文件
-mmin n:查找最后N分钟被改变文件数据的文件
-mtime n:查找最后n*24小时被改变文件数据的文件
该命令支持查找条件逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为:
and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找条件才算满足
or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足
not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件
!A -o !B = !(A -a B)
!A -a !B = !(A -o B)
示例:
1、查找/var目录属主为root,且属组为mail的所有文件;
2、查找/usr目录下不属于root、bin或hadoop的所有文件;
3、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
5、查找/etc目录下大于20k且类型为普通的所有文件;
6、查找/etc目录下所有用户都没有写权限的文件;
7、查找/etc目录下至少有一类用户没有执行权限的文件;
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;