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