1. 程式人生 > >linux基本命令(很全的)(轉載)

linux基本命令(很全的)(轉載)

Ubuntu的圖形介面使用起來非常方便,但是要想對Linux熟練掌握,就必須學會它的操作命令。雖然可能會花費一些時間,不過從長遠的角度來說,這的確是一件事半功倍的事情,它會讓我們更瞭解Linux,更靈活地去使用Linux。
Ubuntu提供了很多命令,不過在本章中不做全部介紹,只是先介紹一些常用命令,其他則分散到各個章節中。初學Linux一定要特別注意,學習命令並不意味著要掌握全部命令和每個命令的全部選項,這並不是必要的。先掌握最常用命令的最常用選項就好,下面就讓我們來體會一下Ubuntu命令的強大功能。

7.1  基本命令

Ubuntu的命令較多,但是對於一些常用的系統操作,無非就是一些建立、檢視、移動、複製等,本小節先熟悉一下這些基本命令。在學習這些基本命令之前,應該先了解一下Linux的一些特性和在Linux中命令的執行方式。

在Linux中,所有裝置都是用檔名來表示的,就像我們在分割槽時所瞭解的那樣,這與我們所熟悉的Windows系統有很大不同,Linux中並沒有所謂C盤、D盤之類的說法,並且在Linux中只有檔案和目錄(相當於Windows中的資料夾),所有檔案和目錄都以倒樹狀結構掛載在“/”(讀做根目錄)目錄下,也正是因此Linux系統的管理員稱為root(樹根),如圖7-1所示。這稍後在第12章“檔案系統管理”一章還會詳細介紹,現在大家只是有個概念即可。

圖7-1  Linux檔案系統結構
當使用命令列進行操作時,首先要知道命令列的環境所代表的含義,如下所示:

[[email protected]: /etc #
我一下  |      |      | 
使用者名稱 主機名 當前目錄
需要說明的一點是,對於普通使用者來說,提示符“#”顯示為“$”。在Linux中如果要執行一個命令則可以通過如下方式:
# 命令名  [-選項]  引數


需要注意的是,命令名、選項或者引數之間都是至少要有一個空格,多個空格沒有關係,選項不是必需的。當有多個選項時,可以寫在一起。因為Linux基本是由C語言編寫的,所以無論命令名或選項,Linux都是嚴格區分大小寫的。

在瞭解了以上基本的內容後,下面就來詳細地介紹Linux的基本命令

7.1.1  列出檔案清單命令:ls

ls命令能夠列出當前目錄下的所有內容。ls 命令的執行方式為:

 # ls  [-選項]  [檔名或者目錄名]

進入到Linux命令列中後,我們至少要知道當前所處的位置有哪些內容,這些資訊就可以使用ls命令來獲得。它有很多的命令選項,並且選項之間可以互相組合使用,我們只列出其中常見的一些,見表7-1。

表7-1  ls命令的選項說明

 

在Linux中,ls命令是最常使用的命令之一,因為在命令列下要隨時檢視目錄內容。如果不加任何選項的話,ls命令僅列出當前目錄下的檔案和目錄名,例如,想要檢視/etc目錄下的內容,可以使用下列命令:

# ls /etc

如果想要列出當前目錄下所有檔案,則可以使用下列命令:

# ls -a 
結果圖7-2所示。
 
圖7-2  ls -a命令執行結果

讀者可能會發現裡面有很多以“.”為開頭的檔案或者目錄,在Linux中,如果一個檔名(目錄名)以“.”開頭則表示它是隱藏檔案(目錄)。並且在預設情況下,藍色代表一個目錄,白色代表一個普通檔案。

提示:

在Ubuntu中,在預設情況下藍色代表目錄,白色代表普通檔案,紅色代表壓縮檔案或者軟體包,綠色代表可執行檔案,淺藍色代表連結檔案,黃色代表裝置檔案等。但是這並不是在所有情況下都是有效的,之所以能以顏色區分,是因為在執行命令“ls -l”時,實際上是執行了“ls --color=auto”命令,可以使用alias命令進行檢視,這種設定命令別名的方式在第9章會詳細介紹。如果要想確切地知道到底是檔案還是目錄,可以通過ls –l命令,首行字母為“d”則為目錄,首行字母為“-”的即為檔案,首行字母為“l”的為軟連結檔案

7.1.2  改變當前路徑命令:cd

cd命令能夠改變當前使用者所處的位置。cd命令比較簡單,其命令執行的方式為:

# cd 路徑

使用cd命令之前,先來了解一下絕對路徑和相對路徑的概念。

我們知道,Ubuntu中所有檔案或者目錄都掛載在“/”目錄下,所以如果一個檔案或者目錄的詳細位置是從“/”開始的話,這樣的路徑稱為絕對路徑,如/etc/init.d/lvm。如果路徑不是從根寫起,則稱之為相對路徑,例如,現在所處的位置為/etc目錄中,如果現在要進入init.d目錄中,則可以執行如下命令:

# cd init.d


這種不是從根目錄寫起的路徑稱為相對路徑。

其實這兩種路徑的寫法都能達到同樣的效果,相對路徑的寫法有時候更加快速、方便一些,例如,進入很深的一個目錄結構中時,而絕對路徑能夠確保路徑一定正確。

例如,現在想從/root目錄中進入到/etc目錄中,可以下達命令:

# cd /etc

使用cd命令時,有幾個特殊格式的目錄表示方式需要我們瞭解一下,參見表7-2。

表7-2  特殊目錄的表示方法及含義

特殊目錄的表示方法

 

.

代表當前目錄

..

代表上層目錄

~

代表當然登入使用者的宿主目錄

~使用者名稱

代表進入~後用戶的宿主目錄

-

代表前一目錄,即進入當前目錄之前操作的目錄

上述目錄操作方式如圖7-3所示。

 
(點選檢視大圖)圖7-3  特殊目錄的使用方法

提示:

直接在命令列中輸入cd命令而不加任何引數,可以馬上回到使用者的主目錄(home),這一點與DOS中cd命令顯示當前路徑不同,請一定注意。在Linux中,很多與使用者自身相關的配置檔案、屬於自己的文件、程式、指令碼和安裝包等都存放在使用者自己的home目錄中,這個目錄就相當於Microsoft Windows中的“我的文件”。所以能用cd命令直接“回家”,真的很方便

7.1.3  檢視當前路徑命令:pwd

pwd命令能夠顯示當前所處的路徑。

這個命令比較簡單,如果有時在操作過程中忘記了當前的路徑,則可以通過此命令來檢視路徑,其執行方式為:

# pwd 
/home/samlee


第一行為執行的命令,第二行的內容為執行pwd命令後顯示的資訊,即顯示使用者當前所在的工作目錄的路徑為/home/samlee。

提示:

應該經常使用pwd命令。Linux的目錄結構非常複雜,一個小小的分支就可能會有十幾層目錄,就好像是個森林,所以Linux不會像Windows那樣把全路徑寫在提示符裡,那樣太長了。

在目錄用cd鑽來鑽去,很容易記不清自己到底身在何處,這時候執行命令可是有點危險的,例如,想刪除一個檔案,不搞清楚當前目錄,可能會誤刪除同名的有用檔案,而且沒那麼容易恢復。還有很多其他的情況需要使用pwd,尤其是在執行“rm –rf”這種對目錄直接刪除的操作時,更需要用pwd確定一下,可能每執行十幾個命令就會輸入一回。我們應該感謝Jim Meyering先生,他是pwd的創作者。

7.1.4  改變檔案建立時間及建立空檔案命令:touch

touch命令能夠建立一個空白檔案,或者改變檔案的建立時間。

touch命令的執行方式為:

# touch 檔名

一般來說,建立一個檔案都會使用一個文字編輯器(如第8章要介紹的vi編輯器),但是也可以使用touch命令來建立一個空白的檔案。

例如,現在要在/home目錄下建立一個名為test的空白檔案,可以執行命令:

# touch /home/test


實際上,對於touch命令來說,其最主要的功能是改變檔案的時間,那麼一個檔案擁有哪些時間屬性呢?對於一個檔案來說,主要有三種時間屬性,分別為:

(1)mtime:這個時間記錄的是檔案內容被修改的時間。

(2)ctime:這個時間記錄的是檔案的屬性(所有者、所屬組、檔名)或者許可權被修改的時間。

(3)atime:這個時間記錄的是檔案的內容被讀取的時間。

下面我們舉個例子來說明,現在我們在/home目錄下建立了一個檔案file,然後分別檢視其三個時間,命令操作如圖7-4所示。

 
(點選檢視大圖)圖7-4  顯示檔案的三種時間狀態
通過圖7-4我們可以看到,在剛開始建立檔案時候三種時間是相同的,在預設情況下使用ls –l命令檢視到的是檔案內容修改的時間(即mtime),如果在不同時間內分別對其進行編輯內容,修改檔案所有者和讀取內容操作後,三個時間即會發生變化,具體命令以後會詳細講解,在此只需要觀察一下命令結果即可,如圖7-5所示。
 
(點選檢視大圖)圖7-5  檔案的三種時間狀態發生變化後效果
通過圖7-5可以看到,我們通過不同時間內的不同操作後,file檔案的三種時間分別發生了變化,如果現在我們想讓其變成與當前時間相同,則可以使用touch命令,執行結果如圖7-6所示。
 
(點選檢視大圖)圖7-6  使用touch命令改變時間狀態

這樣就將file檔案的時間變成了當前的時間。

touch 命令的引數不多,常見的有以下幾個,見表7-3。

表7-3  touch命令選項

 

7.1.5  建立目錄命令:mkdir

mkdir 命令能夠建立一個目錄。mkdir 命令的執行方式為:

# mkdir 目錄名

其實一個目錄就是一個特殊型別的檔案,就如同Windows中的資料夾一樣,目錄裡面既可以有檔案,也可以有子目錄,就是因為有目錄的存在,Linux才能夠以一種目錄樹的結構對檔案系統進行管理。

例如現在要建立一個directory目錄,則可以執行命令:

# mkdir directory


建立完目錄後可以使用ls –l命令去檢視目錄是否建立成功。如果directory所在行的第一個字母為d,則說明建立成功。

有時候我們需要一次性地建立多級目錄,則可以使用-p引數:

# mkdir -p /home/dir1/dir2/dir3


7.1.6  刪除空目錄命令:rmdir

rmdir命令能夠刪除一個空目錄。rmdir命令的執行方式為:

# rmdir 目錄名

對於目錄來說,如果裡面為空的時候可以使用rmdir命令來刪除,並且此命令只能用來刪除空目錄,如果是非空目錄,則需要使用下面要介紹的rm 命令。

例如我們要刪除/home/directory這個空目錄,則可以執行命令:

# rmdir /home/directory


提示:

rmdir可以刪除的是非空目錄,被刪的目錄下不能有檔案或子目錄。如果只是有子目錄存在,還可以用-p來刪除;如果含有檔案,那麼-p選項也無能為力了。只有使用“rm –rf”大法,才能“連根拔起”。


7.1.7  除檔案(目錄)命令:rm

rm命令能夠刪除一個檔案或者目錄。rm命令的執行方式為:

# rm  [-選項] 檔名或者目錄名 

對於Ubuntu來說,這個命令是比較危險的一個命令,因為一旦使用了這個命令刪除的檔案如果再進行了磁碟寫操作後將無法再恢復。在其他版本的一些Linux中,預設情況下給rm命令加上了一個i選項,可以在刪除前對操作進行確認,建議當學習完Shell一節後也利用命令別名使其擁有這一特性。

剛才介紹的rmdir命令只能刪除一個空目錄,而rm命令不但能刪除任何目錄,而且可以刪除檔案。

例如,現在在/home目錄下分別建立一個檔案file和一個目錄directory,並且在目錄directory下建立file1檔案,操作如下:

# touch /home/file
# mkdir /home/directory
# touch /home/directory/file1


現在分別將file檔案和directory目錄刪除,操作如下:

# rm /home/file
# rm -r /home/directory

現在就可以將file檔案和directory目錄刪除了,注意,當使用rm命令刪除目錄時,應該加上-r選項,否則系統會顯示不能刪除目錄的資訊。rm命令選項如表7-4所示。

如果我們要在每一次執行此命令前都要進行確認操作是否進行,則可以加上-i 選項:

# rm -i /home/file

表7-4  rm命令選項

 

7.1.8  複製命令:cp

cp命令能夠複製一個檔案或者生成一個不同名但是內容相同的檔案。

cp命令的執行方式:

如果是複製檔案,則執行方式為:

 # cp原始檔名  目標路徑
如果是生成不同名但是內容相同的檔案,則下達方式為:
 # cp原始檔名  目標檔名
例如,現在需要將/etc/passwd檔案複製到/home目錄中,可以執行如下操作:
# cp /etc/passwd  /home
這時在/home目錄中即有一個檔案passwd,現在想生成一個passwd_new檔案,要求內容與passwd檔案內容相同,則可以執行命令:
# cp passwd passwd_new

這樣就生成了一個passwd_new檔案,其內容與passwd檔案內容相同。以後當配置DNS伺服器的時候,就可以採用同樣的方法生成不同的區域資料檔案,然後只需要對每個檔案裡面的不同部分進行修改就可以了,避免了每生成一個檔案都要重新寫一遍的麻煩。

cp命令的選項非常多,表7-5將其常用的一些列出。

表7-5  cp命令選項

 

7.1.9  移動檔案(目錄)命令:mv

mv命令用來移動一個檔案(目錄)或者是給檔案(目錄)改名。

mv命令的執行方式為:

如果是移動檔案,則執行方式為:

# mv要移動的檔案 目標路徑
如果是給檔案改名,則執行方式為:
# mv原檔名 新檔名
例如,在/目錄下有一個檔案為test,要將其移動到/home目錄中,可以執行如下操作:
# mv /test /home
此時就將test檔案移動到/home目錄中了,現在需要將其改名為test_new,則可以執行如下操作:
# mv /home/test  /home/test_new

這樣就將test檔案成功改名為test_new。


7.1.10  顯示檔案內容命令:cat

cat命令能夠顯示一個檔案的內容。

cat命令的執行方式為:

 # cat 檔名
cat命令的常見用法是檢視一個檔案的內容,例如,現在想檢視一下/etc/passwd檔案的內容,可以執行命令:
 # cat /etc/passwd 
這樣不用開啟檔案就可以看到passwd檔案的內容了,但是cat命令的一個缺點是它在顯示檔案內容時不能做任何停留,所以如果遇到了一個檔案內容超過整個螢幕的時候我們只能看到其最後部分,解決的辦法是使用管道符(見第9章)和分屏顯示命令:
# cat /etc/passwd | more 
還可以通過cat命令和輸出重定向命令將一個檔案的內容輸出到另一個檔案中去,即我們常說的將兩個檔案進行合併:
# cat /etc/passwd >> /home/passwd_bak

這樣passwd檔案的內容就會追加到passwd_bak檔案中,從而達到兩個檔案合併的目的。


7.1.11  從頭開始檢視檔案內容命令:head

head命令能夠從頭開始顯示檔案內容,並且能夠設定檢視的行數。

head命令的執行方式為:

# head [-n] 檔名

n為數字,即設定的行數。

head命令能夠從檔案開始處檢視一個檔案的指定的行數,如想要檢視/etc/passwd檔案的前五行,可以執行命令:

# head -5 /etc/passwd 

如果沒有指定行數的話,預設是顯示前十行。


7.1.12  tail命令

tail命令能夠從檔案結尾開始顯示檔案內容,並且指定檢視的行數。

tail命令的執行方式:

# tail [-n] 檔名 
tail命令能夠從一個檔案的結尾處向上檢視一個檔案的指定的行數,它正好與head命令相反,是倒序進行檢視的,如想要檢視/etc/passwd檔案的後面5行,可以執行命令:
# tail -5 /etc/passwd 

與head命令一樣,如果沒有指定行數的,預設是顯示後面十行。



7.1.13  分屏顯示檔案命令:more(less)

more命令能夠對檔案內容或者查詢結果進行分屏顯示。more命令的執行方式為:

 # more 檔名 
more命令可以單獨使用,也可以和配合管道符使用。它的主要作用是能夠將螢幕輸出的結果分屏顯示。例如使用cat命令檢視/etc/passwd檔案時,只能看到最後的內容,為了能夠看到檔案所有內容,可以執行命令:
# more /etc/passwd
或者是配合管道符命令:
# cat /etc/passwd | more

這時就可以分屏來檢視檔案內容了,可以通過回車鍵向下一行行滾動,但是它的缺點是不能夠進行向上滾動,如果想向上翻屏,需要使用less命令,less命令的用法與more命令完全相同,唯一不同點是less命令能夠向上翻屏。可以通過上下箭頭進行上下一行行滾動,也可以通過page up/page down命令向上/向下進行一屏一屏滾動。

7.2  檔案處理命令

Linux提供了一些用於處理檔案的命令,使用它們,能夠完成很多隻有高階文字編輯器才能完成的功能,本節對其常用的一些進行介紹。

7.2.1  檔案比較命令:diff

diff命令能夠比較兩個檔案的差異,diff命令的執行方式為:

 # diff  [-選項]  檔案一  檔案二 
如果想比較出兩個檔案內容的不同,使用diff命令非常方便。例如,現在將/etc/passwd檔案複製到/home目錄下,並且將其複製生成檔案passwd_new,再將passwd_new檔案進行修改,然後使用diff命令比較出兩個檔案的不同,操作如下:
# cp /etc/passwd 
# cp /home/passwd /home/passwd_new
# diff /home/passwd /home/passwd_new

這樣就很容易看到兩個檔案的不同了。

diff命令後還可以加一個目錄名和檔名或者兩個都是檔名,換句話說,如果上述命令執行方式處的檔案一(或者是檔案二)是目錄,檔案二(或者是檔案一)不是目錄,這樣diff就會在目錄中找到與檔名相匹配的檔案進行比較,例如:

# diff /home file

這樣diff會在/home目錄中找到是否有file檔案,然後與後面的file檔案進行內容比較。


7.2.2  排序命令:sort

sort命令能夠對檔案內容或者查詢結果進行排序。

sort命令的執行方式為:

# sort [-選項] 檔名

sort命令可以對指定檔案中的所有行進行排序,它的排序是根據從指定的行抽取的一個或者多個關鍵字來進行排序的。

例如,現在想根據/etc/passwd檔案中的第三列來將passwd檔案進行排序後輸出,應該下達如下命令:

 # sort -t “:” -k 3 /etc/passwd 

其中-t選項指定了每列的分割符,-k選項指定了以第幾列進行排序。

sort命令選項很多,表7-6列出了其常用選項:

表7-6  sort命令選項

  

7.2.3  統計命令: wc

wc命令可以對檔案的行數、單詞數和字元數進行統計。

wc命令執行方式為:

# wc [-選項]  檔名 
wc命令是一個對檔案進行統計的非常好的命令,例如,現在需要統計當前系統內有多少使用者,因為/etc/passwd檔案中儲存了所有的使用者,並且每個使用者的資訊為一行,所以可以執行命令:
# wc -l /etc/passwd

這樣就能夠得到當前Ubuntu系統中的使用者數,wc命令還經常和管道符進行聯合使用,對前一個命令的查詢結果進行統計。
sort命令的常用選項如表7-7所示。

表7-7  wc命令選項


7.3  設定許可權命令

在Linux中,一個使用者對一個檔案(目錄)是否有權利去使用,是根據此檔案(目錄)設定的許可權所決定的。Ubuntu中的每個使用者都至少屬於一個組。

現以一個班級為例說明使用者與組的關係。我們可以把班級裡的每個學生看成是Ubuntu裡的一個使用者,現班級規定,每個人必須參加一個興趣小組,甲同學參加了科技小組,那麼他就是科技小組這個“組”裡的成員,乙同學參加了書法小組,那麼他就是書法小組這個“組”裡成員,對於科技小組來說,組裡的自己的私有物品也只有自己能夠使用,如果書法小組的人想使用科技小組裡成員的物品的話,需要科技小組的成員的物品所有者同意才可,但是由於科技小組裡的成員都是一個小組,所以可能他們互相之間的使用物品的許可權要比外組的成員要大一些。可以用圖7-7表示。

 
圖7-7  使用者與組的關係

可以看到,一個使用者既可以屬於一個組,也可以屬於多個組,而每個組裡成員的各自物品都可以根據自己的規定來讓同組的成員和不在此組裡的成員使用,實際上,這就是Linux最基本的許可權模型。

Linux中的一個檔案在正常情況下是屬於一個使用者所有,將此使用者稱為檔案的所有者(也可以稱為屬主),而將一些使用者統一分在一個組裡,設定此組對檔案操作的許可權,這個組為檔案的所屬組,既不是檔案的所有者,也不是檔案的所屬組裡的使用者我們統一稱為其他人。

瞭解了這些基本概念後,我們就來學習一下設定許可權的相關命令。需要說明的是,對於超級使用者(UID為0)來說,它擁有所有許可權

7.3.1  設定許可權命令 chmod(1)

chmod命令能夠對檔案設定許可權。

在Linux中,檔案(目錄)的許可權分為可讀、可寫、可執行三類許可權,其中可讀用字母r表示,可寫用字母w表示,可執行用字母x表示。

1.對於檔案來說

可讀是指可以檢視檔案內容,例如,使用vi或者cat命令能夠檢視檔案內容。

可寫是指可以修改檔案內容並且儲存修改後的結果,如使用vi命令能夠修改檔案內容後儲存。

可執行指的是能夠執行此檔案,在Linux中,一個是否能夠執行不決定於其副檔名,而是看其是否被設定了可執行許可權,當然前提是本身一定是個二進位制檔案或者指令碼檔案。例如普通文字檔案即使設定了可執行許可權後也無法執行。

2.對於目錄來說

可讀是指能使用ls命令顯示目錄下的內容。

可寫指的是能夠在此目錄下建立和刪除檔案。在Linux中,一個檔案是否能夠被刪除,是決定於其所在目錄是否對命令執行者設定可寫許可權,而與檔案本身許可權無關,檔案本身許可權只是對檔案本身內容或者是否能執行進行限制。

可執行指的是能夠在目錄下執行命令,所以如果想讓一個使用者能夠進入此目錄,必須對此目錄在相應的許可權位上設定可執行許可權。
在對檔案和目錄設定之前,來看一下如何檢視檔案的許可權。

在Linux中,使用ls -l命令檢視許可權屬性。對於/etc/passwd檔案,使用ls -l命令後結果如圖7-8所示。

 
(點選檢視大圖)圖7-8  /etc/passwd檔案許可權

下面介紹每列含義:

(1)第一列:檔案型別和許可權,這部分稍後重點介紹。

(2)第二列:i節點,即硬連結數,在檔案系統部分還會介紹。

(3)第三列:檔案的屬主,即檔案的所有者,有時候我們將一個檔案複製給另一使用者,要記得將檔案的屬主也要改變,否則可能會發生檔案許可權不對的錯誤。

(4)第四列:檔案的屬組,即檔案的所屬組,即在此組裡的使用者對檔案有擁有不同的許可權。

(5)第五列:檔案的大小,大小以位元組顯示。

(6)第六列:最近一次檔案內容的修改時間,即mtime。

(7)第七列:檔案或者目錄名。

現在重點來解釋第一列,/etc/passwd檔案使用ls -l命令後,查詢結果的第一列如下:

 -rw-r--r-- 

可以看到,這部分還可以細分為十列,實際上可以將這十列分為兩部分,第一列為第一部分,代表了檔案的型別,檔案的型別主要有以下幾種:

(1)-表示是普通檔案

(2)d表示是目錄

(3)l表示是連結檔案

(4)b表示是塊裝置檔案,例如硬碟的儲存裝置等

(5)c表示是字元裝置檔案,如鍵盤等

(6)s表示是套接字檔案,此主要跟網路程式有關

(7)p表示是管道檔案

這樣根據檔案型別就可以判斷一個檔案到底是檔案還是目錄,或者是哪種型別的檔案,即使檔案不以顏色顯示也沒有關係了。
第二列至第十列為第二部分,這部分一共9列,每三列為一組,共分為三組,由左至右分別代表了屬主的許可權,屬組的許可權,其他人的許可權。如對於剛才我們查詢的結果來說,/etc/passwd檔案屬主為root,屬於root組,各部分許可權分別為:

屬主的許可權為:rw-

屬組的許可權為:r--

其他人的許可權為:r--

我們發現,每組正好由三列組成,依次代表了可讀許可權、可寫許可權、可執行許可權。也就是說,如果屬主對檔案擁有可讀許可權,則在屬主許可權位上的第一列就用r表示,而“-”代表沒有相關的許可權。由此我們可以得到/etc/passwd檔案的許可權:

root(屬主)使用者對passwd檔案擁有可讀(r)可寫(w)許可權。

root(屬組)組裡的使用者對passwd檔案擁有可讀許可權。

既不是root使用者也不屬於root組的使用者對檔案擁有可讀許可權。

下面我們使用chmod命令來設定檔案的許可權。

chmod 命令的格式為:

chmod  [選項]  許可權  檔名(目錄名)

使用chmod命令設定許可權的方法有兩種:數字和字元。

1.數字方式設定許可權

檔案的許可權共有三種:可讀(r)、可寫(w)、可執行(x),使用數字4代表讀許可權;2代表寫許可權;1代表可執行許可權;0表示沒有相應的許可權,所以,如果使用者擁有哪個許可權,就將其代表的數字相加,最後相加的和即為使用者的許可權。比如說,還是以passwd檔案為例,我們知道root(屬主)使用者對檔案擁有的許可權為rw-,所以使用數字來代表即為:

 4(r) + 2(w) + 0(-)= 6 
依此類推,能夠得到屬組和其他人的許可權;
 屬組的許可權:4(r) + 0(-) + 0(-) = 4
其他人的許可權:4(r) + 0(-) + 0(-) = 4
即644為此檔案的許可權,其中第一個數字是代表屬主所擁有的全部許可權,第二個數字是代表屬組裡的使用者所擁有的許可權,第三個數字代表其他人所擁有的許可權。下面舉例說明如何使用chmod命令進行設定許可權,使用Ubuntu使用者建立一個檔案file,因為在預設情況下在Ubuntu中建立的使用者都是屬於users組的,所以我們希望此檔案許可權為:
ubuntu(屬主)使用者可讀可寫
users(屬組)裡的使用者只能夠讀。
其他人沒有任何許可權,即不能讀,寫和執行
由上面的方法我們能夠得到此檔案的許可權數字為
屬主:4(讀) + 2 (寫) + 0(執行) = 6
屬組:4(讀) + 0(寫) + 0(執行) = 4
其他人:0(讀) + 0(寫) + 0 (執行)= 0
命令執行結果如圖7-9所示。
 
(點選檢視大圖)圖7-9  使用chmod設定許可權
使用chmod命令以數字方式設定檔案或者目錄的許可權,設定後以前的許可權無論是什麼都會以後設定的為準。

7.3.1  設定許可權命令 chmod(2)

2.字元方式設定許可權

還可以使用字元方式設定許可權,使用字元方式能夠很方便地對檔案的許可權進行修改和設定。字元方式各符見表7-8。

表7-8  字元方式設定許可權

 

使用字元方式設定許可權,有時可以在原來的許可權基礎上進行修改,現在舉例說明:使用Ubuntu使用者建立檔案file,然後執行以下操作:

(1)將其許可權設定為所有人都只讀

(2)將檔案屬主增加可寫許可權

(3)將其他人的可讀許可權去除

執行結果如圖7-10所示。

 
(點選檢視大圖)圖7-10  使用字元方式設定許可權
也可以將第二個要求和第三個要求同時完成,兩個設定之間只需用“,”隔開。即可以如下操作:
# chmod u+w,o-r file
可以使用-R選項進行多級目錄的許可權設定。例如:
# chmod -R 755 /home

這樣就可以將/home目錄以及其目錄下的所有檔案和目錄許可權都設定為755。

7.3.2  更改屬主(屬組)命令:chown

chown命令可以更改一個檔案(目錄)的屬主或者屬組。

chown命令的執行方式為:

# chown  [選項]  屬主[.屬組]   檔名

使用chown命令,能夠將一個檔案的屬主或者屬組進行或者同時進行改變。同時改變時,屬主和屬組之間使用“.”隔開,還可以使用-R選項同時將目錄下的所有檔案和目錄的屬主和屬組進行修改。

例如,現在使用root使用者建立一個檔案,然後執行下列操作:

(1)將其檔案屬主改為ubuntu使用者

(2)將其屬組改為users組

(3)將屬主和屬組同時改為root

執行命令結果見圖7-11。

 
(點選檢視大圖)圖7-11  使用chown命令

在本例中使用root賬號進行操作,防止來回在不一樣的使用者間進行切換,由上面的命令可知,單獨改變檔案的屬組時,需要在屬組組名前面加上“.”。對於root使用者來說,一般情況下,檔案的許可權對其不起作用,特殊情況會在高階許可權設定時講解。

7.3.3  更改檔案屬組命令:chgrp

chgrp命令能夠改變檔案(目錄)的屬組。

chgrp命令的執行方式為:

# chgrp  [選項]  屬組 檔名

chgrp命令只是單純的修改檔案的屬組,例如:

# chgrp users file

此命令的執行結果是將file檔案的屬組改為了users。

提示:

chgrp與chown命令的用法基本是一致的,用法也比較簡單。可以用-R引數把一個目錄下的所有內容都改變使用者和組。

7.4  檔案查詢命令

相信每個人都有過在計算機查詢一些檔案的經歷,對於記憶力不是很好的筆者更是經常如此,相信大家對Windows的搜尋功能還是記憶猶新,其實Ubuntu也提供了功能非常強大的查詢命令,下面我們就來體會一下。

7.4.1  按路徑進行查詢的命令:which

which命令能夠按PATH變數所規定的路徑進行查詢。

which命令的執行方式為:

# which 命令名

系統預設是有很多系統變數存在的,其中有一個變數PATH,它定義了執行命令時命令所要查詢的路徑,例如,執行passwd命令給使用者改密碼時,系統會自動去PATH變數所規定的路徑下去搜尋是否有此命令,如果有,則執行,否則將提示命令不存在,這也是為什麼有些Linux初學者明明在當前目錄下執行此目錄裡的命令而出現系統提示命令不存在(此時若要執行可以下達命令./命令名)。

這點與Windows有很大不同,其實Windows也是有PATH變數存在的,當初筆者曾經在工作的時候安裝UG軟體,結果安裝完成後總是無法執行UG程式,最後將UG程式的路徑給放到PATH變數裡才正常執行。

由上可以看出,PATH變數是存放命令的,而which是按PATH變數規定的路徑來找,所以which主要是用來查詢命令的,並且查詢到後將命令的絕對路徑給顯示出來。

例如,現在想知道which命令本身的絕對路徑,可以下達命令:

# which  which
這樣查詢到的結果為:
/usr/bin/which

Which命令一般只查詢到第一個匹配的結果,如果想將所有匹配的結果全部顯示出來可以加上-a引數。

7.4.2  按資料庫查詢的命令:whereis

whereis命令能夠將不但能查詢出命令,還能查詢出Ubuntu資料庫裡記載的檔案。

whereis命令的下達方式為:

#whereis [選項]檔名

與which不同的是,whereis不但能夠找到可執行的命令,而且將所有包含檔名字串的檔案全部查找出來,而且速度非常快,遠遠快於我們將要介紹的雖然強大但速度卻有些慢的find命令。這是因為Ubuntu會將它裡面所有的資料都記錄在一個資料庫裡,而whereis命令查詢時並不會在整個磁碟上進行查詢,而只在此資料庫裡進行查詢。

例如使用whereis命令來執行搜尋passwd,得到的結果如圖7-12所示。

  
(點選檢視大圖)圖7-12  使用whereis命令


可以看到,不但找到了passwd命令,連passwd檔案等也找到了。

whereis命令常見選項如表7-9所列。

表7-9   whereis命令選項

 


7.4.3  查詢所有匹配的檔案的命令:locate

locate命令能夠將所有與被查詢的檔名相同的檔案查詢出來。

locate命令的執行方式為:

# locate 檔名

locate命令的下達方式比較簡單,直接加上要查詢的檔名即可,因為它也是從資料庫進行查詢,所以速度也比較快,但是因為資料庫的資訊由crond程序控制更新,所以有時會發生剛安裝完的軟體查詢不到的現象。

7.4.4  功能強大的查詢命令:find

find命令能夠按多種方式指定查詢條件,然後進行查詢出指定的檔案。

說明:因為find命令功能強大,而且能夠設定查詢條件,裡面涉及的許可權和檔案型別的相關知識,所以大家可以在學完相應的章節後再來學習find命令。

find命令的執行方式:

# find 查詢的路徑 [選項] [對查詢到結果執行的命令]

find命令能夠按照使用者給定的條件進行查詢,並且可以指定查詢的路徑,它甚至可以在整個檔案系統內或者在具有網路檔案系統(NFS)的情況下進行查詢。

為了方便起見,我們將根據find 命令的選項進行分類說明。

1.根據檔案時間狀態進行查詢

大家還記得介紹touch命令時提到的與檔案有關的三個時間吧,所以根據檔案時間狀態進行查詢主要有以下幾項:

-atime(+ | -)n:此選項代表查找出n天以前被讀取過的檔案。
-mtime(+ | -)n:此選項代表查找出n天以前檔案內容發生改變的檔案。
-ctime(+ | -)n:此選項代表查找出n天以前的檔案的屬性發生改變的檔案。
-newer file:此選項代表查找出所有比file新的檔案。
-newer file1! –newer file2:此選項代表查詢比file1
檔案時間新但是沒有file2時間新的檔案。

說明:

n為數字,如果前面沒有+或者-號,代表的是查找出n天以前的,但是隻是一天之內的範圍內發生變化的檔案。

如果n前面有+號,則代表查詢距離n天之前的發生變化的檔案。如果是減號,則代表查詢距離n天之內的所有發生變化的檔案。

-newer file1 ! –newer file2中的!是邏輯非運算子。

下面舉例說明,現在想查詢一下所有在最近三天之內內容發生變化的檔案,可以執行:

# find / -mtime -3 
如果想查詢在/home目錄下查詢比file1新但是沒有file2新的檔案,則執行命令:
#find /home -newer file1 ! –newer file2