O fato de um arquivo não poder ser removido não depende de as permissões de um arquivo serem definidas como somente leitura, mas das permissões do diretório pai.
Quando você tiver acesso de gravação a um diretório , poderá remover arquivos somente leitura nesse diretório, mesmo que você não possua esses arquivos você mesmo (link ).
# file removal test
(
mkdir -p test
echo hello > test/file.txt
chmod -w test
chmod -w test/file.txt
sudo chown root:wheel test/file.txt
#sudo chflags uchg test/file.txt
ls -ld test test/file.txt
rm -fv test/file.txt
echo
chmod 700 test # set write permission
ls -ld test test/file.txt
rm -fv test/file.txt
)
Se você remover o acesso de gravação ao diretório test
em seu exemplo acima, gnutar
(no Mac OS X) não poderá remover test/1.txt
e reclamar:
# gnutar: ./test/1.txt: Cannot open: File exists
# gnutar: Exiting with failure status due to previous errors
# After
tartest() {
dirperms="$1"
mkdir -p test
[[ -f test/1.txt ]] && chmod +w test/1.txt
echo "Before" > test/1.txt
gnutar -czf ./test.tgz ./test
echo "After" > test/1.txt
chmod -w test/1.txt
chmod "${dirperms}" test
gnutar -xzf ./test.tgz
cat test/1.txt
return 0
}
tartest 755
tartest 555