最近,Linux 基金會發起了一個全新的 LFCS(Linux 基金會認證系統管理員(Linux Foundation Certified Sysadmin))認證,旨在讓遍布全世界的人都有機會參加該認證的考試,通過考試的人將表明他們有能力在 Linux 上執行基本的中級系統管理任務。這項認證包括了對已運行的系統和服務的支持、一流水平的問題解決和分析以及決定何時將問題反映給工程師團隊的能力。
LFCS 系列第三講
本講是系列教程中的第三講,在這一講中,我們會涵蓋如何在文件系統中歸檔/壓縮文件及目錄、設置文件屬性和搜索文件等內容,這些都是 LFCS 認證中必須掌握的知識。
文件歸檔工具將一堆文件整合到一個單獨的歸檔文件之後,我們可以將歸檔文件備份到不同類型的介質或者通過網絡傳輸和發送 Email 來備份。在 Linux 中使用頻率最高的歸檔實用工具是 tar。當歸檔工具和壓縮工具一起使用的時候,可以減少同一文件和信息在硬盤中的存儲空間。
tar 將一組文件打包到一個單獨的歸檔文件(通常叫做 tar 文件或者 tarball)。tar 這個名稱最初代表磁帶存檔程序(tape archiver),但現在我們可以用它來歸檔任意類型的可讀寫介質上邊的數據,而不是只能歸檔磁帶數據。tar 通常與 gzip、bzip2 或者 xz 等壓縮工具一起使用,生成一個壓縮的 tarball。
基本語法:
#tar[選項][路徑名...]
其中 ... 代表指定哪些文件進行歸檔操作的表達式
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[需搜索的目錄][表達式]
通過文件大小遞歸搜索文件
以下命令會搜索當前目錄(.)及其下兩層子目錄(-maxdepth 3,包含當前目錄及往下兩層的子目錄)中大於 2 MB(-size +2M)的所有文件(-f)。
#find.-maxdepth 3-type f -size+2M
* 通過文件大小搜索文件*
Find Files by Size in Linux
搜索符合一定規則的文件並將其刪除
有時候,777 權限的文件通常為外部攻擊者打開便利之門。不管是以何種方式,讓所有人都可以對文件進行任意操作都是不安全的。對此,我們采取一個相對激進的方法——刪除這些文件('{}' + 用來“聚集”搜索的結果)。
#find/home/user -perm 777-execrm'{}'+
搜索 777 權限的文件
按訪問時間和修改時間搜索文件
搜索 /etc 目錄下訪問時間(-atime)或修改時間(-mtime)大於(+180)或小於(-180) 6 個月或者剛好(180) 6 個月的配置文件。
按照下面例子對命令進行修改:
#find/etc -iname "*.conf"-mtime -180-print
按修改時間搜索文件
ls -l 命令輸出的前 10 位字符是文件的屬性,其中第一個字符用來表明文件的類型。
接下來表示文件屬性的 9 位字符叫做文件的讀寫模式,代表文件屬主、同組用戶和其他用戶(通常指的是“外部世界”)對應的讀(r)、寫(w)和執行(x)權限。
文件的寫權限允許對應的用戶對文件進行打開和讀寫,對於同時設置了執行權限的目錄,對應用戶可以列舉出該目錄的內容。另外,文件的執行權限允許將文件當做是一個可執行程序來運行,而目錄的執行權限則是允許用戶進入和退出該目錄。
文件的權限通過 chown 命令來更改,其基本語法如下:
#chmod[new_mode]file
new_mode 可以是 3 位八進制數值或者對應權限的表達式。
八進制數值可以從二進制數值進行等值轉換,通過下列方法來計算文件屬主、同組用戶和其他用戶權限對應的二進制數值:
一個確定權限的二進制數值表現為 2 的冪(r=2^2,w=2^1,x=2^0),當權限省缺時,二進制數值為 0。如下:
文件權限
使用八進制數值設置上圖的文件權限,請輸入:
#chmod744 myfile
通過 u、g 和 o 分別代表用戶、同組用戶和其他用戶,然後你也可以使用權限表達式來單獨對用戶設置文件的權限模式。也可以通過 a 代表所有用戶,然後設置文件權限。通過 + 號或者 - 號相應的賦予或移除文件權限。
為所有用戶撤銷一個 shell 腳本的執行權限
正如之前解釋的那樣,我們可以通過 - 號為需要移除權限的屬主、同組用戶、其他用戶或者所有用戶去掉指定的文件權限。下面命令中的短橫線(-)可以理解為:移除(-)所有用戶(a)的 backup.sh 文件執行權限(x)。
#chmod a-x backup.sh
下面演示為文件屬主、同組用戶賦予讀、寫和執行權限,並賦予其他用戶讀權限。
當我們使用 3 位八進制數值為文件設置權限的時候,第一位數字代表屬主權限,第二位數字代表同組用戶權限,第三位數字代表其他用戶的權限:
命令如下:
#chmod774 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
本文由 LCTT 原創翻譯,Linux中國 榮譽推出