文件打包壓縮

来源:https://www.cnblogs.com/fengciaimei/archive/2020/05/04/12825392.html
-Advertisement-
Play Games

自我感覺,文件壓縮打包這塊很好學,別看壓縮命名多,好幾個不常用,常用的幾個選項基本都通用。就會產生一個很好的結果,只要學一個命令的選項,剩下的幾個命令只要記住名字就可以了。 本篇的重點在tar命令,大部分網上的文件都是經過打包壓縮處理過的。 linux中常見的壓縮文件的擴展名:*.gz  *.bz2... ...


文件打包壓縮

 

自我感覺,文件壓縮打包這塊很好學,別看壓縮命名多,好幾個不常用,常用的幾個選項基本都通用。就會產生一個很好的結果,只要學一個命令的選項,剩下的幾個命令只要記住名字就可以了。

本篇的重點在tar命令,大部分網上的文件都是經過打包壓縮處理過的。

linux中常見的壓縮文件的擴展名:*.gz  *.bz2  *.xz  *.tar  *.tar.gz  *.tar.bz2  *.tar.xz  *.tgz  *.Z  *.tar.Z

 

 

0.compress/uncompress compress 壓縮文件不會保留源文件,壓縮後的文件尾碼是.Z -d 解壓縮,相當於uncompress,可以重定向以保留源文件 -c 輸出壓信息到屏幕,可以重定向以保留源文件 -v 顯示詳情   zcat命令 可以查看.Z和.gz的壓縮文件內容 此命令太過久遠了,基本上已經很少見*.Z的壓縮文件了。而且使用gzip命令也可以解壓*.Z壓縮文件。     1.gzip/gunzip gzip壓縮文件會刪除源文件,生成.gz為尾碼的壓縮文件。 gzip [option]....FILE..... -c 把壓縮文件數據流輸出到屏幕上,可以使用重定向保存到文件中,用於保留源文件。 -d 解壓縮,相當於gunzip -k 保留源文件,僅在centos8以後的版本中有效 -v 壓縮後,可以顯示出壓縮比 -t 用於測試壓縮包的完整性 -# 按照指定的壓縮比壓縮。預設為6,支持1-9   zcat、zmore、zless命令 在不解壓.gz尾碼的壓縮文件的情況下查看壓縮文件內容。zcat FILE.GZ zgrep命令 可以在解壓的情況下直接搜索關鍵字 zgrep 關鍵字 /PATH/TO/COMPRESS.gz

 示例:

 1  #演示在不解壓的情況下搜索關鍵字
 2 [root@CentOS8 tmp]# zgrep http services.gz  
 3 #       http://www.iana.org/assignments/port-numbers
 4 http            80/tcp          www www-http    # WorldWideWeb HTTP
 5 http            80/udp          www www-http    # HyperText Transfer Protocol
 6 http            80/sctp                         # HyperText Transfer Protocol
 7 https           443/tcp                         # http protocol over TLS/SSL
 8 https           443/udp                         # http protocol over TLS/SSL
 9 https           443/sctp                        # http protocol over TLS/SSL
10 gss-http        488/tcp
11 gss-http        488/udp
12 
13 
14 #-c選項和管道符結合使用,主要用於保存源文件
15 [root@CentOS8 tmp]# gzip -c services > services.gz   
16 [root@CentOS8 tmp]# ll
17 total 824
18 -rwx------. 1 root root   1379 May  2 08:53 ks-script-drjaqc7p
19 -rw-r--r--  1 root root 692241 May  3 17:35 services
20 -rw-r--r--  1 root root 142549 May  3 18:02 services.gz

 

 

2.bzip2/bunzip2 bzip2壓縮文件會刪除源文件,生成.bz2為尾碼的壓縮文件。 bzip2 [option]....FILE..... -c 把壓縮文件數據流輸出到屏幕上,可以使用重定向保存到文件中,用於保留源文件。 -k 壓縮後保留源文件,同時生成壓縮文件。 -d 解壓縮,相當於bunzip2 -# 按照指定的壓縮比壓縮。預設為6,支持1-9 -q 靜默 壓縮 -v 壓縮後,顯示出壓縮比 -r 把目錄下的文件分別進行獨立壓縮 bzcat/bzmore/bzless命令 在不解壓.bz2尾碼的壓縮文件的情況下查看壓縮文件內容,和zcat用法相同。 bzcat FILE.BZ2 bzgrep命令 在不解.bz2尾碼的壓縮文件的情況下搜索壓縮包內容 bzgrep 關鍵字 /PATH/TO/COMPRESS.bz2

示例:

 1 #保留源文件壓縮,壓縮後顯示壓縮比信息
 2 [root@CentOS8 tmp]# bzip2 -kv services      
 3   services:  5.334:1,  1.500 bits/byte, 81.25% saved, 692241 in, 129788 out.
 4 [root@CentOS8 tmp]# ll
 5 total 952
 6 -rwx------. 1 root root   1379 May  2 08:53 ks-script-drjaqc7p
 7 -rw-r--r--  1 root root 692241 May  3 18:15 services
 8 -rw-r--r--  1 root root 129788 May  3 18:15 services.bz2
 9 -rw-r--r--  1 root root 142549 May  3 18:02 services.gz
10 
11 [root@CentOS8 tmp]# bunzip2 services.bz2 

 

  3.xz/unxz xz壓縮文件會刪除源文件,生成.xz為尾碼的壓縮文件。 xz [option]....FILE..... -c 把壓縮文件數據流輸出到屏幕上,可以使用重定向保存到文件中,用於保留源文件。 -k 壓縮後保留源文件,同時生成壓縮文件。 -d 解壓縮,相當於unxz -# 按照指定的壓縮比壓縮。預設為6,支持1-9 -q 靜默 壓縮 -v 壓縮後,顯示壓縮比等信息   xzcat/xzmore/xzless命令 在不解壓.xz尾碼的壓縮文件的情況下查看壓縮文件內容,和zcat用法相同。xzcat FILE.XZ xzgrep命令 在不解壓的情況下搜索壓縮包內容 xzgrep 關鍵字 /PATH/TO/COMPRESS.xz

示例:

#保留源文件壓縮,並且輸出壓縮比等信息
[root@CentOS8 tmp]# xz -kv services
services (1/1)
  100 %       103.4 KiB / 676.0 KiB = 0.153                                    
[root@CentOS8 tmp]# ll
total 1056
-rw-r--r--  1 root root 692241 May  3 18:15 services
-rw-r--r--  1 root root 129788 May  3 18:15 services.bz2
-rw-r--r--  1 root root 142549 May  3 18:02 services.gz
-rw-r--r--  1 root root 105872 May  3 18:15 services.xz


[root@CentOS8 tmp]# rm services   #刪除源文件
rm: remove regular file 'services'? y
[root@CentOS8 tmp]# xz -dk services.xz     #保留源文件解壓縮
[root@CentOS8 tmp]# ll
total 1056
-rw-r--r--  1 root root 692241 May  3 18:15 services
-rw-r--r--  1 root root 129788 May  3 18:15 services.bz2
-rw-r--r--  1 root root 142549 May  3 18:02 services.gz
-rw-r--r--  1 root root 105872 May  3 18:15 services.xz

#使用xzgrep搜索壓縮包
[root@CentOS8 tmp]# xzgrep http services.xz 
#       http://www.iana.org/assignments/port-numbers
http            80/tcp          www www-http    # WorldWideWeb HTTP
http            80/udp          www www-http    # HyperText Transfer Protocol
http            80/sctp                         # HyperText Transfer Protocol
https           443/tcp                         # http protocol over TLS/SSL
https           443/udp                         # http protocol over TLS/SSL
https           443/sctp                        # http protocol over TLS/SSL

#使用-l選項顯示長格式信息
[root@CentOS8 tmp]# xz -l services.xz 
Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
    1       1    103.4 KiB    676.0 KiB  0.153  CRC64   services.xz

 

  4.zip/unzip zip一個及壓縮打包於一身的壓縮命令,而且還是各個操作系統通用的壓縮命令。支持windows,unix,liunx。 zip [OPTION]... 壓縮後的文件名.zip 要進行壓縮的源文件 備註:如果要用zip進行壓縮目錄,需要指明目錄下的文件名,如果不指明則會指壓縮目錄本身。例子:要使用 zip pam.d.zip /etc/pam.d/*   5.tar 用於打包的工具。能夠把多個文件打包成一個文件。tar打包或者展開不會刪除源文件 1.創建文件 tar -c -f -[jJz] /PATH/TO/SOMEFILE.tar FILE.... 備註:-[jJz]通常只在創建壓縮文件的時候使用,解壓縮tar會自動調用對應的壓縮工具實現解壓 2.展開文件 tar -x -f -[jJz] /PATH/TO/SOMEFILE.tar -C /PATH/TO/DIR 備註:在展開的時候其實是可以不用加-j/-z/-J選項,tar會自動調用對應的解壓工具解壓。 3.不展開顯示打包文件的列表 tar -t -f -[jJz] /PATH/TO/SOMEFILE.tar 備註:在展開的時候其實是可以不用加-j -z -J 選項的,tar會自動調用對應的解壓工具解壓。   -c 創建打包文件 -x 展開打包文件 -t 列出打包文件的文件列表,而不展開   -f 指定要創建或展開的打包文件路徑   -j 調用bzip2壓縮工具 -J 調用xz壓縮工具 -z 調用gzip壓縮工具 -Z 調用compress壓縮工具進行壓縮 不允許同時出現,-j -J -z -Z -v 顯示過程 -p 保留源文件的原始屬性,只有管理員有許可權 -P 保留絕對路徑,就是允許貝恩數據中含有根目錄。預設情況下是自動取消根目錄 --xattrs 保留源文件的擴展屬性   -C 把展開的文件保存到指定文件下,預設為當前目錄。 --exclude=/PATH/TO/{SOMEDIR|SOMEFILE} 排除某些目錄或文件不壓縮

示例:

 1 #使用-z壓縮
 2 [root@CentOS8 tmp]# tar -zcvf etc.gz /etc/*
 3 tar: Removing leading `/' from member names
 4 /etc/adjtime
 5 tar: Removing leading `/' from hard link targets
 6 /etc/aliases
 7 /etc/alternatives/
 8 ...
 9 #使用-j壓縮,並保留源文件屬性
10 [root@CentOS8 tmp]# tar -jcvpf etc.bz2 /etc/*
11 tar: Removing leading `/' from member names
12 /etc/adjtime
13 tar: Removing leading `/' from hard link targets
14 /etc/aliases
15 /etc/alternatives/
16 /etc/alternatives/libnssckbi.so.x86_64
17 ...
18 #使用-J壓縮,並保留源文件屬性和facl屬性,這裡沒有使用-v選項
19 [root@CentOS8 tmp]# tar --xattrs -Jcpf etc.xz /etc/*
20 tar: Removing leading `/' from member names
21 tar: Removing leading `/' from hard link targets
22 [root@CentOS8 tmp]# ll
23 total 11508
24 -rw-r--r-- 1 root root 3654689 May  3 19:05 etc.bz2
25 -rw-r--r-- 1 root root 5053462 May  3 19:03 etc.gz
26 -rw-r--r-- 1 root root 3069780 May  3 19:07 etc.xz
27 
28 #使用-C選項指定解壓目錄
29 [root@CentOS8 tmp]# mkdir test
30 [root@CentOS8 tmp]# tar xf etc.gz -C /tmp/test

 

 

6.cpio 老牌打包解包工具 -o output模式,打包,將標準輸入傳入的文件名打包發送到標準輸出 -i input模式,解包 -t 預覽,查看標準輸入傳入的打包文件中的包含的文件列表 cpio -tv < NAME.cpio -A 向已存在的歸檔文件中追加文件 -v 顯示詳細過程 -d 如果有文件夾自動創建,常與-i一起使用,用於解壓時自動創建目錄 cpio -idv < etc.cpio -F filename 使用指定的文件名代替標準輸入或輸出 -I filename 對指定的歸檔文件名解壓 -O filename 輸出到指定歸檔文件名

 

 1 #示例演示cpio不會區分絕對路徑和相對路徑
 2 [root@CentOS8 /]# find ./etc | cpio -H newc -o > /tmp/etc.cpio
 3 40756 blocks
 4 [root@CentOS8 /]# find /etc | cpio -H newc -o > /tmp/etc2.cpio
 5 40757 blocks
 6 [root@CentOS8 /]# cd /tmp
 7 [root@CentOS8 tmp]# ls
 8 boot.cpio  etc2.cpio  etc.cpio
 9 [root@CentOS8 tmp]# cpio -tv < etc.cpio 
10 drwxr-xr-x  78 root     root            0 May  3 18:14 etc
11 lrwxrwxrwx   1 root     root           19 May  2 08:51 etc/mtab -> ../proc/self/mounts
12 -rw-r--r--   1 root     root          615 May  2 08:50 etc/fstab
13 -rw-------   1 root     root            0 May  2 08:50 etc/crypttab
14 -rw-r--r--   1 root     root           69 May  3 17:31 etc/resolv.conf
15 。。。
16 [root@CentOS8 tmp]# cpio -tv < etc2.cpio 
17 drwxr-xr-x  78 root     root            0 May  3 18:14 /etc
18 lrwxrwxrwx   1 root     root           19 May  2 08:51 /etc/mtab -> ../proc/self/mounts
19 -rw-r--r--   1 root     root          615 May  2 08:50 /etc/fstab
20 -rw-------   1 root     root            0 May  2 08:50 /etc/crypttab
21 -rw-r--r--   1 root     root           69 May  3 17:31 /etc/resolv.conf
22 drwxr-xr-x   8 root     root            0 May  2 08:51 /etc/dnf
23 #對比發現,使用find /etc生成cpio文件中竟然會保留根目錄,如果解壓的時候就會覆蓋對應根目錄下的文件,很危險
24 #而使用find ./etc生成的cpio文件中沒有保留根目錄。
25 
26 #解壓etc.cpio
27 [root@CentOS8 tmp]# ls
28 boot.cpio  etc2.cpio  etc.cpio
29 [root@CentOS8 tmp]# mkdir test
30 [root@CentOS8 tmp]# cd test
31 [root@CentOS8 test]# cpio -id <../etc.cpio 
32 40756 blocks
33 [root@CentOS8 test]# ls
34 etc

 

 

關於時間成本: 通過下麵小示例可以看到,使用gzip、bzip2、xz壓縮同一個文件,耗費的時間長短。xz消耗的時間最長,gzip消耗的時間最短。
 1 [root@CentOS8 tmp]# rm -fr *
 2 [root@CentOS8 tmp]# ls
 3 [root@CentOS8 tmp]# cp /etc/services .
 4 [root@CentOS8 tmp]# ls
 5 services
 6 [root@CentOS8 tmp]# time gzip -k services ;time bzip2 -k services ;time xz -k services 
 7 
 8 real    0m0.016s  #使用gzip壓縮消耗的時間0.016s
 9 user    0m0.013s
10 sys    0m0.003s
11 
12 real    0m0.036s  #使用bzip2壓縮消耗的時間0.036s
13 user    0m0.025s
14 sys    0m0.010s
15 
16 real    0m0.184s  #使用xz壓縮消耗的時間0.184s
17 user    0m0.107s
18 sys    0m0.077s
19 [root@CentOS8 tmp]# ll
20 total 1052
21 -rw-r--r-- 1 root root 692241 May  3 18:36 services
22 -rw-r--r-- 1 root root 129788 May  3 18:36 services.bz2
23 -rw-r--r-- 1 root root 142549 May  3 18:36 services.gz
24 -rw-r--r-- 1 root root 105872 May  3 18:36 services.xz

 

 

總結一下:

linux中常見的壓縮文件的擴展名:*.gz  *.bz2  *.xz  *.tar  *.tar.gz  *.tar.bz2  *.tar.xz  *.tgz  *.Z  *.tar.Z

常見的壓縮命令有:gzip bzip2 xz。其中壓縮比率最好的是xz,但是消耗的時間也是最高的。需要綜合考慮時間成本和CPU性能。

  幾個選項基本上都通用:-d 解壓 -v 顯示詳細過程 -c 輸出內容到屏幕 -k保留源文件

tar可以打包文件和目錄,打包時可以調用gzip bzip2 xz進行壓縮

  壓縮:  tar -[zjJ]cv -f filename.尾碼  要被壓縮的文件或目錄

  查詢:  tar -[zjJ]tv -f filename.尾碼

  解壓:  tar -[zjJ]xv -f filename.尾碼 -C /PATH/TO/SOMEDIR

cpio命令在壓縮的時候需要配合find命令一起使用。註意使用相對路徑

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這個例子來自書上。 記錄過程。 主要是數學上極坐標,WPF中的測量過程 簡單來說在一個具有固定軸的坐標系內,一個由原點射出的向量並與固定軸有一定角度且在向量上確定長度的這麼個東西。 可以參考: 知乎https://www.zhihu.com/question/318613418/answer/640 ...
  • 一、首先去https://www.docker.com/products/docker-desktop下載Windows版本的Docker Desktop並安裝(需要win10專業版以上操作系統,並啟用CPU虛擬化和安裝Hvper-V)。 二、新建一個.NetCore3.1的API項目,在創建的時候 ...
  • 1.目錄操作 基礎目錄操作 linux 沒有類似windows一樣的盤符之分,所有的目錄都是以“根‘ / ’”開始,linux 是多用戶登陸, 在 /home/ 的目錄下,存放著已添加用戶的用戶目錄。每個用戶一個文件夾,文件夾名為用戶名 // 下文中 $ 表示終端的提示符,不包含在命令當中 $ pw ...
  • Network namespace 在邏輯上是網路堆棧的一個副本,它有自己的路由、防火牆規則和網路設備。預設情況下,子進程繼承其父進程的 network namespace。也就是說,如果不顯式創建新的 network namespace,所有進程都從 init 進程繼承相同的預設 network ...
  • 微服務,Kubernetes,用minikube單機部署,運維部署,方便的安裝中間件,本地測試開發,節省時間 ...
  • 在記憶體系統初始化過程中,有如下代碼: 這裡,我們看到了神秘的swapper_pg_dir,全局搜索一下,發現了 在head_32.S中,定義瞭如下的BSS段,BSS段是在內核映像文件中不占空間,但是在內核被載入到記憶體時,會保留相應的空間。 在BSS段,一共保留了4個頁面的空間,分別用initial_ ...
  • 背景 By 魯迅 By 高爾基 說明: 1. Kernel版本:4.14 2. ARM64處理器,Contex A53,雙核 3. 使用工具:Source Insight 3.5, Visio 1. 概述 互斥鎖是Linux內核中用於互斥操作的一種同步原語; 互斥鎖是一種休眠鎖,鎖爭用時可能存在進程 ...
  • VMware虛擬機(Linux)中,我們的Linux伺服器可能擁有多個磁碟(或者叫虛擬磁碟),如下所示,這個伺服器的磁碟有硬碟1、硬碟2、…………硬碟10總共10塊硬碟。 而Linux系統中,磁碟中對應的設備如下 [root@mylnx01 ~]# ls -lrt /dev/sd*brw-r----... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...