1. 程式人生 > >鳥哥的Linux私房菜讀書筆記--壓縮解壓縮

鳥哥的Linux私房菜讀書筆記--壓縮解壓縮

1、壓縮及解壓縮(先壓縮再讀取後解壓)

     <1>命令:$  gzip  -d  檔案

          選項與引數:                   -c :將壓縮的資料輸出到螢幕上,可透過資料流重導向來處理;                   -d :解壓縮的引數;  ##將原本的的.gz刪除,回到原本的檔案。                   -t :可以用來檢驗一個壓縮檔案的一致性~看看檔案有無錯誤;                   -v :可以顯示出原檔案/壓縮檔案案的壓縮比等資訊;                   -# :# 為數字的意思,代表壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6

           命令:$ zcat  檔名.gz

           命令:$ gzip -d  檔名

     <2>命令:$ bzip2 [-cdkxv#]   檔名

           選項與引數:                  -c :將壓縮的過程產生的資料輸出到螢幕上!                  -d :解壓縮的引數                  -k :保留原始檔,而不會刪除原始的檔案喔!                  -z :壓縮的引數 (預設值,可以不加)                  -v :可以顯示出原檔案/壓縮檔案案的壓縮比等資訊;                  -# :與 gzip 同樣的,都是在計算壓縮比的引數, -9 最佳, -1 最快!

           命令:$ bzcat  檔名.bz2

           命令:$ bzip2  -d   檔名.bz2

     <3>命令:$  xz  [-dtlkc#]  檔名                      選項與引數:                  -d :就是解壓縮啊!                  -t :測試壓縮檔案的完整性,看有沒有錯誤                   -l :列出壓縮檔案的相關資訊                  -k :保留原本的檔案不刪除~                  -c :同樣的,就是將資料由螢幕上輸出的意思!                  -# :同樣的,也有較佳的壓縮比的意思!

          命令:$  xcat  檔名.xz

          命令:$  xz   -d  檔名.xz

2、從壓縮檔案當中尋找資料;

    命令:$ zgrep         ##查詢壓縮檔案中的關鍵字。

3、解壓 :$ : tar -zxvf  解壓縮的壓縮包   指定位置       ##解壓縮到指定位置

     命令:$ unzip  解壓的檔案    ##對zip檔案的解壓

    注意:gzip進行壓縮時,在預設狀態下原來的檔案會被壓縮成為.gz的檔名,原始檔就不再存在了。

4、打包     命令:$  tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename... <==打包與壓縮     命令:$  tar [-z|-j|-J] [tv] [-f 既有的 tar 檔名]                     <==察看檔名     命令:$  tar [-z|-j|-J] [xv] [-f 既有的 tar 檔名] [-C 目錄]     <==解壓縮     選項與引數:             -c :建立打包檔案,可搭配 -v 來察看過程中被打包的檔名(filename)             -t :察看打包檔案的內容含有哪些檔名,重點在察看『檔名』就是了;             -x :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開 特別留意的是, -c, -t, -x 不可同時出現在一串指令                      列中。             -z :透過 gzip 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.gz             -j :透過 bzip2 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.bz2             -J :透過 xz 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.xz特別留意, -z, -j, -J 不可以同時出現在一串指令列中             -v :在壓縮/解壓縮的過程中,將正在處理的檔名顯示出來!             -f filename:-f 後面要立刻接要被處理的檔名!建議 -f 單獨寫一個選項囉!(比較不會忘記)             -C 目錄 :這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。             -p(小寫) :保留備份資料的原本許可權與屬性,常用於備份(-c)重要的配置檔案             -P(大寫) :保留絕對路徑,亦即允許備份資料中含有根目錄存在之意;             --exclude=FILE:在壓縮的過程中,不要將 FILE 打包!      其實最簡單的使用 tar 就只要記憶底下的方式即可:       · 壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的檔案或目錄名稱       · 查 詢:tar -jtv -f filename.tar.bz2       · 解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄

       由於『 -f filename 』是緊接在一起的,過去很多文章常會寫成『-jcvf filename』,這樣是對的,但由於選項的順序理論上是可以變換的,所以很多讀者會誤認為『-jvfc filename』也可以~事實上這樣會導致產生的檔名變成 c ! 因為 -fc 嘛!所以囉,建議您在學習 tar 時,將『 -f filename 』與其他選項獨立出來,會比較不容易發生問題。

    命令 :$ : tar -cvf  打包後的檔名  需要打包的檔案    ##c:建立  v:過程  f:檔案。

    命令:$ : tar -cvf 打包後的檔名  需要打包的檔案  -c  新的目錄    ##將檔案打包至指定目錄中。

5、解包

命令:$  tar -xvf 需要解包的檔案

命令:$  tar -jvt  -f  打包檔案   |  grep  ‘檔名’     

命令:$  tar  -jxv  -f  打包檔案.tar.bz2  待解開檔名

例:$  tar  -jxv  -f  /root/etc.tar.bz2  etc/shadow     ##本例中不能寫成/etc/shadow!因為記錄在etc.tar.bz2內並沒有/之故

                                                                               ##開啟打包檔案中的某一個檔案     

6、一次性完成打包&壓縮操作

 命令 :$ : tar -zcvf  壓縮後的檔名  需要打包的檔案   ##壓縮後的檔名一般為:檔名.tar.gz

7、備份

       使用tar加入-z,-j,-J等引數備份/etc

       命令:$   time  tar  -zpcv  -f  /root.etc.tar.gz   /etc

               選項與引數:

                       -v:將正在作用的檔名顯示在螢幕上

                       -p:保留原本檔案的許可權與屬性

以下為複製貼上,可能在後續中使用到

§ 使用 tar 加入 -z, -j 或 -J 的引數備份 /etc/ 目錄 有事沒事備份一下 /etc 這個目錄是件好事!備份 /etc 最簡單的方法就是使用 tar 囉!讓我們來玩玩 先: [[email protected] ~]$ su - # 因為備份 /etc 需要 root 的許可權,否則會出現一堆錯誤 [[email protected] ~]# time tar -zpcv -f /root/etc.tar.gz /etc tar: Removing leading `/' from member names <==注意這個警告訊息 /etc/ ....(中間省略).... /etc/hostname /etc/aliases.db real 0m0.799s # 多了 time 會顯示程式運作的時間!看 real 就好了!花去了 0.799s user 0m0.767s sys 0m0.046s # 由於加上 -v 這個選項,因此正在作用中的檔名就會顯示在螢幕上。 # 如果你可以翻到第一頁,會發現出現上面的錯誤訊息!底下會講解。 # 至於 -p 的選項,重點在於『保留原本檔案的許可權與屬性』之意。 [[email protected] ~]# time tar -jpcv -f /root/etc.tar.bz2 /etc ....(前面省略).... real 0m1.913s user 0m1.881s sys 0m0.038s [[email protected] ~]# time tar -Jpcv -f /root/etc.tar.xz /etc ....(前面省略).... real 0m9.023s user 0m8.984s sys 0m0.086s # 顯示的訊息會跟上面一模一樣囉!不過時間會花比較多!使用了 -J 時,會花更多時間 [[email protected] ~]# ll /root/etc* -rw-r--r--. 1 root root 6721809 Jul 1 00:16 /root/etc.tar.bz2 -rw-r--r--. 1 root root 7758826 Jul 1 00:14 /root/etc.tar.gz -rw-r--r--. 1 root root 5511500 Jul 1 00:16 /root/etc.tar.xz [[email protected] ~]# du -sm /etc 28 /etc # 實際目錄約佔有 28MB 的意思! 壓縮比越好當然要花費的運算時間越多!我們從上面可以看到,雖然使用 gzip 的速度相當快,總時 間花費不到 1 秒鐘,但是壓縮率最糟糕! 如果使用 xz 的話,雖然壓縮比最佳!不過竟然花了 9 秒 鐘的時間耶!這還僅是備份 28MBytes 的 /etc 而已,如果備份的資料是很大容量的, 那你真的要 考慮時間成本才行! 至於加上『 -p 』這個選項的原因是為了儲存原本檔案的許可權與屬性!我們曾在第六章的 cp 指令介 紹時談到許可權與檔案型別(例如連結檔)對複製的不同影響。 同樣的,在備份重要的系統資料時,這 些原本檔案的許可權需要做完整的備份比較好。此時 -p 這個選項就派的上用場了。 接下來讓我們看 看打包檔案內有什麼資料存在? § 查閱 tar 檔案的資料內容 (可察看檔名),與備份檔名有否根目錄的意義 要察看由 tar 所建立的打包檔案內部的檔名非常的簡單!可以這樣做: [[email protected] ~]# tar -jtv -f /root/etc.tar.bz2 ....(前面省略).... -rw-r--r-- root/root 131 2015-05-25 17:48 etc/locale.conf -rw-r--r-- root/root 19 2015-05-04 17:56 etc/hostname -rw-r--r-- root/root 12288 2015-05-04 17:59 etc/aliases.db 如果加上 -v 這個選項時,詳細的檔案許可權/屬性都會被列出來!如果只是想要知道檔名而已, 那麼 就將 -v 拿掉即可。從上面的資料我們可以發現一件很有趣的事情,那就是每個檔名都沒了根目錄 了!這也是上一個練習中出現的那個警告訊息『tar: Removing leading `/' from member names(移除了檔 名開頭的 `/' )』所告知的情況! 那為什麼要拿掉根目錄呢?主要是為了安全!我們使用 tar 備份的資料可能會需要解壓縮回來使 用,在 tar 所記錄的檔名 (就是我們剛剛使用 tar -jtvf 所察看到的檔名) 那就是解壓縮後的實際檔 名。如果拿掉了根目錄,假設你將備份資料在 /tmp 解開,那麼解壓縮的檔名就會變成『/tmp/etc/xxx』。 但『如果沒有拿掉根目錄,解壓縮後的檔名就會是絕對路徑, 亦即解壓縮後的資料一定會被放置 到 /etc/xxx 去!』如此一來,你的原本的 /etc/ 底下的資料, 就會被備份資料所覆蓋過去了! Tips 你會說:『既然是備份資料,那麼還原回來也沒有什麼問題吧?』想象一個狀況,你備 份的資料是兩年前的舊版 CentOS 6.x, 你只是想要了解一下過去的備份內容究竟有哪些資料而已,結果一解開該 檔案,卻發現你目前新版的 CentOS 7.x 底下的 /etc 被舊版的備份資料覆蓋了!此時你該如何是好?大概除了哭哭 你也不能做啥事吧?所以囉,當然是拿掉根目錄比較安全一些的。 如果你確定你就是需要備份根目錄到 tar 的檔案中,那可以使用 -P (大寫) 這個選項,請看底下的例子分析 範例:將檔名中的(根)目錄也備份下來,並察看一下備份檔的內容檔名 [[email protected] ~]# tar -jpPcv -f /root/etc.and.root.tar.bz2 /etc [[email protected] ~]# tar -jtf /root/etc.and.root.tar.bz2 /etc/locale.conf /etc/hostname /etc/aliases.db # 這次查閱檔名不含 -v 選項,所以僅有檔名而已!沒有詳細屬性/許可權等引數。 有發現不同點了吧?如果加上 -P 選項,那麼檔名內的根目錄就會存在喔!不過,鳥哥個人建議, 還是不要加上 -P 這個選項來備份! 畢竟很多時候,我們備份是為了要未來追蹤問題用的,倒不一 定需要還原回原本的系統中! 所以拿掉根目錄後,備份資料的應用會比較有彈性!也比較安全呢! § 將備份的資料解壓縮,並考慮特定目錄的解壓縮動作 (-C 選項的應用) 那如果想要解打包呢?很簡單的動作就是直接進行解打包嘛! [[email protected] ~]# tar -jxv -f /root/etc.tar.bz2 [[email protected] ~]# ll ....(前面省略).... drwxr-xr-x. 131 root root 8192 Jun 26 22:14 etc ....(後面省略).... 此時該打包檔案會在『本目錄下進行解壓縮』的動作! 所以,你等一下就會在家目錄底下發現一個 名為 etc 的目錄囉!所以囉,如果你想要將該檔案在 /tmp 底下解開, 可以 cd /tmp 後,再下達上 述的指令即可。不過,這樣好像很麻煩呢~有沒有更簡單的方法可以『指定欲解開的目錄』呢? 有 的,可以使用 -C 這個選項喔!舉例來說: [[email protected] ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp [[email protected] ~]# ll /tmp ....(前面省略).... drwxr-xr-x. 131 root root 8192 Jun 26 22:14 etc ....(後面省略).... 這樣一來,你就能夠將該檔案在不同的目錄解開囉!鳥哥個人是認為,這個 -C 的選項務必要記憶一 下的! 好了,處理完畢後,請記得將這兩個目錄刪除一下呢! [[email protected] ~]# rm -rf /root/etc /tmp/etc 再次強調,這個『 rm -rf 』是很危險的指令!下達時請務必要確認一下後面接的檔名。我們要刪除 的是 /root/etc 與 /tmp/etc, 您可不要將 /etc/ 刪除掉了!系統會死掉的~ ^_^

§ 僅解開單一檔案的方法 剛剛上頭我們解壓縮都是將整個打包檔案的內容全部解開!想象一個情況,如果我只想要解開打包文 件內的其中一個檔案而已, 那該如何做呢?很簡單的,你只要使用 -jtv 找到你要的檔名,然後將該 檔名解開即可。 我們用底下的例子來說明一下: # 1. 先找到我們要的檔名,假設解開 shadow 檔案好了: [[email protected] ~]# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow' ---------- root/root 721 2015-06-17 00:20 etc/gshadow ---------- root/root 1183 2015-06-17 00:20 etc/shadow- ---------- root/root 1210 2015-06-17 00:20 etc/shadow <==這是我們要的! ---------- root/root 707 2015-06-17 00:20 etc/gshadow- # 先搜尋重要的檔名!其中那個 grep 是『擷取』關鍵詞的功能!我們會在第三篇說明! # 這裡您先有個概念即可!那個管線 | 配合 grep 可以擷取關鍵詞的意思! # 2. 將該檔案解開!語法與實際作法如下: [[email protected] ~]# tar -jxv -f 打包檔.tar.bz2 待解開檔名 [[email protected] ~]# tar -jxv -f /root/etc.tar.bz2 etc/shadow etc/shadow [[email protected] ~]# ll etc total 4 ----------. 1 root root 1210 Jun 17 00:20 shadow # 很有趣!此時只會解開一個檔案而已!不過,重點是那個檔名!你要找到正確的檔名。 # 在本例中,你不能寫成 /etc/shadow !因為記錄在 etc.tar.bz2 內的並沒有 / 之故! Tips 在這個練習之前,你可能要先將前面練習所產生的 /root/etc 刪除才行!不然 /root/etc/shadow 會重複存在,而其他的前面實驗的檔案也會存在, 那就看不出什麼鬼~ § 打包某目錄,但不含該目錄下的某些檔案之作法 假設我們想要打包 /etc/ /root 這幾個重要的目錄,但卻不想要打包 /root/etc* 開頭的檔案,因為該文 件都是剛剛我們才建立的備份檔嘛! 而且假設這個新的打包檔案要放置成為 /root/system.tar.bz2 , 當然這個檔案自己不要打包自己 (因為這個檔案放置在 /root 底下啊!),此時我們可以透過 --exclude  的幫忙! 那個 exclude 就是不包含的意思!所以你可以這樣做: [[email protected] ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \ > --exclude=/root/system.tar.bz2 /etc /root 上面的指令是一整列的~其實你可以打成:『tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc*  --exclude=/root/system.tar.bz2 /etc /root』,如果想要兩行輸入時,最後面加上反斜槓 (\) 並立刻按下 [enter] , 就能夠到第二行繼續輸入了。這個指令下達的方式我們會在第三章再仔細說明。 透過這 個 --exclude="file" 的動作,我們可以將幾個特殊的檔案或目錄移除在打包之列,讓打包的動作變的 更簡便喔!^_^

§ 僅備份比某個時刻還要新的檔案

某些情況下你會想要備份新的檔案而已,並不想要備份舊檔案!此時 --newer-mtime 這個選項就粉重 要啦! 其實有兩個選項啦,一個是『 --newer 』另一個就是『 --newer-mtime 』,這兩個選項有何 不同呢? 我們在第六章的 touch 介紹中談到過三種不同的時間引數, 當使用 --newer 時,表示後續 的日期包含『 mtime 與 ctime 』,而 --newer-mtime 則僅是 mtime 而已! 這樣知道了吧! ^_^ 。 那就讓我們來嘗試處理一下囉! # 1. 先由 find 找出比 /etc/passwd 還要新的檔案 [[email protected] ~]# find /etc -newer /etc/passwd ....(過程省略).... # 此時會顯示出比 /etc/passwd 這個檔案的 mtime 還要新的檔名, # 這個結果在每部主機都不相同!您先自行查閱自己的主機即可,不會跟鳥哥一樣! [[email protected] ~]# ll /etc/passwd -rw-r--r--. 1 root root 2092 Jun 17 00:20 /etc/passwd # 2. 好了,那麼使用 tar 來進行打包吧!日期為上面看到的 2015/06/17 [[email protected] ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 \ > --newer-mtime="2015/06/17" /etc/* tar: Option --newer-mtime: Treating date `2015/06/17' as 2015-06-17 00:00:00 tar: Removing leading `/' from member names /etc/abrt/ ....(中間省略).... /etc/alsa/ /etc/yum.repos.d/ ....(中間省略).... tar: /etc/yum.repos.d/CentOS-fasttrack.repo: file is unchanged; not dumped # 最後行顯示的是『沒有被備份的』,亦即 not dumped 的意思! # 3. 顯示出檔案即可 [[email protected] ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | grep -v '/$'  # 透過這個指令可以呼叫出 tar.bz2 內的結尾非 / 的檔名!就是我們要的啦! 現在你知道這個指令的好用了吧!甚至可以進行差異檔案的記錄與備份呢~ 這樣子的備份就會顯的 更容易囉!你可以這樣想象,如果我在一個月前才進行過一次完整的資料備份, 那麼這個月想要備 份時,當然可以僅備份上個月進行備份的那個時間點之後的更新的檔案即可! 為什麼呢?因為原本 的檔案已經有備份了嘛!幹嘛還要進行一次?只要備份新資料即可。這樣可以降低備份的容量啊 § 基本名稱: tarfile, tarball ?

另外值得一提的是,tar 打包出來的檔案有沒有進行壓縮所得到檔案稱呼不同喔!如果僅是打包而已, 就是『 tar -cv -f file.tar 』而已,這個檔案我們稱呼為 tarfile 。如果還有進行壓縮的支援,例如『 tar  -jcv -f file.tar.bz2 』時,我們就稱呼為 tarball (tar 球?)!這只是一個基本的稱謂而已,不過很多書籍 與網路都會使用到這個 tarball 的名稱!所以得要跟您介紹介紹。 此外,tar 除了可以將資料打包成為檔案之外,還能夠將檔案打包到某些特別的裝置去,舉例來說,磁 帶機 (tape) 就是一個常見的例子。磁帶機由於是一次性讀取/寫入的裝置,因此我們不能夠使用類似 cp 等指令來複制的! 那如果想要將 /home, /root, /etc 備份到磁帶機 (/dev/st0) 時,就可以使用:『tar  -cv -f /dev/st0 /home /root /etc』,很簡單容易吧! 磁帶機用在備份 (尤其是企業應用) 是很常見的工 作喔!

§ 特殊應用:利用管線命令與資料流

在 tar 的使用中,有一種方式最特殊,那就是透過標準輸入輸出的資料流重導向(standard  input/standard output), 以及管線命令 (pipe) 的方式,將待處理的檔案一邊打包一邊解壓縮到目標目 錄去。 關於資料流重導向與管線命令更詳細的資料我們會在第十章 bash 再跟大家介紹, 底下先來 看一個例子吧! # 1. 將 /etc 整個目錄一邊打包一邊在 /tmp 解開 [[email protected] ~]# cd /tmp [[email protected] tmp]# tar -cvf - /etc | tar -xvf - # 這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的! # 要注意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~ # 這分別代表 standard output, standard input 與管線命令啦! # 簡單的想法中,你可以將 - 想成是在記憶體中的一個裝置(緩衝區)。 # 更詳細的資料流與管線命令,請翻到 bash 章節囉! 在上面的例子中,我們想要『將 /etc 底下的資料直接 copy 到目前所在的路徑,也就是 /tmp 底下』, 但是又覺得使用 cp -r 有點麻煩,那麼就直接以這個打包的方式來打包,其中,指令裡面的 - 就是 表示那個被打包的檔案啦! 由於我們不想要讓中間檔案存在,所以就以這一個方式來進行復制的行 為啦! § 例題:系統備份範例 系統上有非常多的重要目錄需要進行備份,而且其實我們也不建議你將備份資料放置到 /root 目錄下! 假設目前你已經知道重要的目錄有底下這幾個: · /etc/ (配置檔案) · /home/ (使用者的家目錄) · /var/spool/mail/ (系統中,所有賬號的郵件信箱) · /var/spool/cron/ (所有賬號的工作排成配置檔案) · /root (系統管理員的家目錄) 然後我們也知道,由於第七章曾經做過的練習的關係, /home/loop* 不需要備份,而且 /root 底下的 壓縮檔案也不需要備份,另外假設你要將備份的資料放置到 /backups ,並且該目錄僅有 root 有權 限進入! 此外,每次備份的檔名都希望不相同,例如使用:backup-system-20150701.tar.bz2 之類的 檔名來處理。 那你該如何處理這個備份資料呢?(請先動手作看看,再來察看一下底下的參考解答!) # 1. 先處理要放置備份資料的目錄與許可權: [[email protected] ~]# mkdir /backups [[email protected] ~]# chmod 700 /backups [[email protected] ~]# ll -d /backups drwx------. 2 root root 6 Jul 1 17:25 /backups # 2. 假設今天是 2015/07/01 ,則建立備份的方式如下: [[email protected] ~]# tar -jcv -f /backups/backup-system-20150701.tar.bz2 \ > --exclude=/root/*.bz2 --exclude=/root/*.gz --exclude=/home/loop* \ > /etc /home /var/spool/mail /var/spool/cron /root ....(過程省略).... [[email protected] ~]# ll -h /backups/ -rw-r--r--. 1 root root 21M Jul 1 17:26 backup-system-20150701.tar.bz2

§ 解壓縮後的 SELinux 課題

如果,鳥哥是說如果,如果因為某些緣故,所以你的系統必須要以備份的資料來回填到原本的系統中, 那麼得要特別注意復原後的系統的 SELinux 問題! 尤其是在系統檔案上面!例如 /etc 底下的檔案 群。SELinux 是比較特別的細部許可權設定,相關的介紹我們會在 16 章好好的介紹一下。 在這裡, 你只要先知道,SELinux 的許可權問題『可能會讓你的系統無法存取某些配置檔案內容,導致影響到系 統的正常使用權』。 這兩天 (2015/07) 接到一個網友的 email,他說他使用鳥哥介紹的方法透過 tar 去備份了 /etc 的數 據,然後嘗試在另一部系統上面復原回來。 復原倒是沒問題,但是復原完畢之後,無論如何就是無 法正常的登入系統!明明使用單人維護模式去作業系統時,看起來一切正常~但就是無法順利登入。 其實這個問題倒是很常見!大部分原因就是因為 /etc/shadow 這個密碼檔案的 SELinux 型別在還原 時被更改了!導致系統的登入程式無法順利的存取它, 才造成無法登入的窘境。 那如何處理呢?簡單的處理方式有這幾個: · 透過各種可行的救援方式登入系統,然後修改 /etc/selinux/config 檔案,將 SELinux 改成 permissive 模式, 重新啟動後系統就正常了; · 在第一次復原系統後,不要立即重新啟動!先使用 restorecon -Rv /etc 自動修復一下 SELinux 的型別即可。 · 透過各種可行的方式登入系統,建立 /.autorelabel 檔案,重新啟動後系統會自動修復 SELinux 的型別,並 且又會再次重新啟動,之後就正常了! 鳥哥個人是比較偏好第 2 個方法,不過如果忘記了該步驟就重新啟動呢?那鳥哥比較偏向使用第 3  個方案來處理,這樣就能夠解決復原後的 SELinux 問題囉! 至於更詳細的 SELinux ,我們得要講 完程式 (process) 之後,你才會有比較清楚的認知,因此還請慢慢學習,到第 16 章你就知道問題點