GeneralHow To InstallLinuxServer

How to install & use Tar command in linux to Preserve file ownership in Archive

Tar installation archiving extracting with file and folder ownership preservedWhy It’is special than other archiving tools?

Tar is a common command line tool for archiving files and directories. It’s famous for the capacity of preserving file permission and ownership. Unlike other archiving tools, say zip or gzip, tar itself doesn’t compress files during archive creation. But in conjugation with those tools it create compressed archive with file ownership and permission intact. So this tool fulfill both the purpose with a single command, that’s great about it. 

Why This tool is necessary?

  1. Archiving is necessary to transfer large number of files. It take hours to transfer a wordpress installation over ssh without archiving. With archiving it’s matter of a few minutes.
  2. Saving permission and ownership is specially useful while transferring an installation between similar system. 

Installing Tar in CentOS and Ubuntu like System

This is usually pre-installed with most of the common Linux distribution. Write “which tar” or just “tar” in command line to check it’s installed or not. Output like “/bin/tar” or the one shown in following figure confirms the tool is installed, no further steps require in that case. Otherwise install it as follows.

For CentOS & RHEL

It’s present in “Base” repository. Use yum to install.

yum -y install tar

For Ubuntu and Debian Like system

apt-get install tar

Installing accompanying tool gzip, bzip2 and xz for compression

yum -y install gzip bzip2 xz
apt-get -y install gzip bzip2 xz

Check Tar is installed or not and install it

Installing from source code

In special circumstance or if you want to make your hand dirty follow this section to install the software from source code. Install developer tools, then download source package of your preferred version from GNU and compile as follows.

To install developer package use the following in CentOS or RHEL system.

yum groupinstall ‘Development Tools’

For Ubuntu or Debian based system use the following. (Code Source)

sudo apt-get install linux-headers-$(uname -r) build-essential

The source package comes in form tar-archive itself. So you’ve to extract them in another machine with “tar” installed, and then transfer it. Change current directory into the source package directory then compile and install as follows

./configure && make && make install

Compilation is sometime a tedious job & this is not the preferred of installation in most of the case. If compilation fails at any step please diagnose, rectify the error and try again.   

Archiving file and Directories (Without ownership preserved) 

Following is the common pattern of archiving file or directory. Tar always preserve file and directory permissions while archiving but not ownership.

tar -falges archive-file-name source-file-or-folder

flages: c,v,f,z etc. Archiving and compression nature depends on them, explained latter.

archive-file-name: Name of the archive about to be created with extension.

source-file-or-folder: The file or folder to be archived.

1. Archiving file and directory without compressing

Following will create an archive serverlog.tar from a folder Serverlog located in current directory without any compression. Archiving without compression is extremely fast and useful while compressing lots of very small file, where time is the bottleneck.

tar -cvf serverlog.tar ./Serverlog

c: Create Archive

v: Verbose (Display currently archiving file on screen while archiving)

f: Use the archive following it

2. Creating and compressing archive

Use -cvzf or -cvjf to compress with gzip or bzip2 respectively. .tgz and .tar.bz2 is for gzip and bzip2 compression. Extension .tgz is synonymous with tar.gz although extension less important here.

tar -cvzf serverlog.tgz Serverlog
tar -cvjf serverlog.tgz Serverlog

There was no flag to combine “xz” with tar. Traditional way was piping archive output to “xz” as follows to obtain xz compressed tar-archive.

tar -cvf – Pictures | xz -9e > pic.tar.xz

However modern tar can combine with “xz” using -J flga. Note: Capital J is for xz and small j is for bzip2.

tar -cJvf serverlog.tar.xz Serverlog

9e is the highest level of compression with xz. For more on tar-xz combination refer here.

Note: bzip2 provide better compression over gzip but consume considerably more time. xz provide best compression in reasonable time consuming excessive CPU resource. Reference

Extracting Archive

The following command will extract an archive in current working directory

tar -xvzf serverlog.tgz

x: Extracting

z, j, J: For extracting gzip, bgz or xz file.

To extract an archive to another directory explicitly mention the destination directory following the archive name. Considering both archive and destination is out of current directory use the following.

tar -xvzf /path-to/serverlog.tgz /path-to-destination-folder/

Preserving ownership while archiving

An additional flag p can preserve ownership while archiving with any compression or no compression. But remember, Linux kernel allow superusers to change ownership (Learn More). So, you’ve to“root” or superuser (users with “sudo” privilege) to use this.

sudo tar -cvpzf serverlog.zip ServerLog

Use –same-owner as superuser while extraction to retain the ownership

sudo tar -xvzf –same-owner serverlog.zip /path-to-destination/

Summary

We’ve covered installing tar in CentOS and Ubuntu like system using “yum”, “atp-get” & from source code otherwise. c,x,v,z,j,J,f flags represent create, extract, verbose, gzip, bzip2, xz, use archive respectively. Flag p & –same-owner is to preserve ownership during archiving and extraction respectively. For any ambiguity and suggestion please leave your comment bellow.

Visits: 698

Leave a Reply

Your email address will not be published. Required fields are marked *