V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
scriptB0y
V2EX  ›  分享创造

xbin: 不需要安装就可以使用的 jq 等软件

  •  
  •   scriptB0y ·
    laixintao · 2022-05-04 18:24:44 +08:00 · 2655 次点击
    这是一个创建于 694 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经常遇到需要运行 jq, yq, ipcalc 这种软件却发现机器上没有装的情况。我就想,这些都是处理 io 的软件,为什么需要安装呢?能否通过 serverless 的方式调用服务来运行?

    于是做了一个小工具,可以直接通过 cURL (或者其他 http 客户端)去调用 jq 。

    使用说明可以看:

    https://xbin.io

    当然也可以“安装” (其实就是在你的 shell 定义一个函数,帮你生成 curl )一个 xbin 命令: https://github.com/xbin-io/xbin

    比如要执行 jq 的话,只要这样用就可以啦:docker inspect asdf | xbin jq -C .

    目前支持的命令列表: https://xbin.io/w/tool

    10 条回复    2022-05-05 13:40:47 +08:00
    Livid
        1
    Livid  
    MOD
       2022-05-04 18:27:02 +08:00   ❤️ 1
    我们在 V2EX 里有类似的做法,就是把一些 IO 操作(比如图片调整尺寸)变成一个容器里的服务。
    scriptB0y
        2
    scriptB0y  
    OP
       2022-05-04 18:38:42 +08:00
    @Livid 我觉得是可行的。

    有一个比较好玩的地方是,我的 http 服务只解析了用户的 http 请求 header ,body 作为命令执行的 stdin pipe 给了进程,然后将进程产生的 stdout 作为 http stream response 返回给用户。

    这样,像执行这个命令:

    ```
    echo 'import time;\nfor i in range(5):\n print(time.time(), flush=True)\n time.sleep(1)' | curl -X POST --data-binary @- http://xbin.io/python -H "X-Args: -"
    ```

    会看到每秒一行输出,而不是等 5s 之后看到所有的输出。

    效果就是,虽然我的机器内存很小,但是可以对无限大的文件做计算 shasum, 解压,等操作,因为命令只读 stdin 写 stdout ,没有保存本地文件。(虽然理论上没限制,但是为了防止 abuse 还是限制了 client_body_size )

    (需要注意配置一下 CDN ,Nginx ,uWSGI 等,让它们不要 cache )
    beordle
        3
    beordle  
       2022-05-04 18:51:30 +08:00 via iPhone   ❤️ 2
    老实讲,这个使用托管服务有信息泄漏的风险。也会有被注入的问题。都可以连接外网了,当然装包是最好的选择。追求绿色软件,也可选择静态 binary ,docker images 都是可以。我觉得这个服务部署在内网倒是有更大的用武之地,也更加好用。公网应用我个人持负面的态度。
    leishi1313
        4
    leishi1313  
       2022-05-04 21:54:56 +08:00 via Android
    很有意思,感觉这种做成 serverless ,或者能自建的也不错
    scriptB0y
        5
    scriptB0y  
    OP
       2022-05-04 22:54:47 +08:00
    @beordle 同意你的看法。不过很多工具使用频率很低,而且不会泄露隐私,比如 ip 地址计算工具 https://xbin.io/w/tool/ipcalc , 计算器 https://xbin.io/w/tool/qalc ,存储单位计算器 https://xbin.io/w/tool/bcal ,时间换算 https://xbin.io/w/tool/date 等等。使用 xbin 也不会泄露什么东西。

    内网的话其实可以有一个很简单的替代方案,就是找一台机器安装上常用软件,然后 cat a.json | ssh example.com "jq -C ." 其实效果是一样的。
    lizhenda
        6
    lizhenda  
       2022-05-05 10:58:07 +08:00
    直接 docker 跑命令应该也差不多吧
    scriptB0y
        7
    scriptB0y  
    OP
       2022-05-05 11:15:17 +08:00
    @lizhenda 是的,效果差不多。
    zagfai
        8
    zagfai  
       2022-05-05 12:12:21 +08:00
    那不是要装一个 docker ?
    est
        9
    est  
       2022-05-05 12:16:29 +08:00
    echo 1.json | python -m json.tools | grep XXX 基本够用了。
    iqoo
        10
    iqoo  
       2022-05-05 13:40:47 +08:00
    最好是把 bash 以及常用命令编译成 wasm ,直接在浏览器里运行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   963 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:15 · PVG 05:15 · LAX 14:15 · JFK 17:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.