How To Use 7zip

7zip is a powerful open-source archiver – software package for packing and unpacking files and directories into archives. Unlike software packages, archives are containers aimed at compressing data, not storing files with additional metadata. This means that for installing software, you’re better off using official software repositories and packages. But for quickly compressing a bunch of files or directories for transferring to another system, archivers are the best.

7zip is a universal archiver, meaning it supports a number of common archive packages like ZIP, ARJ, BZIP, TAR and even RAR. Naturally, 7zip offers and supports its own archival format called 7zip (it uses .7z extension for archive files).

p7zip software packages

7zip was created for Windows platform, but after some time a command line version for POSIX (and Linux) Unix systems was developed – it is now called p7zip (P is probably for POSIX) and distributed for most of common Linux operating systems.

Looking at Ubuntu for example, there are 2 packages available: p7zip and p7zip-full. They install different binaries and offer slightly different functionality.

p7zip package offers lighter versions of 7zip archiver:

  • 7zr command only supports 7zip archives and doesn’t support encrypted archives
  • 7za command supports a limited number of additional archive types

p7zip-full package offers a modular 7zip archiver:

  • 7z command that uses plugins for additional arhive types support

WARNING: 7zip does not handle Unix file ownership

Probably because this isn’t a Unix native software, 7zip archiver doesn’t support the file ownership correctly. This means if you archive files that belong to multiple different users, this ownership information will be lost – so when you unpack the archive you will not know which files belong to what user.

That’s fine for quick and simple backup tasks, but is a major issue when you want to create complex backups of directories shared by multiple users. It’s best that you use native Unix/Linux tools like tar then.

Create archive with 7zip

Go to the directory that your files are in. In this example I’m saving OS configuration files form /etc directory:

# cd /etc

Now archive the files like this:

# 7z a /tmp/etc.7z *

7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,1 CPU)
Scanning

Creating archive /tmp/etc.7z

Compressing update-motd.d/00-header
Compressing ppp/ip-down.d/000resolvconf
Compressing ppp/ip-up.d/000resolvconf
Compressing network/if-up.d/000resolvconf
Compressing grub.d/00_header
Compressing apt/apt.conf.d/01-vendor-ubuntu

...

Adding files to an existing 7zip archive

If you forgot or recently updated files in the original location, you can use the same a option to update files in the existing archive:

# cd /etc
# 7z a /tmp/etc.7z network*

7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Scanning

Updating archive /tmp/etc.7z

Compressing network/if-up.d/000resolvconf
Compressing network/if-pre-up.d/ethtool
Compressing network/if-up.d/ethtool
Compressing network/if-up.d/ifenslave
Compressing network/if-post-down.d/ifenslave
Compressing network/if-pre-up.d/ifenslave
Compressing network/interfaces
Compressing network/if-up.d/ip
Compressing networks
Compressing network/if-up.d/openssh-server
Compressing network/if-down.d/resolvconf
Compressing network/if-down.d/upstart
Compressing network/if-up.d/upstart
Compressing network/if-post-down.d/vlan
Compressing network/if-pre-up.d/vlan
Compressing network/interfaces.d/50-cloud-init.cfg

Everything is Ok

Listing files in a 7zip archive

Say you come across a bunch of old archives that you can’t really remember. It’s probably best to first list files in an archive than to unpack them. l option for 7zip helps you do that (I’m abridging the output for the purpose of this post):

# 7z l /tmp/etc.7z

7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Listing archive: /tmp/etc.7z

--
Path = /tmp/etc.7z
Type = 7z
Method = LZMA
Solid = +
Blocks = 2
Physical Size = 512438
Headers Size = 21038

Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2015-10-22 19:15:21 ....A 1220 484437 update-motd.d/00-header
2015-06-03 22:58:21 ....A 413 ppp/ip-down.d/000resolvconf
2015-06-03 22:58:21 ....A 553 ppp/ip-up.d/000resolvconf
2017-12-12 23:48:41 ....A 9791 grub.d/00_header
2016-04-14 09:45:21 ....A 42 apt/apt.conf.d/01-vendor-ubuntu
2016-04-14 09:45:21 ....A 769 apt/apt.conf.d/01autoremove
...
2018-01-09 23:22:44 D.... 0 0 apm/event.d
2018-01-09 23:22:06 D.... 0 0 apm
2018-03-10 16:42:06 D.... 0 0 alternatives
2018-01-09 23:22:49 D.... 0 0 acpi/events
2018-01-09 23:22:49 D.... 0 0 acpi
------------------- ----- ------------ ------------ ------------------------
2088855 491400 1565 files, 201 folders

 

Extracting files from 7zip archive

In this simple enough scenario, the files and directories you extract will be unpacked into the current directory you are in.

First, you create the destination directory or just change location to it:

# mkdir /home/greys/etc-try
# cd /home/greys/etc/try

Now run the 7z command to extract files:

# 7z -e /tmp/etc.7z

7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Processing archive: /tmp/etc.7z

Extracting update-motd.d/00-header
Extracting ppp/ip-up.d/000resolvconf
Extracting grub.d/00_header
Extracting apt/apt.conf.d/01-vendor-ubuntu
Extracting apt/apt.conf.d/01autoremove
Extracting apt/apt.conf.d/01autoremove-kernels
Extracting grub.d/05_debian_theme
Extracting update-motd.d/10-help-text
...

Extracting 7zip archive into a different directory

If you want the files to be extracted somewhere else, not in the current directory, then you should use the -o parameter. In this example below, I’m instructing 7zip to extrace /tmp/etc.7z archive into the /root/etc-new directory. If it doesn’t exist, 7zip will create it:

# 7z -o/root/etc-new e /tmp/etc.7z

That’s it for now! Hope you liked this brief introduction, let me know if you are using 7zip and want me to expand on any aspects.

See Also