LFCS 系列第三講:歸檔/壓縮文件及目錄、設置文件屬性和搜索文件
LFCS 系列第三講
請看以下視頻,這裡邊講給出 Linux 基金會認證程序的一些想法。
本講是系列教程中的第三講,在這一講中,我們會涵蓋如何在文件系統中歸檔/壓縮文件及目錄、設置文件屬性和搜索文件等內容,這些都是 LFCS 認證中必須掌握的知識。
歸檔和壓縮的相關工具
文件歸檔工具將一堆文件整合到一個單獨的歸檔文件之後,我們可以將歸檔文件備份到不同類型的介質或者通過網路傳輸和發送 Email 來備份。在 Linux 中使用頻率最高的歸檔實用工具是 tar。當歸檔工具和壓縮工具一起使用的時候,可以減少同一文件和信息在硬碟中的存儲空間。
tar 使用工具
tar 將一組文件打包到一個單獨的歸檔文件(通常叫做 tar 文件或者 tarball)。tar 這個名稱最初代表 磁帶存檔程序 ,但現在我們可以用它來歸檔任意類型的可讀寫介質上邊的數據,而不是只能歸檔磁帶數據。tar 通常與 gzip、bzip2 或者 xz 等壓縮工具一起使用,生成一個壓縮的 tarball。
基本語法:
# 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 壓縮剛剛的歸檔文件(請注意,用正則表達式來指定哪些文件應該歸檔——這是為了防止將歸檔工具包前一步生成的文件打包進來)。
# tar czf myfiles.tar.gz file[0-9]
# tar cjf myfiles.tar.bz2 file[0-9]
# tar cJf myfile.tar.xz file[0-9]
壓縮多個文件
列舉 tarball 中的內容和更新/追加文件到歸檔文件中
列舉 tarball 中的內容,並顯示相同信息為一個詳細目錄清單。注意,不能直接向壓縮的歸檔文件更新/追加文件(若你需要向壓縮的 tarball 中更新/追加文件,需要先解壓 tar 文件後再進行操作,然後重新壓縮)。
# tar tvf [tarball]
列舉歸檔文件中的內容
運行一下任意一條命令:
# gzip -d myfiles.tar.gz [#1]
# bzip2 -d myfiles.tar.bz2 [#2]
# xz -d myfiles.tar.xz [#3]
然後:
# tar --delete --file myfiles.tar file4 (刪除tarball中的file4)
# tar --update --file myfiles.tar file4 (更新tarball中的file4)
和
# gzip myfiles.tar [ 如果你運行 #1 命令 ]
# bzip2 myfiles.tar [ 如果你運行 #2 命令 ]
# xz myfiles.tar [ 如果你運行 #3 命令 ]
最後
# tar tvf [tarball] #再次
將 file4 修改後的日期和時間與之前顯示的對應信息進行比較
排除文件類型
假設你現在需要備份用戶的家目錄。一個有經驗的系統管理員會選擇忽略所有視頻和音頻文件再備份(也可能是公司規定)。
可能你最先想到的方法是在備份的時候,忽略擴展名為 .mp3 和 .mp4(或者其他格式)的文件。但如果你有些自作聰明的用戶將擴展名改為 .txt 或者 .bkp,那你的方法就不靈了。為了發現並排除音頻或者視頻文件,你需要先檢查文件類型。以下 shell 腳本可以代你完成類型檢查:
#!/bin/bash
# 把需要進行備份的目錄傳遞給 $1 參數.
DIR=$1
# 排除文件類型中包含了 mpeg 字元串的文件,然後創建 tarball 並進行壓縮。
# -若文件類型中包含 mpeg 字元串, $?(最後執行的命令的退出狀態)返回 0,然後文件名被定向到排除選項。否則返回 1。
# -若 $? 等於 0,該文件從需要備份文件的列表排除。
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)。
# tar xjf backupfile.tar.bz2 --directory user_restore --same-permissions
從歸檔文件中恢復
擴展閱讀:
通過 find 命令搜索文件
find 命令用於遞歸搜索目錄樹中包含指定字元的文件和目錄,然後在屏幕顯示出於指定字元相匹配的文件和目錄,或者在匹配項進行其他操作。
通常,我們通過文件名、文件的屬主、屬組、類型許可權、日期及大小來搜索。
基本語法:
# find [需搜索的目錄] [表達式]
通過文件大小遞歸搜索文件
以下命令會搜索當前目錄(.)及其下兩層子目錄(-maxdepth 3,包含當前目錄及往下兩層的子目錄)中大於 2 MB(-size +2M)的所有文件(-f)。
# find . -maxdepth 3 -type f -size +2M
通過文件大小搜索文件
搜索符合一定規則的文件並將其刪除
有時候,777 許可權的文件通常為外部攻擊者打開便利之門。不管是以何種方式,讓所有人都可以對文件進行任意操作都是不安全的。對此,我們採取一個相對激進的方法——刪除這些文件('{}' + 用來「聚集」搜索的結果)。
# find /home/user -perm 777 -exec rm '{}' +
搜索 777 許可權的文件
按訪問時間和修改時間搜索文件
搜索 /etc 目錄下訪問時間(-atime)或修改時間(-mtime)大於(+180)或小於(-180) 6 個月或者剛好(180) 6 個月的配置文件。
按照下面例子對命令進行修改:
# find /etc -iname "*.conf" -mtime -180 -print
按修改時間搜索文件
文件許可權及基本屬性
ls -l 命令輸出的前 10 位字元是文件的屬性,其中第一個字元用來表明文件的類型。
- – : 普通文件
- -d : 目錄
- -l : 符號鏈接
- -c : 字元設備 (它將數據作為位元組流處理,如terminal)
- -b : 塊設備 (在塊設備中處理數據,如存儲設備)
接下來表示文件屬性的 9 位字元叫做文件的讀寫模式,代表文件屬主、同組用戶和其他用戶(通常指的是「外部世界」)對應的讀(r)、寫(w)和執行(x)許可權。
文件的寫許可權允許對應的用戶對文件進行打開和讀寫,對於同時設置了執行許可權的目錄,對應用戶可以列舉出該目錄的內容。另外,文件的執行許可權允許將文件當做是一個可執行程序來運行,而目錄的執行許可權則是允許用戶進入和退出該目錄。
文件的許可權通過 chown 命令來更改,其基本語法如下:
# chmod [new_mode] file
new_mode 可以是 3 位八進位數值或者對應許可權的表達式。
八進位數值可以從二進位數值進行等值轉換,通過下列方法來計算文件屬主、同組用戶和其他用戶許可權對應的二進位數值:
一個確定許可權的二進位數值表現為 2 的冪(r=2^2,w=2^1,x=2^0),當許可權省缺時,二進位數值為 0。如下:
文件許可權
使用八進位數值設置上圖的文件許可權,請輸入:
# chmod 744 myfile
通過 u、g 和 o 分別代表用戶、同組用戶和其他用戶,然後你也可以使用許可權表達式來單獨對用戶設置文件的許可權模式。也可以通過 a 代表所有用戶,然後設置文件許可權。通過 + 號或者 - 號相應的賦予或移除文件許可權。
為所有用戶撤銷一個 shell 腳本的執行許可權
正如之前解釋的那樣,我們可以通過 - 號為需要移除許可權的屬主、同組用戶、其他用戶或者所有用戶去掉指定的文件許可權。下面命令中的短橫線(-)可以理解為:移除(-)所有用戶(a)的 backup.sh 文件執行許可權(x)。
# 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)
命令如下:
# chmod 774 myfile
隨著練習時間的推移,你會知道何種情況下使用哪種方式來更改文件的許可權模式的效果最好。
使用 ls -l 詳細列舉目錄詳細同樣會顯示出文件的屬主和屬組(這個很基本,而且影響到系統文件的訪問控制)。
列舉 Linux 文件
通過 chown 命令可以對文件的歸屬權進行更改,可以同時或者分開更改屬主和屬組。其基本語法為:
# chown user:group file
至少要指定用戶或者用戶組
舉幾個例子:
將文件的屬主更改為指定用戶:
# chown gacanepa sent
同時將文件的屬主和屬組更改為指定的用戶和組:
# chown gacanepa:gacanepa TestFile
只將文件的屬組更改為指定組。注意組名前的冒號(:)。
# chown :gacanepa email_body.txt
結論
作為一個系統管理員,你需要懂得如何創建和恢復備份、如何在系統中搜索文件並更改它們的屬性。通過一些技巧,你可以更好地管理系統並避免以後出問題。
我希望,本文給出的技巧可以幫助你達成管理系統的目標。你可以隨時在評論中發表自己的技巧及社區給你帶來的益處。
先行感謝!
參考鏈接
via: http://www.tecmint.com/compress-files-and-finding-files-in-linux/
作者:Gabriel Cánepa 譯者:GHLandy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive