CentOS打包和解壓詳解
Linux下最常用的打包命令就是tar,使用tar命令打包後,就可以用其它的命令來進行壓縮了。tar命令的使用方法
tar命令
[root@dingjian ~]# tar [-cxtzjvfpPN] 文件與目錄 ....
參數:
-c :建立一個壓縮文件的參數指令(create 的意思);
-x :解開一個壓縮文件的參數指令!
-t :查看 tarfile 裏面的文件!
特別註意,在參數的下達中, c/x/t 僅能存在一個!不可同時存在!
因為不可能同時壓縮與解壓縮。
-z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮?
-j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?
-f :使用檔名,請留意,在 f 之後要立即接檔名喔!不要再加參數!
-C(大寫) : 目錄 這個參數用在解壓縮時,若要在特定目錄解壓縮,可以使用這個參數
-p :使用原文件的原來屬性(屬性不會依據使用者而變)
-P (大寫):可以使用絕對路徑來壓縮!.
-N :比後面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的文件中!
--exclude FILE:在壓縮的過程中,不要將 FILE 打包!
其實最簡單的使用tar的記憶方法:
壓 縮:tar -zcvvf filename.tar.gz 要被壓縮的文件或目錄名稱
查 看: tar -ztvf filename.tar.gz
二、示例講解
tar示例一:將整個 /etc 目錄下的文件全部打包成為 /tmp/etc.tar
[root@localhost ~]# tar -cvf /tmp/etc.tar /etc <==僅打包,不壓縮!
[root@localhost ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包後,以 gzip 壓縮
[root@localhost ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包後,以 bzip2 壓縮
[root@localhost ~]# ls -lh /tmp
-rw-r--r--. 1 root root 22M Dec 4 04:38 etc.tar
-rw-r--r--. 1 root root 6.6M Dec 4 04:38 etc.tar.bz2
-rw-r--r--. 1 root root 7.4M Dec 4 04:38 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 ~]# tar -zcvf /tmp/etc1.tar.gz /tmp/dingjian <==打包其文件dingjian與絕對路徑
tar: Removing leading `/' from member names
/tmp/dingjian/
/tmp/dingjian/aa
/tmp/dingjian/dd
/tmp/dingjian/cc
/tmp/dingjian/bb
[root@localhost ~]# cd /tmp <==在文件上一層目錄只對這個dingjian這個文件進行打包
[root@localhost tmp]# tar -zcvf /tmp/etc2.tar.gz ./dingjian
./dingjian/
./dingjian/aa
./dingjian/dd
./dingjian/cc
./dingjian/bb
分別解壓出來的路徑:
[root@localhost ~]# ls
anaconda-ks.cfg dingjian install.log install.log.syslog tar.sh tmp
[root@localhost ~]# tar -zxvf /tmp/etc1.tar.gz
[root@localhost ~]# tree tmp
tmp
└── dingjian
├── aa
├── bb
├── cc
└── dd
[root@localhost ~]# tar -zxvf /tmp/etc2.tar.gz
1 directory, 4 files
[root@localhost ~]# tree dingjian
dingjian
├── aa
├── bb
├── cc
└── dd
tar示例三:查閱上述 /tmp/目錄中各打包文件內有哪些文件?
[root@localhost ~]# tar -tvf /tmp/etc.tar
[root@localhost ~]# tar -jtvf /tmp/etc.tar.bz2
[root@localhost ~]# tar -ztvf /tmp/etc.tar.gz
# 如果查看bz2 或gz壓縮的文件就得要加上 j或z 這個參數了!這很重要的!
tar示例四:將 /tmp/etc.tar.gz 文件解壓縮在 /usr/local/src 底下
[root@localhost /]# cd /usr/local/src
[root@localhost 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 ~]# tar -zxvf /tmp/etc.tar.gz -C /root
[root@localhost ~]# ls
anaconda-ks.cfg etc install.log install.log.syslog tar.sh
tar示例六:在 /tmp 底下,我只想要將 /tmp/etc.tar.gz 內的 etc/passwd 解開而已
[root@localhost 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 tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
etc/passwd
[root@localhost 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 ~]# tar -zxvpf /tmp/etc.tar.gz /etc
# 這個 -p 的屬性是很重要的,尤其是當您要保留原本文件的屬性時!
tar示例八:在 /etc 當中,比 2013/11/01 新的文件才備份
[root@localhost tmp]# tar -N '2013/11/01' -zcvf etc_2013.tar.gz /etc
tar示例九:打包備份當前目錄下dingjian文件夾 ,但不打包裏面linuxfile文件
[root@localhost 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 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 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 tmp]# tree dingjian
dingjian
├── 11
├── 22
├── 33
├── 44
├── 55
├── aa
├── bb
├── cc
├── dd
├── ee
├── linuxfile
├── q1
├── q2
└── q3.4
[root@localhost 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 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 tmp]# tar -zcvf html_$(date +%F).tar.gz /var/www/html
tar: Removing leading `/' from member names
/var/www/html/
[root@localhost tmp]# ls
html_2013-12-04.tar.gz
tar示例十二:將 /etc/ 打包後直接解開在 /tmp 底下,而不產生文件!
[root@localhost ~]# cd /tmp
[root@localhost tmp]# tar -cvf - /etc | tar -xvf -
# 這個動作有點像是 cp -r /etc /tmp 啦~依舊是有其有用途的!
# 要註意的地方在於輸出檔變成 - 而輸入檔也變成 - ,又有一個 | 存在~
# 這分別代表 standard output, standard input 與管線命令啦!
CentOS打包和解壓詳解