75 lines
2.9 KiB
Markdown
75 lines
2.9 KiB
Markdown
|
![Language: Rust](https://img.shields.io/badge/language-Rust-green.svg)
|
||
|
![Topic: System Tools](https://img.shields.io/badge/topic-Tries-red.svg)
|
||
|
![Library Status: In Progress](https://img.shields.io/badge/status-Library_Complete-green.svg)
|
||
|
![Command Line Status: Pending](https://img.shields.io/badge/status-CLI_In_Progress-yellow.svg)
|
||
|
|
||
|
# rlocate
|
||
|
|
||
|
`locate` is an unix utility for finding files by filename. It runs a
|
||
|
scheduled task that updates a simple database file with the list of
|
||
|
every file in the system, and provides a tool for querying that
|
||
|
database.
|
||
|
|
||
|
`locate` was first released in 1994, accompanying the release of BSD 4.4
|
||
|
Unix. `mlocate` is a more modern implementation that improves
|
||
|
performance in the scanner by copying the contents of a folder that
|
||
|
hasn't changed since the last scan (although it still has to recurse
|
||
|
down that folder's subfolders).
|
||
|
|
||
|
`rlocate` seeks to update these two, and provide better functionality
|
||
|
going forward.
|
||
|
|
||
|
# Features
|
||
|
|
||
|
Right now, none of this works. The _intended_ feature list is:
|
||
|
|
||
|
- Can read the following locatedb formats:
|
||
|
- MLOCATE
|
||
|
- LOCATE01
|
||
|
- LOCATE02
|
||
|
- Provides new locatedb formats:
|
||
|
- RLOCR01: Directory path prefixes are built by reference, making for
|
||
|
a much smaller database.
|
||
|
- RLOCR02: RLOCR01, but compressed.
|
||
|
- Dynamic, real-time monitoring of local (not networked) filesystems,
|
||
|
with real-time updating. (Currently Linux only; Requires
|
||
|
`located-server` feature flag.)
|
||
|
- A library for accessing the RLocate database or the RLocate server.
|
||
|
- A C FFI for that library.
|
||
|
|
||
|
# Installation
|
||
|
|
||
|
`rlocate` is a replacement for `mlocate`, which is part of the
|
||
|
`findutils` package, and you do not want to damage _that_. After
|
||
|
building, install the client, and updater or server (depending on which
|
||
|
you built) into the folder of your choice. If you're using the timed
|
||
|
updater, edit your cron table to run it, removing the mlocate entry. If
|
||
|
you're using the server, you can run it and it should *just work*. It
|
||
|
may take some time to build an initial database file, however.
|
||
|
|
||
|
# Motivation
|
||
|
|
||
|
I can't remember the project that started this. All I recall was that
|
||
|
at one time I was very disappointed to learn that there was no way of
|
||
|
scanning the mlocate.db file from a library; the only way to access it
|
||
|
was to run a process pipe from inside your C or Rust program. The
|
||
|
mlocate.db file has a unique group as is readable only by members of
|
||
|
that group; it's also owned by root and can only be updated if the
|
||
|
updatedb program is run by root.
|
||
|
|
||
|
I wanted something that was both better and had fewer security
|
||
|
requirements. This is the result of that project.
|
||
|
|
||
|
It also let me get back into writing Rust, something I haven't done in
|
||
|
awhile.
|
||
|
|
||
|
## LICENSE
|
||
|
|
||
|
`rlocate` is Copyright [Elf M. Sternberg](https://elfsternberg.com)
|
||
|
(c) 2019, and licensed with the Mozilla Public License vers. 2.0. A
|
||
|
copy of the license file is included [in the root folder](./docs/LICENSE.md).
|
||
|
|
||
|
|
||
|
|
||
|
|