locate和find
  • locate的速度比find快,因为它并不是真的查找文件,而是查数据库。

  • 新建的文件,我们立即用locate命令去查找,一般是找不到的,因为数据库的更新不是实时的,而是每天

  • locate命令所搜索的后台数据库在/var/lib/mlocate这个目录下,可能有些Linux系统位置不同,具体我们可以用locate locate查询
  • 并不是所有的目录下的文件都会用locate命令搜索到,/etc/updatedb.conf这个配置文件中,配置了一些locate命令的一些规则。

  • updatedb会大致每天运行,这是靠系统的crontab命令实现的

  • updatedb -U:更新指定目录相关的数据库信息。默认是整个系统,耗时比较长,因此可以使用该参数,比如sudo updatedb -U /home/user/

updatedb的配置文件 /etc/updatedb.conf

1
2
3
4
5
cat /etc/updatedb.conf 
PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fuse.glusterfs ceph fuse.ceph"
PRUNENAMES = ".git .hg .svn"
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph"

  • PRUNENAMES 搜索时不搜索的文件类型
  • PRUNEPATHS 搜索时不搜索的路径
  • PRUNE_BIND_MOUNTS = "yes" 开启搜索限制
  • PRUNEFS 搜索时不搜索的文件系统

locate 常用命令

1
2
3
4
5
6
7
locate -c   # 查询指定文件的数目。(c为count的意思)
locate -e # 只显示当前存在的文件条目。(e为existing的意思)
locate -i # 查找时忽略大小写区别

# 使用正则表达式查找文件
locate -r makefile$ # 以makefile结尾的文件
locate -r ^/home/user/ # 以/home/user/开头的文件

从结果中取出词尾是config2

注意:locate的结果可能是不存在的文件,这时最好用locate -e

locate 查找文件tree.xml,也就是知道完整的文件名时,那么最好用 locate /tree.xml,如果不加/,会显示test_tree.xml的结果

find 常用命令

查找当前目录中(包括子目录)所有扩展名为cfg的文件:

1
2
# 或者 '*.cfg'
find -name *.cfg

  • find . -name '*.cpp' -mmin -30 当前目录下,最近30分钟修改的cpp文件

  • find . -name '*.cpp' -mtime 0 当前目录下,最近24小时修改的cpp文件

  • find . -type f -mtime 0 当前目录下,最近24小时修改的常规文件