为什么在命令行中执行存档不会像在 Windows 上那样自动使用二进制文件打开它?

为什么在命令行中执行存档不会像在 Windows 上那样自动使用二进制文件打开它?

尝试在 Windows 上的命令行中打开存档会毫无疑问地打开文件扩展名的关联程序,例如,使用此命令将使用支持 .rar 文件的默认存档管理器打开存档。

 $env:temp/SuperArchive.rar 

为什么在 Linux 上,我无法打开存档,或仅使用类似的命令提取它,如

~/tmp/SuperArchive.tar.gz 

答案1

这是由于 Windows 和 Unix 在加载程序的方法方面存在设计差异。 Unix 主要以应用程序为中心:您运行一个应用程序,并在该应用程序中打开一些文件。 Windows 主要以文档为中心(在这方面):您打开一个文档,Windows 会为您选择应用程序。

两种模型都有其优点和缺点。 Windows 有时更容易使用......直到您想在非默认应用程序中打开文档。或者您只是想看看档案里面有什么。或者您想将存档解压到不同的目录中。或者您想在当前目录中创建一个新文档。 Unix 上的图形文件管理器实现了以文档为中心的模型。

与此设计决策有些相关的是,Unix 使应用程序更易于访问:所有可执行文件都安装在命令搜索路径上的几个目录中,因此您可以通过键入可执行文件的名称从命令行调用应用程序。例如,要在 Ark 中打开存档,请运行ark myarchive.tar.gz.系统通常会帮助您仅填写对该特定应用程序有意义的文件名。

您可以运行xdg-open命令在系统选择的应用程序中打开文件。对于.tar.gz文件,这可能会调用图形存档管理器;调用哪个程序取决于您安装的程序以及您的图形环境。

答案2

二进制应用程序和脚本舍邦是可执行的。文件.gz不可执行,您需要一个程序来打开它。

安装后,xdg-utils您可以使用关联的程序打开该文件:

xdg-open <file>

答案3

tar 的原始含义是时间增强现实奇弗。

你会像这样使用它

tar cf /dev/rmt0 dir1 dir2

它将把dir1dir2的内容放在本地驱动器中的任何磁带上/dev/rmt0

文件将被读取使用

tar xf /dev/rmt0 dir2

dir2仅从本地磁带中提取。

在 UNIX 哲学中,您可以存档到文件或管道,例如

tar cf - foo | ( ssh remote  "cd /distant ; tar xf - ")
  • 从本地传输到远程主机中的 /distant 目录

或者

tar cf project.tar foo

并将project.tar邮寄给某人。

所以 tar 从来就不是可自提取的。 unix 中最接近的东西是 shar(shell archiver),它几乎可以做到这一点。您将收到一个名为 的文件project.shar,然后运行

sh project.shar

这会缩小本地目录上的文件(顺便带来一些安全风险)。

答案4

自解压档案需要一个二进制组件,并且来自非标准执行环境的二进制组件Win-DOS不能在标准执行环境(如 UNIX)上工作。

另请注意,UNIX 是源代码标准,因此 UNIX 没有指定唯一的二进制标准。

UNIX 上有自解压存档(称为shell archies),但这些存档的缺点是无法提供适当的压缩。

相关内容