Linux的命令是很重要的工具,也往往是初學(xué)者最大的瓶頸。有朋友用了很長時間的Linux圖形界面,基本不使用命令行輸入命令執(zhí)行,所以裝的Linux最終成了擺設(shè)。這里總結(jié)一些命令行下常使用的命令,希望能有用。
什么是命令
我們通常所說的Linux命令行是運行在終端(terminal)的shell (閱讀Linux架構(gòu)以了解什么是shell以及它在Linux系統(tǒng)中的位置)
所謂的命令,是我們在命令行輸入的一串字符。shell負(fù)責(zé)理解并執(zhí)行這些字符串。shell命令可以分為如下幾類 1)可執(zhí)行文件(executable file) 2)shell內(nèi)建函數(shù)(built-in function) 3) 別名(alias)??蓤?zhí)行文件為經(jīng)過編譯的程序文件,我們輸入這些文件的路徑來讓shell運行,比如$/bin/ls。有些可執(zhí)行文件被放在特殊的目錄(默認(rèn)路徑)下面,從而使得操作系統(tǒng)可以通過文件名找到,而不用總是輸入該文件的絕對路徑(absolute path)。比如說$ls(實際上,shell自動幫我們補齊ls的路徑)。隨后,這些可執(zhí)行文件中包含的程序運行,并成為進(jìn)程。shell的內(nèi)建函數(shù)與上面類似,只是其對應(yīng)的程序被保存在shell的內(nèi)部。別名是指我們給以上兩種命令起一個簡稱,以便減少輸入的工作量。
我們可以通過type命令來了解命令的類型:
$type ls/p>
p>$type cd
命令的構(gòu)成
當(dāng)我們在命令行輸入命令的時候,往往由一下方式構(gòu)成:
$ls -l /home
整個一行命令由空格分為三個部分(注意, $是自動出現(xiàn)的提示符,有時還會在此之前出現(xiàn)計算機(jī)名)。第一個為命令的名字ls,這個命令ls的功能是列出目錄中所有文件,第二個-l是關(guān)鍵字,它告訴ls要列出每個文件的詳細(xì)信息,第三個/home為參數(shù),表示我所要列出的目錄是/home。實際上關(guān)鍵字是一種特殊的參數(shù),大部分情況下用來開關(guān)程序的某些特殊功能 (用來選擇做出的是拿鐵咖啡還是黑咖啡)。而參數(shù)是用來傳遞給程序的一般的變量。ls經(jīng)過處理之后,將在終端輸出/home下面包含的各個文件名 (該文件系統(tǒng)見:https://www.jb51.net/LINUXjishu/214042.html):
vamei another
關(guān)鍵字和參數(shù)可以不止有一個,比如:
$ls -l -a /home /bin/p>
p>$ls -la /home /bin
(上面兩個命令等價)
列出/home和/bin目錄下的文件,-a表示列出全部文件(即使是隱藏文件也要列出), -l表示列出每個文件的詳細(xì)信息。
(如果命令沒有被放在默認(rèn)路徑中,你也可以輸入絕對路徑來執(zhí)行)
回憶Linux文件管理背景知識 ,我們知道,每個文件能否被執(zhí)行要根據(jù)用戶所擁有的權(quán)限。命令實際上是可執(zhí)行文件,也是如此。系統(tǒng)相關(guān)的命令,或者某個命令中的定義的操作,往往會要求超級用戶root的身份才能使用。如果你是用戶vamei,那么你就無法使用這些命令。但以root的身份登錄是個糟糕的想法。為了解決這一矛盾,你可以以vamei的身份登錄,但在執(zhí)行命令之前加上sudo, 以便臨時以root的身份執(zhí)行某條命令。比如$sudo ls .
對于大多數(shù)的shell來說,都有命令補齊的功能。當(dāng)你在的后面輸入命令的一部分時,比如rmdir的rmd的時候,按Tab鍵,Linux會幫你打剩下的字符,補充成為rmdir。不止是命令,如果你輸入的是文件名,Linux也可以幫你補齊。比如說,ls a.txt。當(dāng)你輸入到lsa.t的時候,按Tab鍵,Linux會幫你補齊該文件名,成為ls a.txt。當(dāng)然,這樣做的前提是你輸入到rmd的時候,默認(rèn)路徑下能和它相符的命令只有一個rmdir了。如果有多個相符的命令,連按兩下Tab,Linux會顯示所有的相符的命令。
多使用命令的好處
實際上,許多命令的功能都可以通過圖形化界面來實現(xiàn),學(xué)習(xí)這些命令的意義在哪里呢?
在UNIX發(fā)育的大部分歷史上,用戶都是通過shell來工作的。大部分命令都已經(jīng)經(jīng)過了幾十年的發(fā)展和改良,功能強大,性能穩(wěn)定。Linux繼承自UNIX,自然也是如此。此外Linux的圖形化界面并不好,并不是所有的命令都有對應(yīng)的圖形按鈕。更別說在圖形化界面崩潰的情況下,你就要靠shell輸入命令來恢復(fù)計算機(jī)了。
命令本身是一個函數(shù) (function),是一個小的功能模塊。當(dāng)我們想要讓計算機(jī)做很復(fù)雜的事情 (比如說: 在晚上12:00下載某個頁面的所有鏈接,然后復(fù)制到移動硬盤)的時候,不斷地去按各個圖形化按鈕并不是個很聰明的事情 (1. 要點很多下,2. 必須等到12:00)。我們通常是通過shell編程來實現(xiàn)這樣一些復(fù)雜任務(wù),這時,就可以把命令作為函數(shù),嵌入到我們的shell程序中, 從而讓不同命令協(xié)同工作 (比如使用date來查詢時間,再根據(jù)時間來使用wget下載等等)。
如何了解一個陌生的命令?
有一些命令可以用來了解某個命令本身的情況,比如這個命令的絕對路徑。
$which ls
which 在默認(rèn)路徑中搜索命令,返回該命令的絕對路徑。
$whereis ls
whereis 在相對比較大的范圍搜索命令,返回該命令的絕對路徑。
$whatis ls
whatis 用很簡短的一句話來介紹命令。
$man ls
man 查詢簡明的幫助手冊。對于大部分的Linux自帶的命令來說,當(dāng)作者編寫它的時候,都會帶有一個幫助文檔,告訴用戶怎么使用這個命令。
(man可以說是我們了解Linux最好的百科全書,它不但可以告訴你Linux自帶的命令的功能,還可以查詢Linux的系統(tǒng)文件和系統(tǒng)調(diào)用。如果想要深入學(xué)習(xí)Linux,就必須要懂得如何用man來查詢相關(guān)文檔。)
$info ls
info 查詢更詳細(xì)的幫助信息
此外,在shell中,你還可以用向上箭頭來查看之前輸入運行的命令。
你也可以用
$history
來查詢之前在命令行的操作。
當(dāng)一個命令運行時,你中途想要停止它時,可以用Ctrl + c。如果你只是想暫時停止,使用Ctrl + z。具體機(jī)制與信號(signal)有關(guān),我們將在以后介紹。
總結(jié)
命令行: 使用shell解釋輸入的字符串,以運行程序
type
sudo
which, whereis, whatis, man, info
使用Tab自動補齊,向上箭頭查詢歷史,history
Ctrl + c, Ctrl + z