Name

diskdb — tool for creating and querying file system content database

Synopsis

diskdb cmd [-1CcDFMqrStvx] -d db [-d db] [-I filename...] [-i pattern...] [-E filename...] [-e pattern...] [-L filename...] [-P filename...] [-R dir] [path...]

Description

Program diskdb manages a database of information about the contents of a file system. The database contains a list of files and directories in the file system. For each file (or directory), the remembered attributes are its name, metadata, size, and optionally checksum (only for regular files, using cryptographic hash SHA256). The metadata include the file type, permissions, owner, group, times (access, modify, change, create), file flags, and ACLs. For symbolic links, the link target is also recorded. The database is in a textual format.

It is possible to select a subset of the whole file system directory in several ways:

  • One or more paths can be specified on the command line or read from a file when creating a database. The operation of the program is then limited to subtrees of the file system hierarchy rooted at these paths. If a path is a directory, its whole subtree is processed by default. If the path arguments are omitted, an empty database is created. If at least one path argument or path file is specified for commands other than create, the operation of the program is limited to these paths (either from arguments or from the file), without recursion for paths denoting directories.

  • Option -1 stops at a file system boundary, that is, mount points are not crossed when creating a database.

  • A list of inclusion and exclusion patterns can be defined. Each path encountered when traversing a file system subtree is compared to the list. The first matching pattern controls whether the path will be processed, or ignored. If no pattern matches, the path is processed, unless -x is used. The pattern can contain shell pattern matching characters, but they behave more like -path of find(1), that is, slash and dot characters (at a file name beginning) do not have to be matched explicitly.

    The list of patterns is composed of patterns defined by options -i and -e and patterns read from files selected by options -I and -E. The ordering of options defines the ordering of patterns in the list.

    Inclusion and exclusion patterns work recursively, that is, including/excluding a directory includes/excludes also its contents.

When a database content is displayed in textual form (by commands list, diff, and all other database comparison commands), the output is sorted by paths component-wise. As this is not the same as the lexicographic order, two such outputs cannot compared by command comm(1) without being sorted by sort(1) first.

Commands

create

Creates a new database by examining the current contents of the file system. This command requires one -d option.

diff

Compares a database with the current contents of the file system or two databases, and writes the differences to the standard output. Each line of the output contains a single character followed by a space and the file path. The first character is '+' for added files (those existing only in the current file system or in the second database), '-' for deleted files (those existing only in the (first) database), '!' for modified files (different in the first database and the file system or the second database), 'd' for files changed from non-directory to directory (directory in the second database and some other file type in the first database), 'f' for files changed from directory to non-directory (directory in the first database and some other file type in the second database). This command requires two -d options.

diffequal

Like diff, but reports (with prefix '=') also files that are equal in both databases.

added

Like diff, but reports only added files, one path per line.

deleted

Like diff, but reports only deleted files, one path per line.

changed

Like diff, but reports only modified files, one path per line.

equal

Like diff, but reports only equal files, one path per line.

dir

Like diff, but reports only files changed from non-directory to directory, one path per line.

nondir

Like diff, but reports only files changed from directory to non-directory, one path per line.

setmeta

Creates directories that are in the database, but do not exist in the filesystem. Directories are created as empty. Sets file and directory metadata according to the database. This command requires one -d option.

show

Outputs all information for selected files from the database in a textual format. This command requires one -d option.

list

Outputs paths (and no other information) for selected files from the database in a textual format. This command requires one -d option.

Options

-1

When recursively descending a directory tree, it does not go into directories mounted from different devices. It means that file system boundaries at mount points are not crossed.

-C

When comparing two databases, it checks only file contents: size, checksum (modification time is used instead of the checksum if -c is set), or target file (for symbolic links). File system objects that are not regular objects or symbolic links are always treated as having equal contents. By default, both contents and metadata are compared. File types are always compared and files of different types are treated as different. This option is allowed only for commands that compare two databases.

-c

File checksums are not computed when used together with the create command and are not checked when used with the diff or changed command. If a database does not contain checksums, an attempt to use it for comparison without -M or -c set leads to an error.

-D

Operate only on directories. This option cannot be used for command create and is mutually exclusive with option -F.

-d db

The name of the created or processed database file. This option is required once or twice, depending on the command.

-E filename

Adds patterns from file filename (or the standard input if filename is '-') to the pattern list as exclusion patterns. The file contains one pattern per line. Blank lines and leading/trailing whitespace are ignored. Lines whose first non-space character is a pound-sign (#) are comments, and are ignored.

-e pattern

Adds pattern to the pattern list as an exclusion pattern.

-F

Operate only on file types other than directories. This option cannot be used for command create and is mutually exclusive with option -D.

-I filename

Adds patterns from file filename (or the standard input if filename is '-') to the pattern list as inclusion patterns. The file contains one pattern per line.

-i pattern

Adds pattern to the pattern list as an inclusion pattern.

-L filename

Adds patterns from file filename (or the standard input if filename is '-') to the pattern list. The file contains one pattern per line. Inclusion patterns are preceded by characters "" (plus sign and space). Exclusion patterns are preceded by "" (minus sign and space). Blank lines and leading/trailing whitespace are ignored. Lines whose first non-space character is a pound-sign (#) are comments, and are ignored.

-M

When comparing files, it checks only metadata. By default, both file contents and metadata are checked. Files types are always compared and files of different types are treated as different. This option is allowed only for commands that compare two databases.

-P filename

Adds paths from file filename (or the standard input if filename is '-') to the path list. There is one path per line.

-q

File names containing newlines are silently ignored when creating a database. If this option not set and there are some file names that contain the newline character, a warning message is reported at the end, and the program finishes with an error status.

Files that do not exist are silently ignored by command setmeta. If this option is not set, missing files are reported. Missing directories are always created, regardless of -q.

-R dir

Relative paths are relative to directory dir instead of the current directory. Used by commands create and setmeta.

-r

Turns off recursive descent into directories when creating a database. Only files specified explicitly in the path list are processed.

-S

Include sockets in the created database or output. Sockets are skipped by default, because programs such as tar(1) cannot process them.

-T

Check no file times. Normally, modification times (or all times with -c) are compared when comparing file metadata. This option skips the time test, and only the remaining metadata types are tested.

-t

Check all file times. If not set, only the modification time is checked when comparing databases.

-v

Verbose operation, prints each processed path to stderr.

-x

Paths that do not match any include and exclude pattern will be ignored. Without -x, they would be processed.

Exit Status

The diskdb program terminates with 0 status if successul, and with a nonzero if an error occurs.

If the requested information cannot be obtained for a file when creating the database, an error message containing the failed path is written to stderr, the file is ignored, and the processing continues with the next file. The final exit status will be nonzero.

Environment Variables

TMPDIR

The directory used to store temporary databases; if it is not set, /tmp is used.

See Also

find(1)

Bugs

Files with names containing the newline character are skipped.

Authors

This man page is a part of Kernun Firewall.
Copyright © 2000–2023 Trusted Network Solutions, a. s.
All rights reserved.