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 β€” Print curlftpfs, libcurl and fuse versions. Gotta know what you're working with, bestie. πŸ’…
  • -o β€” Options are specified with a -o flag 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) Tells curlftpfs to use the specified certificate directory to verify the peer. The certificates must be in PEM format, and the directory must have been processed using the c_rehash utility supplied with openssl. Using capath can allow curlftpfs to make connections much more efficiently than using cacert if the cacert file contains many CA certificates. Efficiency slay. πŸ”₯
    • cert=<certificate> β€” (SSL) Tells curlftpfs to use the specified certificate file. The default format is "PEM" and can be changed with cert_type. πŸŽ€
    • cert_type=<type> β€” (SSL) Tells curlftpfs what certificate type the provided certificate is in. PEM, DER and ENG are 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, once curlftpfs has 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 by curlftpfs to 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 β€” Tell curlftpfs to disable the use of the EPRT and LPRT commands when doing active FTP transfers. Curlftpfs will normally always first attempt to use EPRT, then LPRT before using PORT, but with this option, it will use PORT right away. EPRT and LPRT are extensions to the original FTP protocol, may not work on all servers but enable more functionality in a better way than the traditional PORT command. So it's like, modern options first, unless you say nah. πŸ’…
    • disable_epsv β€” Tell curlftpfs to disable the use of the EPSV command when doing passive FTP transfers. This is the default. So if you do nothing, this is already the vibe. ✨
    • enable_epsv β€” Tell curlftpfs to enable the use of the EPSV command when doing passive FTP transfers. Curlftpfs will first attempt to use EPSV before PASV. 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 β€” Make curlftpfs print lots of debug information. Useful only in conjunction with the -d option. It's the "spill everything" mode, but only when -d is also in the chat. 🫢
  • ftp_method=<method> β€” Control what method curlftpfs should use to reach a file on the server. The method argument should be one of the following alternatives:
    • multicwd β€” curlftpfs does a single CWD operation 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 β€” curlftpfs does one CWD with the full target directory and then operates on the file "normally" (like in the multicwd case). Fewer commands, less yapping. ⚑
  • ftp_port=<address> β€” Reverses the initiator/listener roles when connecting with ftp. This switch makes curlftpfs use the PORT command instead of PASV. In practice, PORT tells the server to connect to the client's specified address and port, while PASV asks 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. πŸ’œ
    • - β€” make curlftpfs pick 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 with key_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 case key is used as an identifier passed to the engine. You have to set the crypto engine with engine option. "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) Curlftpfs will 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) Curlftpfs will 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 port 1080. 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 the proxytunnel option. Starting with libcurl version 7.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 β€” Tells curlftpfs to use a tunnel proxy. This option is implied by the proxy option 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 β€” Tells curlftpfs to use HTTP Basic authentication when communicating with the given proxy. Basic is the default authentication method curlftpfs is used with proxies. So it's the default proxy auth vibe. ✨
  • proxy_digest β€” Tells curlftpfs to use HTTP Digest authentication when communicating with the given proxy. Digest auth, for when you want that flavor. πŸ”₯
  • proxy_ntlm β€” Tells curlftpfs to 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 the TCP_NODELAY option. for the deets on what that actually does, go read the curl_easy_setopt(3) man page. iykyk
  • tlsv1 β€” (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 sends OPTS UTF8 ON at 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 -o flag 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/O
    • fsname=NAME β€” set the filesystem name in mtab 🏷️
    • gid=N β€” set file group
    • hard_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 cap
    • max_read=N β€” set maximum size of read requests πŸ“
    • nonempty β€” allow mounts over non-empty file/dir
    • readdir_ino β€” try to fill in d_ino in readdir
    • uid=N β€” set file owner πŸ‘‘
    • umask=M β€” set file permissions (octal). yes, octal, bestie, like 022 πŸŽ€
    • 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 πŸŽ€πŸ¦‹πŸ’œ