1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
|
p7zip 16.02
===========
Homepage : http://p7zip.sourceforge.net/
p7zip is a port of the Windows programs 7z.exe and 7za.exe provided by 7-zip.
7-zip is a file archiver with the highest compression ratio.
Homepage : www.7-zip.org
7z uses plugins (7z.so and Codecs/Rar.so) to handle archives.
7za is a stand-alone executable (7za handles less archive formats than 7z).
7zr is a light stand-alone executable that supports only 7z/LZMA/BCJ/BCJ2.
Some GUI :
7zG : beta stage
7zFM : alpha stage
CAUTION :
---------
- FIRST : DO NOT USE the 7-zip format for backup purpose on Linux/Unix because :
- 7-zip does not store the owner/group of the file
On Linux/Unix, in order to backup directories you must use tar !
to backup a directory : tar cf - directory | 7za a -si directory.tar.7z
to restore your backup : 7za x -so directory.tar.7z | tar xf -
- if you want to send files and directories (not the owner of file)
to others Unix/MacOS/Windows users, you can use the 7-zip format.
example : 7za a directory.7z directory
do not use "-r" because this flag does not do what you think
do not use "directory/*" because of ".*" files
(example : "directory/*" does not match "directory/.profile")
USAGE:
------
Remark : you can replace 7za with 7z.
7za t archive.7z : tests files in the archive archive.7z
7za l archive.7z : lists all files from archive archive.7z
7za x archive.7z : extracts all files from archive archive.7z
to the current directory
7za a archive.7z file1 fileN : add files to the archive archive.7z
7za a archive.7z dir1 : add all files and subdirectories from directory "dir1" to archive archive.7z
CAUTION : do not use the flag "-r" unless you know what you are doing ...
7za a -sfx archive.x dir1 : add all files from directory "dir1" to SFX archive archive.x
You can also add or extract files to/from .zip or .tar archives.
You can also compress/uncompress .gz or .bz2 files.
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
You can use password for archives:
7za a -pmy_password archive.7z dir1
For .7z archive only, you can enable archive header encryption with "-mhe"
7za a -mhe=on -pmy_password archive.7z dir1
For more, see the documentation of 7za.exe in DOC/MANUAL directory
7za a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1
adds all files from directory "dir1" to archive archive.7z
using "ultra settings".
-t7z : 7z archive
-m0=lzma : lzma method
-mx=9 : level of compression = 9 (Ultra)
-mfb=64 : number of fast bytes for LZMA = 64
-md=32m : dictionary size = 32 megabytes
-ms=on : solid archive = on
To use the new codec "lzma2"
7za a -m0=lzma2 archive.7z directory
BENCHMARKS :
------------
7za b : bench LZMA codec
7z b -mm=crc : make internal crc check.
7za b "-mm=*" : test all methods
hugetlbfs (large pages) :
-------------------------
Using huges pages in Linux requires some preparations.
First, make sure your running kernel has support for hugetlbfs compiled in:
~$ grep hugetlbfs /proc/filesystems
nodev hugetlbfs
You can view your current huge page configuration like this:
~$ grep Huge /proc/meminfo
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
In this case the size of a huge page is 2 MiB.
So, if you have 2 GiB of RAM and want to reserve 512 MiB for huge pages,
you would need 256 pages.
Do the following as 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
Finally, make access from user space possible:
~# mkdir /hugepages
~# mount -t hugetlbfs -o rw,nosuid,nodev,noexec,noatime none /hugepages
~# chmod 1777 /hugepages
Option 1 : Now huge pages are configured.
In your shell, set the environment variable HUGETLB_PATH to the mount point:
~$ export HUGETLB_PATH=/hugepages
or
Option 2 : Let p7zip find out the first directory with the type "hugetlbfs"
To enable huge page use in p7zip, pass the '-slp' switch to it.
Ex: 7za -slp a t.7z dir
If you want this to be a permanent setup :
- mkdir /hugepages
- add an entry to your /etc/fstab so that when you reboot your computer,
your hugetlbfs will mount automatically :
hugetlbfs /hugepages hugetlbfs rw,nosuid,nodev,noexec,noatime 0 0
- add this in your /etc/rc.local :
chmod 1777 /hugepages
echo 296 > /proc/sys/vm/nr_hugepages
optional : export HUGETLB_PATH=/hugepages
To enable huge page use in p7zip, pass the '-slp' switch to it : 7za -slp b
Remark : with current CPU : "7za -slp b" is not faster than "7za b".
If you want to see some speedup, compress at least 300MB
Ex : 7za -slp -mx=9 -a big_file.tar.7z big_file.tar
LICENSE :
---------
please read copyright file.
LIMITATIONS from 7-zip :
------------------------
- does not support uid/gid for the .tar format (so, use tar on Unix)
LIMITATIONS for Unix version only :
-----------------------------------
- can handle properly UNICODE filenames only if the environment is UTF-8.
Example : export LANG=en_US.UTF-8 ; unset LC_CTYPE
Remark : see the possible values for LANG in the directory
- /usr/lib/locale : Fedora 2 / Solaris 8
- /usr/share/locale : OpenBSD / Debian / FreeBSD / MacOS X / Mandrake 10.1 / NetBSD
On Linux, to display the available locales : locale -a
p7zip relies on LC_CTYPE and then on LANG to convert name to/from UNICODE.
the command "locale" should display these environment variables.
you can also do "echo $LC_CTYPE" and "echo $LANG".
If you do not plan to export your archive, you can use the flag "-no-utf16".
Usage :
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
- ignores Windows file access permissions (files are created with default permissions)
see also TODO file.
DEVELOPPER CORNER:
------------------
- static analysis with cppcheck
make cppcheck
- static analysis with clang
scan-build make all4 2>&1 | tee -i scan-build.out
- dynamic analysis : valgrind
cp makefile.linux_valgrind makefile.machine
make test
- dynamic analysis : gcc sanitize
cp makefile.linux_amd64_sanitizer makefile.machine
make test
- WaitForMultipleObject has no equivalence on Unix.
- Events don't exist.
- sizeof(wchar_t) = 4 with GCC (2 with MS VC++)
- "FIXME" in source code indicates that you should add codes to better handle all cases.
- "FIXED" in source code indicates that the original code has been changed to work in Unix environment.
see also TODO file.
|