前言
失踪人口回归
咳咳,没失踪哈,搞点好玩的。前两天鼓捣开鸿 OS 的时候,无意间发现了他用了一个十分巧妙的 log 分享办法:https://termbin.com/,看了源码之后感觉这是一个极好的的轻量化终端内容分享工具,没有多余的界面,没有复杂的注册流程,甚至不用安装任何客户端,一行命令就能搞定日志、命令输出的分享,简直是我们这类经常折腾服务器、调试代码的人的福音。就萌生了自己复刻一个这类工具的想法,就有了下面的小玩意:
名字叫 peg——灵感来源于“钉钉子”,就像把便签钉到布告板上一样,简单直接,一贴就好。
Peg 是什么?
Peg 是一个命令行 pastebin 工具,专门用于快速分享终端输出。
你是不是也经常遇到这种场景:
运行了个命令,输出一大坨,想发给朋友看看
服务器上报错了,需要把日志分享出去求助
在 A 机器跑了个命令,想在 B 机器看结果
这时候 Peg 就派上用场了!一行命令直接上传,返回一个链接,别人打开就能看到内容。
✨ 核心特点
极简设计:不需要安装客户端,纯 curl 就能用
快速上手:管道直接传内容,用完就走
自托管友好:提供 Docker 镜像,一键部署自己的服务
高度可配置:监听地址、端口、slug 长度等都能自定义
自带黑名单:支持配置恶意 IP 黑名单,防止滥用
Demo
需要注意:该服务仅供参考,请勿上传重要文件信息。
🚀 使用方法
上传内容
最简单的用法,直接通过管道传给 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 证书,美滋滋。
⚙️ 运行选项
所有参数都可以通过环境变量配置,优先级:命令行参数 > 环境变量 > 默认值。
🎯 适用场景
说说我自己平时用 Peg 的几个场景:
远程协助:朋友服务器出问题了,让他把日志
| peg一下发链接给我,我直接就能看跨机传数据:在 A 机器跑个命令,把结果 peg 一下,B 机器 curl 下来就用
临时分享:写了段配置,发给同事参考,不用发文件那么麻烦
调试排错:把报错信息贴出去求助,比截图方便多了,别人还能复制
写在最后
其实这类工具市面上已经有不少了,比如 termbin、pastebin 等等。但我还是选择自己写了一个,主要是:
可以完全自己掌控数据,不用担心第三方服务跑路
可以自定义各种配置,适配自己的使用习惯
写工具本身就是一种乐趣嘛 😄
Peg 这个工具很小巧,代码量也不大,用 Go 写的,编译出来一个二进制就跑了,资源占用极低。有兴趣的同学可以去 cnb.cool 看看源码,欢迎提 PR 和 Issue。