9PFS(1)

πŸ“¦ version 0.5, in nixos 26.05

πŸ’… 9PFS(1) πŸ’…

bestie, welcome to the manual page for 9pfs β€” the literal icon that mounts a 9P service via FUSE and makes it look like a regular filesystem. no cap, this is the one you want. ✨

🌸 SYNOPSIS 🌸

9pfs [-dUVTaf] [-A aname] [-p port] [-u user] [-o fuse_options] service
    mountpoint

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so basically 9pfs mounts the 9P service running at service onto mountpoint using the FUSE user-level file system driver. it's giving "your remote files are just right here." obsessed. πŸ’–

the following options are available, and yes we're going through all of them:

  • -d β€” causes debug information for subsequent FUSE library calls to be output to stderr and logged to /tmp/9pfs-(pid).log. implies -f. so if you're nosy like me, this is your moment. πŸ”
  • -U β€” the 9P service is a UNIX-domain socket. cool cool cool.
  • -V β€” connect to the 9P service through a vsock, using service as vsock CID. the port is specified using -p. fancy networking slay.
  • -T β€” communication to the 9P service will be done through a dp9ik tls tunnel through tlsclient(1). secure vibes only. πŸ”’
  • -a β€” negotiate authentication using a local factotum. see β€œENVIRONMENT” and β€œEXAMPLES” for more details. auth queen energy.
  • -f β€” indicates that 9pfs should not detach from the controlling terminal and run in the foreground. stays right there with you, bestie.
  • -A aname β€” the attach name to send to the 9P service. like a little name tag for your attach. 🏷️
  • -p port β€” specifies the connection port for the 9P service. the default is 564. periodt.
  • -u user β€” specifies the username to use on authentication and attach to the 9P service. who dis? πŸ‘€
  • -o options β€” passes additional options to fuse_mount(3). you do you, boo.

also important: 9pfs caches directories it reads, which will cause inconsistencies if a different 9P client is connected to and making changes to the same 9P service. so lowkey watch out for that. there is a virtual control file .fscache in each directory served by 9pfs. reading or writing anything to that file will clear the cache for that directory. it's giving "refresh button but make it a file." πŸ”„


πŸŽ€ ENVIRONMENT πŸŽ€

  • FACTOTUM β€” authentication requires that the 9P service provided by a factotum (see http://man.cat-v.org/9front/4/factotum) is mounted at the path specified by the FACTOTUM environment variable. Plan 9 from User Space (https://swtch.com/plan9port/) provides a port of factotum to UNIX-like operating systems. see the β€œEXAMPLES” section below for details. iykyk. πŸ’…

✨ EXAMPLES ✨

the following will mount a remote 9P service with authentication, as long as plan9port is installed. so iconic of plan9port honestly.

$ factotum -n
$ 9pfs -U `namespace`/factotum mnt/factotum
$ export FACTOTUM=`pwd`/mnt/factotum
$ 9pfs -a spew.net mnt/spew
!adding key: role=client proto=p9sk1 dom=spew
user[glenda]:
password:
!

the dom for authentication will need to have an IP address assigned via /etc/hosts or your plan9port $PLAN9/ndb/local file. the utilities factotum and namespace are from Russ Cox's plan9port: https://swtch.com/plan9port. no cap, that's the whole example. 🫢


πŸ’€ BUGS πŸ’€

okay, not everything is perfect, bestie. here's the tea:

  • moving a file to a different directory is not implemented. to do so, copy the file and then remove it. annoying? yes. but that's the move. 😭
  • you cannot access or create a file on the 9P server named .fscache in any directory. it's reserved, okay?
  • OpenBSD does not display all the files in a very large directory. so if you're on OpenBSD and missing files, it's not you, it's the OS. πŸ™ˆ

🌈 SEE ALSO 🌈

tlsclient(1): https://git.sr.ht/~moody/tlsclient


okay that's the whole page, bestie. now go mount something and slay. πŸ’–βœ¨

β€” much love from the Debian fam, October 07, 2025, General Commands Manual, 9PFS(1) β€” stay iconic. πŸ‘‘

πŸ“¦ where this page comes from