Skip to main content

一些有用的工具

· 3 min read

命令行

  1. fish 一款 shell,自带了路径补全、强大的命令补全及建议。
    内置了历史命令补全(输入命令的一部分,会从历史纪录里面提示相匹配的命令,按上下键进行建议的命令的切换。)
    默认支持 git 的分支显示。

  2. exa 一款 ls 命令的替代品。支持丰富的颜色显示(例如文本文件、图片、压缩包等用不同颜色区分;文件的权限(wrx)也用不同颜色区分)。 默认显示容易阅读的形式(例如文件大小默认显示传统 ls -h 的形式)。 支持 git 文件的显示,标记文件的修改、暂存状态。 默认支持 tree 形式显示(类似 tree 命令)。 支持文件图标显示。 支持排序和筛选。 更多特性可查看:https://the.exa.website/features

  3. zellij 一款终端复用的工具。

  4. tokei 一块强大的代码行数统计与分析工具。支持按目录、语言等方式分类显示。支持排序、排除等操作。

  5. hexyl 一款二进制显示工具,拥有丰富的色彩显示。 另外,也推荐 vscode 的 Hex Editor 插件,图形化界面可能更方便。

  6. helix, 用 rust 开发的命令行的vim-like编辑器。

    • 熟悉 vim 的上手会比较快;
    • 开箱即用的 file-picker ,buffer-picker;
    • 支持 LSP(这样就可以实现代码补全、代码错误检查了)、支持 Multiple selections;
    • Space 模式和选项窗口提示很方便(各种按键导航和提示),用户体验不错。
  7. zellij,基于 rust 实现的终端复用工具(类似tmux)。

    • 导航和操作提示,注重用户体验。

一起段错误引起的纷争(信号捕获)

· 4 min read

最近在升级一个用 swift 写的 mac 平台的 app,其中的核心代码是用 Go 写的。 因此,需要在 swift 端调用 Go 代码。 这个倒是有现成的方案,就是将 Go 的 api 导出为 C api,然后在 swift 端调用 C 的 api 即可。

问题就出在跨语言调用这块,调用核心的 Go api 时,直接给抛出了一个 EXC_BAD_ACCESS 错误:

error: memory read failed for 0x0
Thread 7: EXC_BAD_ACCESS (code=1, address=0x4).

干掉口令卡 (关于 ssh 配置)

· 12 min read

背景

实验室开通了一项计算服务,其登录节点采用 ssh 的方式登录,但是密码是采用 “固定密码+动态口令” 形式组合构成的。 主要的问题是,这个动态口令太不方便了。 它是一个动态口令卡,一般一个人拿了该口令卡,其他人的登录的时候就麻烦得很:

  1. 每次登录必须输入密码和口令;
  2. 如果自己不持有口令卡,得向其他人询问动态口令。

注意,我们是多人共享一个账号(即linux 用户),所有人都用这个 linux 用户操作。

现在就想能否在保证一定安全性的前提下,减少这些麻烦。 说到这,必须得继续吐槽下,这个实体的口令卡确实不像 google 验证器这类的软件那么方便,如果采用 google 验证器, 也就没有本文的这些 “旁门左道”了。

第一次尝试:ssh 多路复用

所谓 ssh 多路复用,它可以让你 ssh 连接了远程服务器后,第二次及以后的连接就可以复用第一次的连接。 这样带来的好处是,我们可以仅在第一次连接的时候输入密码+口令,以后的连接就不用输入了。

当然,这里还有一个小问题。如果每人都在自己的电脑上配置多路复用,只能解决以上的问题1,而不能解决问题2。 为此,得让多路复用的连接共享起来。 于是,想起实验室的计算集群可以完成这个任务,然后就拿这个开始了配置~~(有管理员权限就是不一样)~~。 为了共享 ssh 连接,我们先在计算集群创建一个公用的用户,就叫 pub_test 吧。 然后修改 pub_test 用户的 ssh 配置。