十一、tar打包命令的使用


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 與管線命令啦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM