gzip: stdin: 不是gzip格式

当我运行时:
tar -zxvf john-1.7.0.2.tar.gz

我明白了。
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

应该开始解压。
有些人告诉我不要使用z,但我得到了同样的错误。
这是我下载的一个文件:
wget http://openwall.com/john/f/john-1.7.0.2.tar.gz

4你发布的链接似乎是一个网页而不是一个实际的存档文件:john-1.7.0.2.tar.gz: HTML文档,ASCII文本,具有非常长的行 - steeldriver
2个回答

诊断下载的错误类型文件

正如steeldriver所说,这意味着该文件实际上不是一个gzip压缩的tar文件,或者任何一种gzip压缩的文件,尽管它的命名方式类似。

当你使用wget下载文件时,通常会有迹象表明你最终得到的文件与你要寻找的文件类型不同:

ek@Io:~$ wget http://openwall.com/john/f/john-1.7.0.2.tar.gz
--2017-01-28 23:57:33--  http://openwall.com/john/f/john-1.7.0.2.tar.gz
Resolving openwall.com (openwall.com)... 195.42.179.197
Connecting to openwall.com (openwall.com)|195.42.179.197|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.openwall.com/john/ [following]
--2017-01-28 23:57:40--  http://www.openwall.com/john/
Resolving www.openwall.com (www.openwall.com)... 195.42.179.202
Connecting to www.openwall.com (www.openwall.com)|195.42.179.202|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘john-1.7.0.2.tar.gz’

john-1.7.0.2.tar.gz                          [      <=>                                                                        ]  15.27K  3.61KB/s    in 4.2s

2017-01-28 23:57:51 (3.61 KB/s) - ‘john-1.7.0.2.tar.gz’ saved [15633]

在这种情况下,主要的迹象有:
- "301 Moved Permanently" 的消息,重定向到一个带有斜杠的地址。这会加载服务器上某个目录的默认页面,通常是 index.html,几乎总是一个 HTML 文件。 - "Length: unspecified [text/html]",告诉你正在接收纯文本(text),并且它被解释为 HTML。这实际上不仅仅是一个迹象 - 通过这个你可以相当确定你没有得到一个真正的压缩文件。
你还可以使用 file 工具,它会检查一个文件并告诉你它看起来是什么类型的文件。
ek@Io:~$ file john-1.7.0.2.tar.gz
john-1.7.0.2.tar.gz: HTML document, ASCII text, with very long lines

当然,您可以使用像 headlessview 这样的工具自行检查文件:

ek@Io:~$ head john-1.7.0.2.tar.gz
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>John the Ripper password cracker</TITLE>
<link href="/style.css" type="text/css" rel="stylesheet">
<META name="keywords" content="John the Ripper, password cracker, JtR, password checker, password recovery, password, cracker, crackers, cracking, crack, crypt, passwd, shadow, Unix, Linux, Windows, Win32, Mac OS X, Mac OSX, MacOS X, OS X, OSX, DOS, VMS, OpenVMS, hash, DES, MD5, Blowfish, Kerberos, AFS, LM, LanMan, LanManager, NT, 2000, XP, 2003, Vista, 7, NTLM, NTLMv1, MD4, Netscape LDAP, SHA, SSHA, MySQL, TGT, s/key, Eggdrop, Apache, apr1, SYSUAF, SYSUAF.DAT, AltiVec, MMX, SSE, SSE2, AVX, XOP, wordlist, wordlists, dictionary, brute force, decrypt, challenge, response, John, Ripper, john, jhon, jonh, jack, Jack the Ripper">
<META name="description" content="A fast password cracker for Unix, Windows, DOS, and OpenVMS, with support for Unix, Windows, and Kerberos AFS passwords, plus a lot more with contributed patches">
</HEAD>

<BODY bgcolor="#E0E0E0" text="black" link="blue" alink="red" vlink="navy">

如果这确实是一个二进制文件,那么你本应该得到一堆无意义的垃圾,因为无论你使用的是什么分页器或查看器都徒劳地试图将实际上不是纯文本的内容解释为纯文本。例如,在正确的文件中:
ek@Io:~$ head john-1.8.0.tar.gz
WӦQ♥john-1.8.0.tar ▒▒kw▒ر&▒▒ٿ▒▒▒▒4E]|▒v▒NF▒d[▒n▒▒▒L&▒HB▒$▒ ▒df͚▒▒▒▒▒ꩪ▒7@▒▒▒9ӳf▒▒J▒m     ▒ؗ▒u▒▒~,▒ї▒▒▒ˣ▒▒ӣ_▒▒▒▒C▒▒|▒▒▒▒▒şw▒v▒▒>▒|w▒▒▒}▒▒▒ί▒▒i9▒?7+▒gY7i▒$▒▒ʲ▒▒s?▒J'MV%▒rY4ur[▒4▒▒e▒▒.▒▒▒▒▒&/u▒-2▒W▒▒V▒▒!o▒0b▒▒▒♥▒|Q▒4▒▒▒&▒▒Y1Y▒F▒▒Iy▒▒▒▒$▒▒▒▒,▒]▒h▒▒8▒"▒▒M▒,Һ~(▒i▒4Y▒d▒QgQ▒*ۚf7yA▒.▒&i▒<d▒↓▒7▒H_-l▒7▒▒▒Z▒▒.m▒▒ʒ%F,▒۬▒*▒▒hrW▒cY▒▒
▒+▒O1▒-y>▒▒J▒yM?▒4I▒▒▒kYS▒▒:▒▒n▒C▒▒%▒▒▒v▒▒▒{[[tN▒9▒▒▒kA▒▒▒▒▒/[▒▒▒▒u▒▒▒z▒▒▒▒>▒▒5▒▒▒▒t▒t▒▒Y6Û<▒*/i▒i{K>▒,▒▒▒▒▒;9)▒Z.mJSeiLB▒▒▒▒▒j▒▒eQ緅▒_▒α▒Ŋ▒▒▒W▒▒▒▒▒_▒▒ˢ▒▒-q▒<gyw͍▒9▒?▒,▒▒▒▒h&▒V"▒▒▒▒▒▒▒l▒▒3▒▒▒▒\▒▒i#▒▒综▒◄0▒▒▒.e♠>a▒▒▒▒▒▒$klt:▒▒rA▒M▒'F▒R▒▒▒▒Lo▒♥1z▒\▒↓X▒▒▒P"֕▒▒▒♦▒▒▒▒|▒▒▒▒▒▒1I▒o"'#|6e▒▒t▒Ц▒FVL▒▒S▒ޓ▒▒;▒x▒▒▒▒▒▒▒QVrr▒▒▒9O▒W7▒♠Og▒
▒▒▒8▒▒/▒▒dm▒FG'▒'t2L▒▒&L▒Y:▒▒▒▒▒4▒rI<▒#▒+▒je▒▒▒>T9▒▒M▒XE-ʆ▒▒'n▒▒$↑▒m▒W▒▒w̕▒▒m▒n%▒|A_▒yGp↑D▒↓߻▒▒▒i▒▒}ӡH▒▒▒▒׍$$H▒▒&▒▒4▒▒▒Z-@♣▒*~▒▒▒ y6▒▒▒`▒v↓▒s▒+̱▒?▒1▒▒▒<▒>▒^▒▒Y#k▒
7`N'▒o▒.&▒▒(▒Դ~AD▒"E◄' lq▒`▒▒`▒[▒9◄▒▒wzuK▒N▒▒Y▒▒%or▒▒)▒▒i↓▒▒▒l5.S▒޶r▒_*▒RO▒{▒$▒(▒▒▒▒C▒·▒▒׀f2ˊ[:▒▒▒,|ew▒▒▒Ag▒'▒▒▒H▒▒t▒{͓▒▒▒▒JH˭s▒)g▒ON▒▒eŚQ▒▒▒♠ s▒▒ߪ▒▒▒▒▒▒▒▒▒▒_♠▒-▒

(我只复制了开头的一部分。)

获取正确的文件

它告诉您如何在这些情况(特别是在这种情况下)中找出问题出在哪里。但是,您如何实际上找到并下载正确的文件呢?

这因情况而异。然而,一个好的起点是:

  • 去软件的官方网站看看他们是否提供下载链接。即使你最初是通过这个链接获取的,如果一段时间过去了,你可能会发现链接已经改变了。

    例如,在这个特定的情况下,当前版本是1.8.0,而不是1.7.0.2(并且在j子目录中提供,而不是f),旧版本在同一个URL上已经不再可用。

  • 打开你下载文件时被重定向到的页面。在这种情况下,就是:http://www.openwall.com/john/

    或者你甚至可以检查一下下载的文件。(或者在浏览器中打开)。

您被重定向到软件的主要下载页面。您可以在浏览器中下载,或者复制一个正确的当前下载链接并使用wget进行下载。有几个选择,但是假设您实际上不需要您尝试下载的特定旧版本,并且根据您尝试下载的特定文件,我怀疑http://openwall.com/john/j/john-1.8.0.tar.gz 是您正在寻找的内容。
当然,以后发现此帖子的读者可能会发现那个链接不再可用。但是展示了解决此类问题的方法在这里仍然有效。
ek@Io:~$ wget http://openwall.com/john/j/john-1.8.0.tar.gz
--2017-01-29 00:16:19--  http://openwall.com/john/j/john-1.8.0.tar.gz
Resolving openwall.com (openwall.com)... 195.42.179.197
Connecting to openwall.com (openwall.com)|195.42.179.197|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5450412 (5.2M) [application/x-tar]
Saving to: ‘john-1.8.0.tar.gz’

john-1.8.0.tar.gz                        100%[================================================================================>]   5.20M  78.8KB/s    in 26s

2017-01-29 00:16:47 (202 KB/s) - ‘john-1.8.0.tar.gz’ saved [5450412/5450412]

我已经下载了文件。请注意,这次没有发生任何不必要的重定向,并且类型被指定为application/x-tar而不是text/html
(HTTP重定向并不总是坏事。当你被重定向到看起来不像是你正在寻找的文件时,你应该怀疑你的下载并没有真正成功。) file也同意:
ek@Io:~$ file john-1.8.0.tar.gz
john-1.8.0.tar.gz: gzip compressed data, was "john-1.8.0.tar", last modified: Thu May 30 04:19:35 2013, max compression, from Unix

并且它成功解压了:
ek@Io:~$ tar xf john-1.8.0.tar.gz
ek@Io:~$ cd john-1.8.0/
ek@Io:~/john-1.8.0$ ls -l
total 12
drwxrwxr-x 2 ek ek 4096 Jan 29 00:22 doc
lrwxrwxrwx 1 ek ek   10 May 29  2013 README -> doc/README
drwxrwxr-x 2 ek ek 4096 Jan 29 00:22 run
drwxrwxr-x 2 ek ek 4096 Jan 29 00:22 src

你是对的,使用“z”并没有关系;用“tar xzf”也能正常工作,因为这是正确的文件。 你可以继续构建源代码并安装。
记住,你并不总是需要从源代码构建。
有时候,你可能真的想要一个程序的最新版本,但它不在Ubuntu的软件库中。你可以尝试找一个PPA,但如果你找不到任何你真正信任的或者提供你想要的东西,或者你想以自定义选项构建它,或者你只是真的喜欢从源代码构建,那么从源代码构建是一种有价值和有用的技术。
不过,我还是建议至少检查一下在Ubuntu官方软件库中是否有适用于你系统的软件。在我的16.04系统上:
ek@Io:~$ apt show john
Package: john
Version: 1.8.0-2
Priority: optional
Section: admin
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Ruben Molina <rmolina@udea.edu.co>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 452 kB
Depends: libc6 (>= 2.14), john-data (= 1.8.0-2)
Suggests: wordlist
Homepage: http://www.openwall.com/john/
Supported: 5y
Download-Size: 184 kB
APT-Sources: http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Description: active password cracking tool
 John the Ripper is a tool designed to help systems administrators to
 find weak (easy to guess or crack through brute force) passwords, and
 even automatically mail users warning them about it, if it is desired.
 .
 Besides several crypt(3) password hash types most commonly found on
 various Unix flavors, supported out of the box are Kerberos AFS and
 Windows NT/2000/XP/2003 LM hashes, plus several more with contributed
 patches.

有几种其他搜索软件包的方法。通常使用Ubuntu 软件包搜索网页非常方便。
由于您打算安装版本1.7.0.2,可以推测官方软件源中的1.8.0版本已经足够新。事实上,1.8.0似乎是与官方网站提供的下载版本相同的版本。所以您可能只想安装这个版本。
sudo apt update
sudo apt install john

有一点可惜的是,这个问题实际上已经包含了适用于我的情况的答案,直到现在我才注意到。 但是我会在这里留下这个注释,给那些试图跳过部分内容的人看。
也许你不需要使用-z选项。
 -z, --gzip
              filter the archive through gzip

所以对我来说,实际的提取命令是:
tar -xvf bind-9.16.0.tar.xz

类似的问题,包括删除选项

如果这些信息在这里不需要,请告诉我。


这个也出现了同样的错误... - Chaminda Bandara