TAR COMMAND
BASIC SYNTAX#
tar [options] [archive-file] [files/directories] # Key options -c Create archive -x Extract archive -t List contents -v Verbose output -f Specify filename -z Gzip compression -j Bzip2 compression -J XZ compression
CREATE ARCHIVES#
tar -cvf archive.tar files/ # Create tar archive tar -cvf archive.tar file1 file2 # Multiple files tar -cvf archive.tar /path/to/dir # Archive directory tar -cvf archive.tar . # Current directory tar -cvf archive.tar * # All files in current dir # With compression tar -czvf archive.tar.gz files/ # Gzip compressed tar -cjvf archive.tar.bz2 files/ # Bzip2 compressed tar -cJvf archive.tar.xz files/ # XZ compressed # Without leading directory path tar -cvf archive.tar -C /path/to/dir .
EXTRACT ARCHIVES#
tar -xvf archive.tar # Extract tar tar -xvf archive.tar -C /destination # Extract to directory tar -xzvf archive.tar.gz # Extract gzip tar -xjvf archive.tar.bz2 # Extract bzip2 tar -xJvf archive.tar.xz # Extract xz # Auto-detect compression tar -xvf archive.tar.gz # Modern tar auto-detects tar -xvf archive.tar.bz2 tar -xvf archive.tar.xz # Extract specific files tar -xvf archive.tar file.txt # Single file tar -xvf archive.tar "*.txt" # Pattern match tar -xvf archive.tar dir/ # Specific directory # Extract with strip (remove leading directories) tar -xvf archive.tar --strip-components=1
LIST CONTENTS#
tar -tvf archive.tar # List all contents tar -tvf archive.tar.gz # List gzip archive tar -tvf archive.tar | grep pattern # Search in listing tar -tvf archive.tar "*.txt" # List specific pattern
APPEND TO ARCHIVE#
tar -rvf archive.tar newfile.txt # Append file tar -rvf archive.tar newdir/ # Append directory # Note: Cannot append to compressed archives
UPDATE ARCHIVE#
tar -uvf archive.tar files/ # Update only newer files # Note: Cannot update compressed archives
DELETE FROM ARCHIVE#
tar --delete -f archive.tar file.txt # Delete file from archive # Note: Cannot delete from compressed archives
COMPRESSION OPTIONS#
# Gzip (good balance of speed/compression) tar -czvf archive.tar.gz files/ tar -xzvf archive.tar.gz # Bzip2 (better compression, slower) tar -cjvf archive.tar.bz2 files/ tar -xjvf archive.tar.bz2 # XZ (best compression, slowest) tar -cJvf archive.tar.xz files/ tar -xJvf archive.tar.xz # Zstd (fast with good compression) tar -I zstd -cvf archive.tar.zst files/ tar -I zstd -xvf archive.tar.zst # Specify compression level tar -cvf - files/ | gzip -9 > archive.tar.gz # Max gzip tar -cvf - files/ | bzip2 -9 > archive.tar.bz2 # Max bzip2 tar -cvf - files/ | xz -9 > archive.tar.xz # Max xz
EXCLUDE FILES#
tar -cvf archive.tar --exclude="*.log" dir/
tar -cvf archive.tar --exclude="node_modules" dir/
tar -cvf archive.tar --exclude-vcs dir/ # Exclude .git, .svn
tar -cvf archive.tar --exclude-vcs-ignores dir/ # Use .gitignore
# Multiple exclusions
tar -cvf archive.tar \
--exclude="*.log" \
--exclude="*.tmp" \
--exclude="cache" \
dir/
# Exclude from file
tar -cvf archive.tar -X exclude.txt dir/
PRESERVE ATTRIBUTES#
tar -cvpf archive.tar files/ # Preserve permissions tar -cvf archive.tar --owner=root --group=root files/ tar -cvf archive.tar --numeric-owner files/ tar -cvf archive.tar --preserve-permissions files/ tar -cvf archive.tar --same-owner files/ # Full preservation (backup) tar -cvpf archive.tar --acls --xattrs --selinux files/
INCREMENTAL BACKUPS#
# Create snapshot and first backup tar -cvf backup-0.tar -g snapshot.file /data # Incremental backup (only changed files) tar -cvf backup-1.tar -g snapshot.file /data # List incremental backup contents tar -tvf backup-1.tar -g /dev/null
SPLIT LARGE ARCHIVES#
# Create split archive tar -cvf - largedir/ | split -b 1G - archive.tar.part_ # Extract split archive cat archive.tar.part_* | tar -xvf - # With compression tar -czvf - largedir/ | split -b 1G - archive.tar.gz.part_ cat archive.tar.gz.part_* | tar -xzvf -
REMOTE OPERATIONS#
# Archive and copy over SSH tar -cvf - files/ | ssh user@host "cat > archive.tar" # Extract from remote ssh user@host "cat archive.tar" | tar -xvf - # Archive and extract directly on remote tar -cvf - files/ | ssh user@host "tar -xvf - -C /destination" # With compression tar -czvf - files/ | ssh user@host "tar -xzvf - -C /destination"
COMPARE ARCHIVES#
tar -dvf archive.tar # Compare archive with filesystem tar --compare -f archive.tar # Same as above
PROGRESS AND VERBOSE#
tar -cvvf archive.tar files/ # Extra verbose tar -cvf archive.tar files/ --checkpoint=1000 tar -cvf archive.tar files/ --checkpoint-action=dot # With pv for progress bar tar -cf - files/ | pv | gzip > archive.tar.gz pv archive.tar.gz | tar -xzf -
PRACTICAL EXAMPLES#
# Backup home directory tar -czvf home_backup.tar.gz --exclude-vcs ~ # Backup with date tar -czvf backup_$(date +%Y%m%d).tar.gz /data # Extract single file tar -xzvf archive.tar.gz path/to/file.txt # View compressed file content without extracting tar -xzOf archive.tar.gz path/to/file.txt # Create archive of files from list tar -cvf archive.tar -T filelist.txt # Archive preserving hard links tar -cvf archive.tar --hard-dereference files/ # Dry run (show what would be done) tar -cvf /dev/null files/ # Extract overwriting existing files tar -xvf archive.tar --overwrite # Extract without overwriting tar -xvf archive.tar --keep-old-files # Extract newer files only tar -xvf archive.tar --keep-newer-files
FILE EXTENSIONS#
.tar Uncompressed tar archive .tar.gz Gzip compressed (also .tgz) .tar.bz2 Bzip2 compressed (also .tbz, .tbz2) .tar.xz XZ compressed (also .txz) .tar.zst Zstd compressed .tar.lz Lzip compressed .tar.lzma LZMA compressed
TROUBLESHOOTING#
# Check archive integrity gzip -t archive.tar.gz bzip2 -t archive.tar.bz2 xz -t archive.tar.xz # Repair truncated gzip archive gzip -d < archive.tar.gz > recovered.tar 2>/dev/null # Handle special characters in filenames tar -cvf archive.tar --format=posix files/ # Verbose error output tar -cvf archive.tar files/ 2>&1 | tee tar.log
QUICK REFERENCE#
tar -cvf archive.tar files/ # Create tar -xvf archive.tar # Extract tar -tvf archive.tar # List tar -czvf archive.tar.gz files/ # Create + gzip tar -xzvf archive.tar.gz # Extract gzip tar -cjvf archive.tar.bz2 files/ # Create + bzip2 tar -xjvf archive.tar.bz2 # Extract bzip2 tar -cJvf archive.tar.xz files/ # Create + xz tar -xJvf archive.tar.xz # Extract xz
TAR COMMAND CHEATSHEET
======================
Source: https://cheatsheet.johlem.net
BASIC SYNTAX
------------
tar [options] [archive-file] [files/directories]
# Key options
-c Create archive
-x Extract archive
-t List contents
-v Verbose output
-f Specify filename
-z Gzip compression
-j Bzip2 compression
-J XZ compression
CREATE ARCHIVES
---------------
tar -cvf archive.tar files/ # Create tar archive
tar -cvf archive.tar file1 file2 # Multiple files
tar -cvf archive.tar /path/to/dir # Archive directory
tar -cvf archive.tar . # Current directory
tar -cvf archive.tar * # All files in current dir
# With compression
tar -czvf archive.tar.gz files/ # Gzip compressed
tar -cjvf archive.tar.bz2 files/ # Bzip2 compressed
tar -cJvf archive.tar.xz files/ # XZ compressed
# Without leading directory path
tar -cvf archive.tar -C /path/to/dir .
EXTRACT ARCHIVES
----------------
tar -xvf archive.tar # Extract tar
tar -xvf archive.tar -C /destination # Extract to directory
tar -xzvf archive.tar.gz # Extract gzip
tar -xjvf archive.tar.bz2 # Extract bzip2
tar -xJvf archive.tar.xz # Extract xz
# Auto-detect compression
tar -xvf archive.tar.gz # Modern tar auto-detects
tar -xvf archive.tar.bz2
tar -xvf archive.tar.xz
# Extract specific files
tar -xvf archive.tar file.txt # Single file
tar -xvf archive.tar "*.txt" # Pattern match
tar -xvf archive.tar dir/ # Specific directory
# Extract with strip (remove leading directories)
tar -xvf archive.tar --strip-components=1
LIST CONTENTS
-------------
tar -tvf archive.tar # List all contents
tar -tvf archive.tar.gz # List gzip archive
tar -tvf archive.tar | grep pattern # Search in listing
tar -tvf archive.tar "*.txt" # List specific pattern
APPEND TO ARCHIVE
-----------------
tar -rvf archive.tar newfile.txt # Append file
tar -rvf archive.tar newdir/ # Append directory
# Note: Cannot append to compressed archives
UPDATE ARCHIVE
--------------
tar -uvf archive.tar files/ # Update only newer files
# Note: Cannot update compressed archives
DELETE FROM ARCHIVE
-------------------
tar --delete -f archive.tar file.txt # Delete file from archive
# Note: Cannot delete from compressed archives
COMPRESSION OPTIONS
-------------------
# Gzip (good balance of speed/compression)
tar -czvf archive.tar.gz files/
tar -xzvf archive.tar.gz
# Bzip2 (better compression, slower)
tar -cjvf archive.tar.bz2 files/
tar -xjvf archive.tar.bz2
# XZ (best compression, slowest)
tar -cJvf archive.tar.xz files/
tar -xJvf archive.tar.xz
# Zstd (fast with good compression)
tar -I zstd -cvf archive.tar.zst files/
tar -I zstd -xvf archive.tar.zst
# Specify compression level
tar -cvf - files/ | gzip -9 > archive.tar.gz # Max gzip
tar -cvf - files/ | bzip2 -9 > archive.tar.bz2 # Max bzip2
tar -cvf - files/ | xz -9 > archive.tar.xz # Max xz
EXCLUDE FILES
-------------
tar -cvf archive.tar --exclude="*.log" dir/
tar -cvf archive.tar --exclude="node_modules" dir/
tar -cvf archive.tar --exclude-vcs dir/ # Exclude .git, .svn
tar -cvf archive.tar --exclude-vcs-ignores dir/ # Use .gitignore
# Multiple exclusions
tar -cvf archive.tar \
--exclude="*.log" \
--exclude="*.tmp" \
--exclude="cache" \
dir/
# Exclude from file
tar -cvf archive.tar -X exclude.txt dir/
PRESERVE ATTRIBUTES
-------------------
tar -cvpf archive.tar files/ # Preserve permissions
tar -cvf archive.tar --owner=root --group=root files/
tar -cvf archive.tar --numeric-owner files/
tar -cvf archive.tar --preserve-permissions files/
tar -cvf archive.tar --same-owner files/
# Full preservation (backup)
tar -cvpf archive.tar --acls --xattrs --selinux files/
INCREMENTAL BACKUPS
-------------------
# Create snapshot and first backup
tar -cvf backup-0.tar -g snapshot.file /data
# Incremental backup (only changed files)
tar -cvf backup-1.tar -g snapshot.file /data
# List incremental backup contents
tar -tvf backup-1.tar -g /dev/null
SPLIT LARGE ARCHIVES
--------------------
# Create split archive
tar -cvf - largedir/ | split -b 1G - archive.tar.part_
# Extract split archive
cat archive.tar.part_* | tar -xvf -
# With compression
tar -czvf - largedir/ | split -b 1G - archive.tar.gz.part_
cat archive.tar.gz.part_* | tar -xzvf -
REMOTE OPERATIONS
-----------------
# Archive and copy over SSH
tar -cvf - files/ | ssh user@host "cat > archive.tar"
# Extract from remote
ssh user@host "cat archive.tar" | tar -xvf -
# Archive and extract directly on remote
tar -cvf - files/ | ssh user@host "tar -xvf - -C /destination"
# With compression
tar -czvf - files/ | ssh user@host "tar -xzvf - -C /destination"
COMPARE ARCHIVES
----------------
tar -dvf archive.tar # Compare archive with filesystem
tar --compare -f archive.tar # Same as above
PROGRESS AND VERBOSE
--------------------
tar -cvvf archive.tar files/ # Extra verbose
tar -cvf archive.tar files/ --checkpoint=1000
tar -cvf archive.tar files/ --checkpoint-action=dot
# With pv for progress bar
tar -cf - files/ | pv | gzip > archive.tar.gz
pv archive.tar.gz | tar -xzf -
PRACTICAL EXAMPLES
------------------
# Backup home directory
tar -czvf home_backup.tar.gz --exclude-vcs ~
# Backup with date
tar -czvf backup_$(date +%Y%m%d).tar.gz /data
# Extract single file
tar -xzvf archive.tar.gz path/to/file.txt
# View compressed file content without extracting
tar -xzOf archive.tar.gz path/to/file.txt
# Create archive of files from list
tar -cvf archive.tar -T filelist.txt
# Archive preserving hard links
tar -cvf archive.tar --hard-dereference files/
# Dry run (show what would be done)
tar -cvf /dev/null files/
# Extract overwriting existing files
tar -xvf archive.tar --overwrite
# Extract without overwriting
tar -xvf archive.tar --keep-old-files
# Extract newer files only
tar -xvf archive.tar --keep-newer-files
FILE EXTENSIONS
---------------
.tar Uncompressed tar archive
.tar.gz Gzip compressed (also .tgz)
.tar.bz2 Bzip2 compressed (also .tbz, .tbz2)
.tar.xz XZ compressed (also .txz)
.tar.zst Zstd compressed
.tar.lz Lzip compressed
.tar.lzma LZMA compressed
TROUBLESHOOTING
---------------
# Check archive integrity
gzip -t archive.tar.gz
bzip2 -t archive.tar.bz2
xz -t archive.tar.xz
# Repair truncated gzip archive
gzip -d < archive.tar.gz > recovered.tar 2>/dev/null
# Handle special characters in filenames
tar -cvf archive.tar --format=posix files/
# Verbose error output
tar -cvf archive.tar files/ 2>&1 | tee tar.log
QUICK REFERENCE
---------------
tar -cvf archive.tar files/ # Create
tar -xvf archive.tar # Extract
tar -tvf archive.tar # List
tar -czvf archive.tar.gz files/ # Create + gzip
tar -xzvf archive.tar.gz # Extract gzip
tar -cjvf archive.tar.bz2 files/ # Create + bzip2
tar -xjvf archive.tar.bz2 # Extract bzip2
tar -cJvf archive.tar.xz files/ # Create + xz
tar -xJvf archive.tar.xz # Extract xz
Defensive reference on CyberRamen. Offensive / red-team sheets live on OffensiveRamen.com.