☰
ffsend 完整使用指南:命令行端到端加密文件分享的 Firefox Send 客户端
2026/10/15 16:23:55 网站建设 项目流程
  • 开发工具

【免费下载链接】ffsend

:mailbox_with_mail: Easily and securely share files from the command line. A fully featured Firefox Send client.

项目地址:https://gitcode.com/gh_mirrors/ff/ffsend
点击查看免费下载

ffsend 是一款功能完备的 Firefox Send 客户端,它让你只需一条命令,就能通过安全、私密、加密的链接分享文件与目录。本指南以仓库 README.md 为主体,结合 src/action/upload.rs、src/action/download.rs 等源码实现,系统讲解其功能特性、上传下载、远程文件管理、多平台安装、源码构建、环境变量配置、脚本化自动化与安全模型,读完即可上手完成安全的命令行文件分享。

提示:项目当前仍处于 beta 阶段,部分期望特性尚未实现(README.md 原文说明)。默认公开 Send 服务由项目作者提供,本应用与 Firefox、Mozilla 无任何关联。

核心特性一览

ffsend 的核心能力(继承自 README.md):

  • 功能完备、友好的命令行工具;
  • 上传与下载文件、目录,始终在客户端加密;
  • 额外的密码保护、密码生成,以及可配置的下载次数限制;
  • 文件与目录的归档(打包)与解档(解包);
  • 内置分享链接短链服务与二维码生成器;
  • 同时支持 Send v3(当前)与 v2 协议;
  • 历史记录追踪文件,便于管理;
  • 支持使用自建的 Send 服务器;
  • 可检查(exists/info)或删除(delete)已分享文件;
  • 准确的错误报告;
  • 流式加密与上传/下载,内存占用极低;
  • 面向脚本自动化设计,可无交互运行。

上述特性在源码中有清晰对应:archive、clipboard、history、qrcode、urlshorten、send2/send3、infer-command等均是可选的编译特性,定义于 Cargo.toml 的[features]段,默认全部启用。

快速上手:上传与下载

基础上传

# 简单上传 $ ffsend upload my-file.txt https://send.vis.ee/#sample-share-url

上传成功后输出分享链接,任何人均可通过该链接(用 ffsend 或浏览器)下载文件。

高级上传

# 高级上传 # - 指定下载次数限制为 1 # - 指定上传过期时间为 5 分钟 # - 输入密码加密文件 # - 上传前先归档文件 # - 将分享链接复制到剪贴板 # - 在浏览器中打开分享链接 $ ffsend upload --downloads 1 --expiry-time 5m --password --archive --copy --open my-file.txt Password: ****** https://send.vis.ee/#sample-share-url

各参数说明:

  • --downloads <COUNT>(别名-d、--downloads、--download):下载次数限制。服务端允许的取值是一组离散值(见 src/cmd/arg/download_limit.rs),若指定的值不在允许列表中,程序会提示并询问是否改用最接近的合法值,除非追加--force;
  • --expiry-time <TIME>(别名-e、--expire、--expiry):文件过期时间。支持人类可读的复合时长格式,如5m、23h14m、8w6d,由 src/util.rs 的parse_duration解析(w/d/h/m/s分别代表周/天/小时/分钟/秒);超过服务端上限时会提示并询问是否改用上限值(见 src/cmd/arg/expiry_time.rs);
  • --password:交互式输入密码,对文件加密保护;也可以直接--password "secret"在命令行中指定;
  • --archive(-a):将文件/目录先归档为.tar再上传。上传目录或多个文件时必须归档;
  • --copy(-c):复制分享链接到剪贴板;--copy-cmd(-C)则复制ffsend download <URL>形式的下载命令(见 src/cmd/matcher/upload.rs 的CopyMode);
  • --open(-o):上传完成后用系统默认浏览器打开分享链接。

使用自有 Send 服务器

# 上传到自己的 host $ ffsend u -h https://example.com/ my-file.txt https://example.com/#sample-share-url

-h/--host指定上传目标服务器(src/cmd/arg/host.rs),下载时则会根据分享链接自动猜测 host。

下载文件

# 简单下载 $ ffsend download https://send.vis.ee/#sample-share-url

下载流程在 src/action/download.rs 中实现,要点包括:

  1. 尝试跟随分享链接的重定向(follow_url,用于处理短链,src/util.rs);
  2. 解析远程文件并检查是否仍存在(ApiExists),若已过期则报错并从历史记录中移除;
  3. 若文件受密码保护,交互式要求输入密码(ensure_password);
  4. 下载前检查目标磁盘剩余空间(ensure_enough_space,src/util.rs);
  5. 若下载的是归档文件且编译了archive特性,会询问是否自动解档(--extract/-e可跳过询问直接解包);
  6. 输出路径可用--output <PATH>(-o)指定,默认使用当前目录下的原文件名。

此外,上传命令还支持从标准输入读取数据:把文件参数写为-(例如ffsend upload - < data.txt),ffsend 会先写入临时文件再上传,默认命名为stdin.txt(见 src/action/upload.rs)。

远程文件管理

检查文件是否存在

$ ffsend exists https://send.vis.ee/#sample-share-url Exists: yes

查看远程文件信息

$ ffsend info https://send.vis.ee/#sample-share-url ID: b087066715 Name: my-file.txt Size: 12 KiB MIME: text/plain Downloads: 0 of 10 Expiry: 18h2m (64928s)

info的表格输出由 src/action/info.rs 生成:ID来自分享链接解析,Name/Size/MIME来自文件元数据,Downloads与Expiry则需要在提供 owner token(文件所有者令牌)后由服务端返回(程序会提示是否提供,也可用--owner <TOKEN>指定);过期时间同时给出人类可读形式与剩余秒数。

查看历史记录

$ ffsend history # LINK EXPIRE 1 https://send.vis.ee/#sample-share-url 23h57m 2 https://send.vis.ee/#other-sample-url 17h38m 3 https://example.com/#sample-share-url 37m30s

历史记录默认保存在系统缓存目录下的history.toml(由 src/util.rs 的app_history_file_path计算),可用-H/--history <FILE>或环境变量FFSEND_HISTORY覆盖。--incognito(-i)可让本次操作不写入历史。上传、下载、查看信息等操作会自动维护历史(上传后可在 src/action/upload.rs 看到history_tool::add调用)。

修改文件密码

# 上传后修改密码 $ ffsend password https://send.vis.ee/#sample-share-url Password: ******

password子命令(别名pass、p)需要 owner token 认证,可交互输入,也可用--password <PASSWORD>直接指定或--generate-passphrase生成随机口令(见 src/action/password.rs 与 src/cmd/arg/gen_passphrase.rs)。

删除文件

$ ffsend delete https://send.vis.ee/#sample-share-url

delete(别名del、rm)同样需要 owner token 认证,成功后会输出File deleted,并同步清理本地历史记录(src/action/delete.rs)。

其他子命令

除上述命令外,ffsend help还会列出:

  • parameters(别名params):修改已分享文件的参数(下载次数、过期时间等),同样需要 owner token;
  • generate(别名gen):生成 shell 自动补全脚本(实现见 src/action/generate/completions.rs,仓库 contrib/completions 目录内置了 bash、zsh、fish、elvish 与 PowerShell 的补全文件);
  • debug(别名dbg):查看版本、已启用特性、API 版本支持列表等调试信息(可用ffsend debug验证infer-command特性是否启用);
  • version(别名v):探测 Send 服务器的协议版本。

系统要求

  • 支持 Linux、macOS、Windows、FreeBSD、Android(其他 BSD 发行版可能可用);
  • 需要终端与网络连接;
  • Linux:需要 OpenSSL 与 CA 证书(如apt install openssl ca-certificates);剪贴板支持可选安装xclip或xsel(CentOS/Red Hat/openSUSE/Fedora 用yum install xclip,Arch 用pacman -S xclip);
  • Windows:若启用crypto-openssl特性需安装 OpenSSL(v1.1.0j 或以上);
  • macOS:若启用crypto-openssl特性需brew install openssl@1.1;
  • FreeBSD:需要pkg install openssl、ca_root_nss,剪贴板支持可装xclip xsel-conrad;
  • Android:通过 Termux 使用(pkg install ffsend)。

剪贴板依赖在源码中体现为:Linux/BSD 编译clipboard-bin时通过调用系统xclip/xsel二进制写入剪贴板(因为原生剪贴板随进程退出即失效,见 src/util.rs 的ClipboardType::select);其他平台则使用原生剪贴板接口。

安装方式全景

Linux(全发行版)

推荐使用 snap 包,或手动安装预编译二进制。官方仅提供 64 位(x86_64)包,其他架构需从源码编译。

snap 包(注意:snap 隔离环境只能访问主目录下的文件,且默认配置下无法从 SSH 等上下文使用;如需读写 U 盘先执行snap connect ffsend:removable-media):

snap install ffsend ffsend --help

Arch AUR:ffsend-bin(预编译,推荐)、ffsend(源码编译)、ffsend-git(master 分支源码编译),例如yay -S ffsend或aurto add ffsend-bin && sudo pacman -S ffsend-bin。

Nix:

nix-channel --update nix-env --install ffsend ffsend --help

Fedora:sudo dnf install ffsend(社区维护,可能略旧)。

Alpine(edge/testing 仓库,社区维护):

apk add ffsend --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing

预编译二进制:从最新 release 下载ffsend-v*-linux-x64-static,然后:

# 重命名为 ffsend mv ./ffsend-* ./ffsend # 标记为可执行 chmod a+x ./ffsend # 移入 PATH sudo mv ./ffsend /usr/local/bin/ ffsend --help

macOS

推荐 homebrew:brew install ffsend;也可用 MacPorts(sudo port selfupdate && sudo port install ffsend)或 Nix(nix-env --install ffsend);预编译二进制同样重命名、chmod a+x后移入/usr/local/bin/。

Windows

推荐 scoop:scoop install ffsend(若使用 WSL,建议改用 Linux 预编译二进制)。预编译二进制(ffsend-v*-windows-x64-static)可在当前目录直接运行.\ffsend.exe --help,或移入System32使其全局可调用:

move .\ffsend.exe C:\Windows\System32\ffsend.exe

FreeBSD

# 预编译包 pkg install ffsend # 或从 ports 源码编译安装 cd /usr/ports/www/ffsend && make install

Android(Termux)

pkg install ffsend ffsend help

Docker 镜像

挂载目录到容器的/data后即可正常使用:

# 无参数调用 docker run --rm -it -v $(pwd):/data timvisee/ffsend # 上传文件 docker run --rm -it -v $(pwd):/data timvisee/ffsend upload my-file.txt # 下载 docker run --rm -it -v $(pwd):/data timvisee/ffsend download https://send.vis.ee/#sample-share-url # 更新镜像 docker pull timvisee/ffsend

Linux/macOS 可在 shell 配置中定义别名:alias ffsend='docker run --rm -it -v "$(pwd):/data" timvisee/ffsend'。注意容器方式只能访问挂载路径内的文件。

从源码构建

构建前置要求

  • Rustv1.63(MSRV,Cargo.toml 声明)或更高,建议用 rustup 安装;
  • OpenSSL 或 LibreSSL 的开发库/头文件:Ubuntu/Debianapt install build-essential cmake pkg-config libssl-dev;CentOS/Red Hat/openSUSEyum install gcc gcc-c++ make cmake openssl-devel;Archpacman -S openssl base-devel;Fedoradnf install gcc gcc-c++ make cmake openssl-devel;FreeBSDpkg install rust gmake pkgconf python36 libxcb xclip ca_root_nss xsel-conrad(推荐直接修改现成的ffsendport)。

编译与安装

# 方式一:直接从 cargo 安装 cargo install ffsend -f ffsend --help # 方式二:克隆仓库后安装 git clone https://gitcode.com/gh_mirrors/ff/ffsend.git cd ffsend cargo install --path . -f ffsend --help # 或直接通过 cargo 运行 cargo run --release -- --help # 方式三:克隆后直接构建二进制(Linux/macOS) git clone https://gitcode.com/gh_mirrors/ff/ffsend.git cd ffsend cargo build --release ./target/release/ffsend --help

编译特性(use flags)

特性默认启用说明
send2默认支持 Send v2 服务器
send3默认支持 Send v3 服务器
crypto-ring默认使用 ring 作为加密后端
crypto-openssl否使用 OpenSSL 作为加密后端
clipboard默认支持复制链接到剪贴板
history默认支持历史记录追踪
archive默认支持上传/下载时归档与解档
qrcode默认支持为分享链接渲染二维码
urlshorten默认支持缩短分享链接
infer-command默认支持根据二进制名推断子命令(如ffput)
no-color否编译时不包含错误与帮助消息的彩色输出

默认特性集合在 Cargo.toml 中定义为["archive", "clipboard", "crypto-ring", "history", "infer-command", "qrcode", "send3", "urlshorten"]。构建时用--features指定,用--no-default-features关闭默认项:

# 默认特性 + no-color cargo install --features no-color cargo build --release --features no-color # 仅保留必需特性 cargo install --no-default-features --features send3,crypto-ring # 带 history 与 clipboard cargo install --no-default-features --features send3,crypto-ring,history,clipboard

Windows 终端对彩色支持不稳定,建议编译时提供no-color标志。

配置与环境变量

当前版本不提供配置文件(dotfile)支持(README 明确说明将在后续版本加入)。所有配置通过环境变量完成,每个变量都与一个 CLI 参数对应:

带值型变量(对应 CLI 选项):

变量对应 CLI 参数说明
FFSEND_HISTORY--history <FILE>历史文件路径
FFSEND_HOST--host <URL>上传服务器地址
FFSEND_TIMEOUT--timeout <SECONDS>请求超时(0 禁用)
FFSEND_TRANSFER_TIMEOUT--transfer-timeout <SECONDS>传输超时(0 禁用)
FFSEND_EXPIRY_TIME--expiry-time <SECONDS>默认上传过期时间
FFSEND_DOWNLOAD_LIMIT--download-limit <DOWNLOADS>默认下载次数限制
FFSEND_API--api <VERSION>服务器 API 版本,-表示自动探测
FFSEND_BASIC_AUTH--basic-auth <USER:PASSWORD>受保护代理的 HTTP 基础认证凭据(非 FxA)

其中超时默认值定义于 src/config.rs:普通请求CLIENT_TIMEOUT = 30秒,传输请求CLIENT_TRANSFER_TIMEOUT = 24 * 60 * 60秒(即一天,避免大文件传输被掐断)。--api的默认行为是优先假设 Send v3(若编译了send3,见 src/config.rs)。

开关型变量(仅需存在即生效,变量值被忽略,可为空字符串):

变量对应 CLI 参数说明
FFSEND_FORCE--force强制执行操作
FFSEND_NO_INTERACT--no-interact禁止交互提示
FFSEND_YES--yes对提示默认回答是
FFSEND_INCOGNITO--incognito隐身模式,不写历史
FFSEND_OPEN--open上传后打开分享链接
FFSEND_ARCHIVE--archive上传前归档文件
FFSEND_EXTRACT--extract下载后解档文件
FFSEND_COPY--copy复制分享链接到剪贴板
FFSEND_COPY_CMD--copy-cmd复制下载命令到剪贴板
FFSEND_QUIET--quiet安静模式,日志最小化
FFSEND_VERBOSE--verbose详细日志

这些开关的判断在源码中统一通过env_var_present完成,例如 src/cmd/matcher/main.rs 中force()为matches.is_present("force") || env_var_present("FFSEND_FORCE")。

编译期变量:

变量说明
XCLIP_PATH使用clipboard-bin时指定固定的xclip二进制路径(Linux/BSD)
XSEL_PATH使用clipboard-bin时指定固定的xsel二进制路径(Linux/BSD)

子命令独立二进制:ffput、ffget、ffdel

ffsend支持将特定子命令做成独立二进制名,例如只用ffput上传、ffget下载:

ffput my-file.txt ffget https://send.vis.ee/#sample-share-url

预定义的名称映射在 src/config.rs 的INFER_COMMANDS中:ffput→upload、ffget→download、ffdel→delete。设置方法有三种:创建符号链接(推荐)、创建硬链接、复制并重命名二进制。Linux/macOS 示例:

ln -s $(which ffsend) ./ffput ln -s $(which ffsend) ./ffget

该能力依赖infer-command编译特性(默认启用),实现逻辑见 src/cmd/handler.rs:解析参数前会读取被调用二进制的文件名,若命中INFER_COMMANDS则自动在参数列表头部插入对应子命令。注意:snap 包因格式限制不支持此特性;可通过ffsend debug检查当前安装是否包含该特性。

脚本化与自动化

ffsend 面向自动化脚本做了专门优化,提供一组无交互参数(README.md 原文):

  • --no-interact(-I):禁止任何用户交互。对于没有默认值的提示,程序会报错退出(除非同时提供--yes或--force)。编写自动化脚本时应当始终携带此参数。例如上传目录时,提供该参数会跳过"是否归档"的询问并直接按默认值归档;
  • --yes(-y):对"是/否"型提示默认回答"是"。例如下载时本地已有同名文件,提供该参数会在"是否覆盖"询问中直接选择覆盖;
  • --force(-f):强制继续执行动作,跳过一切会导致退出的警告。例如上传超大文件时,提供该参数会忽略文件大小警告继续上传;
  • --quiet(-q):安静模式,输出信息最小化。例如上传时只输出最终的分享链接。

这些参数的提示处理逻辑集中在 src/util.rs 的prompt_yes:assume_yes时直接返回 true;no_interact时若有默认值则自动选择默认值、无默认值则报错退出。

自动化的一般规则:始终提供-I;对"无论如何都要完成"的动作,叠加-y与-f;需要传递分享链接时(如上传)提供-q。这些标志同样可通过上文的环境变量自动设置。

完整的 bash 自动化示例(继承自 README.md):

# 出错即停止 set -e # 上传文件 # -I: 无交互 # -y: 默认是 # -q: 安静输出,只返回分享链接 URL=$(ffsend -Iy upload -q my-file.txt) # 查看文件信息 # -I: 无交互 # -f: 强制,直接展示信息 ffsend -If info $URL # 为已上传文件设置密码 ffsend -I password $URL --password="secret" # 之后自动使用以下标志 # -I: 无交互 # -f: 强制 # -y: 是 export FFSEND_NO_INTERACT=1 FFSEND_FORCE=1 FFSEND_YES=1 # 下载文件,用变量覆盖本地同名文件 ffsend download $URL --password="secret"

安全模型

简而言之:ffsend 与 Send 服务可以被认为是安全的,可用于分享敏感文件。但请注意,上传后生成的分享链接允许任何人下载该文件,请勿将链接分享给未经授权的人。

客户端加密

ffsend 使用客户端加密:文件在上传到远程服务器之前已在本地加密,第三方即使拿到密文,没有密钥也无法解密。文件及其元数据使用128-bit AES-GCM加密,并使用HMAC SHA-256签名密钥进行请求认证(README.md 原文),与 Send 服务的加密文档一致。上传流程的加密与流式传输由ffsend-api库在底层完成,ffsend 侧通过ProgressBar(src/progress.rs)实现流式进度上报,因此内存占用极低。

分享链接的密钥风险

解密文件所需的加密密钥包含在分享链接#(hash 片段)之后。在浏览器中直接打开分享链接时,这段密钥不会直接发送给远程服务器。但理论上,恶意网页可能在页面加载后通过脚本窃取链接中的密钥。虽然这种场景极不可能发生,仍有几种防范手段:

  • 只用 ffsend 本身下载,不要在浏览器中打开分享链接;
  • 上传时用--password增加一道密码保护,或用password子命令事后追加密码;
  • 自行托管安全的 Send 服务实例。

免责声明:即便加密方法被认为是安全的,ffsend 对任何未经授权而被解密的文件不提供任何形式或形态的担保。

帮助输出速查

ffsend help输出(版本号以仓库 Cargo.toml 中的0.2.77为准,README 示例中的输出可能略旧):

ffsend 0.2.77 Easily and securely share files from the command line. A fully featured Send client. USAGE: ffsend [FLAGS] [OPTIONS] [SUBCOMMAND] FLAGS: -f, --force Force the action, ignore warnings -h, --help Prints help information -i, --incognito Don't update local history for actions -I, --no-interact Not interactive, do not prompt -q, --quiet Produce output suitable for logging and automation -V, --version Prints version information -v, --verbose Enable verbose information and logging -y, --yes Assume yes for prompts OPTIONS: -A, --api <VERSION> Server API version to use, '-' to lookup [env: FFSEND_API] --basic-auth <USER:PASSWORD> Protected proxy HTTP basic authentication credentials (not FxA) [env: FFSEND_BASIC_AUTH] -H, --history <FILE> Use the specified history file [env: FFSEND_HISTORY] -t, --timeout <SECONDS> Request timeout (0 to disable) [env: FFSEND_TIMEOUT] -T, --transfer-timeout <SECONDS> Transfer timeout (0 to disable) [env: FFSEND_TRANSFER_TIMEOUT] SUBCOMMANDS: upload Upload files [aliases: u, up] download Download files [aliases: d, down] debug View debug information [aliases: dbg] delete Delete a shared file [aliases: del, rm] exists Check whether a remote file exists [aliases: e] generate Generate assets [aliases: gen] help Prints this message or the help of the given subcommand(s) history View file history [aliases: h] info Fetch info about a shared file [aliases: i] parameters Change parameters of a shared file [aliases: params] password Change the password of a shared file [aliases: pass, p] version Determine the Send server version [aliases: v] This application is not affiliated with Firefox or Mozilla.

这套参数体系在 src/cmd/handler.rs 中通过 clap 构建:全局 flag(force/no-interact/yes/quiet/verbose等)使用.global(true)注册,可放在子命令前后任意位置;timeout、history等选项通过.env(...)与对应环境变量直接绑定。

许可协议

本项目以 GNU GPL-3.0 许可发布,详见 LICENSE 文件。更多仓库细节可继续阅读 CONTRIBUTING.md 与 SECURITY.md,各发行版打包脚本位于 pkg 目录,shell 补全位于 contrib/completions 目录。

  • 开发工具

【免费下载链接】ffsend

:mailbox_with_mail: Easily and securely share files from the command line. A fully featured Firefox Send client.

项目地址:https://gitcode.com/gh_mirrors/ff/ffsend
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询