0%

Unix工具是你的朋友

The Unix Tools Are Your Friends

如果我被放逐沙漠,不得不在IDE和Unix工具箱之间做出选择,我会毫不犹豫选择Unix工具。这就是你应该熟练掌握Unix工具的原因。

首先,IDE用于特定语言,但Unix工具可运行于任何以文本形式出现的事物。现如今的开发环境,每年都会涌现出新的语言和符号,学习在Unix环境下工作将是一种复利投资。

而且,IDE仅能提供它们的开发者所能想到的指令,而你可以通过Unix工具实现任何你能想象的任务。把它们想象成乐高积木(经典的前Bionicle):通过组合小而巧的Unix工具,你就能简单创造出属于你的命令。例如,以下是一段基于文本实现的Cunningham签名分析——每个文件的分号、花括号、引号的序列,可以展现大量有关文件的内容:

1
2
3
4
5
for i in *.java; do
echo -n "$i: "
sed 's/[^"{};]//g' $i | tr -d '\n'
echo
done

此外,你能学到的每个IDE操作都是给定的任务——例如,在工程调试编译配置中添加一个新的‘单步’。相对的,历练你Unix工具技能可以让你在任何任务重都更高效。比如,我在之前的命令序列中采用sed工具进行变形,用于多处理器架构的交叉编译。

Unix工具是在那个只有128KB内存的多用户电脑里开发的。他们心灵手巧的设计放在今天意味着可以处理海量的数据。很多工具运行起来像是过滤器,每次只处理一行,这意味着它们能处理的数据量是没有上限的。你想要搜索存储了0.5TB的英文维基百科的编辑数量吗?一条简单的指令就能轻松给你答案:

1
grep '<revision>' | wc -l

如果你发现某条指令序列很有用,可以简单地把它整理进shell脚本中,用于某些独特的强有力的编程架构,例如在循环的条件分支里的管道数据。更加激动人心的是,Unix指令可以以管道的方式运行,就像上面那个例子一样,非常自然地将它们的负载分发到现代多核CPU的各个处理单元。

小而美的起源加之开源的实现方式,使得Unix工具可以无所不在,甚至是那些性能低下的平台,比如我的机顶盒或者DSL路由器。这些设备不像那些强大的图形界面机器,但它们通常都包含一个叫做Busybox的应用,它提供了大量有用的指令工具。如果你在Windows平台开发,Cygwin环境也能给你提供类似Unix的体验,包括执行方式和源码形式。

最后,如果没有一款你趁手的工具,那就非常简单地在Unix世界扩展吧。只需要写一个程序(用任何你喜欢的语言),规则很简单:你的程序应该是单任务的形式;它能够从标准输入中读取文本数据;并且通过标准输出以标题或声音的形式显示其结果。在命令行中敲入参数来影响工具的操作。遵循这些规则,“你就是地球本身,所有事情都在其中”。

小小鼓励,大大心意!