Plik 1.4.3 常用 CLI 命令详解

Plik 1.4.3 双 CLI 工具全解:客户端 plik 的上传/密码/阅后即焚/流式/端到端加密/归档/令牌认证逐项实测,服务端 plikd 的 user/token/file/export 管理子命令逐一回显,含官方 sha256 校验安装与常见排障。

PlikPlik文件传输文件分享2026/10/31

Plik 1.4.3 常用 CLI 命令详解

目标:把 Plik 的两套命令行工具——多平台客户端 plik(上传/下载/加密/流式)与服务端管理工具 plikd(用户/令牌/文件/导入导出)——从安装到每个高频子命令逐一讲清,全部示例命令与回显均在 2026-10-31 于 Ubuntu 22.04 实机实测通过,读者照抄即可复现。

一、环境信息

本文实测所用的环境(实测日期 2026-10-31):

  • 操作系统:Ubuntu 22.04(x86_64)
  • Plik 客户端:plik 1.4.3(官方发行版二进制,-v 实测回显 Plik client 1.4.3 built from git rev d32ca8fa [mint,release] at 2026-10-22 03:18:20 +0800 CST with go1.27.3 linux/amd64)
  • Plik 服务端:plikd 1.4.3(部署于同一台服务器,对外端口 8132,部署过程见 《Plik 1.4.3 Docker Compose 部署指南》)
  • 管理员账号:admin / q1w2e3r4(演示账号)
  • 测试用户:demo / q1w2e3r4(正文 5.2 节实测创建,限额 --max-file-size 100MB --max-ttl 7d)
  • 加密工具依赖:age(客户端 --secure age 下载解密需要);openssl(系统自带)
  • 组件背景见 《Plik 介绍与选型指南》,参数语义见 《Plik 1.4.3 配置参数详解》

二、工具概览

Plik 的 CLI 体系由两个二进制组成,职能完全分开:

工具面向角色职能分发位置
plik上传/下载用户文件上传、密码保护、阅后即焚、流式传输、端到端加密、归档打包、API Token 认证、客户端自更新、MCP 服务服务端 Web 界面下载、官方 Releases、plik --update 自更新
plikd服务端运维用户增删改查、令牌管理、文件清理、元数据导入导出服务端部署包内,与服务端同目录

plik 客户端的命令形态是「单命令 + 丰富选项」:没有子命令树,一次调用完成一个上传会话,选项控制策略(-o 阅后即焚、-t 有效期、--password 密码等)。plikd 则是 cobra 风格的多级子命令树(plikd user create、plikd file list 等)。

三、前置条件

3.1 客户端安装(官方发行包)

从官方 GitHub Releases 下载对应平台二进制(本文为 linux-amd64),官方发行清单含各平台产物与 sha256(来源:官方 Releases 页 sha256 清单,查询日期 2026-10-31):

wget https://github.com/root-gg/plik/releases/download/1.4.3/plik-1.4.3-linux-amd64
sha256sum plik-1.4.3-linux-amd64

实测回显:

b005b123326b5245899d5f3c0be9f7ff385a0dec8b74e1f23cb392d7c2cff604  plik-1.4.3-linux-amd64

与官方清单值一致。安装到 PATH 并赋执行权限:

sudo install -m 755 plik-1.4.3-linux-amd64 /usr/local/bin/plik
plik -v

实测回显:

Plik client 1.4.3 built from git rev d32ca8fa [mint,release] at 2026-10-22 03:18:20 +0800 CST with go1.27.3 linux/amd64

⚠️ 注意:官方还提供免下载的 Bash 脚本客户端(Releases 附件 plik-1.4.3.sh,sha256 6a1ed81618b7510f89f7200dfc3d257804be18467ff37512ff1153dafbee3ba6),功能为 curl 封装,适合无法安装二进制的受限环境。

3.2 客户端自更新

已装好的客户端可从服务端直接更新到服务器分发版本:

plik --update

更新来源是服务端 /version 接口回带的各平台客户端清单(含 md5 校验),Web 界面的客户端下载按钮同源。升级服务端后,在客户端机器执行一次即可对齐版本。

3.3 服务端管理工具 plikd 的获取

plikd 与服务端同包分发(plik-server-1.4.3-linux-amd64.tar.gz)。容器/裸机部署后进入服务端部署目录(本文为 /home/plik/server,裸机部署解压目录为 plik-server-1.4.3-linux-amd64/server/)即可执行 ./plikd <子命令>。它读取同目录 plikd.cfg 直连元数据库,不走 HTTP API,因此在本机运维身份下执行即可,无需服务账号凭据。

3.4 加密解密依赖

四、客户端 plik 功能详解

4.1 帮助与信息查看

plik --help

实测回显(完整输出):

plik — temporary file sharing

Usage:
  plik [options] [FILE] ...

Profile Options:
  -P, --profile PROFILES    Use named profiles from ~/.plikrc (comma-separated for composition)

Upload Options:
  -o, --oneshot             Delete each file after first download
  -r, --removable           Allow anyone to delete uploaded files
  -S, --stream              Stream upload (blocks until receiver downloads)
  -t, --ttl TTL             Time before expiration (e.g. 30m, 24h, 7d)
  --extend-ttl              Extend expiration on each download
  -p                        Prompt for upload login and password
  --password PASSWD         Protect upload with login:password (default login: "plik")
  --comments COMMENT        Set upload comments (Markdown)
  -n, --name NAME           Set filename when piping from STDIN

Server Options:
  --server SERVER           Override server URL
  --token TOKEN             Set upload token (use '-' to prompt)
  --insecure                Skip TLS certificate verification

Archive Options:
  -a                        Archive files using default settings from ~/.plikrc
  --archive MODE            Archive files with specified backend (tar | zip)
  --compress MODE           [tar] Compression codec (gzip|bzip2|xz|lzip|lzma|lzop|no)
  --archive-options OPTIONS Additional command line options passed to archiver

Encryption Options:
  -s                        Encrypt files using default settings from ~/.plikrc
  --not-secure              Disable encryption even if enabled in ~/.plikrc
  --secure MODE             Encrypt files with backend (age | openssl | pgp, default: age)
  --passphrase PASSPHRASE   [age|openssl] Encryption passphrase (use '-' to prompt)
  --recipient RECIPIENT     [age] @github_user, ssh://host, URL, key, or age1...
                            [pgp] Recipient name or email
  --cipher CIPHER           [openssl] Cipher algorithm (default: aes-256-cbc)
  --secure-options OPTIONS  [openssl|pgp] Additional command line options

Output Options:
  -q, --quiet               Suppress progress and non-essential output
  -j, --json                Output upload metadata as JSON (implies --quiet)
  -d, --debug               Enable debug mode

General Options:
  --login                   Authenticate with server (opens browser)
  --update                  Update client binary from server
  --update-plikrc           Rewrite ~/.plikrc in canonical format
  --mcp                     Start MCP (Model Context Protocol) server over stdio
  --stdin                   Read from STDIN even when DisableStdin is set
  -y, --yes                 Auto-accept confirmation prompts
  -v, --version             Show client version
  -i, --info                Show client and server information
  -h, --help                Show this help

Examples:
  plik file.txt                       Upload a single file
  plik -o file1.txt file2.txt         Upload files, delete after first download
  plik -t 1h *.log                    Upload with 1 hour expiration

选项按 Profile/Upload/Server/Archive/Encryption/Output/General 七组组织。-i 查看客户端与服务端版本及生效配置(实测回显全文见配置详解篇 3.2 节,此处不再重复)。

4.2 基础上传:单文件与多文件

最简用法——直接给文件:

echo "plik-cli-demo-2026-10-31" > upload-test.txt
plik --server http://127.0.0.1:8132 upload-test.txt

实测回显:

Upload successfully created at Sat, 31 Oct 2026 01:16:20 UTC :
    http://127.0.0.1:8132/#/?id=38hO6tkNlpGQP8Ap

✅ upload-test.txt :  26 B / 26 B  100.00% 2.26 KiB/s 0s

Commands :
curl -s "http://127.0.0.1:8132/file/38hO6tkNlpGQP8Ap/KvuX0T1p5zvL0JkK/upload-test.txt" > 'upload-test.txt'

输出三段:Web 分享链接(#/?id=...)、每个文件的上传进度条、接收方免客户端的 curl 下载命令。多文件一次上传:

plik --server http://127.0.0.1:8132 oneshot.txt expire.txt

实测回显:

Upload successfully created at Sat, 31 Oct 2026 01:16:20 UTC :
    http://127.0.0.1:8132/#/?id=k8629zXTA6fBrMgX

✅ oneshot.txt :  23 B / 23 B  100.00% 3.26 KiB/s 0s
✅ expire.txt  :  14 B / 14 B  100.00% 1.95 KiB/s 0s

Commands :
curl -s "http://127.0.0.1:8132/file/k8629zXTA6fBrMgX/NYrTQaWpWIrvSOPC/oneshot.txt" > 'oneshot.txt'
curl -s "http://127.0.0.1:8132/file/k8629zXTA6fBrMgX/faaxM7EqDetuJoEW/expire.txt" > 'expire.txt'

同一会话内每个文件拿到独立直链。下载验证(按输出命令执行,实测回显):

curl -s "http://127.0.0.1:8132/file/k8629zXTA6fBrMgX/NYrTQaWpWIrvSOPC/oneshot.txt"
plik-oneshot-demo

4.3 阅后即焚上传(-o / --oneshot)

echo "plik-oneshot-demo" > oneshot.txt
plik --server http://127.0.0.1:8132 -o oneshot.txt

实测回显:

Upload successfully created at Sat, 31 Oct 2026 00:56:30 UTC :
    http://127.0.0.1:8132/#/?id=qHSDQ9R3TZjCnfvS

✅ oneshot.txt :  23 B / 23 B  100.00% 12.08 KiB/s 0s

Commands :
curl -s "http://127.0.0.1:8132/file/qHSDQ9R3TZjCnfvS/0HhnMEf7Z0GkudEy/oneshot.txt" > 'oneshot.txt'

首次下载成功后文件即被服务端删除,第二次下载立即 404(实测回显):

curl -s "http://127.0.0.1:8132/file/qHSDQ9R3TZjCnfvS/0HhnMEf7Z0GkudEy/oneshot.txt"
file oneshot.txt (0HhnMEf7Z0GkudEy) is not available : deleted

HTTP 404

4.4 密码保护上传(--password)

echo "pwd-protected-secret" > pwd.txt
plik --server http://127.0.0.1:8132 --password 'admin:q1w2e3r4' pwd.txt

实测回显:

Upload successfully created at Sat, 31 Oct 2026 01:16:09 UTC :
    http://127.0.0.1:8132/#/?id=2A1wrHs3RiNeY2gh

✅ pwd.txt :  21 B / 21 B  100.00% 9.43 KiB/s 0s

Commands :
curl -s "http://127.0.0.1:8132/file/2A1wrHs3RiNeY2gh/Ow0GoffRHOY14MUN/pwd.txt" > 'pwd.txt'

密码策略是 HTTP Basic 认证:不带凭据下载被 401 拒绝(实测回显):

curl -s -w '\nHTTP_CODE:%{http_code}\n' "http://127.0.0.1:8132/file/2A1wrHs3RiNeY2gh/Ow0GoffRHOY14MUN/pwd.txt"
please provide valid credentials to access this upload : missing Authorization header

HTTP_CODE:401

带 -u 'admin:q1w2e3r4' 下载(实测回显):

curl -s -u 'admin:q1w2e3r4' "http://127.0.0.1:8132/file/2A1wrHs3RiNeY2gh/Ow0GoffRHOY14MUN/pwd.txt"
pwd-protected-secret

--password 的完整格式是 登录名:口令;省略登录名时默认登录名为 plik(--help 原文 (default login: "plik"))。

4.5 有效期控制(-t / --ttl 与超限报错)

echo "plik-expire-demo" > expire.txt
plik --server http://127.0.0.1:8132 -t 24h expire.txt

实测回显:

Upload successfully created at Sat, 31 Oct 2026 00:56:36 UTC :
    http://127.0.0.1:8132/#/?id=Eoqvlu52vwEKj9eS

✅ expire.txt :  14 B / 14 B  100.00% 14.37 KiB/s 0s

时长写法支持 30m/24h/7d(--help 原文示例)。超过服务端 MaxTTLStr 时被拒绝(实测回显,服务端上限 30d):

plik --server http://127.0.0.1:8132 -t 45d expire.txt
unable to create upload: 400 Bad Request : unable to create upload : invalid TTL. (maximum allowed is : 2592000)

(2592000 秒 = 30 天;报错里直接给出服务端允许的秒数上限。)

4.6 管道输入上传(STDIN)

命令输出直接变成分享文件,配合 -n 指定文件名:

echo "piped-from-stdin-demo" | plik --server http://127.0.0.1:8132 -n pipe-demo.txt

实测回显:

Upload successfully created at Sat, 31 Oct 2026 00:56:52 UTC :
    http://127.0.0.1:8132/#/?id=piH0ziqE3eJ9VlhA

✅ pipe-demo.txt :  24 B / ?  28.09 KiB/s 0s

进度条中总大小显示 ?(流式管道未知总长),文件名取 -n 指定值。典型场景:tar czf - dir/ | plik -n backup.tar.gz、dmesg | plik -n dmesg.log。

4.7 可被任何人删除的上传(-r / --removable)

plik --server http://127.0.0.1:8132 -r expire.txt

实测回显:

Upload successfully created at Sat, 31 Oct 2026 01:26:07 UTC :
    http://127.0.0.1:8132/#/?id=Pgo5J67YwGPExTku

-r 语义是「知道直链的任何人都可以删」。删除走 HTTP DELETE(实测回显):

curl -s -w '\nHTTP_CODE:%{http_code}\n' -X DELETE "http://127.0.0.1:8132/file/Pgo5J67YwGPExTku/QMirC5f8q2LI4TSW/expire.txt"
ok
HTTP_CODE:200

删除后再下载(实测回显):

file expire.txt (QMirC5f8q2LI4TSW) is not available : deleted

HTTP_CODE:404

4.8 流式传输(-S / --stream):不落盘的在线中转

Stream 模式下上传方阻塞等待下载方上线,数据内存中转、服务端不落盘。演示两台「终端」配合——上传方(终端 A):

echo "stream-demo-payload-2026-10-31" > stream-demo.txt
plik --server http://127.0.0.1:8132 -S stream-demo.txt

实测回显(上传方挂起等待,输出下载命令后进度条停在等待态):

Upload successfully created at Sat, 31 Oct 2026 01:19:47 UTC :
    http://127.0.0.1:8132/#/?id=7cwXi6q8KjJo1Ncy

curl -s "http://127.0.0.1:8132/stream/7cwXi6q8KjJo1Ncy/iusyyG9VBjf7Dh5s/stream-demo.txt" > 'stream-demo.txt'

stream-demo.txt :  31 B / 31 B  100.00% 0 B/s

下载方(终端 B)按提示命令执行(实测回显):

curl -s "http://127.0.0.1:8132/stream/7cwXi6q8KjJo1Ncy/iusyyG9VBjf7Dh5s/stream-demo.txt"
stream-demo-payload-2026-10-31

下载方到达后,终端 A 的进度条完成并退出(实测回显尾部):

✅ stream-demo.txt :  31 B / 31 B  100.00% 0 B/s 2m12s

实测本次上传方等待了 2 分 12 秒直到下载方出现——等待时长无上限约束时由服务端 StreamTimeoutStr(默认 5m)控制超时释放。注意流式 URL 的路径是 /stream/(非 /file/),且文件不占用服务端存储。

4.9 归档上传(--archive):多文件打包

多个文件可直接打包成一个归档上传,接收方一次下载:

plik --server http://127.0.0.1:8132 --archive zip json-demo.txt pwd.txt

实测回显:

Upload successfully created at Sat, 31 Oct 2026 01:16:09 UTC :
    http://127.0.0.1:8132/#/?id=d043RkSQ1XFQB14M

✅ archive.zip :  401 B / ?  29.86 KiB/s 0s

客户端本地打包为 archive.zip 再上传,--compress 还可给 tar 归档指定压缩算法(gzip|bzip2|xz|lzip|lzma|lzop|no)。归档下载后是否二次压缩由服务端 EnableArchiveCompression 决定(语义见配置详解篇 5.7 节)。

4.10 端到端加密上传(--secure)

客户端本地加密、服务端只见密文,三种后端 age(默认)/openssl/pgp。

age 后端上传(实测回显):

echo "age-secret-demo-2026-10-31" > age-demo.txt
plik --server http://127.0.0.1:8132 --secure age --passphrase 'q1w2e3r4-demo' age-demo.txt
Upload successfully created at Sat, 31 Oct 2026 01:16:41 UTC :
    http://127.0.0.1:8132/#/?id=nC06NIVOycs80Qet

✅ age-demo.txt :  209 B / 27 B  774.07% 462 B/s 0s

Commands :
curl -s "http://127.0.0.1:8132/file/nC06NIVOycs80Qet/sinX4kZZdFUauiis/age-demo.txt" | age --decrypt > 'age-demo.txt'

加密后体积从 27 B 变为 209 B(age 头部开销),客户端输出的下载命令已自带解密管道。接收方执行该命令时 age 会交互式提示输入口令(⚠️ age 工具的口令输入要求终端交互,无法用环境变量或文件传入口令;接收方需在终端运行并按提示输入 --passphrase 指定的口令)。--recipient 形式可改用公钥加密(支持 @github_user、ssh://host、age1... 公钥等身份,见 --help 原文)。

openssl 后端全链路(上传实测回显):

echo "openssl-e2e-secret-2026-10-31" > openssl-demo.txt
plik --server http://127.0.0.1:8132 --secure openssl --cipher aes-256-cbc --passphrase 'q1w2e3r4-demo' openssl-demo.txt
WARNING: The "openssl" encryption backend is deprecated.
You can switch to "age" by setting SecureMethod = "age" in /root/.plikrc

Upload successfully created at Sat, 31 Oct 2026 01:22:44 UTC :
    http://127.0.0.1:8132/#/?id=fyNa7Rx8VC95AQzo

✅ openssl-demo.txt :  48 B / 30 B  160.00% 749 B/s 0s

Commands :
curl -s "http://127.0.0.1:8132/file/fyNa7Rx8VC95AQzo/QF0H7lz0RtPTUnjV/openssl-demo.txt" | openssl aes-256-cbc -d -pass pass:q1w2e3r4-demo -md sha512 -pbkdf2 -iter 120000 > 'openssl-demo.txt'

(⚠️ openssl 后端已标记 deprecated,新用法建议 age。)下载端解密(实测回显):

curl -s "http://127.0.0.1:8132/file/fyNa7Rx8VC95AQzo/QF0H7lz0RtPTUnjV/openssl-demo.txt" | openssl aes-256-cbc -d -pass pass:q1w2e3r4-demo -md sha512 -pbkdf2 -iter 120000
openssl-e2e-secret-2026-10-31

密文下载后本地还原出原文,端到端加密链路闭环。若服务端开启了 E2EE 相关的 ~/.plikrc 默认加密,临时关闭用 --not-secure。

4.11 API Token 认证上传(--token)

登录用户可在 Web 界面创建 API Token(或由管理员用服务端命令创建,见 5.3 节),CLI 携带 --token 后上传即归属该用户,并受其用户级限额约束。用 5.2 节创建的 demo 用户令牌实测(demo 用户限额 max-ttl 7d):

plik --server http://127.0.0.1:8132 --token plik_rAXAtyDtzdyHfTuzr6MMgLUimcv6AtcnVOxy -t 24h expire.txt

实测回显(-j JSON 输出,实测首尾):

{
  "id": "JVo4Qn1L6qZu3QKP",
  "ttl": 86400,
  ...
  "url": "http://127.0.0.1:8132/#/?id=JVo4Qn1L6qZu3QKP",
  ...
}

超出用户级限额时被拒(实测回显,-t 30d 超过 demo 用户 max-ttl 7d):

unable to create upload: 400 Bad Request : unable to create upload : invalid TTL. (maximum allowed is : 604800)

(604800 秒 = 7 天,服务端按用户限额与全局限额中较小者执行。)不带 --server 时客户端使用 ~/.plikrc 里保存的默认服务端与令牌;--login 选项可走浏览器完成服务端绑定(生成/导入令牌到 ~/.plikrc)。

4.12 JSON 输出与静默模式(-j / -q)

脚本化场景用 -j 拿结构化元数据(隐含 --quiet):

echo "plik-json-demo-2026-10-31" > json-demo.txt
plik --server http://127.0.0.1:8132 -q --json json-demo.txt

实测回显(完整输出):

{
  "id": "KJYIvl6SEqloic3g",
  "ttl": 2592000,
  "extend_ttl": false,
  "downloadDomain": "",
  "comments": "",
  "uploadToken": "2iwkjly4f2lkQFgMYoQLy9E0181ny9JZ",
  "admin": true,
  "stream": false,
  "oneShot": false,
  "removable": false,
  "protectedByPassword": false,
  "createdAt": "2026-10-31T01:16:09.067436589Z",
  "expireAt": "2026-11-30T01:16:09.067436881Z",
  "url": "http://127.0.0.1:8132/#/?id=KJYIvl6SEqloic3g",
  "files": [
    {
      "id": "E0UcednPEG10ZgXq",
      "fileName": "json-demo.txt",
      "status": "uploaded",
      "fileMd5": "c8ef5ddb522e1a4dd25636aba38640f0",
      "fileType": "text/plain; charset=utf-8",
      "fileSize": 26,
      "isText": true,
      "reference": "0",
      "createdAt": "2026-10-31T01:16:09.067685149Z",
      "url": "http://127.0.0.1:8132/file/KJYIvl6SEqloic3g/E0UcednPEG10ZgXq/json-demo.txt"
    }
  ]
}

脚本从此 JSON 提取 files[].url 做直链分发,或保存 uploadToken 供后续管理该上传。plik --mcp 还能把客户端包装成 Model Context Protocol 服务(stdio),供 AI 助手直接调用上传能力(--help 原文 Start MCP (Model Context Protocol) server over stdio)。

五、服务端管理命令详解(plikd)

plikd 子命令树一览(plikd --help 内容归纳,实测环境为服务端部署目录):

子命令职能
(无子命令)启动 plikd 服务
user create/list/show/update/delete用户管理
token create/list/delete用户 API 令牌管理
file list/show/delete上传文件清点、详情与删除
export [output-file] / import [input-file]元数据导出/导入(迁移与备份)
clean清理过期上传与文件(正常由服务端定时任务执行)

以下实测均在服务端部署目录执行(cd /home/plik/server),工具直读同目录 plikd.cfg 连接元数据库。

5.1 用户管理(user)

列出用户(实测回显):

./plikd user list
local:admin

创建普通用户并限额(实测回显,成功时静默返回):

./plikd user create --login demo --password q1w2e3r4 --max-file-size 100MB --max-ttl 7d

(无输出即成功;--admin 可授管理员。)查看用户详情(实测回显):

./plikd user show --login demo
{
  "id": "local:demo",
  "provider": "local",
  "login": "demo",
  "admin": false,
  "maxFileSize": 100000000,
  "maxUserSize": 0,
  "maxTTL": 604800,
  "createdAt": "2026-10-31T01:16:30.378803198Z"
}

maxFileSize/maxTTL 以秒/字节回显(100MB=100000000、7d=604800),与创建参数一致。改密/改限额用 user update --login demo --password <新口令>,删除用 user delete --login demo;外部提供方(Google/OIDC 等)的用户操作加 --provider 参数。

5.2 文件管理(file)

全量清点上传文件(实测回显节选,实测首尾):

./plikd file list
AK6uV1WfXLeGgkRd mbtW5YqhGdK7sM2E 26 B uploaded text/plain; charset=utf-8 upload-test.txt
BfBku4BvuilDAQL1 FrQTFEmqmlUrFrQ7 23 B deleted text/plain; charset=utf-8 oneshot.txt
KL4pQ0y6x2LWqGFK sDX9rrCjQjCbqY3c 21 B uploaded text/plain; charset=utf-8 pwd.txt
...

列格式:上传ID 文件ID 大小 状态 MIME 文件名(--human=false 换字节原值,--upload <ID>/--file <ID> 过滤)。查单个文件详情(实测回显):

./plikd file show --file G00ikHKmYaM4mVuR
{
  "id": "G00ikHKmYaM4mVuR",
  "fileName": "upload-test.txt",
  "status": "uploaded",
  "fileMd5": "5ae0d7ae3efe94f24dffbaa1c7e26743",
  "fileType": "text/plain; charset=utf-8",
  "fileSize": 26,
  "isText": true,
  "reference": "0",
  "createdAt": "2026-10-30T09:34:56.428989129Z"
}
Upload URL : http://127.0.0.1:8080/#/?id=7pWMnyqRVFzywrCQ
File URL   : http://127.0.0.1:8080/file/7pWMnyqRVFzywrCQ/G00ikHKmYaM4mVuR/upload-test.txt

删除整个上传(交互确认,实测回显;非交互脚本用 echo y | 管道喂确认):

echo y | ./plikd file delete --upload JVo4Qn1L6qZu3QKP
Do you really want to remove this upload JVo4Qn1L6qZu3QKP ? [y/N]
Upload JVo4Qn1L6qZu3QKP has been removed
[10/31/2026 01:37:14][INFO    ] purged 1 deleted files
[10/31/2026 01:37:14][INFO    ] Purging deleted uploads
[10/31/2026 01:37:14][INFO    ] purged 1 deleted uploads
[10/31/2026 01:37:14][INFO    ] Cleaning up SQL database

--file <ID> 删单文件、--all 清空全部上传(需确认,生产禁手滑)。

5.3 令牌管理(token)

为用户创建 API 令牌(实测回显):

./plikd token create --login demo --comment d1-doc-test
Token created : plik_rAXAtyDtzdyHfTuzr6MMgLUimcv6AtcnVOxy

令牌列表(实测回显):

./plikd token list --login demo
local:demo plik_rAXAtyDtzdyHfTuzr6MMgLUimcv6AtcnVOxy d1-doc-test

列格式:提供方:用户 令牌 备注。吊销用 token delete --token <令牌串>;令牌即客户端 --token 的取值(用法见 4.11 节)。认证功能关闭时创建报 Authentication is disabled ! 并退出(对应 FeatureAuthentication = disabled)。

5.4 元数据导出与导入(export / import)

导出全部元数据到文件(实测回显):

./plikd export /tmp/plik-metadata.json
Exporting metadata from sqlite3 to /tmp/plik-metadata.json
[10/31/2026 01:25:52][INFO    ] exported 2 users
[10/31/2026 01:25:52][INFO    ] exported 3 tokens
[10/31/2026 01:25:52][INFO    ] exported 24 uploads
[10/31/2026 01:25:52][INFO    ] exported 25 files
[10/31/2026 01:25:52][INFO    ] exported 1 settings

导出文件为二进制序列化格式(含用户/令牌/上传/文件/设置五类对象),配合数据目录的文件内容副本即构成完整备份;目标端用 ./plikd import /tmp/plik-metadata.json 恢复(--ignore-errors 跳过冲突项继续)。跨后端迁移(如 sqlite3 → postgres)即「旧库 export + 新库 import」两步。

5.5 过期清理(clean)

./plikd clean 手动执行一次过期清理(正常情况下服务端进程内置的定时清理已自动运行——启动日志 Will clean old uploads in N seconds. 即其排程)。已在 5.2 节 file delete 的输出中可见清理动作的日志形态(purged N deleted files/uploads)。

六、注意事项

  1. --server 与 ~/.plikrc 的优先级:--server 显式覆盖默认服务端;长期固定服务端时用 plik --login 绑定或直接编辑 ~/.plikrc,--update-plikrc 可把该文件重写为规范格式;
  2. Stream/OneShot 的不可逆性:-S 上传方退出即传输失败重来;-o 文件下载一次即物理删除,分发重要文件前先确认接收方在线;
  3. 令牌即身份:plik_ 令牌等价于用户身份,泄漏后立即用 plikd token delete 或 Web 界面吊销;令牌创建/删除动作建议记录台账;
  4. 加密口令无法找回:E2EE 上传的口令/私钥只在客户端侧,服务端与运维均无法解密,口令丢失即数据不可恢复——这是特性不是缺陷;
  5. plikd 直连数据库:管理命令绕过 HTTP API 直接读写元数据库,请勿在服务端运行中对同一数据目录并行执行,避免 SQLite 写锁冲突;操作前用 plikd export 留备份;
  6. TTL 单位:-t/--max-ttl 等处时长统一支持 30m/24h/7d 后缀写法,服务端与用户级限额按秒比较,报错信息给出秒数(如 2592000)。

七、常见问题(FAQ)

Q1:上传报 invalid TTL. (maximum allowed is : N) 但配置里 MaxTTL 明明够大?

当前 --token 对应用户的 max-ttl 用户级限额小于全局值(实测:全局 30d、demo 用户 7d 时 -t 30d 报 maximum allowed is : 604800)。用 plikd user update --login demo --max-ttl 30d 调大用户限额,或 -t 收敛到限额内。

Q2:curl 下载返回 404 is not available : deleted?

三种可能:OneShot 文件已被首下载消费;-r 上传被人删除;TTL 到期被清理。用 plikd file show --file <文件ID> 查状态(deleted 即已删)确认,文件物理删除后不可恢复。

Q3:--password 下载为什么返回 401?

密码保护即 HTTP Basic 认证,下载命令需要带凭据(curl -u '登录名:口令',见 4.4 节实测);Web 界面下载则弹出浏览器原生认证框。

Q4:客户端想固定服务端与默认选项?

~/.plikrc 保存默认服务端地址、令牌与 Archive/Encryption 默认项(-a/-s 即「用 .plikrc 默认设置」)。plik --login 走浏览器绑定服务端并导入令牌;无图形环境的机器直接手工创建该文件。

Q5:plikd 命令报连不上数据库/找不到配置?

plikd 以「当前目录的 plikd.cfg」为配置源,务必在服务端部署目录执行(或显式传配置路径,随服务端启动方式一致);SQLite 场景还需确认对数据目录的写权限(排障见部署指南 FAQ Q1)。

八、参考链接

  1. Plik 官方 CLI 客户端文档:https://root-gg.github.io/plik/features/cli-client.html
  2. GitHub Releases(1.4.3 各平台客户端与 sha256):https://github.com/root-gg/plik/releases/tag/1.4.3
  3. age 加密工具:https://github.com/FiloSottile/age
  4. 本系列认知篇:《Plik 介绍与选型指南》
  5. 本系列部署篇:《Plik 1.4.3 Docker Compose 部署指南》
  6. 本系列配置篇:《Plik 1.4.3 配置参数详解》