轉(zhuǎn)自:http://blog.csdn.net/lykangjia/article/details/11655887
Ubuntu的圖形界面使用起來非常方便,但是要想對(duì)Linux熟練掌握,就必須學(xué)會(huì)它的操作命令。雖然可能會(huì)花費(fèi)一些時(shí)間,不過從長遠(yuǎn)的角度來說,這的確是一件事半功倍的事情,它會(huì)讓我們更了解Linux,更靈活地去使用Linux。
Ubuntu提供了很多命令,不過在本章中不做全部介紹,只是先介紹一些常用命令,其他則分散到各個(gè)章節(jié)中。初學(xué)Linux一定要特別注意,學(xué)習(xí)命令并不意味著要掌握全部命令和每個(gè)命令的全部選項(xiàng),這并不是必要的。先掌握最常用命令的最常用選項(xiàng)就好,下面就讓我們來體會(huì)一下Ubuntu命令的強(qiáng)大功能。
7.1 基本命令
Ubuntu的命令較多,但是對(duì)于一些常用的系統(tǒng)操作,無非就是一些創(chuàng)建、查看、移動(dòng)、復(fù)制等,本小節(jié)先熟悉一下這些基本命令。在學(xué)習(xí)這些基本命令之前,應(yīng)該先了解一下Linux的一些特性和在Linux中命令的執(zhí)行方式。
在Linux中,所有設(shè)備都是用文件名來表示的,就像我們?cè)诜謪^(qū)時(shí)所了解的那樣,這與我們所熟悉的Windows系統(tǒng)有很大不同,Linux中并沒有所謂C盤、D盤之類的說法,并且在Linux中只有文件和目錄(相當(dāng)于Windows中的文件夾),所有文件和目錄都以倒樹狀結(jié)構(gòu)掛載在“/”(讀做根目錄)目錄下,也正是因此Linux系統(tǒng)的管理員稱為root(樹根),如圖7-1所示。這稍后在第12章“文件系統(tǒng)管理”一章還會(huì)詳細(xì)介紹,現(xiàn)在大家只是有個(gè)概念即可。
圖7-1 Linux文件系統(tǒng)結(jié)構(gòu)
當(dāng)使用命令行進(jìn)行操作時(shí),首先要知道命令行的環(huán)境所代表的含義,如下所示:
[root@localhost: /etc #
我一下 | | |
用戶名 主機(jī)名 當(dāng)前目錄
需要說明的一點(diǎn)是,對(duì)于普通用戶來說,提示符“#”顯示為“$”。在Linux中如果要執(zhí)行一個(gè)命令則可以通過如下方式:
# 命令名 [-選項(xiàng)] 參數(shù)
需要注意的是,命令名、選項(xiàng)或者參數(shù)之間都是至少要有一個(gè)空格,多個(gè)空格沒有關(guān)系,選項(xiàng)不是必需的。當(dāng)有多個(gè)選項(xiàng)時(shí),可以寫在一起。因?yàn)長inux基本是由C語言編寫的,所以無論命令名或選項(xiàng),Linux都是嚴(yán)格區(qū)分大小寫的。
在了解了以上基本的內(nèi)容后,下面就來詳細(xì)地介紹Linux的基本命令
7.1.1 列出文件清單命令:ls
ls命令能夠列出當(dāng)前目錄下的所有內(nèi)容。ls 命令的執(zhí)行方式為:
# ls [-選項(xiàng)] [文件名或者目錄名]
進(jìn)入到Linux命令行中后,我們至少要知道當(dāng)前所處的位置有哪些內(nèi)容,這些信息就可以使用ls命令來獲得。它有很多的命令選項(xiàng),并且選項(xiàng)之間可以互相組合使用,我們只列出其中常見的一些,見表7-1。
表7-1 ls命令的選項(xiàng)說明
在Linux中,ls命令是最常使用的命令之一,因?yàn)樵诿钚邢乱S時(shí)查看目錄內(nèi)容。如果不加任何選項(xiàng)的話,ls命令僅列出當(dāng)前目錄下的文件和目錄名,例如,想要查看/etc目錄下的內(nèi)容,可以使用下列命令:
# ls /etc
如果想要列出當(dāng)前目錄下所有文件,則可以使用下列命令:
# ls -a
結(jié)果圖7-2所示。
圖7-2 ls -a命令執(zhí)行結(jié)果
讀者可能會(huì)發(fā)現(xiàn)里面有很多以“.”為開頭的文件或者目錄,在Linux中,如果一個(gè)文件名(目錄名)以“.”開頭則表示它是隱藏文件(目錄)。并且在默認(rèn)情況下,藍(lán)色代表一個(gè)目錄,白色代表一個(gè)普通文件。
提示:
在Ubuntu中,在默認(rèn)情況下藍(lán)色代表目錄,白色代表普通文件,紅色代表壓縮文件或者軟件包,綠色代表可執(zhí)行文件,淺藍(lán)色代表鏈接文件,黃色代表設(shè)備文件等。但是這并不是在所有情況下都是有效的,之所以能以顏色區(qū)分,是因?yàn)樵趫?zhí)行命令“l(fā)s -l”時(shí),實(shí)際上是執(zhí)行了“l(fā)s --color=auto”命令,可以使用alias命令進(jìn)行查看,這種設(shè)置命令別名的方式在第9章會(huì)詳細(xì)介紹。如果要想確切地知道到底是文件還是目錄,可以通過ls –l命令,首行字母為“d”則為目錄,首行字母為“-”的即為文件,首行字母為“l(fā)”的為軟鏈接文件
7.1.2 改變當(dāng)前路徑命令:cd
cd命令能夠改變當(dāng)前用戶所處的位置。cd命令比較簡單,其命令執(zhí)行的方式為:
# cd 路徑
使用cd命令之前,先來了解一下絕對(duì)路徑和相對(duì)路徑的概念。
我們知道,Ubuntu中所有文件或者目錄都掛載在“/”目錄下,所以如果一個(gè)文件或者目錄的詳細(xì)位置是從“/”開始的話,這樣的路徑稱為絕對(duì)路徑,如/etc/init.d/lvm。如果路徑不是從根寫起,則稱之為相對(duì)路徑,例如,現(xiàn)在所處的位置為/etc目錄中,如果現(xiàn)在要進(jìn)入init.d目錄中,則可以執(zhí)行如下命令:
# cd init.d
這種不是從根目錄寫起的路徑稱為相對(duì)路徑。
其實(shí)這兩種路徑的寫法都能達(dá)到同樣的效果,相對(duì)路徑的寫法有時(shí)候更加快速、方便一些,例如,進(jìn)入很深的一個(gè)目錄結(jié)構(gòu)中時(shí),而絕對(duì)路徑能夠確保路徑一定正確。
例如,現(xiàn)在想從/root目錄中進(jìn)入到/etc目錄中,可以下達(dá)命令:
# cd /etc
使用cd命令時(shí),有幾個(gè)特殊格式的目錄表示方式需要我們了解一下,參見表7-2。
表7-2 特殊目錄的表示方法及含義
特殊目錄的表示方法
含 義
.
代表當(dāng)前目錄
..
代表上層目錄
~
代表當(dāng)然登錄用戶的宿主目錄
~用戶名
代表進(jìn)入~后用戶的宿主目錄
-
代表前一目錄,即進(jìn)入當(dāng)前目錄之前操作的目錄
上述目錄操作方式如圖7-3所示。
(點(diǎn)擊查看大圖)圖7-3 特殊目錄的使用方法
提示:
直接在命令行中輸入cd命令而不加任何參數(shù),可以馬上回到用戶的主目錄(home),這一點(diǎn)與DOS中cd命令顯示當(dāng)前路徑不同,請(qǐng)一定注意。在Linux中,很多與用戶自身相關(guān)的配置文件、屬于自己的文檔、程序、腳本和安裝包等都存放在用戶自己的home目錄中,這個(gè)目錄就相當(dāng)于Microsoft Windows中的“我的文檔”。所以能用cd命令直接“回家”,真的很方便
7.1.3 查看當(dāng)前路徑命令:pwd
pwd命令能夠顯示當(dāng)前所處的路徑。
這個(gè)命令比較簡單,如果有時(shí)在操作過程中忘記了當(dāng)前的路徑,則可以通過此命令來查看路徑,其執(zhí)行方式為:
# pwd
/home/samlee
第一行為運(yùn)行的命令,第二行的內(nèi)容為運(yùn)行pwd命令后顯示的信息,即顯示用戶當(dāng)前所在的工作目錄的路徑為/home/samlee。
提示:
應(yīng)該經(jīng)常使用pwd命令。Linux的目錄結(jié)構(gòu)非常復(fù)雜,一個(gè)小小的分支就可能會(huì)有十幾層目錄,就好像是個(gè)森林,所以Linux不會(huì)像Windows那樣把全路徑寫在提示符里,那樣太長了。
在目錄用cd鉆來鉆去,很容易記不清自己到底身在何處,這時(shí)候執(zhí)行命令可是有點(diǎn)危險(xiǎn)的,例如,想刪除一個(gè)文件,不搞清楚當(dāng)前目錄,可能會(huì)誤刪除同名的有用文件,而且沒那么容易恢復(fù)。還有很多其他的情況需要使用pwd,尤其是在執(zhí)行“rm –rf”這種對(duì)目錄直接刪除的操作時(shí),更需要用pwd確定一下,可能每執(zhí)行十幾個(gè)命令就會(huì)輸入一回。我們應(yīng)該感謝Jim Meyering先生,他是pwd的創(chuàng)作者。
7.1.4 改變文件創(chuàng)建時(shí)間及創(chuàng)建空文件命令:touch
touch命令能夠創(chuàng)建一個(gè)空白文件,或者改變文件的創(chuàng)建時(shí)間。
touch命令的執(zhí)行方式為:
# touch 文件名
一般來說,建立一個(gè)文件都會(huì)使用一個(gè)文本編輯器(如第8章要介紹的vi編輯器),但是也可以使用touch命令來創(chuàng)建一個(gè)空白的文件。
例如,現(xiàn)在要在/home目錄下創(chuàng)建一個(gè)名為test的空白文件,可以執(zhí)行命令:
# touch /home/test
實(shí)際上,對(duì)于touch命令來說,其最主要的功能是改變文件的時(shí)間,那么一個(gè)文件擁有哪些時(shí)間屬性呢?對(duì)于一個(gè)文件來說,主要有三種時(shí)間屬性,分別為:
(1)mtime:這個(gè)時(shí)間記錄的是文件內(nèi)容被修改的時(shí)間。
(2)ctime:這個(gè)時(shí)間記錄的是文件的屬性(所有者、所屬組、文件名)或者權(quán)限被修改的時(shí)間。
(3)atime:這個(gè)時(shí)間記錄的是文件的內(nèi)容被讀取的時(shí)間。
下面我們舉個(gè)例子來說明,現(xiàn)在我們?cè)?home目錄下創(chuàng)建了一個(gè)文件file,然后分別查看其三個(gè)時(shí)間,命令操作如圖7-4所示。
(點(diǎn)擊查看大圖)圖7-4 顯示文件的三種時(shí)間狀態(tài)
通過圖7-4我們可以看到,在剛開始創(chuàng)建文件時(shí)候三種時(shí)間是相同的,在默認(rèn)情況下使用ls –l命令查看到的是文件內(nèi)容修改的時(shí)間(即mtime),如果在不同時(shí)間內(nèi)分別對(duì)其進(jìn)行編輯內(nèi)容,修改文件所有者和讀取內(nèi)容操作后,三個(gè)時(shí)間即會(huì)發(fā)生變化,具體命令以后會(huì)詳細(xì)講解,在此只需要觀察一下命令結(jié)果即可,如圖7-5所示。
(點(diǎn)擊查看大圖)圖7-5 文件的三種時(shí)間狀態(tài)發(fā)生變化后效果
通過圖7-5可以看到,我們通過不同時(shí)間內(nèi)的不同操作后,file文件的三種時(shí)間分別發(fā)生了變化,如果現(xiàn)在我們想讓其變成與當(dāng)前時(shí)間相同,則可以使用touch命令,執(zhí)行結(jié)果如圖7-6所示。
(點(diǎn)擊查看大圖)圖7-6 使用touch命令改變時(shí)間狀態(tài)
這樣就將file文件的時(shí)間變成了當(dāng)前的時(shí)間。
touch 命令的參數(shù)不多,常見的有以下幾個(gè),見表7-3。
表7-3 touch命令選項(xiàng)
7.1.5 創(chuàng)建目錄命令:mkdir
mkdir 命令能夠創(chuàng)建一個(gè)目錄。mkdir 命令的執(zhí)行方式為:
# mkdir 目錄名
其實(shí)一個(gè)目錄就是一個(gè)特殊類型的文件,就如同Windows中的文件夾一樣,目錄里面既可以有文件,也可以有子目錄,就是因?yàn)橛心夸浀拇嬖?,Linux才能夠以一種目錄樹的結(jié)構(gòu)對(duì)文件系統(tǒng)進(jìn)行管理。
例如現(xiàn)在要建立一個(gè)directory目錄,則可以執(zhí)行命令:
# mkdir directory
創(chuàng)建完目錄后可以使用ls –l命令去查看目錄是否建立成功。如果directory所在行的第一個(gè)字母為d,則說明建立成功。
有時(shí)候我們需要一次性地建立多級(jí)目錄,則可以使用-p參數(shù):
# mkdir -p /home/dir1/dir2/dir3
7.1.6 刪除空目錄命令:rmdir
rmdir命令能夠刪除一個(gè)空目錄。rmdir命令的執(zhí)行方式為:
# rmdir 目錄名
對(duì)于目錄來說,如果里面為空的時(shí)候可以使用rmdir命令來刪除,并且此命令只能用來刪除空目錄,如果是非空目錄,則需要使用下面要介紹的rm 命令。
例如我們要?jiǎng)h除/home/directory這個(gè)空目錄,則可以執(zhí)行命令:
# rmdir /home/directory
提示:
rmdir可以刪除的是非空目錄,被刪的目錄下不能有文件或子目錄。如果只是有子目錄存在,還可以用-p來刪除;如果含有文件,那么-p選項(xiàng)也無能為力了。只有使用“rm –rf”大法,才能“連根拔起”。
7.1.7 除文件(目錄)命令:rm
rm命令能夠刪除一個(gè)文件或者目錄。rm命令的執(zhí)行方式為:
# rm [-選項(xiàng)] 文件名或者目錄名
對(duì)于Ubuntu來說,這個(gè)命令是比較危險(xiǎn)的一個(gè)命令,因?yàn)橐坏┦褂昧诉@個(gè)命令刪除的文件如果再進(jìn)行了磁盤寫操作后將無法再恢復(fù)。在其他版本的一些Linux中,默認(rèn)情況下給rm命令加上了一個(gè)i選項(xiàng),可以在刪除前對(duì)操作進(jìn)行確認(rèn),建議當(dāng)學(xué)習(xí)完Shell一節(jié)后也利用命令別名使其擁有這一特性。
剛才介紹的rmdir命令只能刪除一個(gè)空目錄,而rm命令不但能刪除任何目錄,而且可以刪除文件。
例如,現(xiàn)在在/home目錄下分別建立一個(gè)文件file和一個(gè)目錄directory,并且在目錄directory下建立file1文件,操作如下:
# touch /home/file
# mkdir /home/directory
# touch /home/directory/file1
現(xiàn)在分別將file文件和directory目錄刪除,操作如下:
# rm /home/file
# rm -r /home/directory
現(xiàn)在就可以將file文件和directory目錄刪除了,注意,當(dāng)使用rm命令刪除目錄時(shí),應(yīng)該加上-r選項(xiàng),否則系統(tǒng)會(huì)顯示不能刪除目錄的信息。rm命令選項(xiàng)如表7-4所示。
如果我們要在每一次執(zhí)行此命令前都要進(jìn)行確認(rèn)操作是否進(jìn)行,則可以加上-i 選項(xiàng):
# rm -i /home/file
表7-4 rm命令選項(xiàng)
7.1.8 復(fù)制命令:cp
cp命令能夠復(fù)制一個(gè)文件或者生成一個(gè)不同名但是內(nèi)容相同的文件。
cp命令的執(zhí)行方式:
如果是復(fù)制文件,則執(zhí)行方式為:
# cp源文件名 目標(biāo)路徑
如果是生成不同名但是內(nèi)容相同的文件,則下達(dá)方式為:
# cp源文件名 目標(biāo)文件名
例如,現(xiàn)在需要將/etc/passwd文件復(fù)制到/home目錄中,可以執(zhí)行如下操作:
# cp /etc/passwd /home
這時(shí)在/home目錄中即有一個(gè)文件passwd,現(xiàn)在想生成一個(gè)passwd_new文件,要求內(nèi)容與passwd文件內(nèi)容相同,則可以執(zhí)行命令:
# cp passwd passwd_new
這樣就生成了一個(gè)passwd_new文件,其內(nèi)容與passwd文件內(nèi)容相同。以后當(dāng)配置DNS服務(wù)器的時(shí)候,就可以采用同樣的方法生成不同的區(qū)域數(shù)據(jù)文件,然后只需要對(duì)每個(gè)文件里面的不同部分進(jìn)行修改就可以了,避免了每生成一個(gè)文件都要重新寫一遍的麻煩。
cp命令的選項(xiàng)非常多,表7-5將其常用的一些列出。
表7-5 cp命令選項(xiàng)
7.1.9 移動(dòng)文件(目錄)命令:mv
mv命令用來移動(dòng)一個(gè)文件(目錄)或者是給文件(目錄)改名。
mv命令的執(zhí)行方式為:
如果是移動(dòng)文件,則執(zhí)行方式為:
# mv要移動(dòng)的文件 目標(biāo)路徑
如果是給文件改名,則執(zhí)行方式為:# mv原文件名 新文件名
例如,在/目錄下有一個(gè)文件為test,要將其移動(dòng)到/home目錄中,可以執(zhí)行如下操作:# mv /test /home
此時(shí)就將test文件移動(dòng)到/home目錄中了,現(xiàn)在需要將其改名為test_new,則可以執(zhí)行如下操作:# mv /home/test /home/test_new
這樣就將test文件成功改名為test_new。
7.1.10 顯示文件內(nèi)容命令:cat
cat命令能夠顯示一個(gè)文件的內(nèi)容。
cat命令的執(zhí)行方式為:
# cat 文件名
cat命令的常見用法是查看一個(gè)文件的內(nèi)容,例如,現(xiàn)在想查看一下/etc/passwd文件的內(nèi)容,可以執(zhí)行命令: # cat /etc/passwd
這樣不用打開文件就可以看到passwd文件的內(nèi)容了,但是cat命令的一個(gè)缺點(diǎn)是它在顯示文件內(nèi)容時(shí)不能做任何停留,所以如果遇到了一個(gè)文件內(nèi)容超過整個(gè)屏幕的時(shí)候我們只能看到其最后部分,解決的辦法是使用管道符(見第9章)和分屏顯示命令:# cat /etc/passwd | more
還可以通過cat命令和輸出重定向命令將一個(gè)文件的內(nèi)容輸出到另一個(gè)文件中去,即我們常說的將兩個(gè)文件進(jìn)行合并:
# cat /etc/passwd >> /home/passwd_bak
這樣passwd文件的內(nèi)容就會(huì)追加到passwd_bak文件中,從而達(dá)到兩個(gè)文件合并的目的。
7.1.11 從頭開始查看文件內(nèi)容命令:head
head命令能夠從頭開始顯示文件內(nèi)容,并且能夠設(shè)定查看的行數(shù)。
head命令的執(zhí)行方式為:
# head [-n] 文件名
n為數(shù)字,即設(shè)定的行數(shù)。
head命令能夠從文件開始處查看一個(gè)文件的指定的行數(shù),如想要查看/etc/passwd文件的前五行,可以執(zhí)行命令:
# head -5 /etc/passwd
如果沒有指定行數(shù)的話,默認(rèn)是顯示前十行。
7.1.12 tail命令
tail命令能夠從文件結(jié)尾開始顯示文件內(nèi)容,并且指定查看的行數(shù)。
tail命令的執(zhí)行方式:
# tail [-n] 文件名
tail命令能夠從一個(gè)文件的結(jié)尾處向上查看一個(gè)文件的指定的行數(shù),它正好與head命令相反,是倒序進(jìn)行查看的,如想要查看/etc/passwd文件的后面5行,可以執(zhí)行命令:# tail -5 /etc/passwd
與head命令一樣,如果沒有指定行數(shù)的,默認(rèn)是顯示后面十行。
7.1.13 分屏顯示文件命令:more(less)
more命令能夠?qū)ξ募?nèi)容或者查詢結(jié)果進(jìn)行分屏顯示。more命令的執(zhí)行方式為:
# more 文件名
more命令可以單獨(dú)使用,也可以和配合管道符使用。它的主要作用是能夠?qū)⑵聊惠敵龅慕Y(jié)果分屏顯示。例如使用cat命令查看/etc/passwd文件時(shí),只能看到最后的內(nèi)容,為了能夠看到文件所有內(nèi)容,可以執(zhí)行命令:# more /etc/passwd
或者是配合管道符命令:# cat /etc/passwd | more
這時(shí)就可以分屏來查看文件內(nèi)容了,可以通過回車鍵向下一行行滾動(dòng),但是它的缺點(diǎn)是不能夠進(jìn)行向上滾動(dòng),如果想向上翻屏,需要使用less命令,less命令的用法與more命令完全相同,唯一不同點(diǎn)是less命令能夠向上翻屏??梢酝ㄟ^上下箭頭進(jìn)行上下一行行滾動(dòng),也可以通過page up/page down命令向上/向下進(jìn)行一屏一屏滾動(dòng)。
7.2 文件處理命令
Linux提供了一些用于處理文件的命令,使用它們,能夠完成很多只有高級(jí)文本編輯器才能完成的功能,本節(jié)對(duì)其常用的一些進(jìn)行介紹。
7.2.1 文件比較命令:diff
diff命令能夠比較兩個(gè)文件的差異,diff命令的執(zhí)行方式為:
# diff [-選項(xiàng)] 文件一 文件二
如果想比較出兩個(gè)文件內(nèi)容的不同,使用diff命令非常方便。例如,現(xiàn)在將/etc/passwd文件復(fù)制到/home目錄下,并且將其復(fù)制生成文件passwd_new,再將passwd_new文件進(jìn)行修改,然后使用diff命令比較出兩個(gè)文件的不同,操作如下:# cp /etc/passwd
# cp /home/passwd /home/passwd_new
# diff /home/passwd /home/passwd_new
這樣就很容易看到兩個(gè)文件的不同了。
diff命令后還可以加一個(gè)目錄名和文件名或者兩個(gè)都是文件名,換句話說,如果上述命令執(zhí)行方式處的文件一(或者是文件二)是目錄,文件二(或者是文件一)不是目錄,這樣diff就會(huì)在目錄中找到與文件名相匹配的文件進(jìn)行比較,例如:
# diff /home file
這樣diff會(huì)在/home目錄中找到是否有file文件,然后與后面的file文件進(jìn)行內(nèi)容比較。
7.2.2 排序命令:sort
sort命令能夠?qū)ξ募?nèi)容或者查詢結(jié)果進(jìn)行排序。
sort命令的執(zhí)行方式為:
# sort [-選項(xiàng)] 文件名
sort命令可以對(duì)指定文件中的所有行進(jìn)行排序,它的排序是根據(jù)從指定的行抽取的一個(gè)或者多個(gè)關(guān)鍵字來進(jìn)行排序的。
例如,現(xiàn)在想根據(jù)/etc/passwd文件中的第三列來將passwd文件進(jìn)行排序后輸出,應(yīng)該下達(dá)如下命令:
# sort -t “:” -k 3 /etc/passwd
其中-t選項(xiàng)指定了每列的分割符,-k選項(xiàng)指定了以第幾列進(jìn)行排序。
sort命令選項(xiàng)很多,表7-6列出了其常用選項(xiàng):
表7-6 sort命令選項(xiàng)
7.2.3 統(tǒng)計(jì)命令: wc
wc命令可以對(duì)文件的行數(shù)、單詞數(shù)和字符數(shù)進(jìn)行統(tǒng)計(jì)。
wc命令執(zhí)行方式為:
# wc [-選項(xiàng)] 文件名
wc命令是一個(gè)對(duì)文件進(jìn)行統(tǒng)計(jì)的非常好的命令,例如,現(xiàn)在需要統(tǒng)計(jì)當(dāng)前系統(tǒng)內(nèi)有多少用戶,因?yàn)?etc/passwd文件中保存了所有的用戶,并且每個(gè)用戶的信息為一行,所以可以執(zhí)行命令:# wc -l /etc/passwd
這樣就能夠得到當(dāng)前Ubuntu系統(tǒng)中的用戶數(shù),wc命令還經(jīng)常和管道符進(jìn)行聯(lián)合使用,對(duì)前一個(gè)命令的查詢結(jié)果進(jìn)行統(tǒng)計(jì)。
sort命令的常用選項(xiàng)如表7-7所示。
表7-7 wc命令選項(xiàng)
7.3 設(shè)置權(quán)限命令
在Linux中,一個(gè)用戶對(duì)一個(gè)文件(目錄)是否有權(quán)利去使用,是根據(jù)此文件(目錄)設(shè)置的權(quán)限所決定的。Ubuntu中的每個(gè)用戶都至少屬于一個(gè)組。
現(xiàn)以一個(gè)班級(jí)為例說明用戶與組的關(guān)系。我們可以把班級(jí)里的每個(gè)學(xué)生看成是Ubuntu里的一個(gè)用戶,現(xiàn)班級(jí)規(guī)定,每個(gè)人必須參加一個(gè)興趣小組,甲同學(xué)參加了科技小組,那么他就是科技小組這個(gè)“組”里的成員,乙同學(xué)參加了書法小組,那么他就是書法小組這個(gè)“組”里成員,對(duì)于科技小組來說,組里的自己的私有物品也只有自己能夠使用,如果書法小組的人想使用科技小組里成員的物品的話,需要科技小組的成員的物品所有者同意才可,但是由于科技小組里的成員都是一個(gè)小組,所以可能他們互相之間的使用物品的權(quán)限要比外組的成員要大一些??梢杂脠D7-7表示。
圖7-7 用戶與組的關(guān)系
可以看到,一個(gè)用戶既可以屬于一個(gè)組,也可以屬于多個(gè)組,而每個(gè)組里成員的各自物品都可以根據(jù)自己的規(guī)定來讓同組的成員和不在此組里的成員使用,實(shí)際上,這就是Linux最基本的權(quán)限模型。
Linux中的一個(gè)文件在正常情況下是屬于一個(gè)用戶所有,將此用戶稱為文件的所有者(也可以稱為屬主),而將一些用戶統(tǒng)一分在一個(gè)組里,設(shè)定此組對(duì)文件操作的權(quán)限,這個(gè)組為文件的所屬組,既不是文件的所有者,也不是文件的所屬組里的用戶我們統(tǒng)一稱為其他人。
了解了這些基本概念后,我們就來學(xué)習(xí)一下設(shè)定權(quán)限的相關(guān)命令。需要說明的是,對(duì)于超級(jí)用戶(UID為0)來說,它擁有所有權(quán)限
7.3.1 設(shè)定權(quán)限命令 chmod(1)
chmod命令能夠?qū)ξ募O(shè)定權(quán)限。
在Linux中,文件(目錄)的權(quán)限分為可讀、可寫、可執(zhí)行三類權(quán)限,其中可讀用字母r表示,可寫用字母w表示,可執(zhí)行用字母x表示。
1.對(duì)于文件來說
可讀是指可以查看文件內(nèi)容,例如,使用vi或者cat命令能夠查看文件內(nèi)容。
可寫是指可以修改文件內(nèi)容并且保存修改后的結(jié)果,如使用vi命令能夠修改文件內(nèi)容后保存。
可執(zhí)行指的是能夠運(yùn)行此文件,在Linux中,一個(gè)是否能夠執(zhí)行不決定于其擴(kuò)展名,而是看其是否被設(shè)定了可執(zhí)行權(quán)限,當(dāng)然前提是本身一定是個(gè)二進(jìn)制文件或者腳本文件。例如普通文本文件即使設(shè)定了可執(zhí)行權(quán)限后也無法執(zhí)行。
2.對(duì)于目錄來說
可讀是指能使用ls命令顯示目錄下的內(nèi)容。
可寫指的是能夠在此目錄下建立和刪除文件。在Linux中,一個(gè)文件是否能夠被刪除,是決定于其所在目錄是否對(duì)命令執(zhí)行者設(shè)定可寫權(quán)限,而與文件本身權(quán)限無關(guān),文件本身權(quán)限只是對(duì)文件本身內(nèi)容或者是否能執(zhí)行進(jìn)行限制。
可執(zhí)行指的是能夠在目錄下運(yùn)行命令,所以如果想讓一個(gè)用戶能夠進(jìn)入此目錄,必須對(duì)此目錄在相應(yīng)的權(quán)限位上設(shè)定可執(zhí)行權(quán)限。
在對(duì)文件和目錄設(shè)定之前,來看一下如何查看文件的權(quán)限。
在Linux中,使用ls -l命令查看權(quán)限屬性。對(duì)于/etc/passwd文件,使用ls -l命令后結(jié)果如圖7-8所示。
(點(diǎn)擊查看大圖)圖7-8 /etc/passwd文件權(quán)限
下面介紹每列含義:
(1)第一列:文件類型和權(quán)限,這部分稍后重點(diǎn)介紹。
(2)第二列:i節(jié)點(diǎn),即硬鏈接數(shù),在文件系統(tǒng)部分還會(huì)介紹。
(3)第三列:文件的屬主,即文件的所有者,有時(shí)候我們將一個(gè)文件復(fù)制給另一用戶,要記得將文件的屬主也要改變,否則可能會(huì)發(fā)生文件權(quán)限不對(duì)的錯(cuò)誤。
(4)第四列:文件的屬組,即文件的所屬組,即在此組里的用戶對(duì)文件有擁有不同的權(quán)限。
(5)第五列:文件的大小,大小以字節(jié)顯示。
(6)第六列:最近一次文件內(nèi)容的修改時(shí)間,即mtime。
(7)第七列:文件或者目錄名。
現(xiàn)在重點(diǎn)來解釋第一列,/etc/passwd文件使用ls -l命令后,查詢結(jié)果的第一列如下:
-rw-r--r--
可以看到,這部分還可以細(xì)分為十列,實(shí)際上可以將這十列分為兩部分,第一列為第一部分,代表了文件的類型,文件的類型主要有以下幾種:
(1)-表示是普通文件
(2)d表示是目錄
(3)l表示是鏈接文件
(4)b表示是塊設(shè)備文件,例如硬盤的存儲(chǔ)設(shè)備等
(5)c表示是字符設(shè)備文件,如鍵盤等
(6)s表示是套接字文件,此主要跟網(wǎng)絡(luò)程序有關(guān)
(7)p表示是管道文件
這樣根據(jù)文件類型就可以判斷一個(gè)文件到底是文件還是目錄,或者是哪種類型的文件,即使文件不以顏色顯示也沒有關(guān)系了。
第二列至第十列為第二部分,這部分一共9列,每三列為一組,共分為三組,由左至右分別代表了屬主的權(quán)限,屬組的權(quán)限,其他人的權(quán)限。如對(duì)于剛才我們查詢的結(jié)果來說,/etc/passwd文件屬主為root,屬于root組,各部分權(quán)限分別為:
屬主的權(quán)限為:rw-
屬組的權(quán)限為:r--
其他人的權(quán)限為:r--
我們發(fā)現(xiàn),每組正好由三列組成,依次代表了可讀權(quán)限、可寫權(quán)限、可執(zhí)行權(quán)限。也就是說,如果屬主對(duì)文件擁有可讀權(quán)限,則在屬主權(quán)限位上的第一列就用r表示,而“-”代表沒有相關(guān)的權(quán)限。由此我們可以得到/etc/passwd文件的權(quán)限:
root(屬主)用戶對(duì)passwd文件擁有可讀(r)可寫(w)權(quán)限。
root(屬組)組里的用戶對(duì)passwd文件擁有可讀權(quán)限。
既不是root用戶也不屬于root組的用戶對(duì)文件擁有可讀權(quán)限。
下面我們使用chmod命令來設(shè)定文件的權(quán)限。
chmod 命令的格式為:
chmod [選項(xiàng)] 權(quán)限 文件名(目錄名)
使用chmod命令設(shè)定權(quán)限的方法有兩種:數(shù)字和字符。
1.?dāng)?shù)字方式設(shè)定權(quán)限
文件的權(quán)限共有三種:可讀(r)、可寫(w)、可執(zhí)行(x),使用數(shù)字4代表讀權(quán)限;2代表寫權(quán)限;1代表可執(zhí)行權(quán)限;0表示沒有相應(yīng)的權(quán)限,所以,如果用戶擁有哪個(gè)權(quán)限,就將其代表的數(shù)字相加,最后相加的和即為用戶的權(quán)限。比如說,還是以passwd文件為例,我們知道root(屬主)用戶對(duì)文件擁有的權(quán)限為rw-,所以使用數(shù)字來代表即為:
4(r) + 2(w) + 0(-)= 6
依此類推,能夠得到屬組和其他人的權(quán)限;
屬組的權(quán)限:4(r) + 0(-) + 0(-) = 4
其他人的權(quán)限:4(r) + 0(-) + 0(-) = 4
即644為此文件的權(quán)限,其中第一個(gè)數(shù)字是代表屬主所擁有的全部權(quán)限,第二個(gè)數(shù)字是代表屬組里的用戶所擁有的權(quán)限,第三個(gè)數(shù)字代表其他人所擁有的權(quán)限。下面舉例說明如何使用chmod命令進(jìn)行設(shè)定權(quán)限,使用Ubuntu用戶創(chuàng)建一個(gè)文件file,因?yàn)樵谀J(rèn)情況下在Ubuntu中創(chuàng)建的用戶都是屬于users組的,所以我們希望此文件權(quán)限為:
ubuntu(屬主)用戶可讀可寫
users(屬組)里的用戶只能夠讀。
其他人沒有任何權(quán)限,即不能讀,寫和執(zhí)行
由上面的方法我們能夠得到此文件的權(quán)限數(shù)字為
屬主:4(讀) + 2 (寫) + 0(執(zhí)行) = 6
屬組:4(讀) + 0(寫) + 0(執(zhí)行) = 4
其他人:0(讀) + 0(寫) + 0 (執(zhí)行)= 0
命令執(zhí)行結(jié)果如圖7-9所示。
(點(diǎn)擊查看大圖)圖7-9 使用chmod設(shè)定權(quán)限
使用chmod命令以數(shù)字方式設(shè)定文件或者目錄的權(quán)限,設(shè)定后以前的權(quán)限無論是什么都會(huì)以后設(shè)定的為準(zhǔn)。
7.3.1 設(shè)定權(quán)限命令 chmod(2)
2.字符方式設(shè)定權(quán)限
還可以使用字符方式設(shè)定權(quán)限,使用字符方式能夠很方便地對(duì)文件的權(quán)限進(jìn)行修改和設(shè)定。字符方式各符見表7-8。
表7-8 字符方式設(shè)定權(quán)限
使用字符方式設(shè)定權(quán)限,有時(shí)可以在原來的權(quán)限基礎(chǔ)上進(jìn)行修改,現(xiàn)在舉例說明:使用Ubuntu用戶創(chuàng)建文件file,然后執(zhí)行以下操作:
(1)將其權(quán)限設(shè)定為所有人都只讀
(2)將文件屬主增加可寫權(quán)限
(3)將其他人的可讀權(quán)限去除
執(zhí)行結(jié)果如圖7-10所示。
(點(diǎn)擊查看大圖)圖7-10 使用字符方式設(shè)定權(quán)限
也可以將第二個(gè)要求和第三個(gè)要求同時(shí)完成,兩個(gè)設(shè)定之間只需用“,”隔開。即可以如下操作:
# chmod u+w,o-r file
可以使用-R選項(xiàng)進(jìn)行多級(jí)目錄的權(quán)限設(shè)定。例如:
# chmod -R 755 /home
這樣就可以將/home目錄以及其目錄下的所有文件和目錄權(quán)限都設(shè)定為755。
7.3.2 更改屬主(屬組)命令:chown
chown命令可以更改一個(gè)文件(目錄)的屬主或者屬組。
chown命令的執(zhí)行方式為:
# chown [選項(xiàng)] 屬主[.屬組] 文件名
使用chown命令,能夠?qū)⒁粋€(gè)文件的屬主或者屬組進(jìn)行或者同時(shí)進(jìn)行改變。同時(shí)改變時(shí),屬主和屬組之間使用“.”隔開,還可以使用-R選項(xiàng)同時(shí)將目錄下的所有文件和目錄的屬主和屬組進(jìn)行修改。
例如,現(xiàn)在使用root用戶創(chuàng)建一個(gè)文件,然后執(zhí)行下列操作:
(1)將其文件屬主改為ubuntu用戶
(2)將其屬組改為users組
(3)將屬主和屬組同時(shí)改為root
執(zhí)行命令結(jié)果見圖7-11。
(點(diǎn)擊查看大圖)圖7-11 使用chown命令
在本例中使用root賬號(hào)進(jìn)行操作,防止來回在不一樣的用戶間進(jìn)行切換,由上面的命令可知,單獨(dú)改變文件的屬組時(shí),需要在屬組組名前面加上“.”。對(duì)于root用戶來說,一般情況下,文件的權(quán)限對(duì)其不起作用,特殊情況會(huì)在高級(jí)權(quán)限設(shè)定時(shí)講解。
7.3.3 更改文件屬組命令:chgrp
chgrp命令能夠改變文件(目錄)的屬組。
chgrp命令的執(zhí)行方式為:
# chgrp [選項(xiàng)] 屬組 文件名
chgrp命令只是單純的修改文件的屬組,例如:
# chgrp users file
此命令的執(zhí)行結(jié)果是將file文件的屬組改為了users。
提示:
chgrp與chown命令的用法基本是一致的,用法也比較簡單??梢杂?R參數(shù)把一個(gè)目錄下的所有內(nèi)容都改變用戶和組。
7.4 文件查找命令
相信每個(gè)人都有過在計(jì)算機(jī)查找一些文件的經(jīng)歷,對(duì)于記憶力不是很好的筆者更是經(jīng)常如此,相信大家對(duì)Windows的搜索功能還是記憶猶新,其實(shí)Ubuntu也提供了功能非常強(qiáng)大的查找命令,下面我們就來體會(huì)一下。
7.4.1 按路徑進(jìn)行查找的命令:which
which命令能夠按PATH變量所規(guī)定的路徑進(jìn)行查找。
which命令的執(zhí)行方式為:
# which 命令名
系統(tǒng)默認(rèn)是有很多系統(tǒng)變量存在的,其中有一個(gè)變量PATH,它定義了執(zhí)行命令時(shí)命令所要查找的路徑,例如,執(zhí)行passwd命令給用戶改密碼時(shí),系統(tǒng)會(huì)自動(dòng)去PATH變量所規(guī)定的路徑下去搜尋是否有此命令,如果有,則執(zhí)行,否則將提示命令不存在,這也是為什么有些Linux初學(xué)者明明在當(dāng)前目錄下執(zhí)行此目錄里的命令而出現(xiàn)系統(tǒng)提示命令不存在(此時(shí)若要執(zhí)行可以下達(dá)命令./命令名)。
這點(diǎn)與Windows有很大不同,其實(shí)Windows也是有PATH變量存在的,當(dāng)初筆者曾經(jīng)在工作的時(shí)候安裝UG軟件,結(jié)果安裝完成后總是無法運(yùn)行UG程序,最后將UG程序的路徑給放到PATH變量里才正常運(yùn)行。
由上可以看出,PATH變量是存放命令的,而which是按PATH變量規(guī)定的路徑來找,所以which主要是用來查找命令的,并且查找到后將命令的絕對(duì)路徑給顯示出來。
例如,現(xiàn)在想知道which命令本身的絕對(duì)路徑,可以下達(dá)命令:
# which which
這樣查詢到的結(jié)果為:
/usr/bin/which
Which命令一般只查詢到第一個(gè)匹配的結(jié)果,如果想將所有匹配的結(jié)果全部顯示出來可以加上-a參數(shù)。
7.4.2 按資料庫查找的命令:whereis
whereis命令能夠?qū)⒉坏懿樵兂雒?,還能查詢出Ubuntu資料庫里記載的文件。
whereis命令的下達(dá)方式為:
#whereis [選項(xiàng)]文件名
與which不同的是,whereis不但能夠找到可執(zhí)行的命令,而且將所有包含文件名字符串的文件全部查找出來,而且速度非???,遠(yuǎn)遠(yuǎn)快于我們將要介紹的雖然強(qiáng)大但速度卻有些慢的find命令。這是因?yàn)閁buntu會(huì)將它里面所有的資料都記錄在一個(gè)資料庫里,而whereis命令查找時(shí)并不會(huì)在整個(gè)磁盤上進(jìn)行查找,而只在此資料庫里進(jìn)行查找。
例如使用whereis命令來執(zhí)行搜尋passwd,得到的結(jié)果如圖7-12所示。
(點(diǎn)擊查看大圖)圖7-12 使用whereis命令
可以看到,不但找到了passwd命令,連passwd文件等也找到了。
whereis命令常見選項(xiàng)如表7-9所列。
表7-9 whereis命令選項(xiàng)
7.4.3 查找所有匹配的文件的命令:locate
locate命令能夠?qū)⑺信c被查詢的文件名相同的文件查詢出來。
locate命令的執(zhí)行方式為:
# locate 文件名
locate命令的下達(dá)方式比較簡單,直接加上要查詢的文件名即可,因?yàn)樗彩菑馁Y料庫進(jìn)行查詢,所以速度也比較快,但是因?yàn)橘Y料庫的信息由crond進(jìn)程控制更新,所以有時(shí)會(huì)發(fā)生剛安裝完的軟件查詢不到的現(xiàn)象。
7.4.4 功能強(qiáng)大的查找命令:find
find命令能夠按多種方式指定查詢條件,然后進(jìn)行查詢出指定的文件。
說明:因?yàn)閒ind命令功能強(qiáng)大,而且能夠設(shè)定查詢條件,里面涉及的權(quán)限和文件類型的相關(guān)知識(shí),所以大家可以在學(xué)完相應(yīng)的章節(jié)后再來學(xué)習(xí)find命令。
find命令的執(zhí)行方式:
# find 查找的路徑 [選項(xiàng)] [對(duì)查詢到結(jié)果執(zhí)行的命令]
find命令能夠按照用戶給定的條件進(jìn)行查找,并且可以指定查找的路徑,它甚至可以在整個(gè)文件系統(tǒng)內(nèi)或者在具有網(wǎng)絡(luò)文件系統(tǒng)(NFS)的情況下進(jìn)行查找。
為了方便起見,我們將根據(jù)find 命令的選項(xiàng)進(jìn)行分類說明。
1.根據(jù)文件時(shí)間狀態(tài)進(jìn)行查找
大家還記得介紹touch命令時(shí)提到的與文件有關(guān)的三個(gè)時(shí)間吧,所以根據(jù)文件時(shí)間狀態(tài)進(jìn)行查找主要有以下幾項(xiàng):
-atime(+ | -)n:此選項(xiàng)代表查找出n天以前被讀取過的文件。
-mtime(+ | -)n:此選項(xiàng)代表查找出n天以前文件內(nèi)容發(fā)生改變的文件。
-ctime(+ | -)n:此選項(xiàng)代表查找出n天以前的文件的屬性發(fā)生改變的文件。
-newer file:此選項(xiàng)代表查找出所有比file新的文件。
-newer file1! –newer file2:此選項(xiàng)代表查找比file1
文件時(shí)間新但是沒有file2時(shí)間新的文件。
說明:
n為數(shù)字,如果前面沒有+或者-號(hào),代表的是查找出n天以前的,但是只是一天之內(nèi)的范圍內(nèi)發(fā)生變化的文件。
如果n前面有+號(hào),則代表查找距離n天之前的發(fā)生變化的文件。如果是減號(hào),則代表查找距離n天之內(nèi)的所有發(fā)生變化的文件。
-newer file1 ! –newer file2中的!是邏輯非運(yùn)算符。
下面舉例說明,現(xiàn)在想查詢一下所有在最近三天之內(nèi)內(nèi)容發(fā)生變化的文件,可以執(zhí)行:
# find / -mtime -3
如果想查找在/home目錄下查找比file1新但是沒有file2新的文件,則執(zhí)行命令:
#find /home -newer file1 ! –newer file2
2.根據(jù)用戶或者組進(jìn)行查找
系統(tǒng)記錄一個(gè)用戶實(shí)際上記錄的是它的UID號(hào),而記錄組則是記錄的GID號(hào),所以根據(jù)用戶或者組進(jìn)行查找的選項(xiàng)為:
-user 用戶名:根據(jù)文件的屬主名查找文件。
-group 組名:根據(jù)文件的屬組名查找文件。
-uid n:根據(jù)文件屬主的UID進(jìn)行查找文件。
-gid n:根據(jù)文件屬組的GID進(jìn)行查找文件。
-nouser:查詢文件屬主在/etc/passwd文件中不存在的文件。
-nogroup:查詢文件屬組在/etc/group文件中不存在的文件。
說明:
關(guān)于用戶的UID和GID的說明請(qǐng)查閱用戶管理一章。
有時(shí)我們可能使用一個(gè)用戶建立了一些文件,當(dāng)此用戶被刪除后,他所建立的文件就成了無屬主的文件了,所以我們應(yīng)該用-nouser來查詢,-nogroup與之相同。
下面舉例說明,現(xiàn)在想查找所有在/home目錄中屬主是Ubuntu用戶的文件,應(yīng)執(zhí)行命令:
# find /home -user ubuntu
查找出/etc/下所有不屬于任何人的文件,應(yīng)執(zhí)行命令:
# find /etc -nouser
3.根據(jù)文件的權(quán)限或者大小名字類型進(jìn)行查找
Linux里的文件是否能夠執(zhí)行與它的擴(kuò)展名無關(guān),主要是看它是否設(shè)置了可執(zhí)行權(quán)限。所以根據(jù)文件權(quán)限我們也可以設(shè)定查找條件:
-name文件名:按找文件名進(jìn)行查找。
-type文件類型:按文件類型進(jìn)行查找。
-size[+| -]n(c|k):按照文件尺寸進(jìn)行查找。
-perm[+| -]文件權(quán)限:按照文件權(quán)限進(jìn)行查找。
說明:
文件類型可以通過ls -l命令進(jìn)行查詢,“-”代表普通文件,“d”代表目錄?!癰”代表設(shè)備文件,“c”代表字符設(shè)備文件,具體每部分的含義詳見文件系統(tǒng)一章。
按文件大小進(jìn)行查詢時(shí),默認(rèn)的單位是塊,因?yàn)榻^大多數(shù)人習(xí)慣使用字節(jié)或者K等單位,所以我們用“c”表示字節(jié),用“k”表示1024字節(jié)。前面如果有“+”號(hào)代表大于n所指定的大小,“-”代表小于n所指定的大小,沒有的話表示正好等于n所指定的大小。
關(guān)于文件的權(quán)限設(shè)定請(qǐng)參照文件系統(tǒng)章節(jié)中權(quán)限設(shè)定部分,在此不再詳述。但需要注意的是此權(quán)限應(yīng)該是4位,即加上了特殊權(quán)限位的部分。如果文件權(quán)限前面有“+”號(hào),則表示所查找的文件的權(quán)限中有前面權(quán)限條件的任意一個(gè)即可,如果是“-”號(hào),則表示所查找的文件的權(quán)限中至少要包含前面權(quán)限的所有,比權(quán)限條件多沒有關(guān)系,但一定不能少于權(quán)限條件。
下面舉例說明,現(xiàn)在想找出/etc目錄內(nèi)所有的文件大小超過1MB的文件,則執(zhí)行命令:
# find /etc -size +1000000c
在此處1000000c也可以用1000K來表示。
如果想要找出系統(tǒng)內(nèi)所有具有SUID位的文件,則執(zhí)行命令:
# find / -perm -4000
因?yàn)檎业降奈募仨氁哂蠸UID位,所以要用”-4000”,如果是用“+4000”的話,意思是一個(gè)文件只要擁有上述任意一個(gè)條件就會(huì)被顯示出來。
如果想查系統(tǒng)內(nèi)所有具有SUID,SGID或者黏滯位的文件找出來,可以執(zhí)行命令:
# find / -perm +7000
這條命令將會(huì)把系統(tǒng)內(nèi)的任意一個(gè)只要具有SUID或者SGID或黏滯位的文件都列出來。
4.多個(gè)查找選項(xiàng)的應(yīng)用
有時(shí)候需要查找同時(shí)符合兩個(gè)條件,這時(shí)需要-a或者-o選項(xiàng):
-o:邏輯或,兩個(gè)條件只要滿足一個(gè)即可。
-a:邏輯與,兩個(gè)條件必須同時(shí)滿足。
# find /etc -size +2048 -a -size -20480
在/etc目錄下查找大于1MB小于10MB的文件。
# find /etc -name inittab -o -name grub.conf
查找/etc目錄下文件名為inittab或文件名為grub.conf的文件。
5.對(duì)查找到結(jié)果的處理
有時(shí)候我們對(duì)于查找到的結(jié)果需要對(duì)其進(jìn)行進(jìn)一步的操作,這就需要使用-exec或者-ok選項(xiàng),或者使用-print選項(xiàng)。其使用的格式為:
# find 查找的路徑 [選項(xiàng)] [對(duì)結(jié)果處理的命令]
前三部分就是在前面三節(jié)介紹的設(shè)定不同的條件,而對(duì)結(jié)果進(jìn)行處理的格式為:
-exec shell命令 {} \;
其中-exec就是代表要執(zhí)行shell命令,后面加的是shell指令,再后面的“{}”表示的是要對(duì)前面查詢到的結(jié)果進(jìn)行查詢,最后的“\;”表示命令結(jié)束。需要注意的是“{}”和“\”之間是要有空格的。而-ok選項(xiàng)與-exec的唯一區(qū)別就是它在執(zhí)行shell命令的時(shí)候會(huì)事先進(jìn)行詢問,-print選項(xiàng)是將結(jié)果顯示在標(biāo)準(zhǔn)輸入上。
例如現(xiàn)在我們想查找系統(tǒng)內(nèi)所有具有SUID位的文件,并且將結(jié)果保存在/root/SUID_file中,則執(zhí)行命令:
# find / -perm -4000 -exec ls –l > /root/SUID_file {} \;
這樣就能夠保存結(jié)果了,其中的“>”命令是輸出重定向,可參考shell基礎(chǔ)一章。
其實(shí)對(duì)于find命令來說它的選項(xiàng)非常多,在此并沒有完全列出,另外find命令也可以與通配符進(jìn)行配合使用,例如,下面的命令就查找/home目錄下所有以“.txt“為結(jié)尾的文件:
# find /home -name “*.txt” -ok rm {} \;
7.5 壓縮解壓命令
經(jīng)常在工作中使用U盤的朋友可能總會(huì)遇到U盤空間不足的情況,或者有時(shí)候我們要在一個(gè)網(wǎng)絡(luò)帶寬一般的網(wǎng)絡(luò)里發(fā)送郵件的話,可能一兩兆的大小會(huì)讓我們付出漫長的等待代價(jià),這樣就必須要學(xué)會(huì)一些文件的壓縮命令來解決以上的這些問題。Linux也為提供了很多的壓縮和解壓的命令。
7.5.1 壓縮命令:gzip
gzip命令能夠壓縮和解壓以.gz為結(jié)尾的文件。
gzip命令的執(zhí)行方式為:
# gzip [-選項(xiàng)] 文件名
gzip命令是Linux比較常見的壓縮命令之一,它能夠產(chǎn)生以.gz為后綴名的壓縮文件。
例如現(xiàn)在我們要對(duì)/home/file文件進(jìn)行壓縮,執(zhí)行命令:
# gzip /home/file
壓縮完成后會(huì)發(fā)現(xiàn)原來的file文件已經(jīng)變成了file.gz文件,原文件已經(jīng)消失。
還可以在壓縮過程中指定壓縮的百分比,gzip命令提供了1-9級(jí)的壓縮比,1的壓縮比最差,但是壓縮速度比較快,而9的壓縮比最好,但是速度比較慢,默認(rèn)的級(jí)別是6,例如:
# gzip -1 file
gzip命令不但能夠壓縮文件,還可以將壓縮的文件(.gz)解開,例如:
# gzip -d file.gz
gzip命令的常見選項(xiàng)見表7-10。
表7-10 gzip命令選項(xiàng)
gzip命令選項(xiàng)
選項(xiàng)說明
-d
解壓
-n(n=1-9)
指定壓縮級(jí)別
提示:
嚴(yán)格來說,gzip是一個(gè)程序,對(duì)于Ubuntu本身來說,擴(kuò)展名是毫無意義的,例如一個(gè)文件的擴(kuò)展名為.exe不一定就是一個(gè)可執(zhí)行的程序,但是對(duì)于某些特定的程序來說,這些程序要通過指定的擴(kuò)展名來打開指定的文件,而這些與Ubuntu系統(tǒng)本身并無關(guān)系。
7.5.2 查看壓縮文件內(nèi)容命令:zcat
zcat命令能夠不用將.gz的壓縮文件解壓就能查看里面的內(nèi)容。
zcat命令執(zhí)行方式為:
# zcat 壓縮文件名
例如,現(xiàn)在不想使用gzip命令將file.gz文件解壓,但是想查看其中的內(nèi)容,可以執(zhí)行命令:
# zcat file.gz
7.5.3 解壓.zip文件命令:unzip
unzip命令能夠?qū)⒈粀inzip壓縮的文件解壓。
unzip命令的執(zhí)行方式為:
# unzip [-選項(xiàng)] 壓縮文件名.zip
例如想將file1.zip文件在當(dāng)前目錄下解壓,則執(zhí)行命令為:
# unzip file1.zip
如果只想查看壓縮文件里的文件目錄,但是并不想解壓,則執(zhí)行命令為:
# unzip -v file1.zip
將file1.zip文件在/home/zip目錄中進(jìn)行解壓,但是如有相同的文件則并不覆蓋原文件,執(zhí)行命令為:
#unzip -n file1.zip -d /home/zip
unzip命令的選項(xiàng)見表7-11。
表7-11 unzip命令選項(xiàng)
unzip命令的選項(xiàng)
參數(shù)說明
-v
查看文件目錄列表,但不解壓
-d
將文件解壓到指定目錄中
-n
不覆蓋原來已經(jīng)存在的文件
-o
覆蓋已存在的文件并且不需要用戶確認(rèn)
7.5.4 壓縮命令:bzip2
bzip2命令能夠壓縮和解壓以.bz2結(jié)尾的文件。
bzip2命令的執(zhí)行方式為:
# bzip2 [-選項(xiàng)] 文件名
bzip2命令生成的壓縮的文件的擴(kuò)展名為.bz2。
例如現(xiàn)在想將/home/file1進(jìn)行壓縮,則執(zhí)行命令為:
# bzip2 file1
這樣就生成了一個(gè)file1.bz2文件,原文件已經(jīng)消失,與gzip命令一樣,bzip2命令也可以在壓縮前選擇壓縮比的操作,其常見選項(xiàng)與gzip相同,在此不再累述。
7.5.5 查看壓縮文件內(nèi)容命令:bzcat
bzcat命令也比較簡單,不對(duì).bz2文件進(jìn)行解壓就能查看里面內(nèi)容。
命令執(zhí)行方式為:
# bzcat 壓縮文件名
7.5.6 打包并壓縮命令:tar
tar命令能夠?qū)σ粋€(gè)文件或者目錄內(nèi)容進(jìn)行打包壓縮后備份。
tar命令的執(zhí)行方式為:
# tar [-選項(xiàng)] [要打包的文件名或者目錄名] [要解壓或解包的文件或者目錄名]
tar命令常常用來對(duì)文件或者目錄做備份。無論是剛才的gzip命令,還是bzip2命令,都會(huì)發(fā)現(xiàn)它們只能對(duì)單一文件進(jìn)行壓縮,而即使是同時(shí)輸入兩個(gè)文件名,也只能是生成兩個(gè)單獨(dú)的壓縮文件,而我們經(jīng)常需要對(duì)很多文件或者目錄同時(shí)進(jìn)行壓縮并且希望生成同一個(gè)文件,這樣就得先通過tar命令將需要同時(shí)進(jìn)行備份的內(nèi)容放到同一文件里,稱之為“.tar”文件,但是此時(shí)僅僅是相當(dāng)于把不同文件放到了一個(gè)大文件中,并沒有壓縮,當(dāng)然可以將打包和壓縮的動(dòng)作一次性完成。并且利用tar命令還可以在壓縮文件中增加新文件或者改變文件。tar命令選項(xiàng)眾多,最常用的請(qǐng)見表7-12。
表7-12 tar命令選項(xiàng)列表
tar命令的選項(xiàng)
選項(xiàng)說明
-c
創(chuàng)建新的打包文件
-x
將.tar文件解包
續(xù)表
tar命令的選項(xiàng)
選項(xiàng)說明
-z
打包后直接用gzip命令進(jìn)行壓縮,或者解壓文件。
-j
打包后直接用bzip2命令進(jìn)行壓縮,或者解壓文件
-t
查看一個(gè)打包文件里的文件目錄
-f
使用文件或者設(shè)備(這個(gè)選項(xiàng)基本上是必選的)
-k
如果在還原時(shí)有相同的文件存在則不進(jìn)行覆蓋
-v
在打包壓縮或者解包解壓后將文件的詳細(xì)清單是否顯示出來
-N
在此選項(xiàng)后加日期,如果文件日期比-N選項(xiàng)后面
加的日期還要新才會(huì)被加進(jìn)壓縮包中
例如,現(xiàn)在想將/etc/passwd文件和/etc/shadow文件打包后壓縮成user.tar.gz文件,可以執(zhí)行如下操作:
# tar czvf /home/user.tar.gz /etc/passwd /etc/shadow
這時(shí)發(fā)現(xiàn)/etc/passwd文件和/etc/shadow文件還存在,并沒有像gzip命令一樣壓縮后原文件就沒有了,同時(shí)會(huì)看到由于使用v選項(xiàng),在打包壓縮后將壓縮的文件清單也顯示在了屏幕上,還可以使用-t選項(xiàng)進(jìn)行查看包里文件,如圖7-13所示。
(點(diǎn)擊查看大圖)圖7-13 使用tar命令查看打包文件內(nèi)容
如果想對(duì)其進(jìn)行解壓解包的話,就可以使用如下命令:
#tar czvf /home/user.tar.gz /etc/passwd /etc/shadow
這樣就可以恢復(fù)壓縮文件里的文件了。
通過以上的例子可以看出,如果要是創(chuàng)建文件的話,一般是cvf三個(gè)參數(shù)。如果壓縮的話,一般再加上z或者j參數(shù)即可,但是后面的文件的擴(kuò)展名也要相應(yīng)地變成.tar.gz或者是.tar.bz2。而如果解包的話一般用xvf三個(gè)參數(shù),同時(shí)還解壓就需要加上z或者j參數(shù)了。
如果只想備份/usr/src目錄下的比2007/1/1還新的文件,那么就執(zhí)行如下命令:
# tar -N ‘2007/1/1’ czvf usr.tar.gz /usr/src
7.6 關(guān)機(jī)重啟命令
相信讀者在前幾個(gè)小節(jié)里大量命令的“洗禮”下,可能需要關(guān)閉計(jì)算機(jī)休息一下了,不過先別急,因?yàn)閁buntu可不是隨便就能關(guān)機(jī)的。我們知道,Ubuntu是一個(gè)多人多工的操作系統(tǒng),這就意味著可能同一時(shí)間不止一個(gè)人在系統(tǒng)上操作,而且在Ubuntu后臺(tái)還在默默地運(yùn)行著很多的工作,關(guān)機(jī)很可能造成其他人工作的丟失,所以需要好好了解一下關(guān)機(jī)的命令。
7.6.1 關(guān)閉計(jì)算機(jī)命令:shutdown
shutdown命令能夠安全地關(guān)閉計(jì)算機(jī)。
shutdown命令執(zhí)行方式為:
# shutdown [選項(xiàng)] [時(shí)間] [警告信息]
shutdown命令其實(shí)就是向系統(tǒng)發(fā)出一個(gè)信號(hào),這個(gè)信號(hào)能夠通知init進(jìn)程改變運(yùn)行級(jí)別,(系統(tǒng)一共有7個(gè)運(yùn)行級(jí)別,具體見第14章“Ubuntu引導(dǎo)流程”一章),而init根據(jù)傳來的信號(hào)的不同就切換到相應(yīng)的級(jí)別中。
例如,現(xiàn)在想讓系統(tǒng)在5分鐘后關(guān)機(jī),可以執(zhí)行命令:
# shutdown -h +5
想讓系統(tǒng)在晚上6點(diǎn)準(zhǔn)時(shí)關(guān)機(jī),則可以執(zhí)行命令:
# shutdown -h 18:00
如果想讓系統(tǒng)在10分鐘后重啟,并且通知所有當(dāng)前登錄用戶,以使其能夠保存工作,可執(zhí)行命令:
# shutdown -r +10 “this system will be reboot after 10minutes”
shudown的選項(xiàng)很多,表7-13列出了其常用選項(xiàng):
表7-13 shutdown命令選項(xiàng)
shutdown命令的選項(xiàng)
選項(xiàng)說明
-r
將系統(tǒng)服務(wù)停掉然后重啟
-h
將系統(tǒng)服務(wù)停掉,然后關(guān)機(jī)
-c
取消已經(jīng)在運(yùn)行的shutdown命令內(nèi)容
7.6.2 系統(tǒng)關(guān)機(jī)命令:halt
halt命令能夠關(guān)閉計(jì)算機(jī)。
halt命令的執(zhí)行方式為:
# halt [選項(xiàng)]
halt命令其實(shí)就是相當(dāng)于執(zhí)行了shutdown -h一樣,它也是停掉系統(tǒng)服務(wù)后然后關(guān)機(jī)。
例如使用halt命令關(guān)機(jī):
# halt
另外可以執(zhí)行-f選項(xiàng)不調(diào)用shutdown命令來使其強(qiáng)行關(guān)機(jī)。
7.6.3 切換啟動(dòng)級(jí)別命令:init
init命令能夠切換Ubuntu的運(yùn)行級(jí)別。
init命令的執(zhí)行方式為:
# init 運(yùn)行級(jí)別
Ubuntu一共有7個(gè)運(yùn)行級(jí)別,其中0級(jí)別為關(guān)機(jī),6級(jí)別為重啟,具體可以通過/etc/inittab文件查詢,所以如果想使用init命令來關(guān)機(jī),只需要下達(dá)命令:
# init 0
7.6.4 關(guān)機(jī)命令:poweroff
poweroff命令比較簡單,它也是能夠關(guān)閉計(jì)算,執(zhí)行方式為:
# poweroff
7.6.5 重啟系統(tǒng)命令:reboot
reboot命令能夠重新啟動(dòng)系統(tǒng)。
reboot命令的執(zhí)行方式為:
# reboot