Tar 覆盖只读文件

Jak*_*kub 4 tar permissions files readonly

我创建的目录test,创建的文件1.txttest,该文件中写道:“前”。然后我去了

cd ..
Run Code Online (Sandbox Code Playgroud)

并使用命令:

tar -cvzf ./test.tgz ./test
Run Code Online (Sandbox Code Playgroud)

然后我再次进入测试目录。1.txt再次打开文件。将内容更改为“之后”。我保存了文件并通过执行将 chmod 更改为只读:

chmod -w ./1.txt
Run Code Online (Sandbox Code Playgroud)

所以现在我1.txt是只读的。然后我上去

cd ..
Run Code Online (Sandbox Code Playgroud)

并提取test.tgz存档。

tar -xvzf ./test.tgz
Run Code Online (Sandbox Code Playgroud)

然后我再次去测试目录,做

cat 1.txt
Run Code Online (Sandbox Code Playgroud)

并获得“之前”。

发生这种情况是不合逻辑的,因为文件被设置为只读。为什么会发生?

Kyl*_*nes 7

Tar 没有覆盖现有的只读文件,而是将其删除,然后创建了一个同名的新文件。这是 -x 工作方式的结果;它通过设计替换文件的现有版本,以适应将文件附加到现有存档的旧增量备份方法。一个 tar 档案中可能有一个文件的多个版本;提取完成后,只有最后一个会出现在磁盘上。这样做的一个副作用是 tar 还会删除文件的现有副本,即使它们在存档中只出现一次。