Tar overwrites read only files

filespermissionsreadonlytar

I created directory test, created file 1.txt in test, wrote 'Before' in this file.
Then I went

cd ..

and used the command:

tar -cvzf ./test.tgz ./test

Then I entered the test dir again. Opened the 1.txt file again. Changed content to "After". I saved the file and changed chmod to read only by executing:

chmod -w ./1.txt

So for now my 1.txt is read only. Then I go up

cd ..

and extract the test.tgz archive.

tar -xvzf ./test.tgz

Then I go again to test dir, do

cat 1.txt

and get "Before".

It is not logical that this happens, since the file was set to be read-only.
Why does it happen?

Best Answer

Tar didn't overwrite the existing read-only file, it removed it and then created a new file with the same name. This is a consequence of the way -x works; it replaces existing versions of a file by design in order to accommodate the old incremental backup method of appending files to an existing archive. A tar archive might have multiple versions of a file in it; only the last one will appear on disk after extraction is completed. A side effect of this is that tar also removes existing copies of files even if they appear only once in the archive.

Related Question