Baeldung Pro – Linux – NPI EA (cat = Baeldung on Linux)
announcement - icon

Learn through the super-clean Baeldung Pro experience:

>> Membership and Baeldung Pro.

No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.

Partner – Orkes – NPI EA (tag=Kubernetes)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

1. Introduction

The ubiquitous Linux tar command has many features. Part of them are explicit and may add complex functions, while others are implicit and are there to protect the user.

In this tutorial, we discuss a tar warning message about leading slashes and absolute paths. First, we check the default extraction mode. After that, we turn to leading slashes and how tar handles them. Finally, we check ways to force absolute paths when using tar.

For brevity, we only discuss the latest GNU tar implementation available as a package in Debian.

We tested the code in this tutorial on Debian 11 (Bullseye) with GNU Bash 5.1.4 and GNU tar 1.34. It should work in most POSIX-compliant environments.

2. Archive Extraction and Paths

As an archiving solution, tar enables us to extract a given archive to the current path with its –extract or -x option:

$ tar -xvf archive.tar
data/
data/subdir/
data/subdir/file

In addition, we use –file or -f to supply the archive path as archive.tar and –verbose or -v to show the extracted files.

Notably, all extracted paths above begin with a directory name and not a leading / slash, i.e., they are relative, not absolute. This means the resulting data ends up below the current directory.

Now, we can check what the archive contains:

$ tar -tf archive.tar
data/
data/subdir/
data/subdir/file

Again, the –list or -t option shows only relative paths.

3. Leading Slashes

Let’s see how we created archive.tar in the first place:

$ tar -cvf archive.tar /data/
tar: Removing leading `/' from member names
/data/
/data/subdir/
/data/subdir/file

Here, we see the leading slashes in all archived paths. However, we can also notice a stderr message about the removal of these leading slashes.

Actually, this warning is critical, as it shows what a hardcoded feature of tar produces: by default, absolute paths are converted to relative paths when archiving.

So, when we extract, we get the files under our current path instead of at their original locations.

4. Using Absolute Paths

To preserve the absolute paths of archive members, we can use the –absolute-names or -P option when creating archive-abs.tar:

$ tar -cPvf archive-abs.tar /data/
/data/
/data/subdir/
/data/subdir/file

Notably, with -P we don’t get the tar: Removing leading `/’ from member names warning.

Let’s verify the contents of archive-abs.tar:

$ tar -tf archive-abs.tar
tar: Removing leading `/' from member names
/data/
/data/subdir/
/data/subdir/file

Unlike before, we see the leading slashes. However, the message from earlier has reappeared. In fact, this is another safety precaution, preventing us from operating with archive members as absolute paths. Even a simple listing triggers the warning.

To force tar to work with the absolute paths after creating an archive with such, we again use the –absolute-paths or -P flag. Let’s see an example with extraction:

$ tar -xPvf archive-abs.tar
/data/
/data/subdir/
/data/subdir/file

Thus, the archive has been extracted into the data directory at the / root of the filesystem without warnings. Critically, the behavior can cause unexpected data loss when involving system paths like /home, /dev, /opt, and others.

5. Summary

In this article, we explored leading slashes and absolute paths, as well as their consequences when using tar.

In conclusion, due to the potentially serious consequences of using absolute paths, tar automatically prevents this behavior unless explicitly requested.