掌握基本的命令行,邁向 Linux 第一步

當年我接觸計算機時,微軟的 Windows 系統還沒有出現,所使用的操作系統是一張 5.25 吋軟盤(容量 1.2MB)就能裝下的 DOS 系統,自然沒什麼圖形界面。所以,我是從學習各種命令,開始進入計算機世界的。拜技術的飛速發展所賜,Windows 很快取代 DOS,人們再也不用記那些繁雜的計算機命令,通過點點鼠標就可以操作電腦。Windows系統其實也帶了一個命令行程序(包括最新的 Windows 10 系統),估計絕大多數人從來都沒有打開過。

然而,在這個世界上,Windows 系統並沒有主宰整個電腦世界,特別是對於程序員羣體來說,Linux 系統和蘋果的 Mac OS 系統也得到廣泛使用。特別是人工智能、系統開發、雲計算等領域,Linux 系統下環境的配置反而更簡單。我經常會建議程序員嘗試用 Linux 系統作爲軟件開發環境。現代 Linux 系統其實也有着非常友好的 GUI(圖形用戶界面),甚至有的 Linux 發行版本借鑑了 Mac OS,有着非常炫酷的用戶界面。但對於程序員而言,不斷改進並提高生產力是第一要務,這個時候使用命令行反而更加高效。

說起來記住各種命令,然後通過簡陋的控制檯用戶接口輸入命令,似乎有點反人性。但這是 Linux 系統的精髓。其實 Mac OS 雖然最早擁抱 GUI,但它也有強大的命令行系統。Windows 系統似乎也意識到這個需求,最近發佈了一款全新的命令行應用程序:Windows Terminal。有數據表明,相對於使用鼠標在 GUI 中點擊,在終端中完成完全相同的工作,速度更快。江湖中一直有傳說,一流的程序員只使用 Vim 或 Emacs,編程完全不用鼠標,只聽見啪啪啪的鍵盤聲。我們也不要把自己當作大神,只用記一些簡單的命令,爲日常工作提升一點效率。下面我就總結一下最基礎的 Linux 命令,助你進入 Linux 世界。

1. pwd

注意,這個命令並不是 password 的縮寫,而是 print working directory 的縮寫。pwd命令輸出當前工作目錄的完整系統路徑。

alex@alex-MS-7C22:~$ pwd
/home/alex

這個命令如此簡單,也是最常用的命令之一,通常情況下我們並不需要傳遞命令行參數。如果你要查看完整的命令行參數,請輸入:

alex@alex-MS-7C22:~$ man pwd

:對後面的命令也是如此,如果你要了解更詳細的命令用法,都可以使用 man + <命令> 查看幫助。

2. cd

這也是最常用的命令之一。cd 是 change directory 的縮寫,顧名思義,此命令用來更改當前工作目錄。

alex@alex-MS-7C22:~$ cd Downloads/
alex@alex-MS-7C22:~/Downloads$

當然我們也可以進入到其它的工作目錄,而且可以進入多個層級裏面。

在以下示例中,我們將當前目錄切換至 Pictures 文件夾中的 myimages 子文件夾。

alex@alex-MS-7C22:~/Downloads$ cd ~/Pictures/myimages
alex@alex-MS-7C22:~/Pictures/myimages$

在目錄操作中,有幾個特定的符號代表某個目錄。

  • ~ : 用戶主目錄,通常爲 /home/,比如在第一個命令示例中,pwd顯示 ~ 的全路徑爲 /home/alex

  • .. : 父目錄,比如執行如下命令,將當前目錄切換到父目錄的父目錄。

alex@alex-MS-7C22:~/Pictures/myimages$ cd ../..
alex@alex-MS-7C22:~$
  • . : 當前目錄。

3. ls

ls 是 list 的縮寫,此命令列出目錄中的所有文件。您可以指定要列出文件的目錄。如果未指定目錄,則使用當前工作目錄。

alex@alex-MS-7C22:~/Pictures$ ls
myimages  Selection_001.png  Selection_008.png  Selection_009.png  Selection_010.png  tmp

該命令有幾個非常有用的選項。例如 -a 選項,可以列出隱藏文件。-l 選項則可以顯示更多的文件信息,其中包含文件大小和權限等。更酷的是,這些選項可以組合起來使用:

alex@alex-MS-7C22:~/Pictures$ ls -la
total 244
drwxr-xr-x  4 alex alex  4096 5月  11 09:31 .
drwxr-xr-x 65 alex alex  4096 5月  30 06:35 ..
drwxrwxr-x  2 alex alex 24576 12月 11 09:26 myimages
-rw-rw-r--  1 alex alex 30180 11月 11  2019 Selection_001.png
-rw-rw-r--  1 alex alex 64302 11月 20  2019 Selection_008.png
-rw-rw-r--  1 alex alex 92592 11月 25  2019 Selection_009.png
-rw-rw-r--  1 alex alex 19035 11月 25  2019 Selection_010.png
drwxrwxr-x  2 alex alex  4096 1月   2 10:08 tmp

4. cp 和 mv

cp 命令是 copy 的縮寫,用來複制文件和目錄。第一個參數(文件或目錄)是源,第二個參數是目標。在以下示例中,我們將圖像複製到 Downloads 文件夾。

alex@alex-MS-7C22:~/Pictures$ cp Selection_001.png ~/Downloads/

如果是複製目錄,請加上 -r 選項進行遞歸複製。

複製文件和目錄時有很多選項。例如,我們可以將具有特定擴展名的所有文件複製到目錄中。以下示例將所有帶有 png 擴展名的文件複製到 Downloads 文件夾。

alex@alex-MS-7C22:~/Pictures$ cp *.png ~/Downloads/

mv 命令是 move 的縮寫,與 cp 命令的工作原理類似,只是用於移動(而不是複製)文件和目錄。需要注意的是,在移動目錄及子目錄時,不帶有 -r 選項。要想瀏覽可用於 mv 命令的所有選項,只需鍵入:

man mv

5. mkdir 和 touch

mkdir 是 make directory 的縮寫,該命令用於創建目錄。此命令需要一個參數:新目錄的名稱。要驗證命令是否成功執行,可以使用 ls 命令查看。

alex@alex-MS-7C22:~/Pictures$ mkdir my-new-folder
alex@alex-MS-7C22:~/Pictures$ ls
myimages  my-new-folder  Selection_001.png  Selection_008.png  Selection_009.png  Selection_010.png  tmp

創建文件與創建目錄一樣容易。這個時候需要用到 touch 命令來創建一個新文件。

需要注意,所創建的文件爲空。如果要驗證命令是否已成功執行,請使用 ls 命令。

alex@alex-MS-7C22:~/Pictures$ touch myfile.txt
alex@alex-MS-7C22:~/Pictures$ ls -la
total 248
drwxr-xr-x  5 alex alex  4096 6月   3 15:24 .
drwxr-xr-x 65 alex alex  4096 5月  30 06:35 ..
-rw-r--r--  1 alex alex     0 6月   3 15:24 myfile.txt
drwxrwxr-x  2 alex alex 24576 12月 11 09:26 myimages
drwxr-xr-x  2 alex alex  4096 6月   3 15:23 my-new-folder
-rw-rw-r--  1 alex alex 30180 11月 11  2019 Selection_001.png
-rw-rw-r--  1 alex alex 64302 11月 20  2019 Selection_008.png
-rw-rw-r--  1 alex alex 92592 11月 25  2019 Selection_009.png
-rw-rw-r--  1 alex alex 19035 11月 25  2019 Selection_010.png
drwxrwxr-x  2 alex alex  4096 1月   2 10:08 tmp

6. rmdir 和 rm

就像有單獨的用於創建文件和目錄的命令,刪除文件和目錄也有兩個單獨的命令。

要刪除目錄,可以使用 rmdir 命令,該命令是 remove directory 的縮寫。但是,此命令只能刪除空目錄。

alex@alex-MS-7C22:~/Pictures$ rmdir my-new-folder

rm 命令更強大。您可能已經猜到它是 remove 的簡寫。rm 命令刪除指定的每個文件。

alex@alex-MS-7C22:~/Pictures$ rm Selection_001.png

它也可以用來刪除目錄,但需要帶 -r 選項,它將遞歸刪除匹配的目錄、它們的子目錄以及它們包含的所有文件。

alex@alex-MS-7C22:~/Pictures$ ls tmp/
IMG_20191205_084245-01.jpeg  IMG_20191211_081050-01.jpeg  IMG_20191222_082026-01.jpeg  IMG_20200101_090356-01.jpeg  mmexport1573967495194-01.jpeg
IMG_20191208_084017-01.jpeg  IMG_20191212_215942-01.jpeg  IMG_20191231_212811-01.jpeg  IMG_20200101_091823-01.jpeg  mmexport1573967502382_mr1573967801990-01.jpeg
IMG_20191208_084409-01.jpeg  IMG_20191213_203823-01.jpeg  IMG_20191231_213325-01.jpeg  IMG_20200101_092057-01.jpeg  mmexport1576987906954-01.jpeg
IMG_20191208_173142-01.jpeg  IMG_20191213_204007-01.jpeg  IMG_20191231_215049-01.jpeg  IMG_20200101_092254-01.jpeg
alex@alex-MS-7C22:~/Pictures$ rm -r tmp/

爲了忽略不存在的文件並且在刪除之前永遠不會提示您,可以使用 -f 選項。

7. cat, tail 和 head

在讀取文件內容時,有幾種選擇。第一個選項是cat命令(concatenate的縮寫),其主要作用是顯示文件的內容。

alex@alex-MS-7C22:~/Pictures$ cat myfile.txt
hello world!

注意,cat命令會顯示整個文件的內容。如果文件內容特別多,可能只需要顯示文件的前 n 行或最後 n 行,這時可用上 tail 和 head 命令。tail 命令輸出文件的最後 10 行,而 head 命令輸出文件的前 10 行。

alex@alex-MS-7C22:~/Pictures$ tail helloworld.txt
hello world 4!
hello world 5!
hello world 6!
hello world 7!
hello world 8!
hello world 9!
hello world 10!
hello world 11!
hello world 12!
hello world 13!

也可以使用 -n 選項指定要輸出的行數。

alex@alex-MS-7C22:~/Pictures$ head -5 helloworld.txt
hello world 1!
hello world 2!
hello world 3!
hello world 4!
hello world 5!

8. grep

grep 命令是 global regular expression print 的縮寫,用於搜索文本。它將在文件中檢索指定的字符串,並以特定的格式顯示結果。

這個命令非常強大,前提是你要懂得正則表達式。如果不懂得也沒有關係,可以先從基本的查找開始。

假定我們有一個包含所有國家/地區名稱的文件。我們要檢查 Netherlands 一詞是否在該文件中。請注意,默認情況下,grep區分大小寫。

我們傳遞的第一個參數是要查找的單詞,第二個參數是我們要搜索的文件。

alex@alex-MS-7C22:~/Pictures$ grep Netherlands countries.txt
Netherlands

如果不想區分大小寫,可以使用 -i 選項。這樣,無論您要查找的是 BeL、bel還是 BEL,都一樣對待。

alex@alex-MS-7C22:~/Pictures$ grep -i BeL countries.txt
Belarus
Belgium
Belize

注意,在上面的示例中,我們看到 grep 將整個匹配行輸出到終端。使用 -c 選項可以打印匹配的行數。

alex@alex-MS-7C22:~/Pictures$ grep -ic BeL countries.txt
3

9. find

find 命令用於快速查找文件或目錄。假設我們需要找到當前目錄中的所有CSS文件,就可以使用 find 命令執行此操作。

alex@alex-MS-7C22:~/Pictures$ find . -name "*.css"
./style.css

請注意,find 命令還會搜索所有子目錄。

小結

命令行往往是 Windows 程序員轉向 Linux 的一個攔路虎,其實只要掌握了一些基礎的命令,使用起來並不是那麼難。況且現在 Linux 的 GUI 已經非常易用。Linux 系統唯一的缺點是有很多娛樂、遊戲方面的應用程序沒有開發 Linux 版本,轉過來想,沒有那些 app,我們是不是更能專注於軟件開發上面呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章