错误:“zlib”是无效命令

Posted

技术标签:

【中文标题】错误:“zlib”是无效命令【英文标题】:Error: 'zlib' is an invalid command 【发布时间】:2015-07-02 02:00:11 【问题描述】:

如何在 OSX 中运行此命令?

dd if=mybackup.ab bs=24 skip=1|openssl zlib -d > mybackup.tar

当我运行它时,我得到以下错误

$ dd if=mybackup.ab bs=24 skip=1|openssl zlib -d > mybackup.tar
dd: mybackup.ab: No such file or directory
openssl:Error: 'zlib' is an invalid command.

Standard commands
asn1parse      ca             ciphers        crl            crl2pkcs7      
dgst           dh             dhparam        dsa            dsaparam       
ec             ecparam        enc            engine         errstr         
gendh          gendsa         genrsa         nseq           ocsp           
passwd         pkcs12         pkcs7          pkcs8          prime          
rand           req            rsa            rsautl         s_client       
s_server       s_time         sess_id        smime          speed          
spkac          verify         version        x509           

Message Digest commands (see the `dgst' command for more details)
md2            md4            md5            mdc2           rmd160         
sha            sha1           

Cipher commands (see the `enc' command for more details)
aes-128-cbc    aes-128-ecb    aes-192-cbc    aes-192-ecb    aes-256-cbc    
aes-256-ecb    base64         bf             bf-cbc         bf-cfb         
bf-ecb         bf-ofb         cast           cast-cbc       cast5-cbc      
cast5-cfb      cast5-ecb      cast5-ofb      des            des-cbc        
des-cfb        des-ecb        des-ede        des-ede-cbc    des-ede-cfb    
des-ede-ofb    des-ede3       des-ede3-cbc   des-ede3-cfb   des-ede3-ofb   
des-ofb        des3           desx           rc2            rc2-40-cbc     
rc2-64-cbc     rc2-cbc        rc2-cfb        rc2-ecb        rc2-ofb        
rc4            rc4-40         rc5            rc5-cbc        rc5-cfb        
rc5-ecb        rc5-ofb        seed           seed-cbc       seed-cfb       
seed-ecb       seed-ofb     

【问题讨论】:

Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Apple Stack Exchange 会是一个更好的提问地点。 【参考方案1】:

Mac 上的 Openssl 是在没有 zlib 支持的情况下编译的。 this article 中描述的替代方法适用于我的优胜美地:

dd if=backup.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -

如果您只想将其转换为 tar 存档:

dd if=backup.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > backup.tar

它会跳过 android 标头的前 24 个字节,然后解压缩 zlib 数据。

【讨论】:

显然不是那么容易,tar 存档中文件的顺序很重要,例如阅读nelenkov.blogspot.com/2012/06/unpacking-android-backups.html 得到它“..确保通过创建备份文件列表并使用 -T 选项传递给 tar 以正确的顺序指定要包含的文件。” 请注意,这适用于 Python 2,但不适用于 Python 3。如果您收到类似 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 1: invalid continuation byte 的错误,请运行 python --version 以查看您正在运行的版本。 在 python 3 中为我工作的版本:dd if=backup.ab bs=24 skip=1| python -c "import zlib,sys;sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read()))" > backup.tar【参考方案2】:

修复它

从OpenSSL Official Repo获取最新版本。

$ wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz
$ tar -zxvf openssl-1.1.0e.tar.gz
$ cd openssl-1.1.0e

使用 zlib 支持配置 OpenSSL

$ ./config zlib
$ make 
$ sudo make install

快乐的日子

$ which openssl
/usr/local/bin/openssl

【讨论】:

如果wget 不可用,您可以使用curl https://www.openssl.org/source/openssl-1.1.0e.tar.gz -o openssl-1.1.0e.tar.gz 按照上述openssl.org/source/openssl-1.0.2q.tar.gz 的说明,which openssl 仍然指向/usr/bin/openssl。但是,我确实在 /usr/local/ssl/bin/openssl 中找到了 1.0.2q 版本。无需进一步更改,OP 的命令就可以作为dd if=mybackup.ab bs=24 skip=1|/usr/local/ssl/bin/openssl zlib -d > mybackup.tar 运行

以上是关于错误:“zlib”是无效命令的主要内容,如果未能解决你的问题,请参考以下文章

编译 grpc 错误 zlib_compress 和 zlib_decompress

在 OpenSUSE 上卸载 Ruby(zlib 错误)

常用错误的处理方法

致命错误:zlib.h:安装 zlib 时没有这样的文件或目录

Mod_Wsgi 错误:“无效的无效命令 'WSGIScriptAlias',可能拼写错误或由未包含在服务器配置中的模块定义....”

安装 zlib 库仍然缺少错误