p7zip:基于7-Zip的文件压缩工具项目

用户可使用该项目进行高压缩率的文件归档与解压缩操作,支持多种格式。它是Windows 7z.exe和7za.exe的移植版本,提供7z、7za、7zr等工具,具备插件扩展能力,可处理多种压缩格式并支持密码加密。【此简介由AI生成】

分支1Tags0
文件最后提交记录最后更新时间
2 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
1 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前

p7zip 16.02

官方网站:http://p7zip.sourceforge.net/

p7zip 是 Windows 程序 7z.exe 和 7za.exe 的移植版本,由 7-zip 提供。

7-zip 是一款压缩率极高的文件归档工具。 官方网站:www.7-zip.org

7z 通过插件(7z.so 和 Codecs/Rar.so)处理归档文件。 7za 是一个独立的可执行文件(7za 支持的归档格式比 7z 少)。 7zr 是一个轻量级的独立可执行文件,仅支持 7z/LZMA/BCJ/BCJ2。

部分图形界面: 7zG : 测试阶段 7zFM : 开发阶段

注意事项:

  • 首先:不要在 Linux/Unix 上使用 7-zip 格式进行备份,因为:

    • 7-zip 不会存储文件的拥有者/组信息

    在 Linux/Unix 上,为了备份目录,必须使用 tar! 备份目录:tar cf - 目录 | 7za a -si 目录.tar.7z 恢复备份:7za x -so 目录.tar.7z | tar xf -

  • 如果你想将文件和目录(不包括文件拥有者信息)发送给其他 Unix/MacOS/Windows 用户,可以使用 7-zip 格式。

    示例:7za a 目录.7z 目录

    不要使用 "-r" 参数,因为它不会如你所愿 不要使用 "目录/",因为会遗漏 "." 文件 (例如:"目录/*" 不会匹配 "目录/.profile")

编译:

如果你下载的是 "bin" 包, 直接使用程序 bin/7za。(已在 Debian 3、Ubuntu 14.10 上测试) 由于程序是静态链接的,它应该可以在许多 x86 或 amd64 Linux 上运行。

如果你下载的是 "source" 包,

根据你的操作系统,复制 makefile.linux、 makefile.freebsd、makefile.cygwin 等, 覆盖 makefile.machine

示例:构建 7za、7z(及其插件)、7zr 和 Client7z 并通过内部测试 cp makefile.linux_x86_asm_gcc_4 makefile.linux make all_test

如果你想在 4 核机器上进行并行构建:make -j 4 TARGET

如果遇到问题,尝试:make -f makefile.oldmake TARGET

make depend   : 重新生成 makefile.depend
make clean    : 清理所有目录
make          : 构建 bin/7za
make sfx      : 构建 bin/7zCon.sfx(7za 现在可以创建 SFX 归档)
make 7z       : 构建 bin/7z 及其插件:
                      - "bin/7z.so"(GNU LGPL + AES 代码许可证)
                      - "bin/Codecs/Rar.so"(GNU LGPL + unRAR 限制)
make 7zr      : 构建 bin/7zr
make all      : 构建 bin/7za 和 bin/7zCon.sfx
make all2     : 构建 bin/7za、bin/7z(及其插件)和 bin/7zCon.sfx
make all3     : 构建 bin/7za、bin/7z(及其插件)、bin/7zr 和 bin/7zCon.sfx
make test     : 测试 bin/7za(解压、归档、密码等)
make test_7z  : 测试 bin/7z(解压、归档、密码等)
make test_7zr : 测试 bin/7zr(解压、归档等)

make 7zG      : 构建 bin/7zG 及其插件:
                      - "bin/7z.so"(GNU LGPL + AES 代码许可证)
                      - "bin/Codecs/Rar.so"(GNU LGPL + unRAR 限制)
make test_7zG : 测试 bin/7zG(解压、归档等)

此过程已在以下系统上测试:

  • x86 CPU: Linux - Debian 3.0 Stable Linux - Ubuntu 14.10 Linux - Ubuntu 15.10
    MacOS 10.6.6

    • AMD64 CPU: Linux - Ubuntu 14.10 Linux - Ubuntu 15.10
      MacOS 10.6.6

    • powerpc CPU: MacOS X 10.4 (ppc)

    • arm: Android (Galaxy Note 3)

部分旧版本 p7zip 的测试情况:

  • x86 CPU: DOS - (使用 DJGPP 构建,参见 http://blairdude.googlepages.com/p7zip ) Linux - Redhat 9.0 Standart Linux - Fedora 2 (Redhat) (gcc 3.3.3 和 gcc-3.4.1,带有 stack-smashing protector,来自 www.trl.ibm.com/projects/security/ssp/) Linux - Mandrake 10.0 Official Linux - Ubuntu 8.04 FreeBSD 5.2.1 (gcc 3.3.3) MacOS 10.4.8 NetBSD CYGWIN_NT-5.1 1.5.9(0.112/4/2) 2004-03-18 23:05 i686 Cygwin Solaris 9 (x86) with gcc 3.3.2 Solaris 10 (x86)

    • alpha CPU: Linux - Debian 3.0 (alpha) with gcc 2.95.4

    • AMD64 CPU: Linux - SuSE 8 ES (AMD64 Opteron) with gcc 3.2.2 Linux - Fedora 4 (AMD64 Turion) with gcc 4.0.1 Linux - Ubuntu 8.10

    • Itanium CPU: HP-UX B.11.31 U ia64 with aCC (HP C/aC++ B3910B A.06.14 [Feb 22 2007])

    • s390x CPU: Linux - SUSE Enterprise Linux 10 - with gcc 4.1.2 (仅 32 位构建可用,64 位构建未通过测试)

    • sparc CPU: Solaris 9 (sparc) with gcc 3.3.2

    • sparc CPU: Solaris 8 (sparc) with gcc 2.95.2

    • powerpc CPU: MacOS X 10.1/darwin 5.5 with gcc 932.1 (gcc 2.95.2) MacOS X 10.3 with XCode 1.5

    • openpower CPU: Linux openpower-linux1 2.6.5-7.97-pseries64 (ppc64) with gcc 3.3.3

    • IBM: AIX 5.3 with gcc 4.1.0

    • Tru64: OSF 5.1 with gcc 3.4.2

    • PA-RISC: HP-UX 11.11 with aCC (HP ANSI C++ B3910B A.03.73) HP-UX 11.11 with gcc 3.4.2 (7za 和 7zr:正常,7z:失败,因为 gcc 在 HP-UX 上有 bug, 插件无法工作,因为 C++ 构造函数未被调用!)

使用 cmake 编译

你只能构建 7za。

cd CPP/7zip/CMAKE

./generate.sh (或 ./generate_xcode.sh 用于 MacOSX)

在 CPP/7zip 中,你现在有以下目录:

  • P7ZIP.codeblocks/
    • P7ZIP.EclipseCDT4/
    • P7ZIP.Unix/ (或 P7ZIP.Xcode/ 用于 MacOSX)

对于目标 "Unix Makefiles": - cd CPP/7zip/P7ZIP.Unix - make

备注:这些目标仅使用 C/C++ 代码。要构建带有 ASM 代码的目标,必须阅读上一段。

对于其他目标,使用 IDE(CodeBlocks、KDevelop3、Eclipse CDT4)

安装:

方法 1

  • 编辑 install.sh 修改 DEST_HOME
    • ./install.sh : 安装 备注:你必须以 "root" 身份安装 7za 到目录 "/usr/local"

方法 2

  • 7za 是一个独立的程序,你可以将它放在任何地方。 示例:cp bin/7za /usr/local/bin/7za

    • 7z 需要其插件。你必须将文件 7z、7z.so 和目录 Codecs 复制到同一个目标目录。

    • 如果你想能够创建 SFX 归档,将 bin/7zCon.sfx 复制到 7za 或 7z 所在的目录。

使用:

备注:你可以用 7z 替换 7za。

7za t archive.7z : 测试归档文件 archive.7z 中的文件 7za l archive.7z : 列出归档文件 archive.7z 中的所有文件 7za x archive.7z : 从归档文件 archive.7z 中提取所有文件 到当前目录

7za a archive.7z file1 fileN : 将文件添加到归档文件 archive.7z

7za a archive.7z dir1 : 将目录 "dir1" 中的所有文件和子目录添加到归档文件 archive.7z

注意:不要使用 "-r" 参数,除非你清楚自己在做什么...

7za a -sfx archive.x dir1 : 将目录 "dir1" 中的所有文件添加到 SFX 归档文件 archive.x

你也可以添加或提取文件到/从 .zip 或 .tar 归档文件。 你也可以压缩/解压缩 .gz 或 .bz2 文件。

7za a -tzip archive.zip file file2 file3 7za a -ttar archive.tar file 7za a -tgzip file.gz file 7za a -tbzip2 archive.bz2 file

你可以为归档文件设置密码: 7za a -pmy_password archive.7z dir1

仅限 .7z 归档文件,你可以使用 "-mhe" 启用归档头加密 7za a -mhe=on -pmy_password archive.7z dir1

更多信息,参见 DOC/MANUAL 目录中的 7za.exe 文档 7za a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1 使用 "极致设置" 将目录 "dir1" 中的所有文件添加到归档文件 archive.7z。 -t7z : 7z 归档 -m0=lzma : lzma 方法 -mx=9 : 压缩级别 = 9(极致) -mfb=64 : LZMA 的快速字节数 = 64 -md=32m : 字典大小 = 32 兆字节 -ms=on : 固态归档 = 开启

使用新的编解码器 "lzma2" 7za a -m0=lzma2 archive.7z directory

性能基准测试:

7za b : 测试 LZMA 编解码器性能
7z b -mm=crc : 执行内部 CRC 校验
7za b "-mm=*" : 测试所有压缩方法

大页内存配置(hugetlbfs):

在 Linux 中使用大页内存需进行以下配置:
首先确认内核已启用 hugetlbfs 支持:

~$ grep hugetlbfs /proc/filesystems
nodev hugetlbfs

查看当前大页内存配置:

~$ grep Huge /proc/meminfo
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB

本例中大页大小为 2 MiB。
若系统内存为 2 GiB 且需预留 512 MiB 给大页,
则需配置 256 个大页。

以 root 身份执行:

~# echo 296 >/proc/sys/vm/nr_hugepages
~# grep Huge /proc/meminfo
HugePages_Total: 296
HugePages_Free: 296
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB

最后配置用户空间访问权限:

~# mkdir /hugepages
~# mount -t hugetlbfs -o rw,nosuid,nodev,noexec,noatime none /hugepages
~# chmod 1777 /hugepages

选项1:完成大页配置后,
在 shell 中设置环境变量 HUGETLB_PATH 指向挂载点:
~$ export HUGETLB_PATH=/hugepages

选项2:让 p7zip 自动探测首个 "hugetlbfs" 类型目录

启用 p7zip 大页功能需添加 '-slp' 参数。
示例:7za -slp a t.7z dir

永久配置方案:

  • 创建目录:mkdir /hugepages

  • 在 /etc/fstab 添加挂载项实现开机自动挂载:
    hugetlbfs /hugepages hugetlbfs rw,nosuid,nodev,noexec,noatime 0 0

  • 在 /etc/rc.local 添加:
    chmod 1777 /hugepages
    echo 296 > /proc/sys/vm/nr_hugepages

可选:export HUGETLB_PATH=/hugepages

启用 p7zip 大页功能:7za -slp b

注:当前 CPU 环境下 "7za -slp b" 与 "7za b" 速度相当。
如需性能提升,建议压缩至少 300MB 文件:
示例:7za -slp -mx=9 -a big_file.tar.7z big_file.tar

许可协议:

请阅读 DOC/License.txt 文件。

7-zip 功能限制:

  • 不支持 .tar 格式的 uid/gid 属性(Unix 系统请使用原生 tar 命令)

Unix 版本特有限制:

  • 仅当环境为 UTF-8 时才能正确处理 UNICODE 文件名。
    示例:export LANG=en_US.UTF-8 ; unset LC_CTYPE
    备注:查看 LANG 可选值可访问以下目录:
    - /usr/lib/locale : Fedora 2 / Solaris 8
    - /usr/share/locale : OpenBSD / Debian / FreeBSD / MacOS X / Mandrake 10.1 / NetBSD

    Linux 系统可用 locale -a 查看可用区域设置

p7zip 依赖 LC_CTYPE 和 LANG 环境变量进行 UNICODE 编码转换。
可通过 "locale" 命令查看这些变量,
或使用 "echo $LC_CTYPE" 和 "echo $LANG"。

若无需跨平台共享压缩包,可使用 "-no-utf16" 参数:
用法:
7za a -no-utf16 archive.7z dirOrFile1 ... dirOrFileN
7za t -no-utf16 archive.7z
7za l -no-utf16 archive.7z
7za x -no-utf16 archive.7z

  • 忽略 Windows 文件权限属性(文件将按默认权限创建)

另请参阅 TODO 文件。

开发者专区:

  • 使用 cppcheck 进行静态分析
    make cppcheck

  • 使用 clang 进行静态分析
    scan-build make all4 2>&1 | tee -i scan-build.out

  • 动态分析:valgrind
    cp makefile.linux_valgrind makefile.machine
    make test

  • 动态分析:gcc sanitize
    cp makefile.linux_amd64_sanitizer makefile.machine
    make test

  • WaitForMultipleObject 在 Unix 无等效实现

  • Events 机制不存在

  • GCC 中 sizeof(wchar_t) = 4(MS VC++ 中为 2)

  • 源码中的 "FIXME" 标记表示需补充代码以完善功能

  • 源码中的 "FIXED" 标记表示已针对 Unix 环境修改原始代码

另请参阅 TODO 文件。

项目介绍

用户可使用该项目进行高压缩率的文件归档与解压缩操作,支持多种格式。它是Windows 7z.exe和7za.exe的移植版本,提供7z、7za、7zr等工具,具备插件扩展能力,可处理多种压缩格式并支持密码加密。【此简介由AI生成】

定制我的领域