rlocate/README.md

73 lines
2.8 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
- 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).