mlocate命令简介:
m取自merging.
locate命令用于查找文件,因为有索引,它比find命令的搜索速度要快得多,它需要一个数据库/var/lib/mlocate/mlocate.db(默认值,可以通过updatedb -O filepath修改),这个数据库可以由每天的例行工作(crontab)程序来建立。当我们建立好这个索引数据库后,就可以方便地来搜寻所需文件了;缺点是比较新创建的文件locate还没有收入数据库中,可能无法查询到。
如搜索mlocate.db
[12:12 root .../lib/mlocate]# locate mlocate.db
/usr/share/man/man5/mlocate.db.5.gz
/var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db.tzIS3b
即先运行:updatedb,生成索引文件mlocate.db后实现快速查找。
[12:04 t /etc/cron.hourly]$ updatedb --help
用法: updatedb [OPTION]...
更新 mlocate 数据库。
-f, --add-prunefs FS 也忽略 FS
-n, --add-prunenames NAMES 也忽略 NAMES
-e, --add-prunepaths PATHS 也忽略 PATHS
-U, --database-root PATH 向数据库中存储的子树 (默认 "/")
-h, --help 显示这份帮助
-o, --output FILE 要升级的数据库 (默认
`/var/lib/mlocate/mlocate.db')
--prune-bind-mounts FLAG 忽略绑定装载 (默认 "no")
--prunefs FS 从数据库中忽略的文件系统
--prunenames NAMES 从数据库中忽略的目录名
--prunepaths PATHS 从数据库中忽略的路径
-l, --require-visibility FLAG 在报告文件之前检查可见性
(默认 "yes")
-v, --verbose 当文件被找到时显示其路径
-V, --version 显示版本信息
配置默认为从文件`/etc/updatedb.conf' 读取的值。
.
将 bug 报告给 mitr@redhat.com.
updatedb的配置文件在/etc/updatedb.conf
[12:05 root .../lib/mlocate]# 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 ceph fuse.ceph"
PRUNENAMES = ".git .hg .svn .bzr .arch-ids {arch} CVS"
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/lib/dnf/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph"
[12:05 root .../lib/mlocate]#
mlocate系统主要文件如下
[12:16 root ~]# rpm -ql mlocate.x86_64
/etc/updatedb.conf
/usr/bin/locate #用于查找文件
/usr/bin/updatedb #用于更新数据库
/usr/lib/systemd/system/mlocate-updatedb.service
/usr/lib/systemd/system/mlocate-updatedb.timer
/usr/libexec/mlocate-run-updatedb
...
/var/lib/mlocate
/var/lib/mlocate/mlocate.db #数据库
[12:19 root ~]# cat /usr/lib/systemd/system/mlocate-updatedb.timer
[Unit]
Description=Updates mlocate database every day
[Timer]
OnCalendar=daily
AccuracySec=24h
Persistent=true
[Install]
WantedBy=timers.target
最新版的fedora系统使用systemctl的timer控制mlocate的定时执行.
[12:18 root ~]# cat /usr/lib/systemd/system/mlocate-updatedb.service
[Unit]
Description=Update a database for mlocate
[Service]
ExecStart=/usr/libexec/mlocate-run-updatedb
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
PrivateTmp=true
PrivateDevices=true
PrivateNetwork=true
ProtectSystem=true
mlocate.db(5) File Formats Manual mlocate.db(5)
NAME
mlocate.db - a mlocate database
DESCRIPTION
A mlocate database starts with a file header: 8 bytes for a magic number ("\0mlocate" like a C literal), 4 bytes for the configuration block size in big endian, 1 byte for file format version (0), 1
byte for the “require visibility” flag (0 or 1), 2 bytes padding, and a NUL-terminated path name of the root of the database.
The header is followed by a configuration block, included to ensure databases are not reused if some configuration changes could affect their contents. The size of the configuration block in bytes
is stored in the file header. The configuration block is a sequence of variable assignments, ordered by variable name. Each variable assignment consists of a NUL-terminated variable name and an
ordered list of NUL-terminated values. The value list is terminated by one more NUL character. The ordering used is defined by the strcmp () function.
Currently defined variables are:
prune_bind_mounts
A single entry, the value of PRUNE_BIND_MOUNTS; one of the strings 0 or 1.
prunefs
The value of PRUNEFS, each entry is converted to uppercase.
prunepaths
The value of PRUNEPATHS.
The rest of the file until EOF describes directories and their contents. Each directory starts with a header: 8 bytes for directory time (seconds) in big endian, 4 bytes for directory time
(nanoseconds) in big endian (0 if unknown, less than 1,000,000,000), 4 bytes padding, and a NUL-terminated path name of the the directory. Directory contents, a sequence of file entries sorted by
name, follow.
Directory time is the maximum of st_ctime and st_mtime of the directory. updatedb(8) uses the original data if the directory time in the database and in the file system match exactly. Directory
time equal to 0 always causes rescanning of the directory: this is necessary to handle directories which were being updated while building the database.
Each file entry starts with a single byte, marking its type:
0 A non-directory file. Followed by a NUL-terminated file (not path) name.
1 A subdirectory. Followed by a NUL-terminated file (not path) name.
2 Marks the end of the current directory.
locate(1) only reports file entries, directory names are not reported because they are reported as an entry in their parent directory. The only exception is the root directory of the database,
which is stored in the file header.
AUTHOR
Miloslav Trmac
SEE ALSO
locate(1), updatedb.conf(5), updatedb(8)
mlocate Jan 2007 mlocate.db(5)
阅读(2838) | 评论(0) | 转发(0) |