UNIX及計算機思維及首篇博文

2021-09-26 00:00:43 字數 3470 閱讀 3384

背景unix的學習, 很大程度上就是歷史的學習: 1.unix歷史, 2.計算機作業系統的歷史, 3.程式語言的歷史. 引申開去, 計算機行業, 或者別的行業的學習, 也是建立在歷史的基礎上的吧?! 舉個例子, 在unix之前, 程式設計師是怎麼程式設計的, 他們用編譯器嗎? 最近狠看了些資料, 才一點點地發現這其中的"端倪": kenthompson是用彙編寫了unix的第一版的, 然而這版的效果並不好(彙編針對特定的cpu, 他們發現移植性不好), 他們(thompson和dennis ritchie)轉而用b語言開發, 然而他們又發現用b語言寫的unix效能不太好(b語言與硬體互動的效率不高), 故而萌生創造一種新的適合寫unix的語言, 而這個語言就是c.

關於shell命令shell命令常常以縮寫了的單詞而成一體, 讓不知道其意的人不知其意, 雖然"unix文化"的"10條次要規則"的第三條為"使用小寫字母並盡量保持簡短", 這不免讓人聯想到shell命令中是不是也是這樣的, 舉以下一些例子, 旨在說明了解表象(指縮寫的命令名本身)背後的來龍去脈(指命令的由來/歷史), 對學習效率有多麼大的催化加速效果, 這既是筆記總結, 也是對"歷史學習一說"的例證:

awk: 這個命令的名稱取自它的三位作者的姓名的首字母, 分別是: alaho, peterweinberger 和 briankernighan;

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上進行報表處理的工作變得更方便, 決定開發乙個通用的指令碼語言, 而在2023年12月18日發表.

看了以上的介紹, 尤其是biff命令的這段說明, 心裡狂躁的好奇心疑惑解開了不少, 不過也真是令人哭笑不得: 令人疑惑不解的命令名稱居然是一狗的名字, 很是痛快. (上面這段文字為引用文字, 有略微修改, 而引用出處也有說明: "don libes的書《life with unix》裡介紹了很多關於它的奇聞異事")

回到學習unix就是學習歷史近端時間由於瘋狂地看了不少資料, 得出了上述的感悟, 之所以這麼說, 在於: 1.之前也不是沒有看過相似知識點, 但就是因為印象不深刻, 腦子留不住這些知識點(這些知識點無法掛靠在我的知識樹/體系中), 2.了解知識點的歷史脈絡, 有助於給它乙個意義定位(它產生的理由, 存在的意義), 3.光知識本身來說, 並不難理解, 但計算機體系的學習並不是記憶, 在我看來, 這種學習就是"邏輯的運用", 有邏輯也需要記憶, 但根本和前提在於邏輯.

好了, 今天就先寫到這裡, 之前由於在hexo上也浪費了些時間(或許不是白浪費的), 而且也看到了以下這麼一句話, 覺得正確便放下執念, 讓自己專心做好內容的輸出吧:

"奉勸自己以後不要再折騰部落格了,感覺有點浪費時間,畢竟自己不是專業做前端的,在csdn寫就很好,專注於內容本身"

確實, hexo需要花精力去維護, 如果本身不是搞前端搞web的話, 這個東西會有"奇淫巧技"的偏向, 更多的是一種宣誓: 網路世界中有我的乙個(所有權)頁面. 

參考 - reference

1.文中命令說明的引用: 

2.perl命令: 

3.linux/unix設計思想, mike gancars, 章節1.4, "unix哲學概述".

計算機進製及轉換

計算機使用二進位制,另外常用的還有八進位制 十進位制和十六進製制。1 二進位制 滿2進1,0 1表示,在jdk1.7之前程式中不容許定義二進位制數字,從jdk1.7開始可以定義。一般以0b 0b作為開頭 1 八進位制 滿8進1,0 7表示,一般以0作為開頭 1 十進位制 滿10進1,0 9表示,如果...

計算機及網路基礎

c client 客戶端軟體 s server 服務端軟體 python程式設計師是應用開發程式設計師,開發的軟體都是應用軟體,應用軟體必須執行於作業系統之上,作業系統則執行於硬體上,應用軟體不能接操作硬體,應用軟體對硬體的操作。必須呼叫作業系統介面,由作業系統操作硬體。1 客戶端軟體產生資料,存放...

初識計算機及程式設計

1.計算機的本質,就是能替人類做極高速運算,解決了人類繁重的計算工作,從而使一切事物的數位化成為可能,計算機可以進一步替代人類管理事物。計算機也稱為電腦,意思是通電的大腦。2.計算機內部儲存資料的本質 計算機是基於電工作的,而電的訊號只有高頻和低頻兩種狀態,意味著計算機的世界裡只有兩個狀態,為了方便...