gpt4 book ai didi

tar - 'tar --overwrite'实际做什么(或不做什么)?

转载 作者:行者123 更新时间:2023-12-04 17:15:19 27 4
gpt4 key购买 nike

我看到Linux tar有一个选项--overwrite。但是覆盖似乎是默认设置。而且,指定tar --no-overwrite不会更改此行为,因为信息文件似乎暗示了这一点。

那么,该选项实际上是做什么的呢?

我用

ls -l >junk
ls -l junk
tar -cf junk.tar junk
>junk
ls -l junk
tar <option?> -xf junk.tar # option varies, results do not
ls -l junk

最佳答案

有一些微妙之处,但总的来说,有一些区别:

默认情况下,“tar”尝试打开带有O_CREAT | O_EXCL标志的输出文件。如果该文件存在,则将失败,此后,“tar”将重试,方法是先尝试删除现有文件,然后使用相同的标志重新打开(即创建一个新文件)。

相反,使用--overwrite选项,“tar”会尝试使用O_CREAT | O_TRUNC标志打开输出文件。如果文件存在,它将被截断为零大小并被覆盖。

主要含义是默认情况下,“tar”将删除并重新创建现有文件,因此它们将获得新的inode编号。使用--overwrite, inode 号不会改变:

$ ls -li foo
total 0
5360222 -rw-rw-r-- 1 buhr buhr 0 Jun 26 15:16 bar
$ tar -cf foo.tar foo
$ tar -xf foo.tar # inode will change
$ ls -li foo
total 0
5360224 -rw-rw-r-- 1 buhr buhr 0 Jun 26 15:16 bar
$ tar --overwrite -xf foo.tar # inode won't change
$ ls -li foo
total 0
5360224 -rw-rw-r-- 1 buhr buhr 0 Jun 26 15:16 bar
$

这也意味着,对于每个被覆盖的文件,默认情况下,“tar”将需要三个系统调用( openunlinkopen),而 --overwrite仅需要一个系统调用(带截断的 open)。

关于tar - 'tar --overwrite'实际做什么(或不做什么)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51050502/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com