Linux下最常用的打包命令就是tar,使用tar命令打包后,就可以用其它的命令來進行壓縮了。tar命令的使用方法
tar命令
[root@dingjian ~]# tar [-cxtzjvfpPN] 文件與目錄 ....
參數:
-c :建立一個壓縮文件的參數指令(create 的意思);
-x :解開一個壓縮文件的參數指令!
-t :查看 tarfile 里面的文件!
特別注意,在參數的下達中, c/x/t 僅能存在一個!不可同時存在!
因為不可能同時壓縮與解壓縮。
-z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮?
-j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?
-v :壓縮的過程中顯示文件!這個常用,但不建議用在背景執行過程!
-f :使用檔名,請留意,在 f 之后要立即接檔名喔!不要再加參數!
-C(大寫) : 目錄 這個參數用在解壓縮時,若要在特定目錄解壓縮,可以使用這個參數
-p :使用原文件的原來屬性(屬性不會依據使用者而變)
-P (大寫):可以使用絕對路徑來壓縮!.
-N :比后面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的文件中!
--exclude FILE:在壓縮的過程中,不要將 FILE 打包!
其實最簡單的使用tar的記憶方法:
壓 縮:tar -zcvf filename.tar.gz 要被壓縮的文件或目錄名稱
查 看: tar -ztvf filename.tar.gz
解壓縮: tar -zxvf filename.tar.gz -C 欲解壓縮的目錄
tar示例一:將整個 /etc 目錄下的文件全部打包成為 /tmp/etc.tar
[root@localhost.localdomain /tmp]# tar -cvf /tmp/etc.tar /etc <==僅打包,不壓縮! [root@localhost.localdomain /tmp]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 壓縮 [root@localhost.localdomain /tmp]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 壓縮 [root@localhost.localdomain /tmp]# ls -l total 38212 -rw-r--r--. 1 root root 28948480 Sep 24 15:16 etc.tar -rw-r--r--. 1 root root 0 Sep 24 15:18 etc.tar.bz2 -rw-r--r--. 1 root root 10170259 Sep 24 15:16 etc.tar.gz
# 特別注意,在參數 f 之后的文件檔名是自己取的,我們習慣上都用 .tar 來作為辨識。
# 如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file ~
# 如果加 j 參數,則以 .tar.bz2 來作為附檔名啊~
在備份重要的系統數據時,我們可以利用-p參數保留原本文件的權限與屬性
# 上述指令在執行的時候,會顯示一個警告訊息:
# 『tar: Removing leading `/' from member names』那是關於絕對路徑的特殊設定。
tar例二:在打包一個文件時,一般從要打包的目錄或文件的上一層目錄對其打包 ,如果要打包這個文件和其絕對路徑時,可以從/開始打包
[root@localhost.localdomain /tmp]# mkdir /tmp/dingjian/aa{1..3} -p [root@localhost.localdomain /tmp]# tree dingjian/ dingjian/ ├── aa1 ├── aa2 └── aa3 [root@localhost.localdomain /tmp]# tar -zcvf /tmp/etc1.tar.gz /tmp/dingjian <==打包其文件dingjian與絕對路徑 tar: Removing leading `/' from member names /tmp/dingjian/ /tmp/dingjian/aa1/ /tmp/dingjian/aa2/ /tmp/dingjian/aa3/ [root@localhost.localdomain /tmp]# tar -zccvf /tmp/etc2.tar.gz ./dingjian <==在文件上一層目錄只對這個dingjian這個文件進行打包 ./dingjian/ ./dingjian/aa1/ ./dingjian/aa2/ ./dingjian/aa3/
分別解壓出來的路徑:
[root@localhost.localdomain /tmp]# tar -zxvf /tmp/etc1.tar.gz tmp/dingjian/ tmp/dingjian/aa1/ tmp/dingjian/aa2/ tmp/dingjian/aa3/ [root@localhost.localdomain /tmp]# tar -zxvf /tmp/etc2.tar.gz ./dingjian/ ./dingjian/aa1/ ./dingjian/aa2/ ./dingjian/aa3/ [root@localhost.localdomain /tmp]# ls -l total 8 drwxr-xr-x. 5 root root 39 Sep 24 15:23 dingjian -rw-r--r--. 1 root root 152 Sep 24 15:25 etc1.tar.gz -rw-r--r--. 1 root root 153 Sep 24 15:25 etc2.tar.gz drwxr-xr-x. 3 root root 22 Sep 24 15:27 tmp [root@localhost.localdomain /tmp]# tree tmp tmp └── dingjian ├── aa1 ├── aa2 └── aa3 4 directories, 0 files [root@localhost.localdomain /tmp]# tree dingjian/ dingjian/ ├── aa1 ├── aa2 └── aa3
tar示例三:查閱上述 /tmp/目錄中各打包文件內有哪些文件?
[root@localhost.localdomain /tmp]# tar -tvf /tmp/etc.tar
[root@localhost.localdomain /tmp]# tar -jtvf /tmp/etc.tar.bz2
[root@localhost.localdomain /tmp]# tar -ztvf /tmp/etc.tar.gz
# 如果查看bz2 或gz壓縮的文件就得要加上 j或z 這個參數了!這很重要的!
tar示例四:將 /tmp/etc.tar.gz 文件解壓縮在 /usr/local/src 底下
[root@localhost.localdomain /]# cd /usr/local/src
[root@localhost.localdomain src]# tar -zxvf /tmp/etc.tar.gz
# 在預設的情況下,我們可以將壓縮檔在任何地方解開的!以這個范例來說,
# 我先將工作目錄變換到 /usr/local/src 底下,並且解開 /tmp/etc.tar.gz ,
# 則解開的目錄會在 /usr/local/src/etc 呢!另外,如果您進入 /usr/local/src/etc
# 則會發現,該目錄下的文件屬性與 /etc/ 可能會有所不同喔!
tar示例五:將/tmp/etc.tar.gz文件解壓縮到指定的目錄/root
[root@localhost.localdomain ~]# tar -zxvf /tmp/etc.tar.gz -C /root
[root@localhost.localdomain ~]# ls
anaconda-ks.cfg etc install.log install.log.syslog tar.sh
tar示例六:在 /tmp 底下,我只想要將 /tmp/etc.tar.gz 內的 etc/passwd 解開而已
[root@localhost.localdomain tmp]# tar -ztvf etc.tar.gz |grep passwd
-rw-r--r-- root/root 146 2012-02-22 19:48 etc/pam.d/passwd
-rw-r--r-- root/root 1176 2013-11-05 05:52 etc/passwd-
-rw-r--r-- root/root 1176 2013-11-05 05:52 etc/passwd
-rw------- root/root 0 2013-02-22 08:16 etc/security/opasswd
[root@localhost.localdomain tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
etc/passwd
[root@localhost.localdomain tmp]# ls -l etc
total 4
-rw-r--r--. 1 root root 1176 Nov 5 05:52 passwd
#我們通過tar -ztvf etc.tar.gz 結合管道grep來過濾找出passwd的所在位置
#在解壓過程中etc/passwd不能客成/etc/passwd因為它是記錄在etc.tar.gz內的文件名
tar示例七:將 /etc/ 內的所有文件備份下來,並且保存其權限!
[root@localhost.localdomain ~]# tar -zxvpf /tmp/etc.tar.gz /etc
# 這個 -p 的屬性是很重要的,尤其是當您要保留原本文件的屬性時!
tar示例八:在 /etc 當中,比 2013/11/01 新的文件才備份
[root@localhost.localdomain tmp]# tar -N '2013/11/01' -zcvf etc_2013.tar.gz /etc
tar示例九:打包備份當前目錄下dingjian文件夾 ,但不打包里面linuxfile文件
[root@localhost.localdomain tmp]# tree dingjian dingjian ├── 11 ├── 22 ├── 33 ├── 44 ├── 55 ├── aa ├── bb ├── cc ├── dd ├── ee ├── linuxfile ├── q1 ├── q2 └── q3.4 5 directories, 9 files [root@localhost.localdomain tmp]# tar --exclude ./dingjian/linuxfile -zcvf dingjian.tar.gz ./dingjian ./dingjian/ ./dingjian/33/ ./dingjian/aa ./dingjian/11/ ./dingjian/55/ ./dingjian/dd ./dingjian/ee ./dingjian/q2 ./dingjian/cc ./dingjian/q1 ./dingjian/bb ./dingjian/44/ ./dingjian/q3.4 ./dingjian/22/ [root@localhost.localdomain tmp]# tar -ztvf dingjian.tar.gz drwxr-xr-x root/root 0 2013-12-04 09:04 ./dingjian/ drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/33/ -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/aa drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/11/ drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/55/ -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/dd -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/ee -rw-r--r-- root/root 0 2013-12-04 09:04 ./dingjian/q2 -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/cc -rw-r--r-- root/root 0 2013-12-04 09:04 ./dingjian/q1 -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/bb drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/44/ -rw-r--r-- root/root 0 2013-12-04 09:04 ./dingjian/q3.4 drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/22/
tar示例十:打包備份當前目錄下dingjian文件夾 ,但不打包里面字每開頭為q的文件
[root@localhost.localdomain tmp]# tree dingjian dingjian ├── 11 ├── 22 ├── 33 ├── 44 ├── 55 ├── aa ├── bb ├── cc ├── dd ├── ee ├── linuxfile ├── q1 ├── q2 └── q3.4 [rroot@localhost.localdomain tmp]# tar --exclude=./dingjian/q* -zcvf myfile.tar.gz ./dingjian ./dingjian/ ./dingjian/33/ ./dingjian/aa ./dingjian/11/ ./dingjian/55/ ./dingjian/dd ./dingjian/ee ./dingjian/linuxfile ./dingjian/cc ./dingjian/bb ./dingjian/44/ ./dingjian/22/ [root@localhost.localdomain tmp]# tar -ztvf myfile.tar.gz drwxr-xr-x root/root 0 2013-12-04 09:04 ./dingjian/ drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/33/ -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/aa drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/11/ drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/55/ -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/dd -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/ee -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/linuxfile -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/cc -rw-r--r-- root/root 0 2013-12-04 09:02 ./dingjian/bb drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/44/ drwxr-xr-x root/root 0 2013-12-04 09:02 ./dingjian/22/
tar實例十一:工作環境實例:
打包站點目錄/var/www/html 備份到/data 目錄下(最好每次備份按時間
生成不同的備份包)
[root@localhost.localdomain tmp]# tar -zcvf html_$(date +%F).tar.gz /var/www/html
tar: Removing leading `/' from member names
/var/www/html/
[root@localhost.localdomain tmp]# ls
html_2013-12-04.tar.gz
tar示例十二:將 /etc/ 打包后直接解開在 /tmp 底下,而不產生文件!
[root@localhost.localdomain ~]# cd /tmp
[root@localhost.localdomain tmp]# tar -cvf - /etc | tar -xvf -
# 這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的!
# 要注意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~
# 這分別代表 standard output, standard input 與管線命令啦!