linux常用基本命令

来源:https://www.cnblogs.com/sunshine5683/archive/2018/11/12/9948113.html
-Advertisement-
Play Games

Ubuntu的圖形界面使用起來非常方便,但是要想對Linux熟練掌握,就必須學會它的操作命令。雖然可能會花費一些時間,不過從長遠的角度來說,這的確是一件事半功倍的事情,它會讓我們更瞭解Linux,更靈活地去使用Linux。Ubuntu提供了很多命令,不過在本章中不做全部介紹,只是先介紹一些常用命令, ...


 

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文件系統結構
當使用命令行進行操作時,首先要知道命令行的環境所代表的含義,如下所示:
[root@localhost: /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

2.根據用戶或者組進行查找

系統記錄一個用戶實際上記錄的是它的UID號,而記錄組則是記錄的GID號,所以根據用戶或者組進行查找的選項為:

 -user 用戶名:根據文件的屬主名查找文件。
-group 組名:根據文件的屬組名查找文件。
-uid n:根據文件屬主的UID進行查找文件。
-gid n:根據文件屬組的GID進行查找文件。
-nouser:查詢文件屬主在/etc/passwd文件中不存在的文件。
-nogroup:查詢文件屬組在/etc/group文件中不存在的文件。

說明:

關於用戶的UID和GID的說明請查閱用戶管理一章。

有時我們可能使用一個用戶建立了一些文件,當此用戶被刪除後,他所建立的文件就成了無屬主的文件了,所以我們應該用-nouser來查詢,-nogroup與之相同。

下麵舉例說明,現在想查找所有在/home目錄中屬主是Ubuntu用戶的文件,應執行命令:

# find /home -user ubuntu
查找出/etc/下所有不屬於任何人的文件,應執行命令:
# find /etc -nouser

3.根據文件的許可權或者大小名字類型進行查找

Linux里的文件是否能夠執行與它的擴展名無關,主要是看它是否設置了可執行許可權。所以根據文件許可權我們也可以設定查找條件:

-name文件名:按找文件名進行查找。
-type文件類型:按文件類型進行查找。
-size[+| -]n(c|k):按照文件尺寸進行查找。
-perm[+| -]文件許可權:按照文件許可權進行查找。

說明:

文件類型可以通過ls -l命令進行查詢,“-”代表普通文件,“d”代表目錄。“b”代表設備文件,“c”代表字元設備文件,具體每部分的含義詳見文件系統一章。

按文件大小進行查詢時,預設的單位是塊,因為絕大多數人習慣使用位元組或者K等單位,所以我們用“c”表示位元組,用“k”表示1024位元組。前面如果有“+”號代表大於n所指定的大小,“-”代表小於n所指定的大小,沒有的話表示正好等於n所指定的大小。

關於文件的許可權設定請參照文件系統章節中許可權設定部分,在此不再詳述。但需要註意的是此許可權應該是4位,即加上了特殊許可權位的部分。如果文件許可權前面有“+”號,則表示所查找的文件的許可權中有前面許可權條件的任意一個即可,如果是“-”號,則表示所查找的文件的許可權中至少要包含前面許可權的所有,比許可權條件多沒有關係,但一定不能少於許可權條件。

下麵舉例說明,現在想找出/etc目錄內所有的文件大小超過1MB的文件,則執行命令:

# find /etc -size +1000000c  

在此處1000000c也可以用1000K來表示。

如果想要找出系統內所有具有SUID位的文件,則執行命令:

# find / -perm -4000  

因為找到的文件必須要具有SUID位,所以要用”-4000”,如果是用“+4000”的話,意思是一個文件只要擁有上述任意一個條件就會被顯示出來。

如果想查系統內所有具有SUID,SGID或者黏滯位的文件找出來,可以執行命令:

# find / -perm +7000

這條命令將會把系統內的任意一個只要具有SUID或者SGID或黏滯位的文件都列出來。

4.多個查找選項的應用

有時候需要查找同時符合兩個條件,這時需要-a或者-o選項:

 -o:邏輯或,兩個條件只要滿足一個即可。
-a:邏輯與,兩個條件必須同時滿足。
# find  /etc -size +2048 -a -size -20480  
在/etc目錄下查找大於1MB小於10MB的文件。
# find  /etc -name inittab -o -name grub.conf 

查找/etc目錄下文件名為inittab或文件名為grub.conf的文件。

5.對查找到結果的處理

有時候我們對於查找到的結果需要對其進行進一步的操作,這就需要使用-exec或者-ok選項,或者使用-print選項。其使用的格式為:

# find 查找的路徑 [選項] [對結果處理的命令]
前三部分就是在前面三節介紹的設定不同的條件,而對結果進行處理的格式為:
-exec  shell命令  {}  \; 

其中-exec就是代表要執行shell命令,後面加的是shell指令,再後面的“{}”表示的是要對前面查詢到的結果進行查詢,最後的“\;”表示命令結束。需要註意的是“{}”和“\”之間是要有空格的。而-ok選項與-exec的唯一區別就是它在執行shell命令的時候會事先進行詢問,-print選項是將結果顯示在標準輸入上。

例如現在我們想查找系統內所有具有SUID位的文件,並且將結果保存在/root/SUID_file中,則執行命令:

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 初步判斷應該有兩種情況:一種是block滿了,另一種情況就是inode耗盡了。 首先df -i 查看一下是否耗盡inode/block數量。 虛擬一塊磁碟並格式化: dd if=/dev/zero of=/opt/sdb1 bs=4096 count=100 mkfs -t ext4 /opt/sd ...
  • 一: 配置linux 操作系統虛擬主機 首先安裝一個虛擬機(百度上面有很多哦) , 我主要使用的是VMware workstation 然後 下載一個centos鏡像6..5到7都可以; 然後用VMware安裝下載好的centos 配置好語言 , 用戶名 , 密碼 . 二: 修改網卡 , 可以使自己 ...
  • 1、^word #匹配word開頭的內容,vi/vim編輯器里^代表一行的開頭。 2、word$ #匹配以word結尾的內容,vi/vim編輯器里$代表一行的結尾。 3、^$ #表示空行 4、. #代表任意一個字元 5、\ #轉移符(在visudo里\表示換行) 6、* #匹配重覆0個或1個前面的字 ...
  • 硬鏈接:在linux文件系統中多個文件名指向同一個索引節點(Inode)是正常允許的。硬鏈接文件就相當於文件的另一個入口。 硬鏈接的作用:允許一個文件擁有多個有效路徑(多個入口),這樣用戶就可以建立硬鏈接到重要文件,以防止“誤刪”源數據 (很多硬體存儲,如netapp存儲中的快照功能就應用了這個原理 ...
  • DEVICE=eth0 #物理設備名,網卡名稱 WADDR=00:0c:29:7a:6b:24 #網卡的MAC地址,48位(配置克隆機時需把這一段刪除)TYPE=Ethernet #以外網UUID=c35b4084-7211-4da2-a64f-d078470ebac2 #網卡的唯一標識(配置克隆機 ...
  • Exchange主要是針對內部網或者企業網用戶進行搭建的郵件伺服器軟體,利用它能夠很快地搭建安全性較高的內部網郵件系統。 本次搭建在個人環境中實踐,純屬愛好折騰,分四步驟,1.搭建windows 2008 server域環境 2.安裝Exchange 2010郵件伺服器 3.配置Exchange 2 ...
  • [toc] Linux Namespace Linux Namespace 是kernel的一個功能,用於隔離系統資源。比如說PID,User ID 等。(可以想象一下變成語言變數的命名空間)這樣我們就可以將 進程,網路介面,掛載點以及用戶做一個隔離。 比如說我們在同一臺主機上,需要將資源分給多個類 ...
  • 個人總結,請尊重版權,轉載請在顯眼地方註明出處:https://www.cnblogs.com/sunshine5683/p/9948259.html day(01)基本命令學習 今天開始自學linux,在學習的過程中將踩過的坑和學習經歷總結出來,在提升自己的過程中,幫助有需要的人,一起學習,希望在 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...