Anders Tall

tar basics: create, extract, and verify archives

3 min read

tar is the classic place to start on Linux when you want to move, copy, or back up data. But most people learn it as “a one-liner they happen to have in their notes”. This is the basics: the simple, foundational pieces everything else builds on. The written version of the tar basics video series — what the commands do, why, and how to prove the result actually works.

One file in, one file out

The simplest thing tar can do, proven end to end: put one file into an archive, take the same file back out — a full round-trip.

mkdir -p /tmp/pilot && echo 'hello world' > /tmp/pilot/notes.txt
tar -czf /tmp/pilot/notes.tar.gz -C /tmp/pilot notes.txt
mkdir -p /tmp/pilot/restored
tar -xzf /tmp/pilot/notes.tar.gz -C /tmp/pilot/restored
cat /tmp/pilot/restored/notes.txt      # -> hello world

Extracting into a separate directory is the whole point: the archive holds a copy, so unpacking it somewhere else and getting the file back proves the round-trip really works.

The -C flag deserves the credit: it changes directory first, so the archive stores notes.txt — not a house of nested paths you have to climb through to restore.

The flags, decoded

Stop memorizing one-liners. Each letter is one job:

A small archive to inspect:

mkdir -p /tmp/pilot2 && echo data > /tmp/pilot2/a.txt
tar -czf /tmp/pilot2/out.tar.gz -C /tmp/pilot2 a.txt
tar -tf /tmp/pilot2/out.tar.gz                # list contents
gzip -t /tmp/pilot2/out.tar.gz && echo OK     # compression stream OK
tar -tzvf /tmp/pilot2/out.tar.gz              # verbose listing

-t lists without touching the filesystem; gzip -t checks the compression layer, which is separate from tar’s own format. -v turns every listing into per-file detail.

A backup you can prove

A backup you haven’t tested isn’t a backup. Archive a project, skip a junk cache folder on purpose, restore elsewhere, then prove the restore matches the original:

mkdir -p /tmp/project/{src,cache} && echo code > /tmp/project/src/app.py
echo junk > /tmp/project/cache/tmp.bin
tar -czf /tmp/project-backup.tar.gz --exclude=cache -C /tmp/project .
mkdir -p /tmp/restored-project
tar -xzf /tmp/project-backup.tar.gz -C /tmp/restored-project
diff -r /tmp/project/src /tmp/restored-project/src && echo RESTORE-OK

--exclude=cache leaves the junk outside the archive; diff -r is the real test. Byte-for-byte identical — or it didn’t work.

The rule behind the videos

Every command in the tar basics series was run for real, on a throwaway box, before it went into a video. Anything that teaches broken commands destroys trust instantly. Before you rely on any of this from memory, run it once yourself and watch it do what you expect.

Watch the videos:

#tar #tar.gz #backup #linux #terminal #self-hosting