一行命令引发的一系列讨论
一、事由
前段时间 在 go语言中文网 上看到一个蚂蚁金服的招聘帖子,给出了几个简单的关键字 和 一个 base64 加密的简历投递邮箱的还原命令,非常简单直接,能考察一些基础命令的使用,还显得很有档次。
# 加密邮箱还原命令
echo Y2hlbnhpYW5nLmxqYyNhbGliYWJhLWluYy5jb20K | base64 -D | sed 's/#/@/'
然后就出现了一些质疑命令错误的回复和解释分析…
讨论现场见文末附图
二、分析
1. 原命令行分析
原命令为三条指令的管道拼接;
- 第一条:
echo Y2hlbnhpYW5nLmxqYyNhbGliYWJhLWluYy5jb20K
,
echo
命令,直接输出 一个 base64 加密的字符串Y2hlbnhpYW5nLmxqYyNhbGliYWJhLWluYy5jb20K
; - 第二条:
base64 -D
,
base64
命令,接收第一条命令的结果字符串,根据-D
参数选择并执行 base64 解码,得到第二步的结果:chenxiang.ljc#alibaba-inc.com
; - 第三条:
sed 's/#/@/'
,
sed
命令,接收第二步的结果,替换字符串中的#
为@
,输出最终结果:chenxiang.ljc@alibaba-inc.com
。
2. 问题分析
由于各个平台对 base64
的具体实现都不太一样,导致参数有一定的差别是不可避免的,就像各种智能设备对 Linux
、Android
系统定制裁剪一样,取吾所需,量身定制,裁掉不需要的部分,保持精简,虽然会因为有时太任性而导致一些问题,但这才是 Linux
开源软件的魅力;
针对帖子正文中的命令 -D
,如果从未使用过此命令的话,直接在自己系统上实验的非 mac
用户就要开始报错了;如果此时对 base64
认识停留在全世界 base64
命令只有一种 的话,就会开始质疑作者了;
再者如果作者使用 -d 参数就会保持各个平台下都能保持命令兼容了。。。
3. 收获
命令行就是我们日常开发、操作的百宝箱,帮助我们完成各种任务,方便、快捷、通用工具一定要掌握好;
对待计算机程序世界保持好奇心,发散思维,终有所获…
(12月是一个让人焦虑、忙碌的月份,开始焦虑一整年稀里糊涂就要结束了,开始焦虑明年该如何如何 ,开始焦虑光阴易逝、世事无常;开始忙碌着做年终总结,开始忙碌着立明年的 Flag,开始忙碌着继续焦虑…)
—2019-12-01—
附图: