UNIX及计算机思维及首篇博文

背景 UNIX的学习, 很大程度上就是历史的学习: 1.UNIX历史, 2.计算机操作系统的历史, 3.编程语言的历史. 引申开去, 计算机行业, 或者别的行业的学习, 也是建立在历史的基础上的吧?! 举个例子, 在UNIX之前, 程序员是怎么编程的, 他们用编译器吗? 最近狠看了些资料, 才一点点地发现这其中的"端倪": KenThompson是用汇编写了UNIX的第一版的, 然而这版的效果并不好(汇编针对特定的CPU, 他们发现移植性不好), 他们(Thompson和Dennis Ritchie)转而用B语言开发, 然而他们又发现用B语言写的UNIX性能不太好(B语言与硬件交互的效率不高), 故而萌生创造一种新的适合写UNIX的语言, 而这个语言就是C.

关于shell命令 shell命令常常以缩写了的单词而成一体, 让不知道其意的人不知其意, 虽然"Unix文化"的"10条次要规则"的第三条为"使用小写字母并尽量保持简短", 这不免让人联想到shell命令中是不是也是这样的, 举以下一些例子, 旨在说明了解表象(指缩写的命令名本身)背后的来龙去脉(指命令的由来/历史), 对学习效率有多么大的催化加速效果, 这既是笔记总结, 也是对"历史学习一说"的例证:

awk: 这个命令的名称取自它的三位作者的姓名的首字母, 分别是: Al Aho, Peter Weinberger 和 Brian Kernighan;

grep: grep来自ed命令, 是“Global Regular Expression Print”的缩写, 用来打印输出匹配某个模式的所有数据行;

fgrep: “Fixed GREP”, fgrep命令的功能是只搜索固定的字符串, 这个“f”字母并不是代表“fast”, 事实上, 命令行”fgrep foobar *.c”通常慢于命令行“egrep foobar *.c”(没错, 这很让人意外). fgrep命令有自己的特长: 当一个文件有大量的字符数据, 超过了egrep的处理能力时, fgrep就非常有用了;

egrep: “Extended GREP”, egrep对正则表达式的使用比grep更灵活(很多人只使用egrep), egrep比grep和fgrep具有更复杂的内部算法, 通常也是最快的;

cat: “CATenate”, catenate表示”连接成串”, 也表示“cat”这个命令对文件的操作(不要和the Computer Aided Typesetter弄混了);

gecos: “General Electric Comprehensive Operating Supervisor”, 当通用公司的大型系统部门(division)被卖给了Honeywell后, Honeywell把”GECOS”中的“E”给拿掉了. Unix的password文件里就有一个”pw_gecos”字段, 这就是一个早期的遗留. Dennis Ritchie说: “有时候我们向GCOS机器发送打印任务或批处理任务, password文件中的gcos字段变成了一个存放$IDENT卡信息的地方, 不是很优雅”;

nroff: “New ROFF”, troff:“Typesetter new ROFF”, 这些都是”roff”命令的衍生命令. ROFF是一个重写的Multics “runoff”程序, 是用来”run off”一个文档的;

tee: T, 来自一个专业术语, 表示T形管道分离器;

bss: “Block Started by Symbol”, 是一个在FAP(Fortran Assembly[-er?] Program)里的伪操作, FAP是IBM 704/709/7090/7094上的汇编程序, 它给给定的单词定义标签, 分配空间, 还有另外一个伪操作: BES, ”Block Ended by Symbol”, 用来完成类似的任务;

biff: “BIFF”, 这个命令用来开启异步邮件通知, 这个名字实际上来自一只伯克利大学里的狗: Biff是Heidi Stettner的狗, 那时 Heidi(和我(I), 还有Bill Joy)都在伯克利大学读研究生, 而早期的BSD系统就是那个时候开发的. Biff在那里很受欢迎, 大家都知道它会对着邮递员叫, 于是就用它的名字命名了这个命令;

rc(as in “.cshrc” or “/etc/rc”): “RunCom”, 出自MIT CTSS system, ca. 1965., ‘有一个工具程序, 它能够运行存储在一个文件里的一系列命令, 它叫做“runcom”, 意思就是“run commands”, 这文件也就开始称作“a runcom”. (Brian Kernighan & Dennis Ritchie对Vicki Brown说过: 在新的Plan 9操作系统里, rs也是shell的名称)

Perl: “Practical Extraction and Report Language”, "实用报表提取语言", Perl是高阶/通用/解释型/动态的程序语言家族. 最初设计者拉里·沃尔为了让在UNIX上进行报表处理的工作变得更方便, 决定开发一个通用的脚本语言, 而在1987年12月18日发表.

看了以上的介绍, 尤其是biff命令的这段说明, 心里狂躁的好奇心疑惑解开了不少, 不过也真是令人哭笑不得: 令人疑惑不解的命令名称居然是一狗的名字, 很是痛快. (上面这段文字为引用文字, 有略微修改, 而引用出处也有说明: "Don Libes的书《Life with Unix》里介绍了很多关于它的奇闻异事")

回到学习UNIX就是学习历史 近端时间由于疯狂地看了不少资料, 得出了上述的感悟, 之所以这么说, 在于: 1.之前也不是没有看过相似知识点, 但就是因为印象不深刻, 脑子留不住这些知识点(这些知识点无法挂靠在我的知识树/体系中), 2.了解知识点的历史脉络, 有助于给它一个意义定位(它产生的理由, 存在的意义), 3.光知识本身来说, 并不难理解, 但计算机体系的学习并不是记忆, 在我看来, 这种学习就是"逻辑的运用", 有逻辑也需要记忆, 但根本和前提在于逻辑.

此外, 也是通过疯狂地看资料, 我拓宽了自己的思维/眼见(像张量(Tensor)一样, 升维了): 1.对于计算机体系/领域的学习, 不能"一招鲜吃遍天", 不同的领域就要有不同的思维模式(比如汇编, 比如深度网络的数学模型), 谁说一颗脑子不能有几种想法的, 2.历史不能浓缩, 太过浓缩就尝不出它正宗的味道, 这么说是因为如果不详细了解细节, 高楼大厦(现在的技术/思想)就失去了基础(过去的技术/思想), 会变的不够稳固的, 而往往自己的很多学习过程, 就是拿来主义: 现在谁会去搞底层啊(确实是没那个需要与条件), 但不得不说, 在我花费了时间/精力成本后, 确实对自己解释一个概念后变得更有信心了.

好了, 今天就先写到这里, 之前由于在Hexo上也浪费了些时间(或许不是白浪费的), 而且也看到了以下这么一句话, 觉得正确便放下执念, 让自己专心做好内容的输出吧:

"奉劝自己以后不要再折腾博客了,感觉有点浪费时间,毕竟自己不是专业做前端的,在csdn写就很好,专注于内容本身"

确实, Hexo需要花精力去维护, 如果本身不是搞前端搞Web的话, 这个东西会有"奇淫巧技"的偏向, 更多的是一种宣誓: 网络世界中有我的一个(所有权)页面. 

 


参考 - Reference
1.文中命令说明的引用: https://www.jianshu.com/p/5e20f1ef803f;

2.Perl命令: https://www.runoob.com/perl/perl-tutorial.html;

3.Linux/Unix设计思想, Mike Gancars, 章节1.4, "Unix哲学概述".

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值