提取Ubuntu 10.04 LTS的gnutls库文件(tar.xz和tar.lz)

21

我对Linux平台非常陌生,我想为Ubuntu提取GnuTLS。如果我这样做,

$ls

接着,它将显示以下这些文件。

gnutls-3.2.1.tar.lz
gnutls-3.2.1.tar.lz.sig
gnutls-3.2.1.tar.xz
gnutls-3.2.1.tar.xz.sig

当我下达命令时,

$ tar -xvf gnutls-3.2.1.tar.xz

我得到了输出,

tar: xz: Cannot exec: No such file or directory
tar: Error is not recoverable: exiting now
tar: Child returned status 2
tar: Exiting with failure status due to previous errors

我想要提取这些文件。

  1. 为什么会有两种给定的格式?- xz 和 lz
  2. 为什么会有签名文件?- .sig 如何验证它?我尝试使用 gpgv <filename>.sig 命令进行验证,但是它显示公钥未找到。
  3. 我需要一个单独的实用程序包吗?我看到了一个 'xz-utils_4.999',但它是 beta 版本。 http://manpages.ubuntu.com/manpages/lucid/man1/xz.1.html
  4. 还有其他稳定的实用程序包吗?从哪里以及如何下载它?
7个回答

35
tar --lzip -xvf gmp-5.1.2.tar.lz

对我很有用

正如在下面的评论中提到的,你可能需要在运行命令之前安装该库:

sudo apt-get install lzip

7
我想解压相同的文件 :P - rockstar

13
  1. 安装lzip

  2. 运行以下命令创建xxx.tar文件,并在提取后删除xxx.tar.lz文件:

  3. lzip -d xxx.tar.lz 
    
    执行以下命令以解压文件:
  4. 最终解压缩,请运行以下命令:

    tar zxvf xxx.tar
    

12

为什么会有两种格式-xz和lz?

仅仅是为了方便,这样人们可以下载适用于他们拥有的合适工具的格式。请记住,大多数“Linux”库也旨在用于其他类Unix平台(例如BSD、Solaris、AIX、甚至OSX)。不能假设像xz这样的较新工具在每个平台上都容易获得。

我需要一个单独的实用程序包吗?

是的,tar的错误消息告诉您它找不到xz命令:

tar: xz: Cannot exec: No such file or directory

你正确地识别出要安装的软件包,xz-utils。如果你尝试提取.lz压缩文件,它会抱怨找不到lzip(然后你需要安装lzip软件包)。 lzip是较旧的LZMA标准,xz是较新的LZMA2,它们之间没有太大的区别。“beta”标签总是主观的。在这种情况下,我不会担心!
“为什么有签名文件?”
这样人们就可以确信他们下载的存档是由他们期望的人发布的。这是为了防范黑客可能访问网站(或镜像站点),然后向存档中添加一些恶意代码的可能性。
“如何验证它?”
你得到了那个命令没问题,但你需要理解的是,你必须告诉GnuPG你信任哪些密钥。通常,你会获取作者发布的公钥(通常是.asc或.txt文件),并将其导入到你的gpg密钥环中。在GnuTLS下载页面上:
所有发布都使用Nikos'Simon's的OpenPGP密钥签名。
所以你可以这样做:
wget -O- http://josefsson.org/key.txt | gpg --import
wget -O- http://members.hellug.gr/nmav/pgpkeys.asc | gpg --import

另一种方式是当人们只发布他们的RSA密钥ID时,可以从常见的gpg密钥服务器导入。例如,您可以像这样导入我的公钥:
gpg --recv-key 15C4D63E

对于大多数默认的gpg配置,应该从公钥服务器(可能是keys.gnupg.net)获取指定的密钥。

之后,gpg应该会报告来自这些作者中任何一个人的“好签名”,但仍然应该显示警告:

gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.

这意味着没有信任链(基于您在密钥环中标记为受信任的密钥)来证明这是所述人员的正确密钥。它可能是黑客的密钥。
在某些时候,您必须确信获得的密钥来自正确的人,但确切地要信任什么以及何时信任是每个人根据自己的偏执程度或当前目的进行研究和决定的事情。
就我个人而言,除非我打算重新分发从中构建的内容,否则我不会费心验证源存档。

攻击者可以轻易地更改签名文件。 - Matthew Mitchell
1
@MatthewMitchell 当然,攻击者可以更改签名文件,但是他们不能轻易地伪造一个有效的密钥签名。这就是为什么公钥通常通过不同的主机或公共密钥服务器发布的原因。这也是为什么最好将它们添加到您信任的密钥中一次,并且为什么人们相互签署彼此的密钥等来建立信任网络,以便人们不需要盲目接受给定网页上发布的密钥是否正确。 - Will Daniels
对于那些阅读“lzip是较旧的LZMA标准,xz是较新的LZMA2”的人,请注意lzip和xz是不同的项目,而且在许多方面(包括压缩比)中,xz似乎明显劣于lzip,因此如果您有选择的话,应该优先选择lzip(根据https://www.nongnu.org/lzip/xz_inadequate.html,该网站存在偏见,但我认为是正确的)。 - Warbo

6
您可以通过以下方式解决问题:
# The lzip page is: http://lzip.nongnu.org/lzip.html
# Download the lzip:
wget http://download.savannah.gnu.org/releases/lzip/lzip-1.15.tar.gz
# decompress:
tar xvf lzip-1.15.tar.gz
cd lzip-1.15
# configure / build
./configure --prefix=/usr
make
# install
sudo make install

# now you can unzip with 
tar xvf gmp-5.1.3.tar.lz

假设指定前缀的目录(这里是 /usr/bin)中的 bin 子目录已经在 bash PATH 中,那么这将起作用。如果没有,就需要在 .bashrc 文件(或其他文件)中将其添加到 PATH 中。 - abcd
@dbliss,是的,它不仅仅假定你有路径,还假定你也有wgettarsudo。但我很好奇哪个类Unix操作系统默认情况下没有/usr/bin路径。 - ton
/usr/bin是默认路径,但这引出了一个问题,为什么你要使用--prefix选项呢?我更关心的是我的情况(以及大多数使用该选项的情况),即使用--prefix指定非默认目录。我使用了你的代码,然后意识到我必须将非默认目录添加到我的路径中。你提到的其他假设,比如需要wget,显而易见,不值得一提。 - abcd
当我运行“sudo make install”命令时,我会收到以下错误提示:if [ ! -d "/usr/bin" ] ; then install -d -m 755 "/usr/bin" ; fi install -m 755 ./lzip "/usr/bin/lzip" install: /usr/bin/lzip: Operation not permitted make: *** [install-bin] Error 71。有任何想法为什么会出现这种情况吗?我在OSX上。 - howlee
这很完美。 - Arnav M.
显示剩余3条评论

2

首先需要安装xz-utils才能提取xz文件。如果您使用的是Debian或Ubuntu:

sudo apt-get install xz-utils

现在,您可以使用以下命令来提取文件:

tar -xJf file_name.xz


0

对于 tar.lz,如果你的 tar 不支持 --lzip

tar xf filename.tar.lz --use-compress-program lrunzip

0

LZIP 可在 Cygwin 中获取。您可以安装 lzip(从 cygwin 的 Archive 分支)和 tar(从 Base 分支) 。之后,您可以执行以下操作:

tar --lzip -xvf your_file.tar.lz

对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接