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

認證目標3.03 文本文件的管理

Linux和Unix都通過一系列文本文件進行管理。Linux系統管理員通常不喜歡用圖形編輯器管理這些配置文件。像OpenOffice.org Writer或微軟的Word這類的編輯器通常會把文件保存為二進制格式,或者會修改純文本文件的編碼。除非文本文件按原始格式保存,否則對文本做任何修改都可能導致Linux系統無法啟動。

Linux命令把文本文件當作數據流進行管理。你在前面已經看到重定向符和管道符等工具的作用。但是如果沒有合適的工具將數據進行分類處理,我們可能會被數據淹沒了。即使在對文件進行編輯之前,也必須知道如何在命令行接口讀取這些文本文件。

3.3.1 文本流的讀命令

前面已經學習了cd、ls和pwd用于處理Linux文件的命令。加上find和locate命令,我們已掌握了如何確定所需要文件的位置。

現在該是如何讀取、復制和移動文件的時候了。大多數Linux配置文件都是文本文件,Linux編輯器就是文本編輯器。Linux命令就是為讀取文本文件而設計的。為確定當前目錄中文件的類型,可以試試file *命令。

1. cat命令

最簡單的文本文件讀取命令是cat。cat filename命令可翻頁顯示filename文件的內容。它也可以處理多個文件名。它把多個文件的內容合并在一起,并將其連續輸出到屏幕上。也可以把輸出結果重定向到自己喜歡的文件名中,這將在3.1.5一節“文本流和命令重定向”中討論。

2. less和more命令

大文件需要一個可以讓用戶悠閑自在瀏覽文件內容的命令,它們就是more和less。用more filename命令可以翻頁顯示文本文件的內容,每次一個屏幕從頭到尾顯示。使用less filename命令,我們可以用PAGE UP、PAGE DOWN和方向鍵向前或向后翻頁查看同樣的文本。這兩個命令都支持vi模式搜索。

less和more命令不修改文件,所以是翻頁顯示大文本文件(如錯誤日志)或者在大文本文件中搜索項目的極佳方法。例如,要瀏覽基本的/var/log/messages文件,可執行下面的命令:

        # less /var/log/messages

然后就可以翻頁顯示日志文件以搜索文件中的重要信息。接下來可以用向前的斜杠(/)和問號在文件中向前或向后搜索。例如,當我們執行了上述命令后,就會出現如圖3-3所示的窗口。

圖3-3 less命令和/var/log/messages中的內容

例如,要在文件中向前搜索“IPv4 tunneling”,只要在命令行窗口的底部輸入下面的內容即可:

        /IPv4 tunneling

如果要按相反的方向搜索,則只要把/改為?即可。

less命令有幾個功能是more和cat這兩個命令所沒有的。它可以讀取用Gzip格式壓縮的文本文件,通常這種文件的擴展名為.gz。例如,許多在shell環境執行的標準命令的man文檔都保存在/usr/share/man/manl目錄中。這個目錄中的所有文件都被壓縮成.gz格式的文件。但用less命令不需要解壓就可以讀取這些文件的內容。

這就讓我們想起man命令的使用。換言之,下面兩個命令在功能上是等效的:

        # man cat
        # less /usr/share/man/man1/cat.1.gz

3. head和tail命令

head和tail是兩個不同的命令,但是它們的用法完全相同。默認情況下,head filename命令顯示一個文件的前10行內容。tail filename命令顯示文件的最后10行內容。可以用-nxy開關選項定義需要顯示的行數。例如,tail -n 15 /etc/passwd命令顯示/etc/passwd文件的最后15行內容。

tail命令特別有用,可用于解決執行過程中發生的問題。例如,如果登錄一直失敗,則下面的命令可以監測相關文件,當記錄下新的日志條目時在屏幕上顯示出來:

        # tail -f /var/log/secure

3.3.2 處理文本流的命令

文本流就是數據的流動。例如,cat filename命令把來自filename的數據流輸出到終端上。當這些文件變大時,最好先用過濾器命令對這些流進行處理。

為此,Linux引入了幾個簡單的命令幫助我們搜索、檢查和對文件的內容排序。有些特殊的文件,它們包含其他文件。這些容器文件的一部分俗稱為打包工具(tarball)。

實際經驗

打包(tarball)是一種發布Linux程序包的常用方法。它們通常以一個壓縮格式發布程序包,如.tar.gz或.tgz文件擴展名,它們把程序包都集中到一個文件中。

1. sort命令

可以用多種方法對文件的內容進行排序。默認情況下,sort命令按照字母順序將文件內容按每行首字符進行排序。例如,sort /etc/passwd命令把所有用戶(包括與某些特定服務有關的用戶)按用戶名排序。

2. grep命令

grep命令使用搜索詞搜索文件。它返回包含此搜索詞的整行內容。例如,grep "Michael Jang"/etc/passwd就會在/etc/passwd文件中查找到本書作者的名字。

在grep命令中可使用正則表達式。正則表達式十分強大,可指定復雜的搜索模式。表3-2中列出了在正則表達式中具有特殊意義的一些字符。如果希望丟棄元字符的特殊意義,而純粹照字面使用,需要在元字符的前面加上反斜杠(\)。

表3-2 正則表達式中的特殊字符

grep命令支持一些有用的開關選項。為使搜索區分大小寫,可以在命令行傳遞-i選項。-E選項支持使用擴展的正則表達式語法。另外一個值得注意的開關選項是-v,它可反轉匹配邏輯。也就是說,它告訴grep,只選擇不能匹配正則表達式的那些行。

舉個例子。假設只想選擇/etc/nsswitch.conf中不為空、且不包含注釋(即不以#字符開頭)的那些行。這可以通過執行下面的命令實現:

        # grep -v '^$' /etc/nsswitch.conf | grep -v '^#'

注意,第一個grep命令選擇了全部不為空的行(匹配空行的正則表達式為^$,也就是說,行尾緊跟行首)。然后,輸出通過管道發送給第二個grep命令,它排除了所有以#字符開頭的行。

使用一個grep命令和-e開關,可以得到同樣的結果,-e開關允許在同一命令中指定多個搜索模式:

        # grep -v -e '^$' -e '^#' /etc/nsswitch.conf

關于正則表達式的更多信息,可輸入man 7 regex查看。

3. diff命令

diff是一個非常有用的命令,它可以找出兩個文件的差別。如果已經使用過本章后面將要介紹的Network Manager Connections Editor工具,此工具會修改/etc/sysconfig/network-scripts目錄中的諸如ifcfg-eth0文件的內容。

如果已經備份了ifcfg-eth0文件,則用diff命令可以找出兩個文件的區別。例如,下面的命令可找出/root目錄中的ifcfg-eth0與/etc/ sysconfig/ network-scripts目錄中ifcfg-eth0文件的差別:

        # diff /root/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0

4. wc命令

wc是單詞統計(word count)的縮寫符。它可以返回一個文件中的行數、單詞數和字符數。wc命令很容易使用,例如,wc -w filename命令返回此文件的單詞數。

5. sed命令

sed命令是流編輯(stream editor)的縮寫符,用于搜索并修改文件中指定的單詞甚至文本流。例如,下面的命令把opsys文件每一行的第一個Windows改為Linux,并把結果保存到newopsys文件中:

        # sed 's/Windows/Linux/' opsys > newopsys

但這還不是sed的全部功能。如果在opsys文件中的一行有不止一個Windows,這個命令不會替換第二個Windows,但是增加“全局”后綴符(g)就可以做到這一點:

        # sed 's/Windows/Linux/g' opsys > newopsys

下面的示例確保所有用writable=yes指令配置的Samba共享參數都被改為writable=no:

        # sed 's/writable = yes/writable = no/g' /etc/samba/smb.conf > ~/smb.conf

當然,在原來的/etc/samba/smb.conf文件被覆蓋之前,最好先瀏覽/root/smb.conf文件中的內容。

6. awk命令

awk命令是以它的開發者命名的(Aho、Weinberger和Kernighan),它更像是一個完整的編程語言,而不只是一條命令。它用一個關鍵字確定所在的行,可以讀取這一行中的從指定列開始的內容。一個常用的示例是它作用于/etc/passwd文件。例如,下面這個命令輸出/etc/passwd中包含“mike”的每個用戶的第四個字段(組ID):

        # awk -F : '/mike/ {print $4}' /etc/passwd

3.3.3 在控制臺編輯文本文件

RHCSA認證目標的最初版本明確要求考生需要掌握vim編輯器的使用。嚴格來說,無論用哪個文本編輯器來編輯文本文件都沒有關系。但我們認為你應該了解vim編輯器的用法,顯然Red Hat的許多人也同意這個觀點。vim編輯器是vi編輯器改進版(vi improved)的縮寫。安裝后可以用vi命令啟動vim編輯器。從現在開始我們就用vi代表這個編輯器。

我們認為每個系統管理員都應對vi有一個基本的了解。雖然emacs也是個很好的選擇,但是vi可以幫助我們挽救一個有故障的系統。如果你曾經用緊急引導媒介恢復一個重要的配置文件,則vi可能是唯一可用的編輯器。

雖然RHEL 7也包含了對一個更加直觀的nano編輯器的訪問,但是掌握vi命令可以幫助我們更快速地搜索和編輯文本文件的關鍵部分。雖然RHEL急救媒介(rescue media)提供了更多的基于控制臺的編輯器,但是vi是Linux中功能最豐富、最高效的編輯器之一。

應該掌握vi的兩種基本模式:命令模式和插入模式。當我們用vi打開一個文件時,它就處于命令模式。有些命令會啟動插入模式。打開一個文件很容易,用vi filename命令即可。圖3-4是vi命令打開/etc/nsswitch.conf文件的一個示例。

圖3-4 用vi編輯/etc/nsswitch.conf文件

下面是對vi編輯器的最簡單的介紹。要想掌握更多的內容有很多圖書可以選擇,也可以用vimtutor命令得到一個vi教程。

1. vi的命令模式

處于命令模式時,除了編輯外可以對一個文本文件做任何操作。在命令模式下可以使用的選項非常多且經常變化,用幾本書也描述不完。歸納起來vi命令的選項可分為7類:

打開 要在命令行接口用vi編輯器打開一個文件,可執行vi filename命令。

搜索 對于向前搜索,在反斜杠(/)后面加上搜索詞。記住,Linux是大小寫敏感的,因此要用/Michael(而不是/michael)命令來搜索/etc/passwd文件中的“Michael”。向后搜索要用問號(?)。

寫入 保存編輯后的結果要用w命令。可以結合其他命令,如:wq寫入文件并退出vi。

關閉 用:q命令退出vi編輯器。

放棄 放棄任何修改要用:q!命令。

編輯 可以用vi的很多命令編輯文件。例如,x刪除當前光標所在的字符;dw刪除當前光標所在單詞;dd刪除當前行。記住,yy把當前行復制到緩沖區中,p把字符復制到緩沖區中,u取消前一次的修改。

插入 有很多命令可以啟動插入模式。按i在當前位置開始插入文本,按o在光標當前位置的下方插入一個空行。

2.基本的文本編輯

在現在的Linux系統中,用vi編輯文件是一件非常容易的事。只需要常用的導航鍵(方向鍵、PAGEUP和PAGEDOWN),然而用i和o等基本命令啟動vi的插入模式,直接在文件中輸入新的內容。

當結束插入模式時,按ESC鍵返回到命令模式。這時可以保存、放棄編輯結果,并退出vi程序。

實際經驗

vi命令有幾個專用的版本。vipw、vigw和visudo命令分別用來編輯 /etc/passwd、/etc/group和/etc/sudoers文件。vipw -s和vigr -s命令分別編輯/etc/shadow和/etc/gshadow文件。

3.3.4 練習3-1:用vi創建一個新用戶

在這個練習中,我們通過vi文本編輯器編輯/etc/passwd文件以創建一個新用戶。雖然創建Linux新用戶還有其他方法,這個練習可以用來驗證使用vi和命令行接口的熟練程度。

(1)打開Linux命令行窗口。以root用戶登錄并輸入vipw命令。這個命令用vi編輯器打開/etc/passwd文件。

(2)導航到文件的末尾。在命令模式下移動到文件末尾有很多辦法,包括使用DOWN ARROW鍵、PAGEDOWN鍵,或者G命令。

(3)找到普通用戶所在的一行。如果剛剛新建一個用戶,則應該文件的最后一行,其UID為1000或更高。如果不存在普通用戶,則找到第一行,它肯定與root系統管理員有關,這一行在第3列和第4列有數字0。

(4)復制這一行內容。如果已經熟悉vi的操作,則應該知道如何用yy命令將整行內容復制到緩沖區中。這就是把整行內容“拖到”緩存中。然后用p命令把這一行內容粘貼到其他位置,可以粘貼任意多次。

(5)修改用戶名、用戶ID和組ID以及用戶全名和新用戶的主目錄。有關它們的詳細信息請閱讀第8章內容。例如,在下面的示例中,這些內容對應于tweedle、1001、1001、Tweedle Dee和/home/tweedle。確保用戶名與主目錄對應。

(6)按下ESC鍵返回到命令模式,用:w命令保存文件,然后用:q退出vi(在vi中可以合并使用這兩個命令。下次修改后要保存文件并且退出vi可以用:wq命令)。

(7)應該看到如下的消息:

        You have modified /etc/passwd.
        You may need to modify /etc/shadow for consistency.
        Please use the command 'vipw -s' to do so.

該信息可能會被忽略,因為第8步會在etc/shadow文件中添加合適的信息,但你無須直接修改/etc/shadow。

(8)以root用戶身份執行passwd newuser命令。給新用戶設置一個口令。在本例中,這個新用戶是tweedle。

(9)過程還沒有結束,每個用戶還需要一個組。因此執行vigr命令。重復前面介紹的把某一合適的行復制到文本的末尾的步驟。注意,組名和組ID通常與用戶名和用戶ID相同。

(10)只需要修改新增加一行中的組名和組ID。根據前面示例的信息,組名為tweedle,組ID為1001。

(11)重復前面提到的:wq命令保存文件并且關閉vi程序。

(12)注意以下信息:

        You have modified /etc/group.
        You may need to modify /etc/gshadow for consistency.
        Please use the command 'vigr -s' to do so.

(13)如前所述,用vigr -s命令打開/etc/gshadow文件。我們注意到這個文件的內容不多。找到合適一行進行復制后,就只需要修改組名。

(14)重復剛才提到的:wq命令,保存文件并關閉vi。實際上,我們會看到一個信息,表示這個文件是只讀的。因此,要保存到這種“只讀文件”中必須用:wq!命令,這會覆蓋掉當前的設置。

(15)正確建立新用戶還需要另外幾個步驟。這些步驟與新用戶的主目錄、/etc/skel目錄中的標準文件有關。詳細內容請閱讀第8章。

3.3.5 如果不喜歡vi

默認情況下,當我們執行edquota和crontab命令時,系統都會用vi編輯器打開相應的quota和cron作業配置文件。如果很不喜歡用vi,則用下面的命令可以改變默認編輯器:

        # export EDITOR=/bin/nano

如果想改變所有用戶的默認編輯器,則要把前面這一行命令添加到/etc/environment配置文件中。不是非得用vi編輯器修改/etc/environment文件不可,下面的命令可以把剛才提到的命令添加到/etc/environment文件的末尾。

        # echo 'export EDITOR=/bin/nano' >> /etc/environment

由于nano編輯器相當直觀,如圖3-5所示,因此本書不提供此編輯器的用法。完整的使用手冊可從www.nano-editor.org/dist/v2.3/nano.html下載。

圖3-5 用nano編輯器打開/etc/nsswitch.conf文件

如果喜歡用其他編輯器如emacs,也可做類似修改。

3.3.6 用GUI工具編輯文本文件

毫無疑問,Red Hat考試對使用GUI的用戶已經越來越友好。曾經有一段時間,RHCSA認證目標包括了gedit文本編輯器。比較傳統的Linux系統管理員可能會對此感到恐懼(gedit編輯器因此從RHCSA考試中刪除)。

如果系統沒有安裝gedit編輯器,可執行yum install gedit命令安裝gedit。一旦安裝了gedit,單擊Applications | Accessories | gedit就可以啟動它。由于它是一個直觀的GUI文本編輯器,因此它的用法很簡單。不要糾纏于編輯器,它們只不過是考試和實際工作的一個工具而已。

但如果要在遠程系統上編輯配置文件,我們可能無法訪問遠程系統上的gedit,特別當遠程系統還沒有安裝gedit時。當然,我們可以在任何Red Hat系統上安裝該GUI工具,并使用X轉發。但是許多管理員建立的虛擬機是不帶GUI的,目的是為了節省空間并降低安全風險。

主站蜘蛛池模板: 女性| 潜江市| 兴海县| 永康市| 白沙| 贡嘎县| 牙克石市| 介休市| 若羌县| 慈利县| 黑山县| 浮山县| 中宁县| 文登市| 张掖市| 中阳县| 固原市| 南陵县| 北安市| 那坡县| 芦山县| 石河子市| 石楼县| 河北区| 科技| 报价| 合作市| 广西| 湖南省| 正镶白旗| 澄江县| 岳普湖县| 平原县| 印江| 望奎县| 普洱| 饶阳县| 滦南县| 商洛市| 沙坪坝区| 博客|