文件歸檔就是將一組擁有相同屬性的文件或目錄組合到一個文件中,並重新存儲它們到一個專門的目錄中,以便之後在須要時進行查閱。比方說,不少狀況下,咱們的系統日誌是有輪詢的,舊的日誌,會在必定的時間內會被自動刪除,咱們須要常常對日誌進行歸檔,以保存舊的日誌,以便咱們在須要時進行查閱。php
tar 能夠將多個文件打包成一個文件,以便在網絡上傳輸和歸檔,當你須要時,能夠將他們提取出來。該歸檔文件還可使用 gzip、bzip2 和 xz 壓縮方式進行文件壓縮。web
使用 tar 命令對 /var/log/ 文件裏面的 log 進行歸檔,其中 c 選項表示建立一個歸檔文件,f 選項用於指定歸檔文件的名稱;bash
[root@websvr ~]# tar -cf log.tar /var/log/ tar: Removing leading `/' from member names [root@websvr ~]# ls log.tar [root@websvr ~]#
* 在執行歸檔時,若是歸檔的目錄包含根目錄 」 / " ,則在歸檔的時候,會自定刪除根目錄,這樣作的目的就是防止在提取文件時發生誤操做,覆蓋原文件,確保提取文件時,始終會是在當前目錄。網絡
若是你想在歸檔過程當中顯示歸檔的細節,歸檔了哪些文件,你能夠經過添加 v 選項,來實現這一目的;ide
[root@websvr ~]# tar -cvf log1.tar /var/log/ tar: Removing leading `/' from member names /var/log/ /var/log/lastlog /var/log/private/ /var/log/wtmp /var/log/samba/ /var/log/samba/old/ /var/log/audit/ /var/log/audit/audit.log.4 /var/log/audit/audit.log.3 /var/log/audit/audit.log.2 /var/log/audit/audit.log.1 /var/log/audit/audit.log /var/log/spooler-20201101 /var/log/sssd/ /var/log/sssd/sssd_implicit_files.log-20200705.gz /var/log/sssd/sssd_nss.log-20200705.gz /var/log/sssd/sssd_implicit_files.log-20200712 ... output omitted ...
若是你想查看歸檔文件中的具體內容,你可使用 t 選項來查看 log.tar 文件中的內容;php-fpm
[root@websvr ~]# tar -tf log.tar var/log/ var/log/lastlog var/log/private/ var/log/wtmp var/log/samba/ var/log/samba/old/ var/log/audit/ var/log/audit/audit.log.4 var/log/audit/audit.log.3 var/log/audit/audit.log.2 var/log/audit/audit.log.1 var/log/audit/audit.log var/log/spooler-20201101 var/log/sssd/ var/log/sssd/sssd_implicit_files.log-20200705.gz var/log/sssd/sssd_nss.log-20200705.gz var/log/sssd/sssd_implicit_files.log-20200712 ... output omitted ...
當須要時,咱們可使用 x 選項來提取 log.tar 中的文件日誌
[root@websvr ~]# mkdir log [root@websvr ~]# cd log/ [root@websvr log]# tar -xf ~/log.tar [root@websvr log]# ls var [root@websvr log]# ls var/ log [root@websvr log]# ls var/log/ anaconda cron dnf.log.2 httpd messages-20201018 spooler audit cron-20201011 dnf.log.3 insights-client messages-20201025 spooler-20201011 boot.log cron-20201018 dnf.log.4 journal messages-20201101 spooler-20201018 boot.log-20200622 cron-20201025 dnf.rpm.log lastlog php-fpm spooler-20201025 boot.log-20200629 cron-20201101 ecs_network_optimization.log maillog private spooler-20201101 boot.log-20200706 dnf.librepo.log exim maillog-20201011 sa sssd btmp dnf.librepo.log-20201011 grafana maillog-20201018 samba tuned btmp-20201101 dnf.librepo.log-20201018 hawkey.log maillog-20201025 secure wtmp chrony dnf.librepo.log-20201025 hawkey.log-20201011 maillog-20201101 secure-20201011 zabbix cloudinit-deploy.log dnf.librepo.log-20201101 hawkey.log-20201018 mariadb secure-20201018 cloud-init.log dnf.log hawkey.log-20201025 messages secure-20201025 cloud-init-output.log dnf.log.1 hawkey.log-20201101 messages-20201011 secure-20201101
當咱們要歸檔的文件比較大時,或者咱們想在網絡上傳輸咱們的歸檔文件,這個時候,咱們須要在歸檔文件的時候,對文件進行一個壓縮,從而減小對帶寬的要求。code
tar 支持三種壓縮方式:blog
gzip 壓縮速度最快,使用最普遍,但壓縮率相對較低ip
bzip2 壓縮文件一般會比 gzip 要小,但使用沒有 gzip普遍
建立壓縮文件選項:
經過 -z 選項建立 gzip 方式的壓縮文件(.tar.gz 或 .tgz)
經過 -j 選項建立 bzip 方式的壓縮文件(*.tar.bz2)
建立 gzip 格式的壓縮存檔
[root@websvr ~]# tar -czf log.tar.gz /var/log/ tar: Removing leading `/' from member names [root@websvr ~]# ls -lh log* -rw-r--r-- 1 root root 760M Nov 6 08:16 log.tar -rw-r--r-- 1 root root 97M Nov 6 08:15 log.tar.gz
資源使用率
top - 16:54:46 up 16:18, 2 users, load average: 0.80, 0.59, 0.30 Tasks: 120 total, 2 running, 118 sleeping, 0 stopped, 0 zombie %Cpu(s): 35.3 us, 11.0 sy, 0.0 ni, 43.1 id, 0.0 wa, 0.0 hi, 0.1 si, 10.4 st MiB Mem : 1829.0 total, 80.7 free, 179.5 used, 1568.8 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1486.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1952 student 20 0 4604 1396 1108 S 83.6 0.1 0:11.27 gzip 1951 student 20 0 247172 2884 2680 R 17.7 0.2 0:02.37 tar 39 root 20 0 0 0 0 S 2.7 0.0 0:04.20 kswapd0 1755 root 20 0 0 0 0 I 0.1 0.0 0:00.22 kworker/0:0-events
壓縮文件所需的時間(30 個文件,每一個文件 100M)
[root@websvr ~]# time tar -czf test.tar2.gz test_file* real 0m29.983s user 0m23.198s sys 0m7.041s
建立 bzip2 格式的壓縮存檔
[root@websvr ~]# tar -cjf log.tar.bz2 /var/log/ tar: Removing leading `/' from member names [root@websvr ~]# ls -lh log* -rw-r--r-- 1 root root 760M Nov 6 08:16 log.tar -rw-r--r-- 1 root root 81M Nov 6 08:21 log.tar.bz2 -rw-r--r-- 1 root root 97M Nov 6 08:15 log.tar.gz
資源使用率
top - 16:52:56 up 16:16, 2 users, load average: 0.44, 0.46, 0.22 Tasks: 120 total, 4 running, 116 sleeping, 0 stopped, 0 zombie %Cpu(s): 43.7 us, 7.2 sy, 0.0 ni, 43.8 id, 0.1 wa, 0.0 hi, 0.0 si, 5.2 st MiB Mem : 1829.0 total, 71.2 free, 186.4 used, 1571.4 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1479.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1949 student 20 0 13784 8592 1228 R 93.0 0.5 0:13.67 bzip2 1948 student 20 0 247172 2732 2528 R 9.9 0.1 0:01.54 tar 39 root 20 0 0 0 0 S 1.1 0.0 0:03.22 kswapd0 448 root 20 0 0 0 0 S 0.1 0.0 0:01.60 xfsaild/vda1 1950 root 20 0 0 0 0 I 0.1 0.0 0:00.01 kworker/1:2-mm_percp+
壓縮文件所需的時間(30 個文件,每一個文件 100M)
[root@websvr ~]# time tar -cjf test.tar3.bz2 test_file* real 1m10.511s user 1m1.819s sys 0m10.762s
建立 xz 格式的壓縮存檔
[root@websvr ~]# tar -cJf log.tar.xz /var/log/ tar: Removing leading `/' from member names [root@websvr ~]# ls -lh log* -rw-r--r-- 1 root root 760M Nov 6 08:16 log.tar -rw-r--r-- 1 root root 81M Nov 6 08:21 log.tar.bz2 -rw-r--r-- 1 root root 97M Nov 6 08:15 log.tar.gz -rw-r--r-- 1 root root 50M Nov 6 08:29 log.tar.xz
資源的使用率
top - 16:51:36 up 16:15, 2 users, load average: 0.94, 0.53, 0.22 Tasks: 120 total, 4 running, 116 sleeping, 0 stopped, 0 zombie %Cpu(s): 45.2 us, 5.4 sy, 0.0 ni, 44.0 id, 0.0 wa, 0.0 hi, 0.0 si, 5.4 st MiB Mem : 1829.0 total, 62.9 free, 259.0 used, 1507.1 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1406.3 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1946 student 20 0 316704 81244 2200 R 97.5 4.3 1:39.23 xz 1945 student 20 0 247172 2828 2620 R 9.3 0.2 0:09.75 tar 39 root 20 0 0 0 0 S 0.8 0.0 0:02.98 kswapd0 30 root 39 19 0 0 0 S 0.5 0.0 0:00.57 khugepaged 1942 root 20 0 0 0 0 R 0.1 0.0 0:00.31 kworker/1:0-events
壓縮文件所需的時間(30 個文件,每一個文件 100M)
[root@websvr ~]# time tar -cJf test.tar3.xz test_file* real 1m49.429s user 1m40.588s sys 0m16.924s
對於歸檔文件的壓縮,壓縮率最高的是 xz 格式的,但它也是用時最多,消耗資源最多的;時間最快的是 gzip 而且它也是消耗資源最少的,可是它的壓縮率不是沒有另外兩個高; bzip2 無論是時間和資源的消耗,仍是壓縮率,在這三個都是居中,不過,對於時間,它相比 xz 少的不是不少,壓縮率,相比 gzip 也不是很高,全部適用的場景不是不少。