菜鸟科技网

Unix解压命令有哪些?

核心概念

在开始之前,请记住几个关键点:

Unix解压命令有哪些?-图1
(图片来源网络,侵删)
  1. 文件扩展名:Unix/Linux 文件扩展名(如 .tar, .gz)更多是为了方便人类识别,系统并不强制依赖,但为了正确解压,你需要知道文件是用什么工具压缩的。
  2. 管道符 :可以将一个命令的输出直接作为另一个命令的输入,非常强大。
  3. (连字符):在命令中代表标准输入或标准输出。tar -xzf - 表示从标准输入读取并解压。
  4. zcat, bzcat, xzcat:这些命令可以不解压文件,直接将其内容输出到标准输出,非常适合和管道结合使用。

.tar 文件 (Tape Archive)

.tar 文件本身只是将多个文件和目录“打包”成一个文件,并没有经过压缩,它通常与压缩工具(如 gzip, bzip2, xz)结合使用,形成 .tar.gz, .tar.bz2, .tar.xz 等文件。

基本命令:tar

  • 解包(不解压)

    tar -xvf filename.tar
    • -x: extract (解包)
    • -v: verbose (显示详细过程,可选)
    • -f: 指定文件 file (后面必须跟文件名)
  • 解包并解压

    Unix解压命令有哪些?-图2
    (图片来源网络,侵删)
    • .tar.gz.tgz (gzip 压缩)

      tar -xzvf filename.tar.gz
      # 或者
      tar -xzf filename.tar.gz
      • -z: 通过 gzip 解压
    • .tar.bz2 (bzip2 压缩)

      tar -xjvf filename.tar.bz2
      # 或者
      tar -xjf filename.tar.bz2
      • -j: 通过 bzip2 解压
    • .tar.xz (xz 压缩)

      tar -xJvf filename.tar.xz
      # 或者
      tar -xJf filename.tar.xz
      • -J: 通过 JXZ 解压 (注意:J 是大写)
  • 解压到指定目录

    Unix解压命令有哪些?-图3
    (图片来源网络,侵删)
    tar -xzvf filename.tar.gz -C /path/to/target/directory
    • -C: 指定目录 Chdir

.gz 文件 (Gzip)

通常由 gzip 压缩单个文件生成。

基本命令:gunzipgzip -d

  • 解压文件

    gunzip filename.gz
    # 或者
    gzip -d filename.gz
    • 执行后,filename.gz 会被解压为 filename,原压缩文件会消失。
  • 保留原压缩文件

    gunzip -k filename.gz
    # 或者
    gzip -dk filename.gz
    • -k: keep (保留)
  • 使用 tar 处理: 对于 *.tar.gz 文件,最佳实践是直接使用 tar -xzf 命令,因为它会自动处理内部的 gzip 解压。


.bz2 文件 (Bzip2)

通常由 bzip2 压缩单个文件生成,压缩率比 gzip 高,但速度较慢。

基本命令:bunzip2bzip2 -d

  • 解压文件

    bunzip2 filename.bz2
    # 或者
    bzip2 -d filename.bz2
    • 执行后,filename.bz2 会被解压为 filename,原压缩文件会消失。
  • 保留原压缩文件

    bunzip2 -k filename.bz2
    # 或者
    bzip2 -dk filename.bz2
  • 使用 tar 处理: 对于 *.tar.bz2 文件,使用 tar -xjf 命令。


.zip 文件

跨平台最常用的压缩格式之一。

基本命令:unzip

  • 解压文件

    unzip filename.zip

    默认解压到当前目录。

  • 解压到指定目录

    unzip filename.zip -d /path/to/target/directory
  • 查看压缩包内容(不解压)

    unzip -l filename.zip
  • 覆盖前不提示

    unzip -o filename.zip
    • -o: overwrite (覆盖)

.rar 文件

Windows 平台常用,在 Linux 上需要安装 unrar 工具。

安装 unrar:

  • Debian/Ubuntu: sudo apt-get install unrar
  • CentOS/RHEL: sudo yum install unrar

基本命令:unrar

  • 解压文件

    unrar x filename.rar
    • x: extract,并保持原目录结构。
  • 解压到指定目录

    unrar x filename.rar /path/to/target/directory
  • 查看压缩包内容

    unrar l filename.rar

.7z 文件

7-Zip 格式,压缩率很高。

安装 p7zip:

  • Debian/Ubuntu: sudo apt-get install p7zip-full
  • CentOS/RHEL: sudo yum install p7zip p7zip-plugins

基本命令:7z

  • 解压文件

    7z x filename.7z
    • x: extract,并保持原目录结构。
  • 解压到指定目录

    7z x filename.7z -o/path/to/target/directory
    • -o: 指定目录 (注意:o 后面不能有空格)

.xz 文件

一种高压缩率的压缩格式。

基本命令:unxzxz -d

  • 解压文件

    unxz filename.xz
    # 或者
    xz -d filename.xz
    • 执行后,filename.xz 会被解压为 filename
  • 使用 tar 处理: 对于 *.tar.xz 文件,使用 tar -xJf 命令。


.Z 文件 (Compress)

一种非常古老的 Unix 压缩格式,现在很少见。

基本命令:uncompress

uncompress filename.Z

总结速查表

文件扩展名 压缩工具 解压命令 常用选项
.tar 无 (打包) tar -xvf -C (指定目录)
.tar.gz gzip tar -xzvf -C (指定目录)
.tgz gzip tar -xzvf -C (指定目录)
.tar.bz2 bzip2 tar -xjvf -C (指定目录)
.tar.xz xz tar -xJvf -C (指定目录)
.gz gzip gunzipgzip -d -k (保留原文件)
.bz2 bzip2 bunzip2bzip2 -d -k (保留原文件)
.zip zip unzip -d (指定目录), -l (列表)
.rar rar unrar x x (保持结构), -d (指定目录)
.7z 7z 7z x -o (指定目录)
.xz xz unxzxz -d
.Z compress uncompress

高级技巧:自动检测文件类型并解压

有时候你不确定一个文件是用什么工具压缩的,可以使用 file 命令来查看,或者使用 sharutils 包中的 unshar,但更通用的方法是写一个简单的脚本。

这里有一个非常实用的 Bash 函数,把它放到你的 ~/.bashrc~/.zshrc 文件里,source 一下,就可以直接使用 extract 命令了。

# 在 ~/.bashrc 或 ~/.zshrc 中添加以下内容
extract () {
    if [ -f $1 ]; then
        case $1 in
            *.tar.bz2)   tar xjf $1     ;;
            *.tar.gz)    tar xzf $1     ;;
            *.bz2)       bunzip2 $1     ;;
            *.rar)       unrar x $1     ;;
            *.gz)        gunzip $1      ;;
            *.tar)       tar xf $1      ;;
            *.tbz2)      tar xjf $1     ;;
            *.tgz)       tar xzf $1     ;;
            *.zip)       unzip $1       ;;
            *.Z)         uncompress $1  ;;
            *.7z)        7z x $1        ;;
            *)           echo "'$1' cannot be extracted via extract()" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}

使用方法:

# 重载配置文件
source ~/.bashrc
# 现在可以直接使用 extract 命令了
extract some_archive.tar.gz
extract another_file.zip

希望这份详细的指南能帮助您!

分享:
扫描分享到社交APP
上一篇
下一篇