bup(1)
๐ bup(1) โ the main character of backup tools ๐
okay bestie, so you wanna know about bup?? sit down, hydrate, because this one's lowkey iconic. this is the manual for bup(1) โ the General Commands Manual page, no less. and before you ask: yes, we're doing this entire thing. every flag. every command. no skipping. periodt. โจ
๐ธ NAME ๐ธ
bup โ the backup program that runs on rolling checksums and git file formats. that's it, that's the whole vibe check. ๐
๐ฆ SYNOPSIS ๐ฆ
bup [global options...] <command> [options...]
๐ DESCRIPTION ๐
okay so <pink>bup</pink> is a program for making backups of your files using the git file format. fr fr. it's giving "what if git but for your whole life."
but here's the thing that makes it not just git(1) itself: bup is optimized for handling huge data sets, including individual very large files โ think virtual machine images. yes bestie, the big big files. ๐ซถ
and the best part?? once a backup set is created, you can still access it using git tools. slay. ๐
subcommands each get their own separate man page btw โ like, bup-init(1) covers bup init. we love a franchise. ๐
โจ GLOBAL OPTIONS โจ
these ones work no matter what command you're running. main character energy.
--versionโ prints bup's version number. exactly equivalent to runningbup version. simple, clean, no notes.-d,--bup-dir=BUP_DIRโ tells bup to use the givenBUP_DIRparameter as the bup repository location. and not to read it from the$BUP_DIRenvironment variable. and not to fall back on the default~/.buplocation either. like, you're overruling the whole chain here. ๐
๐ฅ PRIMARY COMMANDS ๐ฅ
the core four-ish. the ones you'll actually be living in.
bup-init(1)โ Initialize a bup repository. the "hello world" of not losing your stuff.bup-index(1)โ Create or display the index of files to back up.bup-save(1)โ Save files into a backup set. ๐ข note: runbup indexfirst. we said what we said.bup-restore(1)โ Extract files from a backup set. this is the "okay phew" command.bup-fsck(1)โ Check backup sets for damage and add recovery information. multitasking icon.bup-on(1)โ Index/save/split/get/... on a remote machine. look at all those slashes, so versatile.bup-help(1)โ Print detailed help for the given command. when in doubt, bestie. ๐
๐ง INSPECTION COMMANDS ๐ง
for looking respectfully. ๐
bup-ls(1)โ Browse the files in your backup sets.bup-fuse(1)โ Mount your backup sets as a filesystem. literally making your backups a whole vibe you can walk around in.bup-web(1)โ Launch a web server to examine backup sets.bup-ftp(1)โ Browse backup sets using an ftp-like client.
๐ MANIPULATION COMMANDS ๐
shaping, trimming, moving. the makeover montage. โจ
bup-gc(1)โ Remove unreferenced, unneeded data. cleanup szn.bup-get(1)โ Transfer/transform items between/within repositories.bup-prune-older(1)โ Remove older saves. letting go is self care.bup-rm(1)โ Remove references to archive content.
๐ IMPORT COMMANDS ๐
coming from somewhere else? we got you. bringing your ex's backups to the group chat.
bup-import-duplicity(1)โ Import fromduplicity(1).bup-import-rdiff-backup(1)โ Import fromrdiff-backup(1).bup-import-rsnapshot(1)โ Import fromrsnapshot(1).
๐ OTHER COMMANDS ๐
the misc drawer, but make it chic.
bup-cat-file(1)โ Extract archive content.bup-drecurse(1)โ Recursively list files in your filesystem.bup-features(1)โ Report the current status and capabilities of bup itself. a little self-reflection moment.bup-join(1)โ Retrieve a file backed up usingbup-split(1).bup-server(1)โ The server side of the bup client-server relationship.bup-split(1)โ Split a single file into its own backup set.bup-tag(1)โ Tag a commit in the bup repository.bup-validate-object-links(1)โ Scan the repository for broken object links.bup-validate-ref-links(1)โ Check repository refs for links to missing objects.bup-version(1)โ Report the version number of your copy of bup.
๐ฎ ESOTERIC COMMANDS ๐ฎ
no because WHY are these so real. iykyk.
bup-bloom(1)โ Generates, regenerates, updates bloom filters.bup-damage(1)โ Deliberately destroy data. ๐ yes bestie, this one is exactly what it sounds like. tread carefully, this is not a drill.bup-margin(1)โ Determine how close your bup repository is to armageddon. ARMAGEDDON. that's the actual word in the manual. screaming.bup-memtest(1)โ Test bup memory usage statistics.bup-meta(1)โ Create or extract a metadata archive.bup-midx(1)โ Index objects to speed up future backups.bup-random(1)โ Generate a stream of random output.bup-tick(1)โ Wait for up to one second. that's the whole job. iconic honestly. โญ
๐ REMOTE OPTIONS ๐
some options โ currently just --remote โ let you specify a remote path. you can write it either as a URL (peep REPOSITORY URLS below ๐) or as a [*user*@]*host*:[*path*].
for either format, when there's no path given, the default path on the server gets used โ that's BUP_DIR if it's set in the remote environment, otherwise ~/.bup โ and SSH settings for the connection can come from a custom host in your ~/.ssh/config file (see ssh_config(5)).
the argument counts as a URL if it starts with a syntactically valid URL scheme prefix that contains an "authority" โ meaning it begins with SCHEME:// the way ssh://... does โ and that scheme has to be either ssh or bup. anything else gets rejected. no exceptions, bestie. ๐ซ
now for the [*user*@]*host*:[*path*] syntax: if there's an @ symbol, then everything before the rightmost @ counts as the user. so -r x@y@z means user x@y and host z. and the host must always be followed by a colon, and anything after the first colon is the path. yes, rightmost for the user but first for the path. it's giving unhinged but it's the rules. ๐
for fully general purposes, prefer URLs to[*user*@]*host*:[*path*], so there's no potential ambiguity. like, consider the (unlikely) case wheressh://x/ygets generated for a host namedsshand path//x/yโ that would be interpreted as a URL with hostxand path/y. messy. avoid. ๐
๐ REPOSITORY URLS ๐
bup supports these URL schemes (i.e. scheme:) for pointing at a repository. quick note before we dive in: the term "authority" below just means the URL section after the scheme:// and before the path โ for example, the user@host:port part of an SSH URL.
as an exception to the standard, a scheme may be "path-oriented", which means there's no separate query or fragment. anything after the (optional) authority is taken as the "path", and the constituent bytes are not decoded (so no percent decoding). this lets URLs given on the command line work naturally. so ssh://host/x?z has a path of /x?z. yes, the ?z is part of the path. it's fine. breathe.
and since URLs with an authority can't represent relative paths, path-oriented schemes interpret a leading /./ as a relative path. so ssh://host/./x, file:///./x, and file:/./x all indicate the path x. ๐ธ
ssh:โ a path-oriented scheme (see above) that specifies access to a repository via abup-server(1)launched on a host via SSH. its syntax and semantics match a typicalssh:URL, including support for a user and port (e.g.ssh://user@host:2222/some/repo), and the user and host can be percent encoded.bup:โ a path-oriented scheme (see above) specifying a direct network connection to an existingbup-server(1). otherwise identical tossh:, except that it does not support a user. this connection has no authentication or encryption of its own, so it's unlikely you'll want to use it โ preferfile:or:ssh:.
โ ๏ธ bestie, listen: no auth, no encryption. that's a hard pass for most situations. we're just telling you what the manual says. ๐
file:โ a path-oriented scheme (see above) that specifies a repository's filesystem path. its syntax and semantics match a typicalfile:URL, except that it only allows an empty authority (i.e. no user, no host, none of that).
in most cases you'll probably want to include the empty authority so you don't have to think too hard about the contents of the path. i.e. use file://PATH or ssh://user@hostPATH when the PATH begins with a slash, and file:///./PATH or ssh://user@host/./PATH when it doesn't.
it is possible to omit the authority, but only if the path does not begin with two slashes. for example, file:/ and file:some/where are fine, but file://some/where is not โ because some will get read as the authority. watch out for that one. ๐
๐ ENVIRONMENT ๐
BUP_ASSUME_GIT_VERSION_IS_FINEโ if set totrue,yes, or1, assume the version of git in the path is acceptable. consenting to chaos, but make it explicit. โจ
๐ SEE ALSO ๐
the README file from the bup distribution, git(1), and http://bup.github.io
๐ AUTHORS ๐
Avery Pennarun apenwarr@gmail.com
okay that's the whole page, bestie, you ate that. ๐ no cap, you now know bup better than half the people running it.
and a lil sign-off for the record: Bup 0.34, dated 2026-09-01. that's the version, that's the date, we're closing the group chat. ๐ฆโจ๐
๐ฆ where this page comes from
- fedora 44: bup 0.34-1.fc44 ยท LGPL-2.0-only
- nixpkgs unstable: bup 0.34
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms