The problem
You need to create compressed backups or extract downloaded archives.
The solution
# Create tar archive
tar -cvf archive.tar file1 file2 dir1/
tar -cvf archive.tar . # Current directory
# Create with gzip compression (.tar.gz)
tar -czvf archive.tar.gz files/
tar -czvf backup-$(date +%Y%m%d).tar.gz /path/to/backup
# Create with bzip2 compression (.tar.bz2)
tar -cjvf archive.tar.bz2 files/
# Create with xz compression (.tar.xz)
tar -cJvf archive.tar.xz files/
# Extract tar archive
tar -xvf archive.tar
tar -xvf archive.tar -C /target/dir # Extract to directory
# Extract compressed archives
tar -xzvf archive.tar.gz
tar -xjvf archive.tar.bz2
tar -xJvf archive.tar.xz
# List contents without extracting
tar -tvf archive.tar
tar -tzvf archive.tar.gz
# Add files to existing archive
tar -rvf archive.tar newfile.txt
# Extract specific files
tar -xzvf archive.tar.gz file1.txt dir/file2.txt
# Exclude files/folders when creating
tar -czvf archive.tar.gz --exclude='*.log' --exclude='node_modules' .
# Create archive from stdin
tar -czf - file1.txt | ssh user@host "tar -xzf - -C /backup"
# Split large archive
tar -czvf - large_dir/ | split -b 2G - large_backup.tar.gz.part
# Combine and extract split archive
cat large_backup.tar.gz.part* | tar -xzvf -
# Verify archive integrity
tar -tzf archive.tar.gz > /dev/null && echo "Archive OK"
# Compare archive with filesystem
tar -df archive.tar.gz
# Preserve permissions (important for backups)
tar -cpzvf backup.tar.gz --same-owner /important/dataPut it to work
# Backup website
tar -czvf website-backup-$(date +%Y%m%d).tar.gz /var/www/html/
# Extract downloaded source code
tar -xzvf package-1.0.tar.gz
cd package-1.0
# Create compressed log archive
tar -czvf logs-$(date +%Y-%m).tar.gz /var/log/*.log
# Then delete old logs
# Transfer directory via SSH
tar -czf - /local/data | ssh user@remote "tar -xzf - -C /remote/backup"Worth knowing
Flags: c=create, x=extract, v=verbose, f=file, z=gzip, j=bzip2, J=xz. Use -p to preserve permissions. Test archives with -t before extraction.