z101--對五天101學習的總結和反思
每個階段的結尾總結都統一採用這種命名方式吧--z(階段簡稱).md
motivation: 秉持着認真完美,興趣主導的學習原則.我循着YSYX的推薦開始了101的學習.雖然這並不是一個很完善的,很權威的在線電子書和入門教材,但是它已經很好了.起碼是挺吸引我的
在101之前,我首先解決了clash和git的問題,這兩個軟件涉及到的文件處理/系統安裝可以說是很有代表性.爲我後來理解和實驗101的知識提供了豐富的實踐經驗支撐.但同時,缺乏指導和基本知識的我也在這兩項工作上面花費了大量的時間.在這過程中累積的疑惑更使我感到學習理論的必要
101從linux代表的開源文化開始講解,從歷史引入技術,這同樣是對學習動機的補充,是很好的.但是從虛擬機出發有悖於ysyx的倡導,ssh遠程連接我也沒有需求和條件實驗,因此前面還是看得比較輕鬆的.我很欣賞中科大在開源方面作的這些努力,收藏了幾個他們的內部社團活動資料,也許之後有空,來了興致會看一看呢?文化的發展永遠可以促進技術的進步,無論是解釋歷史還是展望未來.
個性化的部分很有趣,我也看得比較快.但是自己美化和個性化設置倒是花了不少時間.就像拿到一個新玩具,或者踏上一片新大陸,在這個階段,我就在自己的機器設置和文件夾裏面到處亂逛,自由探索,尋找那些新奇有趣,別具一格的東西.在陌生但是條例有序的古老文件系統裏遊歷一番後,我照着書上的建議換了shell,使用oh-my-zsh美化了命令行,改了terminal爲konsole,設置了中文輸入,更改了背景圖片,還變了使用許久的vscode主題.在各種視覺效果裏面對比,篩選和自定義設置真的廢了很一番功夫,但是現在的環境也真的看起來很漂亮.這是不是雄性動物刻在基因裏標記領地的一種習性呢?
接下來是軟件安裝與文件操作.這部分因爲有之前使用linux積累的豐富經驗(與疑惑),我看起來是饒有興致,它寫的也確實不錯.這一部分的總結我在3.2.0linux101.md裏面寫了134行吧,當時看到就忍不住想要整理記錄了.而那份本來想要對全書進行同樣整理的文件其實最後也就只是主要記錄了這一部分(134/153).這充分說明實踐經驗對理論理解的重要性.由於在別處已經有了記錄,在這裏就不展開再重複了,文件就在此文件的同一文件夾中,可以自行查看
進程,前後臺,服務與例行性服務這裏我因爲預備知識比較少,實踐經驗也不足,看的是半懵半懂.瞭解了一些進程查看和管理的辦法,但是迄今爲止好像還沒有可用的地方.確實是挺有趣的吧,htop
是很漂亮的命令行程序了.可能以後在管理和查看多進程任務時可以用到.可以用htop或者其他辦法獲得程序進程,然後一般是強制終止(terminal)或kill它們.關於ssh遠程連接的應用我還是知之甚少.tmux在我的終端反應相當不靈敏,快捷鍵幾乎就是沒反應,改設置也沒用.於是我採用了vscode^\
和konsolealt\
的快捷鍵作窗口拆分.vim也有:sp
可以有類似效果.以後要用到再看吧.關於服務和daemon的概念倒令我很感興趣,因爲之前設置clash開機自啓失敗了,正巧就要用到這裏的知識.我利用服務管理,查看的方法檢查(check)自己的成果,同時用自定義服務成功啓用了clash自啓動服務.具體過程已經補充在3.0md裏面了.週期性命令讓我一下子想起來疫情的每日打卡,當時是用github action+secret作的,很複雜,看來在服務器上更常用的辦法應該是用這些週期性命令執行程序吧.以後肯定還會要用.進程的管理與體系直接關聯到操作系統設計與計算機組成,補充的TTY簡介也是在說明這樣的事情,以後我肯定還會再回來看的.
用戶,用戶組權限與文件結構比較好理解,因爲有一打開機器就在裏面到處亂逛的經歷,這一節提到的東西看起來還比較熟悉.因爲要保護系統,要進行多人共用計算機(比如遠程連接到同一主機),因此分用戶分組分其他用戶而賦予其不同的權限同時按照這種權限對文件操作進行有區別的限制是必要的,也隨之有規定特殊用戶比如系統自己就作爲其全部權限許可用戶(系統用戶,root)而執行着維持操作系統運作的基本命令.這種權限體現在對文件的操作上,用ls -l
可以查看對應的(文件類型+)三組權限和用戶與用戶組名稱.而切換用戶或者修改文件權限可以實現允許或禁止對某些文件的操作,sudo
和chmod
就是其中的典型.此外,對一些權限定義文件如sudoers
的修改也可以實現類似的效果(本質就是修改文件).FHS==file hierarchy system則是一種文件分類和管理系統.因爲操作系統和我們的計算機要處理如此多的信息和文件,將他們以合適的方式分類組織才能進行高效的控制和管理.比如按上文,不同文件的作用不一對應的權限也不同,把相似的文件整理在一起就可以方便定位與操作它們.FHS歷史悠久,已成爲慣例,因爲各種操作系統(類UNIX)窮盡人類智慧優化其實已經大同小異,掌握了文件系統,其實也就對操作系統和計算機結構有了普遍的理解.可以從官網介紹系統開始記憶文件系統,也可以在使用中記住常用的用戶要使用的地址,還可以從操作系統和計算機組成出發,結合歷史解釋整個系統的佈局.我目前還只是在使用中學習.以後也會要再看的吧.
接下來是網絡文本處理與shell script.剛開始看的時候其實沒什麼頭緒,好像只是在介紹一些工具而已.其實這裏的網絡(網頁)與文本處理是對文件讀(read)的基本介紹.一切皆文件,而文件操作一共三種:read, write, execute.execute只有執行文件的程序和權限是需要注意的.write會在使用編輯器(vim)處講解,這裏主要講的就是read和一些流編輯操作(stream edit),包括了對本地文件和在線文件的(對在線文件包括變更地址到本地).對於網頁,典型的處理程序有wget
以下載見長,curl
以模擬請求見長.當然還有很多其他下載工具,就不一一介紹了.對文本處理,101主要講解了一些基本功能和對應的典型工具:word count==wc
;different==diff
,處理差異;head==head
,處理頭幾行;tail==tail
,處理末幾行;global regular expression and print==grep
,處理正則匹配文本(正如regular expression之名所示);stream edit==sed
/awk
(awk甚至是圖靈完全的,利用正則式成爲了一門語言),流編輯.通過各種幫助渠道可以詳查其用例用法.在這裏就緊接着把第九章的高級處理與正則匹配也寫上吧,因爲文件名定位和流處理都離不開正則式的使用,所謂高級,其實是基本.繼續工具介紹:sort==sort
,行排序;unique==uniq
,相鄰重複行處理.正則匹配可以參見regex101,在reference查看符號意義,以測試例驗證.當然這些還只是基本的一些文本處理工具,通過newbing或者copilot還能發現更多.
我打算把命令組合與shell script一起放在這一段講.UNIX哲學就是小而精,每個小工具做到極致的簡單功能,然後用重定向工具把它們連成一個處理鏈以達成複雜和定製的處理程序(當然也是臨時的).一個程序有輸入與輸出,輸入分爲參數(arguments)輸入與文件流輸入(STDIN)(0),輸出分爲STDERR(2)和STDOUT(1/default).要連接各個程序,就要將各個程序的輸入輸出以恰當的方式相互連接,使一些程序的輸出成爲另一些程序的輸入.連接的工具:|
==pipe,將前一程序的STDOUT作爲後一程序的STDIN,這是最常用的.xargs
,無參數情況下,將STDIN作爲後一程序的參數(arguments)輸入並執行後一程序,本身也可以指定參數以完成更強大的批量處理功能,一般與|
連用(因爲|
之前的STDIN和arguments都可以自由指定).默認的STDIN文件是鍵盤緩衝區,STDOUT/STDERR都是當前shell,上述經典指令顯然同時完成了輸入和輸出的重定向,是因爲這樣比較常用.相比較之前操作數據流的重定向工具,比較原始(操作文件)的重定向工具(符號)是:<
,接受文件名爲參數作爲此符號之前程序的STDIN;>
,重定向輸出到參數中的文件,默認是處理STDOUT,2>
將重定向STDERR的輸出,2>&1
可以合併STDERR到STDOUT;>>
和>
的用法一致,但>
每次都會從頭開始寫入文件,而>>
則只會在文件原來的末尾處追加.>>
和>
在指定文件不存在時都會創建文件並進行相關操作(寫入).
shell script還是分開講吧.作爲輕量自動化的script語言,shellscript不需要像python那樣引入庫,而是直接使用本地shell的環境變量和程序.一方面,這與命令行環境幾乎完全一致(除了在script中設置的一些臨時變量),爲編寫和執行提供了便利;另一方面,也造成擴展性比較低,因爲高度依賴本地環境和程序,因此難以封裝和跨平臺.但是在UNIX的便利性足以使其在這裏成爲輕量自動化的首選.所有基本語法和用例我都已經在101文件夾裏詳細說明了,後來的TMS也可以加以補充.
還能看懂fork炸彈嗎?:(){ : | : &};:
之後的編程開發和docker其實我只是略讀.在重溫C的環節我會再回來看和實踐的.我已經改進了自己的VSCODE,現在能進行簡單的小項目編程了,但是大項目和makefile對於我還是很新奇的事情.我還是只會寫一些簡單的C.但我相信這樣的狀況很快就會有些改變了吧.docker我有一些瞭解,但是我現在暫時沒有什麼服務器需要,所以也沒有細看.原來我有在github收藏過官方的教程,有需要我會繼續看的.估計很快吧,我希望在這個暑假裏能上線我的博客.我想一開始就整一個我完全能理解和創造的網站,而不只是在網上隨便套一個模板就發佈上去.