curlftpfs(1)
β¨ NAME β¨
curlftpfs β mount a ftp host as a local directory π
(Yes bestie, this is the curlftpfs(1) manual, straight from the CurlFtpFS Manual. We're folding that header in right here, no cap.)
π SYNOPSIS π
curlftpfs [options] host path
π DESCRIPTION π
The program curlftpfs is a tool to mount remote ftp hosts as local directories. It connects to the host FTP server and maps its directory structure to the path directory. It's giving "your FTP server but make it a folder on your machine," and honestly? Iconic. π¦
curlftpfs is powered by libcurl for all transfer-related features. See libcurl(3) for details. The filesystem part is implemented on top of FUSE. See http://fuse.sourceforge.net/ for details. So like, libcurl does the networking magic and FUSE handles the filesystem vibe. Periodt. β¨
π₯ FTP OPTIONS π₯
-h,--helpβ Print help options. Your little "what do I do" button. π«Ά-v,--verboseβ Make libcurl print verbose debug output. It's gonna spill all the tea about what it's doing. π-V,--versionβ Printcurlftpfs, libcurl and fuse versions. Gotta know what you're working with, bestie. π-oβ Options are specified with a-oflag followed by a comma separated string of options. Think of it like a little options buffet β you pick what you need and comma-separate them. β¨cacert=<file>β (SSL) Pass a string naming a file holding one or more certificates to verify the peer with. Note that option is by default set to the system path where libcurl's cacert bundle is assumed to be stored, as established at build time. So it already knows where the system's cert bundle lives, but you can override it. πΈcapath=<directory>β (SSL) Tellscurlftpfsto use the specified certificate directory to verify the peer. The certificates must be in PEM format, and the directory must have been processed using thec_rehashutility supplied with openssl. Usingcapathcan allowcurlftpfsto make connections much more efficiently than usingcacertif thecacertfile contains many CA certificates. Efficiency slay. π₯cert=<certificate>β (SSL) Tellscurlftpfsto use the specified certificate file. The default format is"PEM"and can be changed withcert_type. πcert_type=<type>β (SSL) Tellscurlftpfswhat certificate type the provided certificate is in.PEM,DERandENGare recognized types. No guessing games. πciphers=<list of ciphers>β (SSL) Specifies which ciphers to use in the connection. The list must be syntactically correct, it consists of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used,,-and+can be used as operators. Valid examples of cipher lists include'RC4-SHA',Β΄SHA1+DES','TLSv1'and'DEFAULT'. The default list is normally set when you compile OpenSSL. Read up on SSL cipher list details on this URL:http://www.openssl.org/docs/apps/ciphers.htmlπcodepage=<name>β Sets the encoding the ftp server uses to encode file names. Gotta decode those names correctly, iykyk. π§connect_timeout=<seconds>β Maximum time in seconds that you allow the connection to the server to take. This only limits the connection phase, oncecurlftpfshas connected this option is of no more use. So it's just the "how long do we wait at the door" timer. β³custom_list=<command>β Command used bycurlftpfsto list files. The default is"LIST -a"but some servers might require extra options, e.g."LIST -la". Some FTP servers are extra like that. πdisable_eprtβ Tellcurlftpfsto disable the use of theEPRTandLPRTcommands when doing active FTP transfers.Curlftpfswill normally always first attempt to useEPRT, thenLPRTbefore usingPORT, but with this option, it will usePORTright away.EPRTandLPRTare extensions to the original FTP protocol, may not work on all servers but enable more functionality in a better way than the traditionalPORTcommand. So it's like, modern options first, unless you say nah. πdisable_epsvβ Tellcurlftpfsto disable the use of theEPSVcommand when doing passive FTP transfers. This is the default. So if you do nothing, this is already the vibe. β¨enable_epsvβ Tellcurlftpfsto enable the use of theEPSVcommand when doing passive FTP transfers.Curlftpfswill first attempt to useEPSVbeforePASV. Turning it on gives you that EPSV-first energy. π₯engine=<name>β Select the OpenSSL crypto engine to use for cipher operations. Use:
curl --engine list
to print a list of build-time supported engines. Note that not all (or none) of the engines may be available at run-time. So the list might be giving options that aren't actually there when you run it. π
ftpfs_debugβ Makecurlftpfsprint lots of debug information. Useful only in conjunction with the-doption. It's the "spill everything" mode, but only when-dis also in the chat. π«Άftp_method=<method>β Control what methodcurlftpfsshould use to reach a file on the server. The method argument should be one of the following alternatives:multicwdβcurlftpfsdoes a singleCWDoperation for each path part in the given URL. For deep hierarchies this means very many commands. This is how RFC1738 says it should be done. This is the default but the slowest behavior. So it's the "technically correct but slow" queen. πsinglecwdβcurlftpfsdoes oneCWDwith the full target directory and then operates on the file "normally" (like in themulticwdcase). Fewer commands, less yapping. β‘
ftp_port=<address>β Reverses the initiator/listener roles when connecting with ftp. This switch makescurlftpfsuse thePORTcommand instead ofPASV. In practice,PORTtells the server to connect to the client's specified address and port, whilePASVasks the server for an ip address and port to connect to.<address>should be one of:interfaceβ i.e"eth0"to specify which interface's IP address you want to use. Pick your network interface, bestie. πIP addressβ i.e"192.168.10.1"to specify exact IP number. Exact numbers only, no vibes. π’host nameβ i.e"my.host.domain"to specify machine. Name-drop the machine. π-β makecurlftpfspick the same IP address that is already used for the control connection. It just reuses what's already working. Slay. β¨
Disable the attempt to use the EPRT command instead of PORT by using disable_eprt. EPRT is really PORT++. So yeah, it's the glow-up version. π
httpproxyβ Set the proxy type to HTTP. This is the default type. HTTP proxy is the main character unless you say otherwise. πinterface=<name>β Pass a string as parameter. This set the interface name to use as outgoing network interface. The name can be an interface name, an IP address or a host name. It's giving "choose your outgoing network vibe." π¦iocharset=<name>β Sets the charset used by the client side for codepage to charset translation. Default:UTF8. UTF8 is the default because of course it is. πΈipv4β If libcurl is capable of resolving an address to multiple IP versions (which it is if it is ipv6-capable), this option tells libcurl to resolve names to IPv4 addresses only. IPv4 only, no IPv6 detours. π₯ipv6β If libcurl is capable of resolving an address to multiple IP versions (which it is if it is ipv6-capable), this option tells libcurl to resolve names to IPv6 addresses only. IPv6 only, periodt. βkey=<key>β (SSL) Private key file name. Allows you to provide your private key in this separate file. The default format is"PEM"and can be changed withkey_type. Your private key goes here, keep it safe. πkey_type=<type>β (SSL) Pass a string in the format of your private key. Supported formats are"PEM","DER"and"ENG". The format"ENG"enables you to load the private key from a crypto engine. In this casekeyis used as an identifier passed to the engine. You have to set the crypto engine withengineoption."DER"format key file currently does not work because of a bug in OpenSSL. So"DER"is lowkey broken right now, no cap. πkrb4=<level>β Enable kerberos4 authentication and use. The level must be entered and should be one of'clear','safe','confidential'or'private'. Should you use a level that is not one of these,'private'will instead be used. This option requires that the libcurl library was built with kerberos4 support. This is not very common. So it's a rare build, bestie. π§no_verify_hostnameβ (SSL)Curlftpfswill not verify the hostname when connecting to a SSL enabled server. It's skipping the hostname check. Use with caution, obviously. πno_verify_peerβ (SSL)Curlftpfswill not verify the certificate when connecting to a SSL enabled server. It's skipping the cert check. Also very "trust me bro" energy. πpass=<password>β (SSL) Pass phrase for the private key. The secret password for your secret key. π€«proxy=<host[:port]>β Use specified HTTP proxy. If the port number is not specified, it is assumed at port1080. This option overrides existing environment variables that sets proxy to use. If there's an environment variable setting a proxy, you can set proxy to""to override it. This options implies theproxytunneloption. Starting with libcurl version7.14.1, the proxy host can be specified the exact same way as the proxy environment variables, including protocol prefix (http://) and embedded user + password. So you can go full URL-style if you want. πproxytunnelβ Tellscurlftpfsto use a tunnel proxy. This option is implied by theproxyoption but you need to set it manually if you use the proxy environment variable. So if you're doing env var proxy, you gotta say it out loud. π«Άproxy_anyauthβ Tells curl to pick a suitable authentication method when communicating with the given proxy. This will cause an extra request/response round-trip. It's the "let curl decide" option, but it costs an extra round-trip. β³proxy_basicβ Tellscurlftpfsto use HTTP Basic authentication when communicating with the given proxy. Basic is the default authentication methodcurlftpfsis used with proxies. So it's the default proxy auth vibe. β¨proxy_digestβ Tellscurlftpfsto use HTTP Digest authentication when communicating with the given proxy. Digest auth, for when you want that flavor. π₯proxy_ntlmβ Tellscurlftpfsto use HTTP NTLM authentication when communicating with the given proxy. NTLM auth, because sometimes that's the vibe. πproxy_user=<user:password>β Specify user and password to use for proxy authentication. Drop your proxy creds here. π
skip_pasv_ipβ okay so normally the server goes "hey bestie, connect to this IP for the data connection" in its PASV reply, and curlftpfs justβ¦ does it π. With this on, curlftpfs is like "no ma'am, I'm not doing that" and re-uses the exact same IP address it's already using for the control connection instead. Iconic boundary-setting tbh.socks4β sets the proxy type to SOCKS4. that's it, that's the vibe π§¦socks5β sets the proxy type to SOCKS5. the glow-up sequel β¨sslβ makes curlftpfs use SSL/TLS for both the control and the data connections. full-body encryption, no half measures πsslv3β forces curlftpfs to use SSL version 3 when it's negotiating with a remote SSL server. like, it has to be SSLv3, no negotiating βssl_controlβ the minimal version: SSL/TLS only for the control connection. the data connection is out here raw πssl_tryβ curlftpfs will try to use SSL/TLS for both the control and data connections, but if the server simply doesn't support it, it'll still connect unencrypted anyway. it's giving "I'll ask nicely, but I'm not gonna make it weird" π«Άtcp_nodelayβ turns on theTCP_NODELAYoption. for the deets on what that actually does, go read thecurl_easy_setopt(3)man page. iykyktlsv1β (SSL) forces curlftpfs to use TLS version 1 when negotiating with a remote TLS server. vintage but make it mandatory πtransform_symlinksβ appends path to the absolute symlinks so they still point inside the ftp directory structure. skip this and those links are, in the original's own words, "very probably" gonna be broken. soβ¦ do it πuser=<user:password>β specify the user and password to use for server authentication. this overrides your netrc configuration. main character energy, it goes first πutf8β tries to transfer the file list with UTF-8 encoding. it sendsOPTS UTF8 ONat the very beginning of the file list transfer. slay, encoding π
β¨ FUSE OPTIONS β¨
these are the FUSE-side ones, bestie, and yes there's a whole lil family of them πΈ
-dβ enables FUSE debug output. heads up: this implies-f. so you're getting foreground whether you asked or not π-fβ runs curlftpfs in foreground mode. no sneaking off into the background π¦-rβ mounts it read-only. look but don't touch β¨-sβ disables multi-threaded operation. single-threaded, one thing at a time, very mindful, very demure π§-oβ options are specified with a-oflag followed by a comma-separated string of options. here's the whole menu that goes in there:allow_otherβ allow access to other users. by default the mount point is only accessible to the user that mounted it β and not even to root πallow_rootβ allow access to the root user. same deal: by default the mount point is only accessible to the user that mounted it, and not even to root.debugβ enable debug output πdirect_ioβ use direct I/Ofsname=NAMEβ set the filesystem name inmtabπ·οΈgid=Nβ set file grouphard_removeβ immediate removal (don't hide files) πkernel_cacheβ let the kernel VFS do some caching of the files β¨large_readβ issue large read requests (2.4 only). vintage behaviour, 2.4 only, no capmax_read=Nβ set maximum size of read requests πnonemptyβ allow mounts over non-empty file/dirreaddir_inoβ try to fill ind_inoinreaddiruid=Nβ set file owner πumask=Mβ set file permissions (octal). yes, octal, bestie, like022πuse_inoβ let the filesystem set inode numbers
π AUTHORS π
Robson Braga Araujo is the author and maintainer of CurlFtpFS. periodt, thank you for your service π«Ά
π WWW π
http://curlftpfs.sourceforge.net
go look, it's right there π
πΈ SEE ALSO πΈ
mount(8)β the og. the blueprint. go read it π§
aaaand that's the whole page, bestie!! this was CurlFtpFS 0.9.2, dated 25 May 2007 β yes it's an elder but it still ate π β¨ go mount something cute, ily, bye ππ¦π
π¦ where this page comes from
- arch rolling: curlftpfs 0.9.2-11 Β· GPL
- debian trixie: curlftpfs 0.9.2-10
- fedora 43: curlftpfs 0.9.2-41.fc43 Β· GPL-1.0-or-later
- fedora 44: curlftpfs 0.9.2-43.fc44 Β· GPL-1.0-or-later
- nixos 26.05: curlftpfs 0.9.2
- ubuntu jammy: curlftpfs 0.9.2-9build1
- ubuntu questing: curlftpfs 0.9.2-10
- ubuntu resolute: curlftpfs 0.9.2-10build1
- ubuntu stonking: curlftpfs 0.9.2-10build1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms