程序员编程杂谈
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
作者:BENEDICT REUSCHLING
本专栏介绍了一些对 FreeBSD 有用、独特或值得了解的 ports 和软件包。Ports 扩展了基本操作系统的功能,可以帮助你完成任务,甚至让你会心一笑。一起探索吧,也许你会发现一些新奇的东西。
Unix 的一个优势是,尽管它涉及大量的输入,但多年来已经发展出许多辅助工具。人们创造了各种巧妙的快捷方式,以避免重复输入相同的命令。其中一个发明就是 shell 历史记录。为什么要重新输入一条命令,而不是从之前成功输入的记录中检索出来呢?对于新手来说,学会正确的按键组合来搜索 shell 历史记录,可能会让他们惊讶得目瞪口呆,仿佛刚刚解锁了魔法。然而,一旦熟悉了这项技能,他们可能就不会那么惊讶了。这时,正是安装 misc/mcfly
的好时候,让你像电影中的 Marty 一样,在 shell 历史记录中自由穿梭。智能搜索会考虑你当前的目录或你之前使用该程序的上下文,并向你提供合适的命令。同时,它不会修改你的普通 shell 历史文件,因此你可以放心地尝试和适应 mcfly。
程序员在编写代码时喜欢听音乐,而自 Winamp 时代以来,音频波形的可视化一直颇受欢迎。如果你想在终端中实现类似效果,可以试试 audio/cava
。无论你使用的是 Pulseaudio、fifo(mpd)、sndio、squeezelite 还是 portaudio,都能看到随着音乐节奏跳动的条形图。很酷吧?不过别忘了戴上耳机,否则邻居可能会不太高兴。毕竟,没有人喜欢被迫“偷听”你的播放列表!
程序员不仅要编写代码,还需要对其进行测试。即使在今天,硬件的计算能力已远超阿波罗导航计算机的想象,但性能仍然是用户体验的关键。为了确保代码更改不会导致运行速度下降,通常会使用基准测试工具。其中一个适用于命令行的基准测试工具是 benchmarks/hyperfine
。它支持对任意 shell 命令进行多次执行的统计分析,并提供预热阶段,以确保缓存不会干扰测量结果。此外,它还能检测由后台运行的其他程序导致的异常值,并支持以不同数量的线程运行测试。最终结果可以导出为 CSV、JSON、Markdown 和 AsciiDoc 格式。如今,写论文基本上都能自动生成了……
你是否曾需要安全地将文件或字符串(如密码)传输到另一台计算机?如果觉得 SSH 复杂到难以应付——毕竟其 740 字符的公钥交换方式确实让人头疼——但又不想在安全性上妥协,那就使用 net/py-magic-wormhole
吧!在发送文件时,该工具会生成一个简短且易于人类发音的字符字符串。只需在接收端输入这个一次性密钥,magic-wormhole
就会通过 Rendezvous 消息交换和基于 PAKE 的安全机制完成“魔法”传输。它甚至支持密钥的 Tab 补全,帮你节省输入时间。此外,magic-wormhole
还可以用作 ssh-copy-id
的替代方案,简化初始 SSH 密钥交换过程。在下面的示例中,我将 backup.zip
传输到另一台机器。接收端输入代码并确认文件后,几秒钟之内,文件便完成了传输——就像穿越 30,000 光年的三角象限一样神奇!
我经常让本科计算机科学专业的学生练习在 Unix 中解析文本文件。在这些作业中,逗号分隔值 (CSV) 仍然是一种常见的文件格式。这通常发生在学生学习数据库和 SQL 之前。如果他们提前了解 SQL,那很可能会直接使用我接下来介绍的工具,并且再也不会回头看其他方法:textproc/csvq
。你可以随心所欲地读取、更新和删除 CSV 文件。这个工具不仅提供了交互式 shell 和命令行模式,还支持顺序执行多个操作,并通过托管事务进行管理。此外,它还支持变量、游标,甚至临时表。哦,对了,除了 CSV,它还完全支持 UTF-8 和 UTF-16 编码的 JSON,因为——为什么不呢?
另一个实用工具是 textproc/dasel
(Data Selector),它不仅支持 CSV,还能处理 JSON、YAML、TOML 和 XML。它可以在这些格式之间进行转换,还能添加新内容或删除已有条目。这样,每当遇到新数据格式时,你不必重新学习一款新工具——大概率 dasel
已经支持了。
开发者通常拥有许多设备,无论是在工作还是家里。他们希望在每台设备上都能保持熟悉的配置环境,以便随时保持高效。而 sysutils/chezmoi
能解决这个问题,它可以安全地在多台设备间同步 dotfiles(存储各种配置的隐藏文件)。在新机器上,只需一个命令就能拉取所有配置文件。如果你在一台机器上修改了设置,只要运行 chezmoi update
,另一台机器上的配置也会自动更新。
chezmoi
提供了快速入门指南和详细文档,能让你迅速上手。
如果你喜欢带有语法高亮和行号的输出,并且一直在疑惑为什么 cat(1)
从未添加这些功能,那么可以尝试 textproc/bat
。这是一款“长了翅膀的 cat”,它不仅可以显示不可打印字符,还支持自动分页,并集成了 Git。
有些开发者喜欢炫耀自己写了多少代码。但其中有多少是注释和空行呢?如果你想知道,devel/tokei
可以给你答案。Tokei 能识别多行注释和嵌套注释,并且会忽略字符串内的注释。它支持 150 多种编程语言,提供彩色输出,并且即使面对大型项目也能运行得非常快。
当我很久没用某个工具时,往往会忘记它的命令行参数。然后不得不查阅 man 页面,重新拼凑命令行(特别是有多个参数时)。其实,我应该早点写个速查表来节省时间。这可能也是 misc/cheat
的开发者的想法。如果你想知道 tar
的用法,只需运行:
你可以在 cheat
的 GitHub 项目页面找到更多类似的示例。
非常实用,有时候我甚至能从中发现一些新的技巧。试试看,比如用在 rsync
命令上。运行:
列出所有可用的速查表。当然,你也可以添加自己的速查表,并分享给社区。这样大家还是会把你当成 Unix 大师,甚至可能比以前更崇拜你。
如果你以为 bat
是本文唯一提到的、以动物命名的软件包,那你要准备迎接两个新成员了:dns/dog
和 dns/doggo
。后者受到前者的启发,但由于作者不懂 Rust(dog
是用 Rust 写的),所以他用 Go 重新实现了它(dog + go,你懂的)。这两个工具都是现代化的命令行 DNS 客户端(类似 dig
),支持 DNS over HTTPS(DoH)、DNS over TLS(DoT)、DNS over TCP/UDP 和 DNSCrypt 等协议。dns/dog
和 dns/doggo
都支持 JSON 输出,并且至少有一个可以同时查询多个解析器。我就不告诉你是哪一个了,这样你可以自己去试试看,还能欣赏它们的彩色输出。想想过去的黑白终端,真是太单调了。不过,LSCOLORS
让事情变慢了一些,但那又是另一个故事了。
既然提到了颜色,如果你对颜色特别着迷,为什么不在你的 Unix 工作流里加点 sysutils/lsd
呢?这个美化版的 ls
命令不仅支持彩色输出,还带有图标,而且是用 Rust 编写的(现在还有什么不是 Rust 写的吗?)。它确实……很“多彩”。如果用 lsd
让你头疼或眼花,那可别怪我。
回到本期 FreeBSD 期刊的主题,但依然离不开颜色:你是否曾看着 git diff
的输出,觉得它可以更美观一些?别再想了,devel/git-delta
可以拯救你(即使你没觉得需要)。delta
让你可以花上好几个小时调整 diff 的布局和样式,只为了找到最合适的配色方案。它内置分页器,并且提供各种主题,这样你不需要从零开始。它还能显示行号,支持并排视图,并用自定义框线美化 diff 输出。很可能,你会因为这个工具花更多时间审查代码。看看他们是怎么“套路”你的?
当你的磁盘里堆满了代码片段、补丁和未提交的文件时,是时候运行 sysutils/duff
了。不,不是《辛普森一家》里的那款虚构啤酒,而是一个重复文件查找工具。它自称是更美观的 du
,但美不美你说了算。它的确运行得很快,并且能帮你快速找出磁盘空间被哪些文件占用了。我敢肯定,duff
的分类功能(比如按本地、网络和特殊设备分组)能让系统管理员一眼就获取有价值的信息。最好还是先运行:
清理一下吧!
偶尔运行一次,以清理不再需要的临时文件。
最后,你可以在半夜把我叫醒,我依然能一字不差地告诉你 find
命令的语法来搜索文件或目录。不过,我可能会花点时间拼出这条命令:
而且,我肯定会因为被吵醒而闷闷不乐。我很珍惜我的美容觉,所以还是告诉你一个更简单的方法吧:sysutils/fd
。这个工具简单到只需要运行:
就能列出结果。是不是更容易?这样我也能多睡一会儿。晚安!
BENEDICT REUSCHLING 是 FreeBSD 项目的文档贡献者,同时也是文档工程团队的成员。他担任 FreeBSD 基金会董事会副主席,并曾在 FreeBSD 核心团队任职两届。他在德国达姆施塔特应用科技大学管理一个大数据集群,并教授本科课程 “Unix for Developers”(面向开发者的 Unix)。此外,他还是 bsdnow.tv 播客的主持人之一。