官术网_书友最值得收藏!

認證目標3.02 標準命令行工具

雖然Linux初學者可能更喜歡使用GUI,但管理Linux系統(tǒng)最有效的工具還是命令行接口。雖然目前存在一些很好的GUI工具,但是這些工具的外觀和操作模式隨不同的發(fā)行版而異。與此相反,如果我們掌握了標準的命令行工具,則可以方便自如地操作每個Linux發(fā)行版。

記住,在任何bash會話中,我們可以利用上下方向鍵來瀏覽前面執(zhí)行過的命令的歷史記錄,使用Ctrl+R鍵進行搜索。還可以利用命令自動補全功能。自動補全功能允許我們用Tab鍵完成命令、文件名或變量(文本需要以$字符開頭)。

幾乎所有的Linux命令都有開關(guān)選項和參數(shù)。命令選項允許改變命令的行為,通常前面帶有一個或兩個短橫線(如ls -a或ls --all)。參數(shù)指定了命令應(yīng)該操作的文件、設(shè)備或其他目標。本章只介紹少數(shù)幾個命令。如果你對這些命令不熟悉,而可以用man文檔。仔細研究命令選項,然后在Linux中進行測試。只有不斷實踐才會理解這些命令的強大功能。

有兩組基本的命令用來管理Linux文件。一組是操作Linux文件和目錄,另一組實際上可以對文件做更進一步的操作。接下來將介紹這些命令,但首先討論基本的文件系統(tǒng)概念。

考試提示

本節(jié)只討論Linux中的最基本命令,只介紹這些命令的幾個最基本的功能。盡管如此,本節(jié)要求你用正確的語法執(zhí)行命令,這正是RHCSA認證目標所要求的。

3.2.1 文件與目錄的概念

如前所述,在Linux中任何東西都可以表示為文件。目錄是特殊類型的文件,它是保存其他文件的容器。為了找到重要的文件,需要介紹一些基本的命令和概念,它們告訴你當前所在的位置以及如何從一個目錄切換到另一個目錄。最重要的命令是pwd命令、波浪形字符(~)和路徑。使用波浪形字符(~)可以切換到用戶的主目錄;而路徑是描述Linux目錄樹中位置的一個概念。與它們緊密相關(guān)的是在執(zhí)行命令時搜索的目錄,它與一個名為PATH的環(huán)境變量有關(guān)。掌握了這些概念后,就可以用cd命令在目錄之間切換。

1. pwd命令

在命令行接口,當前目錄可能是頂層目錄(即為根目錄,用/表示),也可能是一個子目錄。pwd命令可以確定當前目錄。試試這個命令,它顯示一個相對于頂層根目錄(/)的目錄名。有了這個信息,必要時我們就可以切換到其他目錄。順便指出,pwd是打印工作目錄這三個單詞的首字符(print working directory)(它與現(xiàn)代的打印機沒有任何關(guān)系,而是對把輸出打印到電傳打字機的時代的致敬)。例如,當用戶michael在自己的主目錄中執(zhí)行pwd命令時,會看到下面的輸出信息:

        /home/michael

2.波浪符(~)

使用標準的登錄方式時,每個Linux用戶都處于一個主目錄中。波浪符(~)可以用來表示當前用戶的主目錄。例如,當用戶john登錄時,它處在/home/john主目錄中。與此對應(yīng),root管理員用戶的主目錄是/root。

因此,cd ~命令的效果取決用戶名。例如,如果以用戶mj登錄到系統(tǒng),則cd ~命令導(dǎo)航到/home/mj目錄,如果以root用戶登錄到系統(tǒng),則此命令導(dǎo)航到/root目錄。在目錄樹中任何位置都可以用ls ~命令列出自己主目錄中的內(nèi)容。稍后將介紹cd和ls命令的使用。當以root管理員用戶登錄到系統(tǒng)并執(zhí)行l(wèi)s命令,就會看到如下內(nèi)容:

        anaconda-ks.cfg initial-setup-ks.cfg

順便指出,這些文件說明在安裝過程中發(fā)生的事情,即安裝了哪些程序包,在本地系統(tǒng)添加了哪些用戶和組等。anaconda-ks.cfg命令是Kickstart自動安裝的重要工具,這在第2章已經(jīng)討論過。

3.目錄路徑

使用Linux目錄時需要掌握路徑的兩個基本概念:絕對路徑和相對路徑。絕對路徑是從頂層目錄(即root目錄/)的角度來描述完整的目錄結(jié)構(gòu)。相對路徑是以當前目錄為基礎(chǔ)。相對路徑的最前面沒有斜杠。

掌握絕對目錄與相對目錄的區(qū)別很重要。特別當運行一個命令時,絕對目錄是必需的。否則引用錯誤目錄的命令會導(dǎo)致意想不到的結(jié)果。例如,假如當前在頂層root目錄,我們想用相對路徑備份/home目錄。如果恢復(fù)該備份時我們正好在/home目錄中,則michael用戶的文件就會恢復(fù)到/home/home/michael目錄中。

相反,如果用絕對路徑備份/home目錄,則在恢復(fù)這些備份文件時當前目錄不起作用。備份數(shù)據(jù)會恢復(fù)到正確的目錄中。

4.環(huán)境路徑

嚴格來說,在執(zhí)行一個命令時必須引用這個命令的完整路徑。例如,既然ls命令是在/bin目錄中,因此用戶應(yīng)該執(zhí)行/bin/ls命令以列出當前目錄中的文件。有了PATH環(huán)境變量,命令前不需要加上它的完整路徑。當我們在命令行輸入一個命令時,bash shell自動會在PATH環(huán)境變量的路徑中搜索這個命令。從一個控制臺切換到另一個控制臺,環(huán)境變量始終保持不變。

為確定當前用戶的PATH環(huán)境變量的內(nèi)容,只需要執(zhí)行echo $PATH命令。這會看到在屏幕上輸出一系列目錄。在RHEL 7中,普通用戶的PATH變量與root用戶的PATH變量的差別不大。

        $ echo $PATH
        /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:?
        /usr/sbin:/home/michael/.local/bin:/home/michael/bin
        # echo $PATH
        /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

現(xiàn)在,普通用戶與root用戶的PATH變量包含的目錄幾乎完全相同,但是差別還是有的,那就是搜索目錄的順序。例如,/usr/bin和/usr/sbin這兩個目錄都可以使用system-config-keyboard命令。從普通用戶和root管理員用戶PATH變量的默認內(nèi)容可以看出,由于PATH變量存在的差別,兩者的執(zhí)行方法不一樣。

PATH是由/etc/profile文件的當前設(shè)置參數(shù)或者/etc/profile.d目錄中的腳本全局決定的。你可能注意到,系統(tǒng)為UserID(UID)0用戶與其他所有用戶配置的PATH內(nèi)容不大一樣。UID 0對應(yīng)于root管理員用戶。

某個用戶的PATH變量可以由該用戶主目錄中的一個適當?shù)挠涗泚砑右远ㄖ疲穗[藏文件名為~/.bash_profile或~/.profile。

5. cd命令

在Linux中切換目錄非常容易。只要用cd并列出目標目錄的絕對路徑即可。如果使用相對路徑,務(wù)必記住目標目錄取決于當前目錄。

默認情況下,單獨使用cd命令可以導(dǎo)航到用戶的主目錄,該命令不需要波浪形符。另一個常用的快捷命令是兩個連續(xù)的點字符(..),用于代表目錄層次中的上一層目錄。因此,cd..將移動到當前目錄的父目錄。

3.2.2 文件列表和ls命令

既然已經(jīng)知道了從一個目錄導(dǎo)航到另一個目錄的命令,現(xiàn)在該來看看目錄中有哪些文件。這就要用到ls命令。

Linux的ls命令加上合適的開關(guān)選項,是一個功能非常強大的命令。正確使用ls命令可以獲得文件的全部信息,如最后修改日期、最后訪問日期和文件大小等。可以按任何順序排列文件,這對我們非常有用。ls命令的幾個重要變化形式是,ls -a顯示隱藏文件,ls -l長列表顯示文件,ls -t按修改時間順序排列文件,ls -i顯示inode數(shù)(inode是文件系統(tǒng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu),存儲了文件的信息)。其他有用的命令選項包括-r和-R。-r可顛倒排列順序,-R可遞歸地列出所有子目錄的內(nèi)容。

開關(guān)選項可以組合使用。我們經(jīng)常用ls -ltr命令,以遞歸和長列表的形式反序顯示最近修改的文件。-d開關(guān)選項與其他選項一起可以提供當前目錄的更多信息,當為ls命令提供了一個目錄作為參數(shù)時,則可顯示該目錄的更多信息。

ls -Z命令的一個很重要的作用是返回SELinux上下文。分析圖3-2中的輸出結(jié)果,system_u、object_r、var_t和s0等輸出信息表示這些文件的當前SELinux上下文。在RHCSA考試中(RHCE考試也一樣),考生需要配置一個啟用SELinux服務(wù)的系統(tǒng)。從第4章開始將介紹如何為系統(tǒng)的每個服務(wù)配置SELinux。

圖3-2 當前的SELinux上下文

3.2.3 文件創(chuàng)建命令

有兩個命令可用來創(chuàng)建新文件,它們是touch和cp。也可以用vi等文本編輯器創(chuàng)建一個新的文件。當然,盡管ln、mv和rm命令不會創(chuàng)建文件,但是它們確實可以用自己的方法管理文件。

1. touch命令

新建一個文件的最簡單方法也許是用touch命令。例如,touch abc命令在本地目錄中創(chuàng)建了一個名為abc的空文件。touch命令也用來改變文件的最后修改日期。例如,試試下面三個命令:

        # ls -l /etc/passwd
        # touch /etc/passwd
        # ls -l /etc/passwd

注意與每個ls -l命令的輸出有關(guān)的日期和時間,并與date返回的當前日期和時間進行比較。執(zhí)行了touch命令后,/etc/passwd的時間戳將更新為當前的日期和時間。

2. cp命令

cp(copy)命令允許我們把一個文件的內(nèi)容復(fù)制到同名或不同名的文件中,復(fù)制得到的文件可以在任何目錄。例如,cp file1 file2命令讀取file1的內(nèi)容,并將它保存到當前目錄的file2中。使用cp命令的一個風險是它會在不提示用戶的情況下很容易覆蓋掉不同目錄中的文件。

cp命令的另一種用途是將多個文件源復(fù)制到一個目標目錄。此時,語法為cp file1 file2 ... dir。

cp命令在使用-a開關(guān)選項時支持遞歸修改,并保留所有文件屬性,例如權(quán)限、所有權(quán)和時間戳。例如,下面的命令將把源目錄中所有子目錄以及相關(guān)文件復(fù)制到/mnt/backup中。

        # cp -a /home/michael/. /mnt/backup/

3. mv命令

雖然在Linux中不能重命名一個文件,但是可以移動文件。mv命令實質(zhì)上是給文件貼上不同的標簽。例如,mv file1 file2命令就是把file1的名字改為file2。除非把一個文件移到另一個文件系統(tǒng),否則這個文件的全部內(nèi)容包括索引節(jié)點數(shù)(inode number)都不會改變。mv命令也可用于目錄。

4. ln命令

鏈接文件允許用戶使用不同的名稱引用同一文件。當鏈接文件是設(shè)備文件時,它們只代表一些較常用的名字,如/dev/cdrom。鏈接文件可以是硬鏈接,也可以是軟鏈接。

硬鏈接是目錄項,指向同一索引節(jié)點。它們必須在同一文件系統(tǒng)中創(chuàng)建。可以刪除一個目錄中的一個硬鏈接文件,但它還存在于另一個目錄中(只有當指向文件的目錄項記錄數(shù)為0時,才會刪除該文件,這個數(shù)字通過每個文件的計數(shù)器跟蹤)。例如,下面這個命令在實際的Samba配置文件和本地目錄中的smb.conf之間建立了硬鏈接。

        # ln /etc/samba/smb.conf smb.conf

另一方面,軟鏈接起著重定向的作用。當我們打開一個用軟鏈接創(chuàng)建的文件時,則鏈接把我們重定向到原來的文件。如果我們刪除原來的文件,則鏈接就中斷。雖然軟鏈接還在使用,但它不奏效。下面這個命令說明了如何創(chuàng)建一個軟鏈接文件:

        # ln -s /etc/samba/smb.conf smb.conf

5. rm命令

rm命令有點危險。Linux命令行中沒有回收站。因此當我們要用rm命令刪除一個文件后,就很難恢復(fù)這個文件。

rm命令也很強大。例如,當我們下載了Linux內(nèi)核的源文件后,則在/root/rpmbuild/BUILD/kernel-3.10.0-123.el7目錄中有幾千個文件。逐一刪除這些文件是不切實際的,而rm命令提供了幾個功能強大的開關(guān)選項。下面這個命令可以一次性刪除所有這些文件:

        # rm -rf /root/rpmbuild/BUILD/kernel-3.10.0-123.el7

-r開關(guān)選項可以按遞歸方式進行,-f開關(guān)選項可以覆蓋掉任何安全措施,如系統(tǒng)為root用戶創(chuàng)建的alias命令的輸出中的-i開關(guān)。它仍然是一個十分危險的命令。例如,在下面的命令中,/ 與后面的目錄名之間多了個空格。這樣一個簡單的輸入錯誤就會刪除自頂層根目錄開始的全部文件,然后刪除root/rpmbuild/BUILD/kernel-3.10.0-123.el7子目錄。

        # rm -rf / root/rpmbuild/BUILD/kernel-3.10.0-123.el7

這將刪除系統(tǒng)上的每個文件,包括所有掛載點。

6.目錄創(chuàng)建和刪除

mkdir和rmdir命令用來創(chuàng)建和刪除目錄。這兩個命令的用法取決于前面討論的絕對目錄和相對路徑的概念。例如,下面的命令在當前目錄中創(chuàng)建test子目錄。如果用戶目前在/home/michael目錄中,則完整的路徑為/home/michael/test。

        # mkdir test

也可以用下面的命令創(chuàng)建/test目錄:

        # mkdir /test

必要時可以用下面的命令創(chuàng)建一串目錄:

        # mkdir -p test1/test2/test3

上述命令相當于以下命令:

        # mkdir test1
        # mkdir test1/test2
        # mkdir test1/test2/test3

相反,rmdir命令可以刪除一個目錄,條件是它必須是一個空目錄。如果我們想刪除前面mkdir命令創(chuàng)建的目錄,則-p選項特別有用。下面這個命令刪除前面提到的目錄及其子目錄,條件是這些目錄必須都為空:

        # rmdir -p test1/test2/test3

7. alias命令

alias命令可用來簡化幾個命令。對于root用戶,默認的別名可以提供一點安全性。要查看當前用戶的別名,只需要運行alias命令。下面是Red Hat為root用戶設(shè)置的別名列表:

        alias cp='cp -i'
        alias egrep='egrep --color=auto'
        alias fgrep='fgrep -color=auto'
        alias grep='grep --color=auto'
        alias l.='ls -d .* --color=auto'
        alias ll='ls -l --color=auto'
        alias ls='ls --color=auto'
        alias mv='mv -i'
        alias rm='rm -i'
        alias which='alias | /usr/bin/which --tty-only --read-alias ?
        --show-dot --show-tilde'

有些alias命令可防止重要文件被誤刪。-i開關(guān)選項在用cp、mv或rm命令刪除或覆蓋掉文件之前要求用戶確認。同時還要注意,-f開關(guān)選項取代這些命令的-i開關(guān)選項。

3.2.4 通配符

有時,我們可能并不知道文件的精確名字或者準確的搜索條件,此時可以使用通配符,特別是在本書介紹的命令中。三個基本的通配符如表3-1所示。

表3-1 shell中的通配符

實際經(jīng)驗

在Linux領(lǐng)域中,通配符有時也被稱為文件名代換(globbing)。

3.2.5 文件搜索

大多數(shù)用戶在學習Linux一段時間后就熟悉了一些重要的文件。例如,named.conf是標準DNS(Domain Name Service, DNS)服務(wù)器的關(guān)鍵配置文件,這些服務(wù)器基于伯克利因特網(wǎng)名稱域(Berkeley Internet Name Domain, BIND)。但并不很多人都能記得住,包含各種有用配置信息的named.conf示例文件保存在/usr/share/doc/bind-*/sample/etc目錄中。

為此,有兩個基本命令可用于文件搜索:find和locate。

1. find命令

find命令在目錄以及子目錄中搜索所需要的文件。例如,當我們想找到DNS配置文件示例文件named.conf所在的目錄,可以使用下面的命令,此命令從根目錄開始搜索:

        # find / -name named.conf

但搜索的速度取決于本地系統(tǒng)的內(nèi)存大小和磁盤速度。如果用戶知道此文件位于/usr子目錄樹中,則可以從那個目錄開始使用如下命令:

        # find /usr -name named.conf

現(xiàn)在這個命令就可以更快地找到所需要的文件。

2. locate命令

如果這一切還是太費時間,RHEL允許用戶創(chuàng)建一個數(shù)據(jù)庫,它保存了全部的安裝文件和目錄。用locate命令搜索文件幾乎是即時完成的,而且locate搜索不需要完整的文件名。locate命令的缺點是此數(shù)據(jù)庫通常每天只更新一次,這在/etc/cron.daily/mlocate腳本文件中有記錄。

每24個小時才更新一次可能不夠,特別是在兩個半小時的考試期間。幸運的是,前面提到的這個腳本文件可以直接由root管理用戶從命令行接口中執(zhí)行。只需要輸入這個文件的完整目錄就行,就像它是一個命令一樣:

        # /etc/cron.daily/mlocate
主站蜘蛛池模板: 微博| 许昌县| 香港 | 辽宁省| 巴彦县| 江华| 措勤县| 海伦市| 黄大仙区| 潜江市| 乌拉特后旗| 罗定市| 苍溪县| 伽师县| 海城市| 庄河市| 清苑县| 石林| 达孜县| 普格县| 屏东市| 右玉县| 富锦市| 瓦房店市| 灌云县| 丹东市| 潼关县| 小金县| 广安市| 天津市| 凉山| 留坝县| 东山县| 迁西县| 双桥区| 宾阳县| 清徐县| 金阳县| 平凉市| 松江区| 泸定县|