所有命令的參數都是使用空格分隔的,例如ls -l
。在這里ls即為命令名,-l
為此命令的參數,在ls
與-l
之間有一個空格,但是在-l
內部不能有空格。
由于Linux繼承于Unix,而Unix操作系統在當初設計的時候,鍵盤并不可靠,而且敲鍵盤比較費勁(比如容易卡住),因此大部分命令都非常簡短,一般是完整的英文單詞去掉元音字母(aeiou)后的縮寫,這是一個歷史問題。
文件與目錄
整個操作系統的磁盤都被劃分為很多個目錄(directory)或稱文件夾(folder),還有文件(file)。每個目錄下還可以有子目錄(sub direcotory)與文件,這樣就形成了一個樹狀結構,樹根為/
,被稱為根目錄(root directory)。
在任何時候,你都有一個當前目錄(Working Directory),你所有的操作都是相對于當前目錄做出的,以當前目錄為基準的目錄名或者文件名叫做相對目錄。例如若你的當前目錄是/home/alex,在/home/alex目錄下有一個叫Public的子目錄,還有一個叫log.txt的文件,則Public與log.txt就是相對目錄名與相對文件名。
每個目錄與文件都有一個全路徑(full path)名,這個全路徑以/開頭,遍歷整個目錄,直到最終的目錄名或者文件名為止。例如在Linux中,/下有etc、home、usr、lib等子目錄,而home目錄下有alex目錄,alex目錄下有Public目錄。則在這里Public的全路徑名就是/home/alex/Public
,注意在這里必須大小寫一致。
當然也有可能在其它的名叫Public的目錄或者文件,但是它們的全路徑肯定是不一樣的。就像在中國有一個叫Alex的人,在美國也有一個叫Alex的人,他們可以分別稱為中國的Alex與美國的Alex,這就是他們的全路徑 ;)。全路徑又叫絕對路徑(absolute path)。
在Linux里,每個用戶都有一個家目錄(home directory),一般情況下用戶的家目錄就是/home目錄下相應的用戶名,例如alex用戶的家目錄就是/home/alex。
大部分文件都有擴展名(extension name),擴展名即為文件名最后一個點號(.)后面的文字,擴展名一般都表示了文件的類型。例如在log.txt這個文件名中,txt是擴展名,表示這個文件是一個文本文件(TeXT file),而文本文件一般都是可以直接查看內容的。而在house.1.jpg這個文件名中,其擴展名為jpg,表示這個文件是一個JPG格式的圖形文件,而圖形文件一般都是需要使用圖形軟件打開才能看到其內容的。
打印當前目錄,pwd
pwd
是Pring Working Directory的縮寫,此命令的作用是打印(print)當前的(working)目錄(directory)的全路徑名。
當你打開終端或者切換目錄之后,你最好運行一下pwd
命令,確認當前的目錄是不是你想要切換的目錄。
pwd
命令一般不需要參數。
列舉目錄內容,ls
ls
是LiSt的縮寫,此命令的作用是列舉目錄下的文件與子目錄。
當你不帶參數運行ls
命令時,此命令將列舉出當前目錄下的文件與子目錄的名稱。
當你加上-l參數運行ls
命令時,此命令將列舉出當前目錄下的文件與子目錄的名稱,以及它們的修改時間、大小等信息。
你也可以使用ls
命令列舉其它目錄下的文件與子目錄的名稱,例如,運行ls /
即可列舉出根目錄下的文件與子目錄名,運行ls -l /
即可列舉出根目錄下的文件與子目錄名,以及它們的修改時間、大小等信息。
切換目錄,cd
cd
是Change Directory的縮寫,此命令的作用是切換當前的工作目錄。
例如,運行cd /home/alex
將把當前目錄切換為/home/alex
。當然,cd后面的參數也可以是相對目錄。例如若當前目錄為/home/alex
,而/home/alex
目錄下有一個目錄叫Public,則運行cd Public
則會將當前目錄變為/home/alex/Public
。
如果cd命令后面不接任何參數,則將把當前目錄設置為用戶的家目錄。
復制文件,cp
cp
是CoPy的縮寫,此命令的作用是復制文件或者文件夾。
例如,運行cp 1.txt 2.txt
將把當前目錄下的1.txt
文件復制成2.txt
文件。運行cp 1.txt /tmp/2.txt
將把當前目錄下的1.txt
復制成/tmp/2.txt
文件,運行cp 1.txt /home/alex/
將把1.txt
文件復制到/home/alex/
目錄下。
刪除文件, rm
rm
是ReMove的縮寫,此命令的作用是刪除文件或者文件夾。
例如,運行rm 2.txt
將刪除當前目錄下的2.txt
文件,運行rm /tmp/2.txt
將刪除/tmp/2.txt
文件。
你也可以使用rm
來刪除目錄,此時需要帶上-R參數(recursive,即遞歸的意思),例如rm -R /tmp/abc
將刪除整個/tmp/abc
目錄。
刪除時一般都會詢問你讓你確認是否要刪除,如果你不需要被提問確認,可以加上-f參數,例如rm -f /tmp/1.txt
。
移動文件,mv
mv
是MoVe的縮寫,此命令的作用是移動文件或者文件夾,或說是為文件或者文件夾改名。注意,一旦移動成功,則原來的文件或者文件夾就不存在了。
例如,運行mv 1.txt 2.txt
將把當前目錄下的1.txt
改名為2.txt
,運行mv 1.txt /tmp/2.txt
將把當前目錄下的1.txt
移動成為/tmp/2.txt
文件。
創建目錄,mkdir
mkdir
是MaKe DIRectory的縮寫,此命令的作用是創建目錄。
例如mkdir abc
將在當前目錄下創建一個名為abc
的目錄,mkdir /tmp/xyz123
將在/tmp
目錄下創建一個名為xyz123
的目錄。
mkdir
可以帶-p參數,這樣即可同時創建多層目錄,例如mkdir -p a/b/c/123
將在當前目錄下創建a目錄,在a目錄下創建b目錄,在b目錄下創建c目錄,在c目錄下創建123目錄。
特殊目錄與文件
在Linux下還有幾個特殊的目錄,它們分別是:
.
,即一個點號,表示當前目錄,例如ls
命令不帶參數時是列舉出當前目錄下的文件與子目錄的名稱,其實就與ls .
等效,cd .
則沒有意義,因為cd
命令是用來改變當前目錄的,cd
到當前目錄就相當于沒有改變當前目錄。..
,即兩個點號,表示當前目錄的上級目錄,例如如果當前目錄是/home/alex
,則..
就表示/home
目錄,如果當前目錄是/home
,則..
就表示/目錄。ls ..
表示列舉上級目錄的子目錄與文件名,cd ..
表示切換到上級目錄,例如若當前目錄是/home/alex
,則cd ..
將把當前目錄切換到/home
目錄,cp 1.txt ..
則將把當前目錄下的1.txt
文件復制到上級目錄下去。-
,即一個中橫杠,表示上一個當前目錄,例如假設你當前的目錄是/home/alex
,你之前的當前目錄是/etc
,則-
就表示/etc
。在上例里cd -
將把當前目錄設置為/etc/
,再運行cd -
則又把當前目錄設置為/home/alex
,如此循環,但要注意ls
并不支持使用-
表示之前的目錄。~
,即波浪號,表示用戶的家目錄。例如ls ~
表示列舉出用戶家目錄下的子目錄與文件,cd ~
表示切換到用戶的家目錄(與cd
命令不帶參數運行效果等同),ls ~/ac
表示列舉出用戶家目錄下ac
子目錄里的子目錄與文件,cd ~/ac
表示切換到用戶家目錄下的ac
子目錄。
有一個特殊的符號表示文件名匹配,即*
。例如cp *.txt /tmp/
將把當前目錄下的以.txt
結尾的文件名都復制到/tmp/
目錄下,ls a*.txt
將列舉出當前目錄下所有以a
開頭,以.txt
結尾的文件名與目錄,rm /tmp/1*log
將刪除/tmp
目錄下所有文件名以1
開頭,以log
結尾的文件。
所有以.
開頭的文件與目錄都表示是隱藏文件/
目錄,例如.vimrc
,例如..
,在ls
時一般是看不到這些文件與目錄的,如果想要看到,需要使用ls
的-a
參數,例如ls -al
。
其它命令
Linux下有大量命令/軟件,在此我們僅列舉幾個可能會用到的,可以在使用過程中慢慢熟悉。
-
cat
:顯示文件內容 -
head
:顯示文件開頭幾行的內容 -
tail
:顯示文件結尾幾行的內容 -
more
:以翻頁形式顯示文件內容 -
less
:以翻頁形式顯示文件內容,可反向翻頁 -
wc
:統計文件行數與字符數 -
which
:命令的全路徑文件名 -
file
:查看文件類型 -
ln
:建立文件鏈接 -
df
:查看分區信息 -
du
:查看文件夾/文件統計信息 -
grep
:在文件中查找字符串 -
find
:查找文件或者文件夾