Anye
Anye
发布于 2026-05-05 / 29 阅读
0
0

Peg - 命令行便签 · 把终端输出钉上布告板

前言

失踪人口回归

咳咳,没失踪哈,搞点好玩的。前两天鼓捣开鸿 OS 的时候,无意间发现了他用了一个十分巧妙的 log 分享办法:https://termbin.com/,看了源码之后感觉这是一个极好的的轻量化终端内容分享工具,没有多余的界面,没有复杂的注册流程,甚至不用安装任何客户端,一行命令就能搞定日志、命令输出的分享,简直是我们这类经常折腾服务器、调试代码的人的福音。就萌生了自己复刻一个这类工具的想法,就有了下面的小玩意:

名字叫 peg——灵感来源于“钉钉子”,就像把便签钉到布告板上一样,简单直接,一贴就好。

Peg 是什么?

https://cnb.cool/Anyexyz/Tools/peg

Peg 是一个命令行 pastebin 工具,专门用于快速分享终端输出。

你是不是也经常遇到这种场景:

  • 运行了个命令,输出一大坨,想发给朋友看看

  • 服务器上报错了,需要把日志分享出去求助

  • 在 A 机器跑了个命令,想在 B 机器看结果

这时候 Peg 就派上用场了!一行命令直接上传,返回一个链接,别人打开就能看到内容。

✨ 核心特点

  • 极简设计:不需要安装客户端,纯 curl 就能用

  • 快速上手:管道直接传内容,用完就走

  • 自托管友好:提供 Docker 镜像,一键部署自己的服务

  • 高度可配置:监听地址、端口、slug 长度等都能自定义

  • 自带黑名单:支持配置恶意 IP 黑名单,防止滥用

Demo

https://www.anye.xyz/peg

需要注意:该服务仅供参考,请勿上传重要文件信息。

🚀 使用方法

上传内容

最简单的用法,直接通过管道传给 curl:

# 上传简单文本
echo hello | curl -T - https://yourdomain.com

上传成功后会返回一个 URL:

https://yourdomain.com/abcd

当然更常用的是上传命令输出:

# 上传目录列表
ls -la | curl -T - https://yourdomain.com

# 上传系统信息
neofetch | curl -T - https://yourdomain.com

# 上传日志文件
cat /var/log/nginx/error.log | curl -T - https://yourdomain.com

查看内容

拿到链接后,直接在浏览器打开就行,或者用 curl 看:

curl https://yourdomain.com/abcd

⚡ 设置别名(强烈推荐!)

每次都敲一长串 curl 命令太麻烦了,建议设置个别名,一劳永逸。

Linux/MacOS

# 加到你的 .bashrc 或 .zshrc 里
alias peg="curl -T - https://yourdomain.com"

Windows (PowerShell)

function peg { $Input | curl -T - https://yourdomain.com }

设置完别名后,使用起来就优雅多了:

# 现在只需要这样
echo hello | peg

# 或者这样
ls -la | peg

# 甚至这样
dmesg | peg

爽不爽?一个 peg 命令搞定所有分享需求!

🐳 Docker 部署

如果你想自己搭建一套 Peg 服务,Docker 部署最方便了:

docker run -d \
  --name peg \
  -p 9999:9999 \
  -e PEG_BANLIST='https://blackip.ustc.edu.cn/list.php?txt' \
  -v ./data:/data \
  --restart unless-stopped \
  docker.cnb.cool/anyexyz/tools/peg:latest

部署完反向代理一下,配个域名就能用了。我自己是用 Caddy 反代的,一行配置搞定,还自动申请 HTTPS 证书,美滋滋。

⚙️ 运行选项

所有参数都可以通过环境变量配置,优先级:命令行参数 > 环境变量 > 默认值。

参数

环境变量

默认值

说明

-L

PEG_LISTEN_ADDR

0.0.0.0

监听地址

-p

PEG_PORT

9999

监听端口

-s

PEG_SLUG_LEN

4

Slug 长度

-o

PEG_OUTPUT_DIR

code

粘贴保存目录

-B

PEG_BUFFER_LEN

32768

最大上传大小(字节)

-H

PEG_REAL_IP_HEADER

获取真实客户端 IP 的请求头

-P

PEG_BASE_PATH

子路径(如 /peg),用于反向代理子路径部署

-l

PEG_LOG_FILE

日志文件路径

-b

PEG_BANLIST

封禁 IP 列表,支持本地文件或 URL

-w

PEG_WHITELIST

白名单 IP 列表,支持本地文件或 URL

-post-limit

PEG_POST_LIMIT

10

每 IP 每窗口 POST 上传次数上限(0 不限制)

-get-limit

PEG_GET_LIMIT

60

每 IP 每窗口 GET 请求次数上限(0 不限制)

-rate-window

PEG_RATE_WINDOW

60

🎯 适用场景

说说我自己平时用 Peg 的几个场景:

  1. 远程协助:朋友服务器出问题了,让他把日志 | peg 一下发链接给我,我直接就能看

  2. 跨机传数据:在 A 机器跑个命令,把结果 peg 一下,B 机器 curl 下来就用

  3. 临时分享:写了段配置,发给同事参考,不用发文件那么麻烦

  4. 调试排错:把报错信息贴出去求助,比截图方便多了,别人还能复制

写在最后

其实这类工具市面上已经有不少了,比如 termbin、pastebin 等等。但我还是选择自己写了一个,主要是:

  • 可以完全自己掌控数据,不用担心第三方服务跑路

  • 可以自定义各种配置,适配自己的使用习惯

  • 写工具本身就是一种乐趣嘛 😄

Peg 这个工具很小巧,代码量也不大,用 Go 写的,编译出来一个二进制就跑了,资源占用极低。有兴趣的同学可以去 cnb.cool 看看源码,欢迎提 PR 和 Issue。


评论