fuse-archive(1)
β¨ NAME β¨
fuse-archive(1) β the user manual for mounting archives as a read-only FUSE file system. That's the whole assignment, bestie. π
π SYNOPSIS π
Two shapes, pick your fighter:
fuse-archive [options] archive [mount_point]
fuse-archive [options] archive ... mount_point
π¦ DESCRIPTION π¦
fuse-archive serves one or several archives or compressed files (e.g., foo.tar, foo.tar.gz, foo.xz, or foo.zip) as a read-only FUSE file system. No cap.
It's similar to mount-zip and fuse-zip, but it supports a larger range of archive or compressed file formats. It's also similar to archivemount but can be much faster (see the Performance section below), although it can only mount read-only, not read-write. That part is literally not negotiable.
fuse-archive automatically creates the target mount point if needed and automatically removes it when the file system is unmounted. But if the mount point already existed before fuse-archive was started, it is not removed. She respects pre-existing real estate π
.
If no mount point is specified, fuse-archive uses the name of the archive (without its filename extension) as a mount point in the current working directory. If that directory already exists, it will try to create one with a numeric suffix (e.g., archive (1)).
π OPTIONS π
--help,-hβ Print help. Your little map, bestie.--version,-Vβ Print version info.-o quiet,-qβ Print fewer log messages.-o verbose,-vβ Print more log messages.-o redactβ Redact file names from log messages.-o forceβ Continue despite errors.-o maxfilters=Nβ Maximum number of filters per archive (default is1).-o precacheβ Preemptive caching of uncompressed data (default).-o lazycacheβ Incremental caching of uncompressed data.-o nocacheβ No caching of uncompressed data.-o memcacheβ Caching in memory (Linux only).-o nomergeβ Do not merge multiple archives on top of each other. Instead, create a subdirectory for each archive inside the mount point.-o notrimβ Do not trim the base of the tree. Keep all the intermediate directories as specified in the archive(s).-o nodirsβ No directories. Flatten the archive structure by presenting all its files in its root directory. This might make sense if youβre not interested in the archive tree structure, but only in its file data, e.g., for malware scanning.-o nospecialsβ Hide special files (FIFOs, sockets, devices).-o nosymlinksβ Hide symbolic links.-o noholesβ Do not report holes in sparse files.-o nohardlinksβ Do not report files with multiple hard links.-o noxattrsβ Do not report extended attributes.-o nobiddingβ Do not use libarchiveβs format bidding system to detect the archive format. Instead, strictly rely on the file extension.-o noexternalβ Do not use external programs for decompression. By default, external programs are allowed but searched for in a sanitizedPATHcontaining only standard system directories (e.g.,/usr/bin,/bin,/usr/local/bin) to prevent local spoofing attacks. Using this option effectively disables external programs by settingPATHto a safe, non-directory value (/dev/null), ensuring that only decompression filters implemented natively or statically linked into libarchive are used.-o unsafe_pathβ Do not sanitizePATHfor external programs. This option preserves the originalPATHfrom the environment instead of filtering it. Use with caution as it may allow local spoofing attacks if the environment is not trusted. This option is ignored if-o noexternalis also used.-o dmask=Mβ Directory permission mask in octal (default is0022).-o fmask=Mβ File permission mask in octal (default is0022).-o uid=Nβ Set the file owner of all the items in the mounted archive (default is the current user).-o gid=Nβ Set the file group of all the items in the mounted archive (default is the current group).-o enforce_permissionsβ Enforce standard UNIX permissions. By default,fuse-archivepresents all files as being owned by the current user and group, with standard read permissions. This option instructsfuse-archiveto use the exact UID, GID, and Unix permission bits stored within the archive for each item. This includes support for special bits such as SUID, SGID, and SVTX (sticky bit). Note that this may result in access denied errors if you are not the owner of the files inside the archive.-fβ Foreground mode.-dβ Foreground mode with debug output.
bestie, the -o unsafe_path warning is real: caution is the vibe. Do not clown around with an untrusted environment.
π USAGE EXAMPLES π
Mount a single archive:
$ fuse-archive foobar.tar.gz mnt
The mounted archive can be explored and read using any application:
$ tree mnt
mnt
βββ foo
βββ bar.txt
1 directory, 1 file
$ cat mnt/foo/bar.txt
Hello, world!
Mount multiple archives into the same mount point (merged view):
$ fuse-archive archive1.zip archive2.tar.bz2 mnt
Mount multiple archives as separate subdirectories:
$ fuse-archive -o nomerge archive1.zip archive2.7z mnt
$ ls mnt
archive1 archive2
Consult a GPG-encrypted file securely without decrypting it to disk:
$ fuse-archive secret.txt.gpg mnt
Password >
$ cat mnt/secret.txt
When finished, unmount the file system:
$ umount mnt
π FEATURES π
- Read-only view: Archives are served as a safe, read-only file system.
- Wide format support: Supports ZIP, 7Z, RAR, TAR, ISO, and many other formats through libarchive.
- Encryption: Handles both native archive encryption (e.g., ZIP) and GnuPG encryption.
- Flexible Caching: Offers pre-emptive, incremental (lazy), and memory-based caching strategies.
- Multiple Archives: Can mount several archives simultaneously, either merging them into a single tree or keeping them separate.
- Automatic Mount Management: Automatically creates and removes mount point directories as needed.
- File System Support:
- Special Files: Supports named sockets, FIFOs, and devices.
- Links: Correctly handles symbolic links and hard links.
- Sparse Files: Detects and exposes βholesβ in sparse files for efficient reading.
- Extended Attributes: Supports reading xattrs from archives.
- High-precision timestamps: Supports full nanosecond precision for access, modification, and creation times.
- Permissions: Honors Unix access modes, ownership (UID/GID), and special bits (SUID/SGID/SVTX).
- Deduplication: Gracefully handles name collisions between multiple archives or within a single archive.
- Performance: Optimized for speed through efficient caching.
π¦ NAME DEDUPLICATION π¦
In case of name collision, fuse-archive adds a number to deduplicate the conflicting file name:
$ fuse-archive -o nomerge archive1.zip archive2.zip mnt
$ tree -F mnt
mnt
βββ archive1/
β βββ file.txt
β βββ file (1).txt
β βββ file (2).txt
βββ archive2/
βββ file.txt
βββ file (1).txt
2 directories, 5 files
Directories are never renamed. If a file is colliding with a directory, the file will be the one getting renamed. Periodt.
πΈ ARCHIVE FORMATS πΈ
fuse-archive is built on top of the libarchive library. It supports a wide variety of archive formats and compression methods, either natively through libarchive or by invoking external filter programs.
The exact set of supported formats depends on:
- The version and build-time configuration of the libarchive library.
- The availability of external filter programs in the sanitized
PATH(see the-o noexternaland-o unsafe_pathoptions).
To see the version of libarchive and other libraries linked with your build of fuse-archive, use the --version option:
$ fuse-archive --version
π Filename Extensions π
fuse-archive primarily determines an archiveβs format from its filename extension. It recognizes the following:
- Archive formats:
7z,7zip,a,ar,cab,cpio,deb,iso,iso9660,jar,lha,lzh,mtree,rar,rpm,tar,war,warc,xar,zip,zipx. - ZIP-based formats:
aab,apk,cbz,crx,docx,epub,ipa,jar,odf,odg,odp,ods,odt,ppsx,pptx,war,whl,xlsx,xpi,zip,zipx. - RAR-based formats:
rar,cbr. - Compressed TARs:
tb2,tbr,tbz,tbz2,tz2,tgz,tlz,tlz4,tlzip,tlzma,tlrz,tlzo,tlzop,txz,tz,taz,tzs,tzst,tzstd. - Compression filters:
br,brotli,bz,bz2,bzip2,grz,grzip,gz,gzip,lrz,lrzip,lz,lz4,lzip,lzma,lzo,lzop,xz,z,zst,zstd. - ASCII encoding filters:
b64,base64,uu. - Encryption filters:
asc,gpg,pgp.
If the filename extension is not recognized, fuse-archive will attempt to detect the format by examining the fileβs byte contents. This fallback mechanism can be disabled using the -o nobidding option, forcing strict reliance on the file extension.
π§ External Filter Programs π§
For some formats and encodings, fuse-archive relies on the following external programs being available in the sanitized PATH:
base64: Forb64andbase64encodings.brotli: Forbrandbrotlicompression.compress: Forz,taz, andtzcompression (if not supported natively by libarchive).gpg: Forasc,gpg, andpgpencryption.lrzip: Forlrzandtlrzcompression.lzop: Forlzo,lzop,tlzo, andtlzopcompression (if not supported natively by libarchive).
Other formats, such as uu (UUencoded), lzip, xz, gzip, and bzip2, are typically handled natively by the libarchive library and do not require external programs.
π³ ARCHIVE TREE STRUCTURE π³
Okay bestie, so by default fuse-archive lowkey optimizes how your mounted archives look: it merges them and trims redundant top-level directories. Iconic behavior, honestly. You can change this with the -o nomerge and -o notrim options.
𧬠Merging Multiple Archives π§¬
When you mount several archives, fuse-archive merges their contents into one unified directory tree by default. If multiple archives contain the same file path, the files are deduplicated by adding a numeric suffix β like file (1).txt, no cap.
With the -o nomerge option, fuse-archive creates a separate subdirectory for each archive at the root of the mount point, named after the archiveβs filename. Cute, organized, separate little rooms.
βοΈ Trimming the Base Tree βοΈ
fuse-archive automatically βtrimsβ the common base directory of the archive to give you more direct access to its contents. For example, if an archive contains only a/b/c/file.txt, it will be presented as file.txt at the root of the mount point. The way it just skips to the good part π
The -o notrim option disables this behavior, preserving all intermediate directories as they are recorded in the archive. Full lore, no shortcuts.
β¨ Interaction Table β¨
The following table summarizes how these options interact when mounting archives arch1.zip (containing a/b/c/f1) and arch2.zip (containing a/b/d/f2). Since weβre not doing actual tables here, bestie, itβs a little cheat-sheet list:
- (Default) β
/c/f1,/d/f2 -o notrimβ/a/b/c/f1,/a/b/d/f2-o nomergeβ/arch1/f1,/arch2/f2-o nomerge,notrimβ/arch1/a/b/c/f1,/arch2/a/b/d/f2
π ENCRYPTION π
fuse-archive supports two distinct types of encryption: native archive encryption and GPG-based encryption. Two flavors, both valid.
π§ Native Archive Encryption π§
Some archive formats (such as ZIP) have native encryption capabilities built-in. fuse-archive can leverage these when supported by the underlying libarchive library. Slay.
- ZIP: Supported β it understands legacy ZIP encryption as well as
AES-128,AES-192, andAES-256. - 7Z and RAR: Native encryption for these formats is currently not supported. Sad but true.
When mounting a natively encrypted archive, fuse-archive will securely prompt for a password in the terminal. Itβs giving secure little moment:
$ fuse-archive encrypted.zip mnt
Need password for File [1] '/secret.txt'
Password > Got it!
Password is Ok
$ cat mnt/secret.txt
This was encrypted.
For security reasons, fuse-archive doesnβt allow the password to be specified on the command line. No password-on-display behavior, bestie. However, it is possible to pipe the password to fuse-archiveβs standard input:
$ echo password | fuse-archive encrypted.zip mnt
π¦ GPG Encryption π¦
fuse-archive also supports archives and individual files encrypted with GnuPG (e.g., archive.tar.gpg, archive.7z.pgp, or romeo.txt.asc). This is handled by invoking the external gpg command-line tool.
Using GPG encryption is particularly useful for consulting sensitive documents without having to store a decrypted copy on the local disk, which avoids the risk of leaving confidential data behind in temporary folders. Main character security move, honestly.
When mounting a GPG-encrypted item, fuse-archive leverages your existing GnuPG configuration and environment:
- Passphrase Management: It can work with
gpg-agentto reuse cached passphrases. Memory, but make it secure. - Secure Prompting: It can use
pinentryto securely prompt for passphrases via your preferred method (GUI or terminal). - Hardware Support: It supports decryption via hardware tokens (like YubiKeys) if they are configured in your systemβs GnuPG setup. Hardware girlies rise.
- Nested Encodings: It can handle multiple layers of compression and encryption (e.g.,
archive.tar.gz.gpg). Use the-o maxfiltersoption to support these scenarios.
Ensure that the gpg program is installed and available in the sanitized PATH. Like, actually make sure, or this feature is gonna be a no-show.
πΎ CACHING πΎ
fuse-archive only does the minimum amount of work required to serve the requested data. It offers several caching strategies and storage options to balance performance, mount time, and resource usage. Efficiency queen.
π§ Caching Strategies π§
The following strategies are mutually exclusive. If none is specified, pre-emptive caching is used by default. Pick one vibe.
π₯ Pre-emptive Caching (-o precache, Default) π₯
By default, fuse-archive decompresses and caches the whole archive before serving its contents. The cost of decompression is incurred upfront at mount time, ensuring that subsequent access to any file is instantaneous and supports efficient random access. She did the work early so you donβt have to wait later.
π’ Incremental Caching (-o lazycache) π’
With -o lazycache, fuse-archive decompresses data on-the-go as it is requested by applications. This results in nearly instant mounting for archives that support random access to metadata (such as ZIP, 7Z, or RAR). Once a section of the archive has been read, it is cached for future access.
Note that for solidly compressed archives (e.g.,.tar.gz,.tar.xz) or encrypted archives, the entire file must still be processed at mount time to retrieve the file list, which may take some time for very large archives. So sheβs lazy, but only where she can be.
π« No Caching (-o nocache) π«
The -o nocache option disables long-term caching. fuse-archive will use a small rolling buffer in memory to serve data. This minimizes disk and memory usage but can be significantly slower for non-sequential access patterns or if the same files are read repeatedly, as data may need to be re-decompressed. Tiny footprint, possible suffering.
ποΈ Storage Options ποΈ
π½ Disk Caching (Default) π½
By default, decompressed data is cached in an anonymous temporary file (in $TMPDIR or /tmp). This cache can use a significant amount of disk space but is automatically deleted when the archive is unmounted. It eats disk, then vanishes. Respect.
π§ Memory Caching (-o memcache) π§
The -o memcache option instructs fuse-archive to store the cache in RAM instead of a temporary file. This provides the highest performance but can consume a large amount of memory. It can be used with both pre-emptive and incremental caching strategies. This option is only available on Linux. RAM girlies only, sorry.
π οΈ ADVANCED OPTIONS π οΈ
π¦Ύ Handling Errors (-o force) π¦Ύ
The -o force option allows fuse-archive to continue mounting an archive even if some errors are encountered. This includes:
- Wrong or missing decryption passwords.
- Unsupported compression or encryption methods.
In these cases, files that cannot be correctly processed will still be listed in the directory tree, but attempting to read them will result in an Input/Output error (EIO). Theyβre on the list, but theyβre not okay. π
πͺ Nested Encodings (-o maxfilters=N) πͺ
Some archives may have multiple layers of compression or encryption (e.g., archive.tar.gz.gpg). By default, fuse-archive only processes one layer of filtering.
To mount archives with nested encodings, you must increase the -o maxfilters value (e.g., -o maxfilters=2). Layer by layer, bestie.
π Permissions and Ownership π
By default, fuse-archive presents all files as being owned by the current user and group, with standard read permissions. Simple, clean, no drama.
π User and Group IDs (-o uid=N, -o gid=N) π
You can explicitly set the owner and group of all items in the mounted archive using the -o uid and -o gid options with the desired numerical IDs.
π Enforcing Archive Permissions (-o enforce_permissions) π
The -o enforce_permissions option instructs fuse-archive to use the exact UID, GID, and Unix permission bits stored within the archive for each item. This includes support for special bits such as SUID, SGID, and SVTX (sticky bit). Note that this may result in access denied errors if you are not the owner of the files inside the archive. Respect the archiveβs rules, but also be prepared to be locked out.
π Permission Masks (-o dmask=M, -o fmask=M) π
You can apply an octal permission mask to directories (dmask) and files (fmask). For example, -o fmask=077 would remove all permissions for group and others from files. Masking, but make it permission-y.
π LOG MESSAGES π
fuse-archive records log messages to the system logger (syslog). These messages can help troubleshoot issues, such as I/O errors or archives that refuse to mount. Receipts, basically.
To read fuse-archiveβs log messages on most Linux systems:
$ journalctl -t fuse-archive
Alternatively, you can run fuse-archive in the foreground with the -f option to see log messages directly on your terminal. Front-row seat to the drama.
By default, fuse-archive writes INFO and ERROR messages. You can decrease the logging level to just ERROR messages with the -o quiet option, or increase it to include DEBUG messages with the -o verbose option.
π Redaction π
To prevent sensitive file names from being recorded in the system logs, use the -o redact option. When enabled, file paths in log messages will be replaced with (redacted). Privacy queen behavior.
β‘ PERFORMANCE β‘
Create a single .tar.gz file that is 256 MiB decompressed and 255 KiB compressed (the file just contains repeated 0x00 NUL bytes):
$ truncate --size=256M zeroes
$ tar cfz zeroes-256mib.tar.gz zeroes
Here are fuse-archiveβs timings:
$ time fuse-archive zeroes-256mib.tar.gz mnt
real 0m0.443s
$ dd if=mnt/zeroes of=/dev/null status=progress
268435456 bytes (268 MB, 256 MiB) copied, 0.836048 s, 321 MB/s
$ umount mnt
For comparison, here are archivemountβs timings:
$ time archivemount zeroes-256mib.tar.gz mnt
real 0m0.581s
$ dd if=mnt/zeroes of=/dev/null status=progress
268435456 bytes (268 MB, 256 MiB) copied, 570.146 s, 471 kB/s
$ umount mnt
In this case, fuse-archive takes about the same time to load the archive as archivemount, but it is ~700Γ faster (0.83s vs. 570s) to copy out the decompressed contents. This is because fuse-archive fully caches the archive and does not use archivemountβs quadratic complexity algorithm. Ate, no crumbs. π₯
β¨ COMPARISON β¨
okay so bestie, here's the vibe check π β three archive-mounting tools, side by side. In every line below, read the values in this order: fuse-archive β mount-zip β archivemount. Periodt. π
- Read-Write Support β β Β· β Β· β
- Format Support β Wide Β· ZIP Β· Wide
- GPG Encryption β β Β· β Β· β
- Native ZIP Encryption β β Β· β Β· β
- Native 7Z/RAR Encryption β β Β· β Β· β
- Lazy Decompression β β Β· β Β· β
- Default Caching β Pre-emptive Β· Lazy Β· N/A
- Memory Caching β β Β· β Β· β
- Temp File Caching β β Β· β Β· β
- Handles Huge Files β β Β· β Β· β
- Sparse File Detection β β Β· β Β· β
- Linear Complexity β β Β· β Β· β
- Precision Timestamps β β Β· β Β· β
- Several Archives β β Β· β Β· β
- Automatic Mount Point β β Β· β Β· β
- FUSE 3 Support β β Β· β Β· β
likeβ¦ the checkmarks are giving main character energy, no cap πβ¨
π RETURN VALUE π
here's the receipts on exit codes, bestie β memorize these, they're lowkey your love language when scripting π«Ά
0β Success. slay, it worked π1β Generic error code for: missing command-line argument, too many command-line arguments, unknown option, mount point is not empty, etc. basically the "girl what" bucket π10β Cannot create the mount point.11β Cannot open the archive file.12β Cannot create the cache file.13β Cannot write to the cache file. This is most likely an indication that there is not enough temporary space. π«20β The archive contains an encrypted file, but no password was provided.21β The archive contains an encrypted file, and the provided password does not decrypt it. πβ22β The archive contains an encrypted file, and the encryption method is not supported.30β Cannot recognize the archive format.31β Invalid archive header. π32β Cannot read and extract the archive.
ngl the10s and20s are the ones you'll actually hit in the wild β when your script dies with13, go check your temp space before you spiral π
π¦ SEE ALSO π¦
go be nosy about the whole friend group, iykyk π
that's the whole page, bestie β you're officially unbothered, bookmarked and fully literate in fuse-archive now ππ§β this was fuse-archive version 1.24, dated August 2026, and it's giving iconic. go unzip something. π
π₯
π¦ where this page comes from
- nixpkgs unstable: fuse-archive 1.24
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms