4.6 搜索文件
Fedora借助mlocate软件包维护了一个文件系统所有文件(/etc/updatedb.conf文件指定例外情况)相关的数据库。 locate命令可以搜索该数据库,由于搜索的是数据库而非实际的文件系统,故能立即返回结果。locate出现之前,大部分Linux用户使用find 命令在文件系统中查找文件。这一节将分别介绍locate和find命令。
4.6.1 用locate查找文件
locate数据库不仅包含命令,还包含文件系统各个节点的名称,使用locate可以查找文件系统里的命令、设备、手册页、数据文件或可根据名字识别的任意文件。示例如下:
- $ locate e100
- /lib/modules/2.6.20-1.2949.fc7/kernel/drivers/net/e100.ko
- /lib/modules/2.6.20-1.2949.fc7/kernel/drivers/net/e1000/e1000.ko
上面的示例会查找e100.ko和e1000.ko这两个内核模块。locate命令使用-i选项时不区分大小写,否则区分大小写,示例如下:
- $ locate -i itco_wdt
- /lib/modules/2.6.20-1.2949.fc7/kernel/drivers/char/watchdog/iTCO_wdt.ko
下面几个示例使用locate加上正则表达式:
- $ locate -r /ls$ 查找以/ls$结尾的文件
- /bin/ls
- /usr/share/locale/l10n/ls
- $ locate -r mkfs*3 查找文件名包含mkfs和3的文件
- /sbin/mkfs.ext3
- /usr/share/man/man8/mkfs.ext3.8.gz
- $ locate -r ^/boot/grub/me 查找以/boot/grub/me开头的文件
- /boot/grub/menu.lst
RPM包mlocate(有些Linux发行版为slocate)会提供一个cron作业,每天运行一次updatedb命令,用于更新文件 locate数据库。由于用户要找的文件可能在数据库上次更新后已删除,可以使用locate -e检查数据库中找到的文件是否仍然存在:
- $ locate -e myfilename
手工运行updatedb命令可以立即更新locate数据库:
- # updatedb