Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

程式設計師聯盟發表於2019-03-01

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

-- 簡書作者 謝恩銘 轉載請註明出處

內容簡介


  1. 第二部分第二課:命令列,世界盡在掌握
  2. 第二部分第三課預告:檔案和目錄,組織不會虧待你

命令列,世界盡在掌握


上一課 Linux探索之旅 | 第二部分第一課:終端Terminal,好戲上場 中,我們帶大家初步領略了終端的世界。

那麼,接著我們就要學習終端裡的一大利器:命令列 了。

話說今天的標題是不是有點“霸氣側漏”呢?

讀者:“小編,你為什麼每次都要起這麼非主流的標題呢?不能愉快地玩耍麼?”
小編:“那我問你,老子他為什麼要寫《道德經》咧?”
讀者:“為什麼咧?”
小編:“因為老子願意!”

開個玩笑輕鬆一下~

沒辦法,不能不激動,因為我們終於來到了這一刻,命令列的征程將從此課(刻)開始。

而且你會發現,一旦入門並且精通了Linux命令列,那麼你就離極客又近了一步。

想要像電影裡面那樣分分鐘破解密碼麼,想要像《鋼鐵俠》裡的託尼.斯塔克一樣用命令列編譯錄入鋼衣中的程式麼?那命令列是一大利器。

當然了,一開始我們肯定會帶大家從基礎的知識點入門,不會一上來就上演《駭客帝國》的。

命令列提示符


首先,我們假設您已經開啟了一個終端。如果不知道什麼是終端或者不知道如何開啟一個終端,那你肯定沒看我們的上一課。

上一課我們也介紹了兩種終端的模式:

  • 真正的終端:沒有圖形介面,只有黑底白字的全螢幕的終端,只能通過鍵盤輸入,也可以稱為Console(控制檯)。

  • 圖形模式的終端:一般我們在Ubuntu,Fedora等Linux發行版下日常使用的就是這種終端。你可以配置終端的外觀,用滑鼠操作,也可以同時執行其他應用程式,等等。

我們強烈推薦使用圖形模式的終端。我們開啟一個圖形模式的終端,如下圖:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

可以看到終端的一行中開頭是一串字元,後面白色的那一小塊其實是閃動的游標,提示我們輸入會從游標處開始。

那一串 oscar@oscar-laptop:~$ 是什麼意思呢?我們還什麼都沒有輸入呢,怎麼就顯示了這一串不明所以的文字呢?

不要慌,你可以把它看成電腦跟你說“你好”呢。這是終端“打招呼”的方式(我承認這種打招呼的方式有點非主流,但是考慮到命令列是在20世紀六七十年代出生的,請多多擔待),術語叫做“命令列提示符”,顧名思義就是提示在其後面輸入命令。

在你輸入新的一行命令前,這個命令提示符都會出現。

很想知道這一串字元到底表示什麼意思對嗎?我們把其拆分開來講解:

  • oscar 這是當前使用者的名字。Linux是一個多使用者的作業系統,Windows也可以。不過Linux的多使用者管理更方便。我們一般建議每個使用Linux系統的使用者都建立一個屬於自己的賬戶,便於隱私管理。我們之後的課程會講如何在Linux下建立新使用者。

  • @ 這個符號我們應該不陌生,我們的電子郵件一般都是 name@domain.com 這樣的不是嗎。這個@就表示英語裡的at,是“在...裡面,落戶在...的,在其中”的意思。@前面是使用者名稱,後面是所在的域。

  • oscar-laptop 這是當前電腦/作業系統的名字。上面說了在@後面的是一個域,所以 oscar@oscar-laptop 就表示oscar-laptop這臺電腦的oscar這個使用者。oscar-laptop這個名稱在安裝此Linux系統時可以任意指定。

  • : 這是分隔符,沒有什麼特別的涵義。

  • ~ 這是當前所在目錄的名字,會隨著使用者進入不同目錄而改變。~表示當前使用者的家目錄,有點類似Windows系統的“我的文件”這個目錄。

  • $ 指示你所具有的許可權的字元。在Linux系統中有兩種可能:
    $:表示普通使用者,有許可權的限制(比如不能修改重要的系統檔案等)。因此我的賬戶oscar就是一個普通使用者。
    #:表示超級使用者,也就是root。表示你當前以root這個使用者出現。root擁有所有許可權,是系統的大管家,想幹什麼就幹什麼。所以一般不推薦初學者登入為root,因為一不小心可能會誤刪一些檔案。之後的課程我們會再來研究root模式,暫時我們還是“乖一點”好了,以免辦傻事。

因此, oscar@oscar-laptop:~$ 的意思就是:

你好,你目前是以oscar這個使用者登入;你的電腦名稱為oscar-laptop;你目前位於 ~ 目錄下,就是你的使用者家目錄。你是普通使用者,擁有有限的許可權。

假如我此時把使用者切換為root,你可以看到命令提示符的變化,如下圖:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

看到了嗎?我一切換成root,命令提示符就變成了 root@oscar-laptop:/home/oscar#

其實oscar/root和oscar-laptop這兩個名字可以分別用hostname和whoami這兩個命令來獲知,如下圖所示:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

當然了,這個提示符的格式和內容是可以自行配置的,如果你嫌它太長,你可以精簡它;如果你嫌它不夠詳細,可以再加顯示的內容。如何來配置,我們在之後的課程會講,但要等你學會如何在Linux下使用文字編輯器之後再說。

命令和命令引數


我們在終端中工作時,就是給它傳遞指令,讓它做我們要求的事情。這些指令都是通過命令的形式來輸入的。

Linux中有很多很多命令,好訊息是我們不需要全部記住,只需要記得一些常用的就可以了。對於那些不常用的命令,我們只要在使用前懂得如何去閱讀命令的使用手冊就好了。

是的,Linux的開發者們為我們寫了豐富詳盡的命令使用手冊,英語是manual。

Linux的使用手冊可以說是Linux開發者的“聖經”,你會發現他們只信靠這本“聖經”。

為什麼呢?因為這是供參考的工具書。命令的使用方法,各種用例,都詳細地記載在這部“聖經”裡。只要我們肯花功夫去讀,就能找到想要的答案。

我們之後會用單獨的一課教大家如何閱讀Linux的使用手冊:太重要了。

特別提一下,你可能看到過一些Linux老手,當一些Linux初學者問他們看似很簡單,百度就能搜出來的問題,比如這個命令怎麼用之類時,會對新手說:RTFM。

你會詫異RTFM是什麼意思,其實RTFM是Read The F*cking Manual的首字母縮寫,意為:“閱讀那該*死的使用手冊”。這並不是侮辱人的話,而是有點無奈的嘆息。

類似的還有RTFSC,是Read The F*cking Source Code,“閱讀那該*死的原始碼”的縮寫,據說是Linus Torvalds最先說的。

所以,為了避免以後有人對你說這樣的話,還是好好學習如何閱讀使用手冊吧。

簡單的命令


OK,停止了饒舌,我們終於要輸入我們的第一個Linux命令了!

首先,我們從最簡單的命令開始。

在終端中輸入 date,然後按下Enter鍵。你可以看到如下顯示:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

所以,我們輸入 date 這個命令,終端顯示了以下資訊:

Sat Aug 1 20:30:09 CEST 2015

這是什麼意思呢?我們知道date在英語中是“日期”的意思,所以機靈的讀者應該已經猜到date這個命令的作用了吧。

是的,就是“顯示當前時間和日期”。

  • Sat是Saturday的縮寫,是英語“星期六”的意思。

  • Aug是August的縮寫,是英語“八月”的意思。

  • 1就是天數。

  • 20:30:09 是時刻,就是20點30分09秒。

  • CEST 歐洲中部夏令時間(Central European Summer Time,簡稱CEST)比世界標準時間(UTC)早兩個小時的時區名稱之一。它被大部分歐洲國家和部分北非國家在夏天採用,冬季這些國家使用歐洲中部時間(UTC+1)。

  • 2015是年份。

所以可知小編輸入此命令時正是《歐洲中部夏令時間 2015年8月1日的20點30分09秒》,小編此時在法國居住。

怎麼樣,你已經學會了第一個Linux的命令,date,用於顯示當前時間。激動麼?

再來學習第二個常用命令:ls

在終端中輸入ls,按Enter鍵,可以看到輸出如下圖:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

ls是list的縮寫,list是英語“列舉,列出”的意思。所以ls命令用於列出當前目錄下的檔案和目錄。

不好意思,通常如果你剛裝了Linux系統的話,是不可能有這麼多檔案的,小編因為學程式設計時在家目錄下建立了上百個資料夾,所以一頁顯示不全。

如果ls命令沒有返回任何資訊,那麼就說明當前目錄下什麼也沒有。

看到了嗎?命令其實很簡單,就是不包含空格的字母組合。有時候是一個完整的英語單詞,有時候是一個英語單詞的一部分,有時候是幾個單詞連在一起。但是有很多時候,我們不僅僅只是輸入一個命令,這個命令後還要跟一些引數。

引數


引數就是寫在命令之後的一些補充選項。命令和引數之間有空格隔開。例如這樣:

command parameters複製程式碼

上面的command和parameter分別是英語“命令”和“引數”的意思,只是演示一下格式,並不是說真有command這個命令和parameters這個引數。

引數裡可以包含多個引數,由空格隔開,也可以包含數字,字母,等等。可以說,引數沒有固定的格式,但是一般來說還是遵循一定的規範的。

短引數(一個字母)

最常用的引數形式就是一個短橫線後接一個字母。例如:

command -p複製程式碼

如果我們要一次加好幾個短引數,可以用空格隔開,例如:

command -p -a -T -c複製程式碼

多個短引數也可以合併在一起,例如上面的命令等價於:

command -paTc複製程式碼

請注意:引數的字母的大小寫是有區別的,大寫的T和小寫的t通常表示不同意思。

我們來舉一個實際的例子,比如我們用下面的命令來演示:

ls -a複製程式碼

輸入之後回車,就會顯示如下圖資訊:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

這個引數中的a是英語all的縮寫,表示“全部”,所以 ls -a就是列出當前目錄下所有檔案,包括隱藏檔案。

LInux的隱藏檔案是以一個點開頭的,如 .bashrc 。如果此時我們的目錄是家目錄,那麼應該會有不少隱藏檔案,大多是配置檔案。

長引數(多個字母)

長引數沒有短引數那麼常用,但也是很有用的。短引數是以一個短橫線開始,而長引數是以兩個短橫線開始的。例如:

command --parameter複製程式碼

如果有多個長引數,是不能像多個短引數那樣合併寫的。而是隻能以空格隔開,例如:

command --parameter1 --parameter2複製程式碼

當然我們也可以組合使用短引數和長引數,例如:

command -paTc --parameter1 --parameter2複製程式碼

有時候,同一個意義的引數有短引數和長引數兩種形式,效果是一樣的,可以任選哪一種。

例如 ls -a 和 ls --all 是一個作用,都是列出當前目錄下的所有檔案,包括隱藏檔案。

引數的值

有一些引數你還需要給它賦一個值才行。而且短引數和長引數的賦值的方式不盡相同。

例如,短引數賦值,通常是這樣的:

command -p 10複製程式碼

表示把10賦值給p引數。

如果是長引數,則一般是這樣賦值:

command --parameter=10複製程式碼

長引數的方式更加容易理解,但是不如短引數那麼簡潔。

其他引數

正如我們說過的,引數的形式沒有絕對的準則。我們上面給出的規則是一般的,有些命令的引數格式可能是我們沒怎麼見過的。

有些引數就不一樣,而且取決於命令。例如對於 ls 這個命令,假如後面帶了一個引數,這個引數是一個目錄的路徑名的話,那麼就會列出此目錄下的檔案。

如下圖:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

我在 ~ 目錄下執行了 ls linux_c 這個命令,因此列出了子目錄 linux_c(這是我自己建立的資料夾) 中的檔案。

如何找到一個命令


Linux的命令千千萬,查詢起來實在難~

那麼如何在“芸芸眾令”中找到你想要的那個命令呢?小編有時候也會想不起來一個命令到底是如何拼寫的。

但是幸好,Linux的開發者們很有先見之明,早就為我們準備了對策,就是用Tab鍵來補全命令!

說實話,小編以前學Linux,學了有段時間了,還不知道Tab鍵的這個妙用。後來還是一個Linux高手演示給我看的,當時就震驚了,怎麼還有如此好用的技能。“我讀書少,你可不要騙我~”, 小編當時的內心也是醉醉的。

而且Tab鍵不僅可以補全命令,還可以補全檔名,路徑名,絕對讓你效率倍增。例如,我輸入 da 這兩個字母,然後按兩次Tab鍵(記得不是按一次Tab鍵,是按兩次),它將為我展示所有可能的補全選項,我們可以看到只有兩個可能的選項:

dash和date兩個命令。如下圖:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

此時,如果我繼續輸入,變為dat。再按兩次Tab鍵,那麼它就為我自動補全成了date了。因為只有一個可能了。

又例如,我用ls命令,後跟一個目錄名,我可以寫目錄名的幾個首字母,然後用Tab來幫我補全,有很長的路徑名時極為方便:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

如果按Tab鍵N次一直沒有顯示什麼選項,那說明不存在這幾個字母開頭的命令或路徑。

有時候我們的命令候選項會太多,例如,我們來測試一下。假如,我不輸入任何字元,而只是按兩次Tab鍵,那麼終端將會提示我所有可能的命令選項,如下圖:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

是不是有點嚇人,因為我的系統裡竟然有3408個命令。不同的人的系統裡命令的數目是不一樣的,取決於你在系統裡安裝了多少軟體。安裝的軟體越多,可供選用的命令就越多。

我按下兩次Tab鍵後,終端就詢問我:Display all 3408 possibilities ? (y or n)

翻出來的意思就是“顯示所有3408個可能的選項嗎?(輸入y(yes的縮寫)表示確定,輸入n(no的縮寫)表示否決)”。

我們可以輸入y,按Enter鍵,然後它就真的為我們顯示了3408個命令。當然不是在一頁中顯示,分了很多頁。

我們如何瀏覽這些頁面呢?

  • 空格鍵:用於跳到下一頁

  • Enter鍵:用於跳到下一行

  • q :用於退出列表

一般情況下,我們是輸入n,回車的,就什麼都不顯示了。畢竟要在3408個命令中找一個命令簡直是大海撈針麼。

命令的歷史記錄


很多時候,我們都需要找回我們之前輸入的命令。

不僅是因為有時我們忘了那句命令是什麼,更重要的是,假如這句命令很長,我不想再花時間重新輸入一遍了。那麼顯示命令的歷史就很有用了。

有兩個按鍵是很常用的:

  • 向上鍵:按時間順序向前查詢用過的命令,每按一次就前進一個命令。

  • 向下鍵:按時間順序向後查詢用過的命令,每按一次就前進一個命令。

如果你覺得用上下鍵每次進一個命令太花時間,那麼你也可以用查詢的方法:

Ctrl + R : 用於查詢使用過的命令。

例如,我查詢date這個命令,就可以用Ctrl + R,按回車,然後只輸入da,因為我之前使用過date這個命令,它就為我自動補全了date命令,如下圖:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

history命令


history這個命令,用於列出之前使用過的所有命令,如下圖:

Linux 探索之旅 | 第二部分第二課:命令列,世界盡在掌握

可以看到,系統自動儲存了小編輸入過的2003條命令,最近的一條命令正是history。

history命令可以方便我們瞭解自己之前輸入過那些命令。

一些實用的快捷鍵


Linux系統不但提供了N多的命令,而且其鍵盤快捷鍵組合也是大大滴多。練好了快捷鍵,足以讓你鍵盤飛起來,就是這個feel,倍兒爽。想象自己是《駭客帝國》的Neo。

下面列舉一些經常使用的快捷鍵:

  • Ctrl + L 用於清理終端的內容,就是清屏的作用。其實clear命令也有同樣效果,但是你不覺得Ctrl + L 的按鍵是比輸入clear這五個字母更快速嗎?

  • Ctrl + D 給終端傳遞EOF (End Of File,檔案結束符),在執行程式時很有用,有些程式我們需要在接收到EOF輸入時結束,那麼這個快捷鍵就可以派上用場了。如果你在命令列提示符後什麼也不輸入的情況下直接按下這組快捷鍵,那麼就會關閉當前的終端。

  • Shift + PgUp 用於向上滾屏,與滑鼠的滾輪向上滾屏是一個效果,但豈不是很方便嗎?

  • Shift + PgDn 用於向下滾屏,與滑鼠的滾輪向下滾屏是一個效果。

下面的快捷鍵在你編輯一條比較長的命令時很有用:

  • Ctrl + A 游標跳到一行命令的開頭。一般來說,Home鍵有相同的效果。

  • Ctrl + E 游標跳到一行命令的結尾。一般來說,End鍵有相同的效果。

  • Ctrl + U 刪除所有在游標左側的命令字元。

  • Ctrl + K 刪除所有在游標右側的命令字元。

  • Ctrl + W 刪除游標左側的一個“單詞”,這裡的“單詞”指的是用空格隔開的一個字串。例如 -a 就是一個“單詞”。

  • Ctrl + Y 貼上用Ctrl + U, Ctrl + K或Ctrl + W“刪除”的字串,有點像“剪下-貼上”。

當然了,好的快捷鍵絕不止這些。

總結


  1. Linux的終端在每一行的開頭處會有一個被稱為“命令列提示符”的字串,一般這個提示符包含了你的使用者名稱,你的電腦的名字和你所在的路徑。這個提示符的格式可以自行設定。

  2. 我們在命令提示符後面輸入命令,告訴電腦我們想要它完成的任務。

  3. 命令可以單獨使用,也可以帶引數。引數就好比選項,可以改變命令的行為。

  4. 命令的引數通常是由一個短橫和一個字母組成,例如 -h ; 也可以由兩個短橫和幾個字母組成,例如 --help 。

  5. 在輸入了一個命令的首字母或前幾個字母后,我們可以用Tab鍵來補全命令,非常方便。

  6. 可以用鍵盤上的上下鍵來前後翻看使用過的命令,也可以用Ctrl + R這組快捷鍵來查詢使用過的命令。

  7. 在終端的操作中,有很多常用的快捷鍵組合。瞭解或記住一些快捷鍵將使我們效率倍增。

第二部分第三課預告


今天的課就到這裡,一起加油吧!

下一課我們學習:Linux探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你


微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟體工程師。
我的簡介
我的經歷
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標杆直跑”

相關文章