遷移到 Linux:命令行環境
這是關於遷徙到 Linux 系列的第四篇文章了。如果您錯過了之前的內容,可以回顧我們之前談到的內容 新手之 Linux、文件和文件系統、和 圖形環境。Linux 無處不在,它可以用於運行大部分的網路伺服器,如 Web、email 和其他伺服器;它同樣可以在您的手機、汽車控制台和其他很多設備上使用。現在,您可能會開始好奇 Linux 系統,並對學習 Linux 的工作原理萌發興趣。
在 Linux 下,命令行非常實用。Linux 的桌面系統中,儘管命令行只是可選操作,但是您依舊能看見很多朋友開著一個命令行窗口和其他應用窗口並肩作戰。在互聯網伺服器上和在設備中運行 Linux 時(LCTT 譯註:指 IoT),命令行通常是唯一能直接與操作系統交互的工具。因此,命令行是有必要了解的,至少應當涉獵一些基礎命令。
在命令行(通常稱之為 Linux shell)中,所有操作都是通過鍵入命令完成。您可以執行查看文件列表、移動文件位置、顯示文件內容、編輯文件內容等一系列操作,通過命令行,您甚至可以查看網頁中的內容。
如果您在 Windows(CMD 或者 PowerShell) 上已經熟悉關於命令行的使用,您是否想跳轉到「Windows 命令行用戶」的章節上去?先閱讀這些內容吧。
導航
在命令行中,這裡有一個當前工作目錄(文件夾和目錄是同義詞,在 Linux 中它們通常都被稱為目錄)的概念。如果沒有特別指定目錄,許多命令的執行會在當前目錄下生效。比如,鍵入 ls
列出文件目錄,當前工作目錄的文件將會被列舉出來。看一個例子:
$ ls
Desktop Documents Downloads Music Pictures README.txt Videos
ls Documents
這條命令將會列出 Documents
目錄下的文件:
$ ls Documents
report.txt todo.txt EmailHowTo.pdf
通過 pwd
命令可以顯示當前您的工作目錄。比如:
$ pwd
/home/student
您可以通過 cd
命令改變當前目錄並切換到您想要抵達的目錄。比如:
$ pwd
/home/student
$ cd Downloads
$ pwd
/home/student/Downloads
路徑中的目錄由 /
(左斜杠)字元分隔。路徑中有一個隱含的層次關係,比如 /home/student
目錄中,home 是頂層目錄,而 student
是 home
的子目錄。
路徑要麼是絕對路徑,要麼是相對路徑。絕對路徑由一個 /
字元打頭。
相對路徑由 .
或者 ..
開始。在一個路徑中,一個 .
意味著當前目錄,..
意味著當前目錄的上級目錄。比如,ls ../Documents
意味著在此尋找當前目錄的上級名為 Documents
的目錄:
$ pwd
/home/student
$ ls
Desktop Documents Downloads Music Pictures README.txt Videos
$ cd Downloads
$ pwd
/home/student/Downloads
$ ls ../Documents
report.txt todo.txt EmailHowTo.pdf
當您第一次打開命令行窗口時,您當前的工作目錄被設置為您的家目錄,通常為 /home/<您的登錄名>
。家目錄專用於登錄之後存儲您的專屬文件。
環境變數 $HOME
會展開為您的家目錄,比如:
$ echo $HOME
/home/student
下表顯示了用於目錄導航和管理簡單的文本文件的一些命令摘要。
搜索
有時我們會遺忘文件的位置,或者忘記了我要尋找的文件名。Linux 命令行有幾個命令可以幫助您搜索到文件。
第一個命令是 find
。您可以使用 find
命令通過文件名或其他屬性搜索文件和目錄。舉個例子,當您遺忘了 todo.txt
文件的位置,我們可以執行下面的代碼:
$ find $HOME -name todo.txt
/home/student/Documents/todo.txt
find
程序有很多功能和選項。一個簡單的例子:
find <要尋找的目錄> -name <文件名>
如果這裡有 todo.txt
文件且不止一個,它將向我們列出擁有這個名字的所有文件的所有所在位置。find
命令有很多便於搜索的選項比如類型(文件或是目錄等等)、時間、大小和其他一些選項。更多內容您可以同通過 man find
獲取關於如何使用 find
命令的幫助。
您還可以使用 grep
命令搜索文件的特定內容,比如:
grep "01/02/2018" todo.txt
這將為您展示 todo
文件中 01/02/2018
所在行。
獲取幫助
Linux 有很多命令,這裡,我們沒有辦法一一列舉。授人以魚不如授人以漁,所以下一步我們將向您介紹幫助命令。
apropos
命令可以幫助您查找需要使用的命令。也許您想要查找能夠操作目錄或是獲得文件列表的所有命令,但是您不知道該運行哪個命令。您可以這樣嘗試:
apropos directory
要在幫助文檔中,得到一個於 directiory
關鍵字的相關命令列表,您可以這樣操作:
apropos "list open files"
這將提供一個 lsof
命令給您,幫助您列出打開文件的列表。
當您明確知道您要使用的命令,但是不確定應該使用什麼選項完成預期工作,您可以使用 man
命令,它是 manual 的縮寫。您可以這樣使用:
man ls
您可以在自己的設備上嘗試這個命令。它會提供給您關於使用這個命令的完整信息。
通常,很多命令都能夠接受 help
選項(比如說,ls --help
),列出命令使用的提示。man
頁面的內容通常太繁瑣,--help
選項可能更適合快速瀏覽。
腳本
Linux 命令行中最貼心的功能之一是能夠運行腳本文件,並且能重複運行。Linux 命令可以存儲在文本文件中,您可以在文件的開頭寫入 #!/bin/sh
,後面的行是命令。之後,一旦文件被存儲為可執行文件,您就可以像執行命令一樣運行腳本文件,比如,
--- contents of get_todays_todos.sh #!/bin/sh
todays_date=`date +"%m/%d/%y"`
grep $todays_date $HOME/todos.txt
腳本可以以一套可重複的步驟自動化執行特定命令。如果需要的話,腳本也可以很複雜,能夠使用循環、判斷語句等。限於篇幅,這裡不細述,但是您可以在網上查詢到相關信息。
Windows 命令行用戶
如果您對 Windows CMD 或者 PowerShell 程序很熟悉,在命令行輸入命令應該是輕車熟路的。然而,它們之間有很多差異,如果您沒有理解它們之間的差異可能會為之困擾。
首先,在 Linux 下的 PATH
環境與 Windows 不同。在 Windows 中,當前目錄被認為是該搜索路徑(PATH
)中的第一個文件夾,儘管該目錄沒有在環境變數中列出。而在 Linux 下,當前目錄不會明確的放在搜索路徑中。Linux 下設置環境變數會被認為是風險操作。在 Linux 的當前目錄執行程序,您需要使用 ./
(代表當前目錄的相對目錄表示方式) 前綴。這可能會搞糊塗很多 CMD 用戶。比如:
./my_program
而不是
my_program
另外,在 Windows 環境變數的路徑中是以 ;
(分號) 分割的。在 Linux 中,由 :
分割環境變數。同樣,在 Linux 中路徑由 /
字元分隔,而在 Windows 目錄中路徑由 `` 字元分割。因此 Windows 中典型的環境變數會像這樣:
PATH="C:Program Files;C:Program FilesFirefox;"
而在 Linux 中看起來像這樣:
PATH="/usr/bin:/opt/mozilla/firefox"
還要注意,在 Linux 中環境變數由 $
拓展,而在 Windows 中您需要使用百分號(就是這樣: %PATH%
)。
在 Linux 中,通過 -
使用命令選項,而在 Windows 中,使用選項要通過 /
字元。所以,在 Linux 中您應該:
a_prog -h
而不是
a_prog /h
在 Linux 下,文件拓展名並沒有意義。例如,將 myscript
重命名為 myscript.bat
並不會因此而變得可執行,需要設置文件的執行許可權。文件執行許可權會在下次的內容中覆蓋到。
在 Linux 中,如果文件或者目錄名以 .
字元開頭,意味著它們是隱藏文件。比如,如果您申請編輯 .bashrc
文件,您不能在家目錄中找到它,但是它可能真的存在,只不過它是隱藏文件。在命令行中,您可以通過 ls
命令的 -a
選項查看隱藏文件,比如:
ls -a
在 Linux 中,普通的命令與 Windows 的命令不盡相同。下面的表格顯示了常用命令中 CMD 命令和 Linux 命令行的差異。
via: https://www.linux.com/blog/learn/2018/1/migrating-linux-command-line
作者:John Bonesio 譯者:CYLeft 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive