首頁 > 軟體

LFCS 系列第三講:歸檔/壓縮檔案及目錄、設定檔案屬性和搜尋檔案

2020-06-16 17:44:25

最近,Linux 基金會發起了一個全新的 LFCS(Linux 基金會認證系統管理員(Linux Foundation Certified Sysadmin))認證,旨在讓遍布全世界的人都有機會參加該認證的考試,通過考試的人將表明他們有能力在 Linux 上執行基本的中級系統管理任務。這項認證包括了對已執行的系統和服務的支援、一流水平的問題解決和分析以及決定何時將問題反映給工程師團隊的能力。

LFCS 系列第三講 

本講是系列教學中的第三講,在這一講中,我們會涵蓋如何在檔案系統中歸檔/壓縮檔案及目錄、設定檔案屬性和搜尋檔案等內容,這些都是 LFCS 認證中必須掌握的知識。

 

歸檔和壓縮的相關工具

檔案歸檔工具將一堆檔案整合到一個單獨的歸檔檔案之後,我們可以將歸檔檔案備份到不同型別的媒介或者通過網路傳輸和傳送 Email 來備份。在 Linux 中使用頻率最高的歸檔實用工具是 tar。當歸檔工具和壓縮工具一起使用的時候,可以減少同一檔案和資訊在硬碟中的儲存空間。

 

tar 使用工具

tar 將一組檔案打包到一個單獨的歸檔檔案(通常叫做 tar 檔案或者 tarball)。tar 這個名稱最初代表磁帶存檔程式(tape archiver),但現在我們可以用它來歸檔任意型別的可讀寫媒介上邊的資料,而不是只能歸檔磁帶資料。tar 通常與 gzip、bzip2 或者 xz 等壓縮工具一起使用,生成一個壓縮的 tarball。

基本語法:

  1. #tar[選項][路徑名...]

其中 ... 代表指定哪些檔案進行歸檔操作的表示式

 

tar 的常用命令

長選項簡寫描述
-create c 建立 tar 歸檔檔案
-concatenate A 將一存檔與已有的存檔合併
-append r 把要存檔的檔案追加到歸檔檔案的末尾
-update u 更新新檔案到歸檔檔案中去
-diff 或 -compare d 比較存檔與當前檔案的不同之處
-file archive f 使用檔案檔案或歸檔裝置
-list t 列出 tarball 中的內容
-extract 或 -get x 從歸檔檔案中釋放檔案

 

常用的操作修飾符

長選項縮寫描述
-directory dir C 執行歸檔操作前,先轉到指定目錄
-same-permissions p 保持原始的檔案許可權
-verbose v 列出所有的讀取或提取的檔案。但這個識別符號與 -list 一起使用的時候,還會顯示出檔案大小、屬主和時間戳的資訊
-verify W 寫入存檔後進行校驗
-exclude file   不把指定檔案包含在內
-exclude=pattern X 以PATTERN模式排除檔案
-gzip 或 -gunzip z 通過gzip壓縮歸檔
-bzip2 j 通過bzip2壓縮歸檔
-xz J 通過xz壓縮歸檔

Gzip 是最古老的壓縮工具,壓縮率最小,bzip2 的壓縮率稍微高一點。另外,xz 是最新的壓縮工具,壓縮率最好。xz 具有最佳壓縮率的代價是:完成壓縮操作花費最多時間,壓縮過程中占有較多系統資源。

通常,通過這些工具壓縮的 tar 檔案相應的具有 .gz、.bz2 或 .xz的擴充套件名。在下列的例子中,我們使用 file1、file2、file3、file4 和 file5 進行演示。

通過 gzip、bzip2 和 xz 壓縮歸檔

歸檔當前工作目錄的所有檔案,並以 gzip、bzip2 和 xz 壓縮剛剛的歸檔檔案(請注意,用正規表示式來指定哪些檔案應該歸檔——這是為了防止將歸檔工具包前一步生成的檔案打包進來)。

  1. #tar czf myfiles.tar.gz file[0-9]
  2. #tar cjf myfiles.tar.bz2 file[0-9]
  3. #tar cJf myfile.tar.xz file[0-9]

壓縮多個檔案

列舉 tarball 中的內容和更新/追加檔案到歸檔檔案中

列舉 tarball 中的內容,並顯示相同資訊為一個詳細目錄清單。注意,不能直接向壓縮的歸檔檔案更新/追加檔案(若你需要向壓縮的 tarball 中更新/追加檔案,需要先解壓 tar 檔案後再進行操作,然後重新壓縮)。

  1. #tar tvf [tarball]

列舉歸檔檔案中的內容

執行一下任意一條命令:

  1. # gzip -d myfiles.tar.gz [#1]
  2. # bzip2 -d myfiles.tar.bz2 [#2]
  3. # xz -d myfiles.tar.xz [#3]

然後:

  1. #tar--delete--file myfiles.tar file4 (刪除tarball中的file4)
  2. #tar--update --file myfiles.tar file4 (更新tarball中的file4)

  1. # gzip myfiles.tar[如果你執行#1命令]
  2. # bzip2 myfiles.tar[如果你執行#2命令]
  3. # xz myfiles.tar[如果你執行#3命令]

最後

  1. #tar tvf [tarball]#再次

將 file4 修改後的日期和時間與之前顯示的對應資訊進行比較

排除檔案型別

假設你現在需要備份使用者的家目錄。一個有經驗的系統管理員會選擇忽略所有視訊和音訊檔再備份(也可能是公司規定)。

可能你最先想到的方法是在備份的時候,忽略擴充套件名為 .mp3 和 .mp4(或者其他格式)的檔案。但如果你有些自作聰明的使用者將擴充套件名改為 .txt 或者 .bkp,那你的方法就不靈了。為了發現並排除音訊或者視訊檔,你需要先檢查檔案型別。以下 shell 指令碼可以代你完成型別檢查:

  1. #!/bin/bash
  2. #把需要進行備份的目錄傳遞給 $1 引數.
  3. DIR=$1
  4. #排除檔案型別中包含了 mpeg 字串的檔案,然後建立 tarball 並進行壓縮。
  5. #-若檔案型別中包含 mpeg 字串, $?(最後執行的命令的退出狀態)返回0,然後檔名被定向到排除選項。否則返回1
  6. #-若 $?等於0,該檔案從需要備份檔案的列表排除。
  7. tar X <(for i in $DIR/*; do file $i | grep -i mpeg; if [ $? -eq 0 ]; then echo $i; fi;done) -cjf backupfile.tar.bz2 $DIR/*

排除檔案進行備份

使用 tar 保持檔案的原有許可權進行恢復

通過以下命令,你可以保留檔案的許可權將備份檔案恢復到原始使用者的家目錄(本例是 user_restore)。

  1. #tar xjf backupfile.tar.bz2 --directory user_restore --same-permissions

從歸檔檔案中恢復

擴充套件閱讀:

 

通過 find 命令搜尋檔案

find 命令用於遞回搜尋目錄樹中包含指定字元的檔案和目錄,然後在螢幕顯示出於指定字元相匹配的檔案和目錄,或者在匹配項進行其他操作。

通常,我們通過檔名、檔案的屬主、屬組、型別許可權、日期及大小來搜尋。

 

基本語法:

  1. #find[需搜尋的目錄][表示式]

通過檔案大小遞回搜尋檔案

以下命令會搜尋當前目錄(.)及其下兩層子目錄(-maxdepth 3,包含當前目錄及往下兩層的子目錄)中大於 2 MB(-size +2M)的所有檔案(-f)。

  1. #find.-maxdepth 3-type f -size+2M

* 通過檔案大小搜尋檔案*

Find Files by Size in Linux

搜尋符合一定規則的檔案並將其刪除

有時候,777 許可權的檔案通常為外部攻擊者開啟便利之門。不管是以何種方式,讓所有人都可以對檔案進行任意操作都是不安全的。對此,我們採取一個相對激進的方法——刪除這些檔案('{}' + 用來“聚集”搜尋的結果)。

  1. #find/home/user -perm 777-execrm'{}'+

搜尋 777 許可權的檔案

按存取時間和修改時間搜尋檔案

搜尋 /etc 目錄下存取時間(-atime)或修改時間(-mtime)大於(+180)或小於(-180) 6 個月或者剛好(180) 6 個月的組態檔。

按照下面例子對命令進行修改:

  1. #find/etc -iname "*.conf"-mtime -180-print

按修改時間搜尋檔案

 

檔案許可權及基本屬性

ls -l 命令輸出的前 10 位字元是檔案的屬性,其中第一個字元用來表明檔案的型別。

  • – : 普通檔案
  • -d : 目錄
  • -l : 符號連結
  • -c : 字元裝置 (它將資料作為位元組流處理,如terminal)
  • -b : 塊裝置 (在塊裝置中處理資料,如儲存裝置)

接下來表示檔案屬性的 9 位字元叫做檔案的讀寫模式,代表檔案屬主、同組使用者和其他使用者(通常指的是“外部世界”)對應的讀(r)、寫(w)和執行(x)許可權。

檔案的寫許可權允許對應的使用者對檔案進行開啟和讀寫,對於同時設定了執行許可權的目錄,對應使用者可以列舉出該目錄的內容。另外,檔案的執行許可權允許將檔案當做是一個可執行程式來執行,而目錄的執行許可權則是允許使用者進入和退出該目錄。

檔案的許可權通過 chown 命令來更改,其基本語法如下:

  1. #chmod[new_mode]file

new_mode 可以是 3 位八進位制數值或者對應許可權的表示式。

八進位制數值可以從二進位制數值進行等值轉換,通過下列方法來計算檔案屬主、同組使用者和其他使用者許可權對應的二進位制數值:

一個確定許可權的二進位制數值表現為 2 的冪(r=2^2,w=2^1,x=2^0),當許可權省缺時,二進位制數值為 0。如下:

檔案許可權

使用八進位制數值設定上圖的檔案許可權,請輸入:

  1. #chmod744 myfile

通過 u、g 和 o 分別代表使用者、同組使用者和其他使用者,然後你也可以使用許可權表示式來單獨對使用者設定檔案的許可權模式。也可以通過 a 代表所有使用者,然後設定檔案許可權。通過 + 號或者 - 號相應的賦予或移除檔案許可權。

為所有使用者復原一個 shell 指令碼的執行許可權

正如之前解釋的那樣,我們可以通過 - 號為需要移除許可權的屬主、同組使用者、其他使用者或者所有使用者去掉指定的檔案許可權。下面命令中的短橫線(-)可以理解為:移除(-)所有使用者(a)的 backup.sh 檔案執行許可權(x)。

  1. #chmod a-x backup.sh

下面演示為檔案屬主、同組使用者賦予讀、寫和執行許可權,並賦予其他使用者讀許可權。

當我們使用 3 位八進位制數值為檔案設定許可權的時候,第一位數位代表屬主許可權,第二位數位代表同組使用者許可權,第三位數位代表其他使用者的許可權:

  • 屬主:(r=2^2 + w=2^1 + x=2^0 = 7)
  • 同組使用者:(r=2^2 + w=2^1 + x=2^0 = 7)
  • 其他使用者:(r=2^2 + w=0 + x=0 = 4)

命令如下:

  1. #chmod774 myfile

隨著練習時間的推移,你會知道何種情況下使用哪種方式來更改檔案的許可權模式的效果最好。

使用 ls -l 詳細列舉目錄詳細同樣會顯示出檔案的屬主和屬組(這個很基本,而且影響到系統檔案的存取控制)。

列舉 Linux 檔案

通過 chown 命令可以對檔案的歸屬權進行更改,可以同時或者分開更改屬主和屬組。其基本語法為:

  1. #chown user:group file

至少要指定使用者或者使用者組

舉幾個例子:

將檔案的屬主更改為指定使用者:

  1. #chown gacanepa sent

同時將檔案的屬主和屬組更改為指定的使用者和組:

  1. #chown gacanepa:gacanepa TestFile

只將檔案的屬組更改為指定組。注意組名前的冒號(:)。

  1. #chown:gacanepa email_body.txt

 

結論

作為一個系統管理員,你需要懂得如何建立和恢復備份、如何在系統中搜尋檔案並更改它們的屬性。通過一些技巧,你可以更好地管理系統並避免以後出問題。

我希望,本文給出的技巧可以幫助你達成管理系統的目標。你可以隨時在評論中發表自己的技巧及社群給你帶來的益處。

先行感謝!

參考連結


via: http://www.tecmint.com/compress-files-and-finding-files-in-linux/

作者:Gabriel Cánepa 譯者:GHLandy 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-03/129638.htm


IT145.com E-mail:sddin#qq.com