計算機教育中缺失的一課

2021-03-02 沉默王二

同學們好,今天二哥是來補課的。

上一篇「終於制服了它們」把命令行、終端、Shell 搞清楚後,今天這篇寫起來就順暢多了。哦,極度的舒適!

開門見山地說吧。大學裡的計算機課程通常專注於講授計算機作業系統、計算機組成原理、計算機網絡等學院派的課程,以及某一門具體的程式語言,比如說 Java、C++/C,而對於如何精通工具這個主題往往不在講授的課程之內,需要同學們自行摸索。

但實際上呢,某些工具的使用頻率高到可以使用一個成語來形容——朝夕相伴。比如說命令行,不僅在學生時代經常用到,工作後更是形影不離。因此,花一些時間來打磨使用這些工具的能力就變得迫在眉睫。比如說今天的主角——命令行 Shell,項目的運維基本上都是通過 Shell 完成的。

記得剛參加工作那會,需要向一名前輩請教線上部署的問題。我站在他的身後,看著他靈巧地手指在鍵盤上熟練地操作著,黑色的 XShell 窗口裡,彩色的字符在愉快地跳躍著,有一種杰倫在鋼琴上彈奏《逆鱗狂想曲》的感覺,特別崇拜。

01、再說 Shell 是什麼

現代計算機的交互接口多種多樣,從常見的圖形化界面,到語音輸入,再到 AR 和 VR,都可以滿足指令的輸入。這些接口可以覆蓋絕大多數的應用場景,但它們從根本上限制了另外一種操作方式——你不能點擊一個不存在的按鈕,或者使用語音輸入一個還沒錄入的指令。

為了能充分地利用計算機的能力,我們有時候不得不回到最原始的交互方式——文字接口:Shell,一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。

幾乎所有的作業系統都支持某種形式的命令行  Shell,有些甚至提供了多種 Shell 可供選擇。Linux 上常見的 Shell 有:

Bourne Shell(/usr/bin/sh 或 /bin/sh)Bourne Again Shell(/bin/bash)

雖然細節上有些許差異,但核心功能是一樣的:允許你執行程序,輸入指令並獲取某種半結構化的輸出。

可通過 cat /etc/shells 命令來顯示本機上的 Shell。我用的 Mac,上面有 bash、csh、ksh、sh、tcsh、zsh 等等。

默認是 zsh,在窗口標題上可以看得出來。如果想切換到另外一種 Shell,可以直接敲 Shell 的名字,比如 tcsh,見下圖。

害,一不小心還是暴露了自己的名字。如果想退出當前 Shell 到默認 Shell 的話,敲 exit 命令就可以了。

02、初用 Shell

在啟動臺找到「終端」,打開(我用的 Mac),如下圖所示。

先從窗口標題說起,重點是 zsh。

2019 年,Apple 發布了新一代 macOS——macOS Catalina,為專業用戶帶來了一項重大變化,zsh 取代了 bash,成為默認的 Shell。相比 bash,zsh 擁有更強大的功能,比如說更智能的自動補全、更豐富的主題等等。這逼絕對是馬車中的跑車,跑車中的飛行車,史稱「終極 Shell」。

再說說窗體內容。

第一行內容顯示了最近一次的登錄時間。有些同學會好奇,「ttys000」是什麼鬼?

簡單來說,tty 是終端的統稱。看過「終於制服了它們」的同學應該知道了,早期的終端是電傳字印表機(Teletype / Teletypewriter),英文縮寫就是 tty。雖然終端設備已經不再限制於電傳打字機了,但是 tty 這個名稱還是就這麼保留了下來。

「ttys000」 就是 tty 加了一個代號 s000。

第二行內容告訴我們,主機名是 itwanger。可通過「系統偏好設置」→「共享」→「電腦名稱」→「編輯」修改主機名。% 後面跟了一個提示符,可以在此輸入任意字符,只不過有些可以被 Shell 解析,有些則不能。

03、Oh My Zsh

zsh 本身非常強大,但配置複雜,對普通用來來說體驗非常差。直到有一天,有個無聊的傢伙開發出了一個能夠快速配置 zsh 的項目,叫做「Oh My Zsh」,GitHub 地址如下所示:

https://github.com/ohmyzsh/ohmyzsh

這玩意安裝起來極為簡單,能夠讓我們神功速成,有點「五分鐘學會 XXX」的味道。

直接在終端裡執行 sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 就可以自動安裝 Oh My Zsh 了。

如果自動安裝失敗的話,可以嘗試手動安裝。

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

由於某些原因,速度可能會比較慢,耐心地等待一會。

安裝完成後重新打開一個新的終端,就可以看到彩色的提示符(Oh My Zsh 默認主題的標誌)了。

Oh My Zsh 的配置集中在 ~/.zshrc 文件裡(~/ 表示根目錄),可以通過 vim 打開。

vim ~/.zshrc

可以看到,Oh My Zsh 默認使用的主題是 robbyrussell,可在 ~/.oh-my-zsh/themes 目錄下找到更多主題進行切換。

如果你不知道選擇哪個主題,可以通過下面的網址進行預覽。

https://github.com/ohmyzsh/ohmyzsh/wiki/External-themes

如果你有選擇困難症,可以像我一樣,配置成隨機,每新開一次窗口,Oh My Zsh 就替你選一次。

ZSH_THEME="random"

現在,就新開一個窗口吧,可以看到主題隨機到了 essembeh。

再來說說插件。Oh My Zsh 提供了完善的插件體系,默認有 100 多種,可以在 ~/.oh-my-zsh/plugins 目錄下找到這些插件。如果不確定這些插件是幹嘛的,可以查看一下插件目錄下對應的 README.md 文件。插件的配置同樣在 .zshrc 文件裡,目前默認的插件只有 git。

到此為止,Oh My Zsh 的安裝、配置、插件完成了三位一體,終極 Shell 全面登場。

04、再用 Shell

來執行一個最簡單的命令 date,不出意外的話,它將會列印出當前的日期和時間。

然後,光標等待我們輸入其他命令,我們可以在執行命令的時候帶上參數。

echo hello

echo 命令會將參數 hello 列印出來,Shell 是基於空格分隔命令進行解析的,第一個單詞代表可執行的程序,後續的單詞作為傳遞給程序的參數。如果你希望參數裡包含空格的話,可以使用單引號或者雙引號包裹起來。

echo "hello world"

當我們在 Shell 中執行命令時,實際上是在執行一段 Shell 可以解釋執行的簡單代碼。如果命令不是 Shell 的預知範圍之內的話,它會去諮詢環境變量 $PATH。

可以使用 which 命令來確定某個程序名代表的是哪個具體的程序。也可以繞過 $PATH,直接使用帶路徑的命令來執行,比如 /bin/date。

Shell 中的路徑是一組被分割的目錄,在 Linux 和 macOS 上使用的 / 分割,在 Windows 上是 \,正因為這樣,我們在編程的時候一定要先獲取系統的分隔符(Java 是 File.separator 獲取的),不然會導致程序在不同的作業系統下無法執行!

如果某個路徑以 / 開頭,那麼它就是一個絕對路徑,其他都是相對路徑。當前工作目錄可以通過 pwd 命令來獲取,切換目錄通過 cd 命令。. 表示的是當前目錄,.. 表示上級目錄。

Shell 會實時顯示當前的路徑信息。可以通過 ls 命令查看當前目錄下包含哪些文件,安裝了 Oh My Zsh 後,還可以通過 ll(其實是 ls -l 的簡寫)顯示文件或者文件夾的詳細信息。

簡單來介紹一下文件屬性,以後會很有用。

d:第 1 位表示文件類型,d 是目錄、l 是連結文件、- 是普通文件。rwx:第 2-4 位表示這個文件的所有者擁有的權限,r 是讀、w 是寫、x 是執行。r-x:第 5-7 位表示和這個文件的所有者所在同一個組的用戶具有的權限。r-x:第 8-10 位表示其他用戶所具有的權限。

比如:

-rw-r--r--   1 maweiqing  staff     6B  1 12 16:35 hello.txt

表示 hello.txt 是個普通文件,maweiqing 擁有讀和寫的權限,但沒有執行的權限,和 maweiqing 所在的同一個 staff 組的用戶擁有隻讀權限,剩餘用戶同樣。

如果你想要知道命令的參數、輸入輸出信息,或者是想要了解它們的工作方式,可以試試 man 這個命令。它會接受一個程序名作為參數,然後將它的文檔(用戶手冊)展現出來。

man ls

可以按 q 鍵退出用戶手冊。你可以趁機學習一下 mv(用於重命名或移動文件)、 cp(拷貝文件)以及 mkdir(新建文件夾)這些常用命令。注意,rm (刪除文件)這個命令一定要慎用啊,搞不好就是刪庫跑路的節奏!

在 Shell 中,程序主要有兩個流:輸入流和輸出流。當程序嘗試讀取信息時,就從輸入流中讀取;當程序嘗試列印信息時,就將信息輸出到輸出流中。通常來說,鍵盤作為輸入設備,顯示器作為輸出設備。

可以使用 < 和 > 來重定向輸入輸出流。使用 >> 將輸出以追加的方式重定向到文件。

➜  itwanger echo hello > hello.txt
➜  itwanger cat hello.txt
hello
➜  itwanger cat < hello.txt 
hello
➜  itwanger cat < hello.txt > hello1.txt
➜  itwanger cat hello1.txt 
hello
➜  itwanger echo world >> hello.txt 
➜  itwanger cat hello.txt 
hello
world

對於 Java 程式設計師來說,我們通常需要在運行環境上這樣運行 jar 文件。& 代表在後臺運行。

nohup java -jar XXX.jar > out.log &

對於絕大多數的類 Unix 系統,有一類用戶非常特殊,就是 root 用戶,可以創建、讀取、更新和刪除系統中的任何文件。

Unix 於 1969 年由貝爾實驗室開發,目前主流的 Unix 系統有三種,分別是 AIX、HP-UX、Solaris,互不兼容。Linux 於 1991 年由芬蘭大學生 Linus 開發,是一個類 Unix 系統,但是其代碼不源自任何 Unix 版本,完全不是 Unix 的一個分支。

通常來說,我們並不會用 root 用戶直接登錄系統,因為這樣可能會因為某些錯誤破壞系統。所以在需要的時候,我們會使用 sudo 命令,也就是以 su(super user)的身份去執行一些操作。

當你遇到 permission denied(拒絕訪問)的錯誤時,通常是因為需要是 root 用戶才能操作的原因引起的。get 了吧?

學到這,你掌握的 Shell 知識已經可以完成一些基礎的任務了。有雲伺服器的同學,或者安裝了虛擬機的同學,可以在上面建個臨時文件夾練習下文中提到的命令。

好啦,以上就是今天的分享啦,覺得不錯的話,不要吝嗇你的點讚和在看喲~

參考連結:https://missing-semester-cn.github.io/2020/course-shell

溫馨提醒:記得把「沉默王二」加個星標啊,這樣就不會錯過更新啦~

相關焦點

  • MIT《計算機教育中缺失的一課》中文版,學習計算機或人工智慧都必須上的一課
    在這個系列課程中,我們講授命令行、強大的文本編輯器的使用、使用版本控制系統提供的多種特性等等。學生在他們受教育階段就會和這些工具朝夕相處(在他們的職業生涯中更是這樣)。因此,花時間打磨使用這些工具的能力並能夠最終熟練地、流暢地使用它們是非常有必要的。
  • 日本中小學的生命教育,正是我們最缺失的一課
    在尖刀的脅迫下,小靜被迫脫光衣服搜身,反抗過程中脖子、手臂和腿上都被男同學劃傷。整個施暴過程長達1個多小時。然而,行兇的黃某出生於2004年9月,未達到刑事責任年齡。根據規定,警方對案件不予起訴。黃某的撤案證明。中國青年報·中青在線記者 雷宇/攝在網上檢索後發現,讓人感到震驚的豈止是這兩起案件,類似案件近年僅被曝出的就有許多。
  • 電影《最後一課》中的矯情
    電影《最後一課》是大電影《我和我的家鄉》中的一個獨立單元,講述了範老師的最後一課。只是,在情節方面,有很多的矯情。範老師得了老年痴呆症,記憶回到了1992年支教的時候。為了讓範老師恢復記憶,或者只是滿足他上最後一課的願望,他的兒女們夥同他曾經支教的鄉村幹部還有他以前的學生,給他營造了一個最後一課的背景,讓他上好最後一課。雖然教室是蠶房改造的,學生們也是臨時湊的,但範老師依然認真上課,還要為學生找顏料。學生的反駁說明現在的教育環境已經不是原來的環境了,範老師的失憶也是對教育的一種鞭撻。
  • 「CS缺失的學期」,這門課專講課本學不到的計算機素養
    大數據文摘出品作者:曹培信從作業系統到程式語言再到機器學習,在傳統的計算機科學教育中,你可能會參加很多課程,但是有一類課程卻是很多學校都忽略的——計算機生態系統素養。大多數學校可能覺得這各部分過於基礎,因此將這一部分的內容作為自學部分,讓學生自己在實踐中領會,但是MIT的幾位教授在教學過程中發現,許多學生這方面的知識非常有限。計算機發明出來是為了替代手工的,然而學生們卻經常手工完成重複的任務,或者不能充分利用強大的工具,如版本控制和文本編輯器。
  • 大學計算機基礎課程中的思政教育
    在計算機基礎課程的教學中,適當引入傳統文化的教育,不僅有利於塑造學生的民族自信心,還有利於通過對比研究,訓練學生的批判性思維。近代以來,中國計算機領域湧現了以銀河、天河、神威等為代表的超級計算機,以百度、阿里、騰訊等為代表的大型網際網路企業,以王選、慈雲桂、姚期智等為代表的傑出科學家等。對這些典型代表、典型事件和典型人物的講述,對於塑造學生正確的三觀具有重要意義。
  • 作業幫一課:用匠心精神推動教育普惠
    從全國教育資源分布來看,城市與農村的孩子在教育資源、師資配比等諸多方面,起跑線存在明顯差距。據悉,生師比(在校生數/專任教師數)作為衡量教育資源投入的重要指標,城區、鎮區、鄉村學校在小學階段的生師比分別為18.8、18.1和14.6,從數據中看出,城鎮學校的生師比明顯高於鄉村學校。
  • 視頻|卡內基梅隆大學蘭迪·波許教授的最後一課
    蘭迪·波許(Randy Pausch,1960年10月23日-2008年7月25日)是美國卡內基梅隆大學的計算機科學、人機互動及設計教授。
  • 女副校長用行動給「家長們」上了一課
    勤儉節約中華傳統美德勤儉節約是中華民族的傳統美德,在學校教育中,榜樣示範作用可以說是無處不在,尤其對於老師來說,自己的一言一行,一舉一動,都在學生的眼裡,記在心裡而一個副校長如果先給孩子們做示範,則更容易讓學生們牢記在心裡,從而達到身教作用。
  • 當前教育存在的最大問題就是道德教育的缺失!
    中國當前教育存在的最大問題就是道德教育的缺失! 一、教育導向上的德育缺失 教育應該培養德智體美勞全面發展的的社會主義接班人,不僅是品學兼優,更是身懷愛國之心,天下為公。
  • 因學生未送花發飆,這「最後一課」是上給教師的
    評論君說老師歇斯底裡咆哮,學生低頭沉默的「互動」情境,不配稱為孩子們的「最後一課」,而是這位老師的一課。因為學生沒有送花便如此震怒,這說明,該校甚至當地,在師風師德建設中,在針對日常教學的監督和培訓中,是缺位的。在教育領域,無論高校還是中小學、幼兒園,都應該堅持師德第一。相比專業知識和教學能力的匱乏,對孩子影響更大的是品德修養的缺失。尤其是在孩子心智尚未成熟的中小學,教師以身垂範、為人師表的作用就更加重要。
  • 四季教育與華東師大出版社一課一練項目深度合作
    《三招過關》揭幕                      四季教育全線合作                                               《一課一練》的「明天」會上,著名數學教育專家、校長代表、華東師大出版社領導班子成員、四季教育集團領導、圖書經銷商代表、《一課一練》讀者代表等對於《一課一練》的教育價值發表演說。
  • 第十課 計算機中字符的編碼
    這一課主要介紹計算機中字符的編碼和漢字編碼以及計算機語言字符編碼        由於計算機的內部是以二進位數的形式進行存儲、運算、識別和處理的,因此,在計算機中,數據(如1、2、3、4、5、6、7、8)、字母(如A\B
  • 奇葩證明背後的「常識缺失症」
    筆者認為,在這三點之外,我們社會政治治理中的「常識缺失症」亦是奇葩證明泛濫的重要原因,而這一點容易為人忽視。   所謂「常識缺失症」,意為政治治理中缺乏對於常識的尊重,缺乏依靠常識理解問題的思路,以及缺乏依靠常識解決問題的態度。   這並不難理解。奇葩證明「奇葩」之所在,一般在兩點,一是違反法律規章制度的規定,強行設檻;二是違背生活與生活常識,人為設限。
  • 大學生情殺案背後,折射出高校婚戀教育缺失
    大白新聞注意到,近年來,高校情殺案頻發,而婚戀教育在國內青少年成長過程中的缺席,更值得反思。高校情殺案件頻發2010年12月7日,陝西鹹陽某校學生李某(男)持刀將西安建築科技大學的男學生李某峰殺害,李某峰搶救無效身亡。據報導,李某、李某前女友、李某峰三人是中學同學。
  • 這些該是孩子成長教育中不可缺少的一課
    對手文化是成長教育中重要的一課>中國文化中,似乎太缺少對手文化。這種不正確的對手文化也影響了我們的教育,以至於出現這樣的極端案件:一個第二名的初中生殺死了第一名的同學。在中國官場及商場的競爭中,類似周郎的心態並非個例,而且是主流。對手文化是孩子成長中重要的一課,無論家庭教育還是學校教育都不該忽視。我們的學生一定要學會尊重對手,學會和對手一起成長進步,要把對手文化在中國發揚光大。
  • 熊孩子往井蓋內扔火柴被炸飛:缺失安全教育,真的會要命!
    安全教育到位的孩子,和安全教育缺失的孩子,會通向兩種,截然不同的人生。
  • 【好文共賞】香港青少年國民教育缺失的原因與出路
    本文試圖在對香港青少年國民教育缺失問題的直接原因和間接原因剖析的基礎上,提出加強香港青少年國民教育的幾點對策和建議。近年來香港社會出現的雜音和亂象,從教育的視角來看,它折射出香港青少年對國家、民族及其文化認同的缺失,甚至有嚴重的離心傾向。
  • 在線教育搶灘暑期檔 作業幫一課推出中小學暑期直播課
    作業幫一課暑期班報名火爆,部分特惠課僅需50元「暑期檔」一直是在線教育行業競爭的重要戰場。今年以來,隨著更多教輔機構宣布將線上課程作為發展的重點,線上課程模式進一步升級,加上我國在線教育規模人數已達到數億人,在價格、體驗、市場等多重作用下,暑假報班越來越多學生和家長選擇在線教育。
  • 王廣發:教育轉型缺失導致中國在國際機構話語權缺失
    人民網北京5月15日電 (記者 覃博雅、楊牧)在5月15日由中國與全球化智庫(CCG)、中國國際經濟合作學會、中國國際人才專業委員會聯合主辦的第二屆中國與全球化圓桌論壇上,北京法政集團董事長兼總裁王廣發著重提及人才培養和教育轉型在中國參與全球化過程中的重要作用。
  • 家庭教育應補上「逆商教育」這一課
    家庭教育應補上「逆商教育」這一課為啥孩子不能吃苦?家庭教育應補上「逆商教育」這一課王營前段時間,浙江在線報導了一名初中男孩因為嫌棄有空調的大學宿舍條件太差,不如星級賓館,第一天就從夏令營落逃的新聞,在網上引發了熱議。有教育專家稱,這名落跑男孩平時不喜歡社交的可能性比較大,住宿條件差有可能只是藉口。