tarアーカイブをrootとして抽出し、意図的に一部のターゲットファイルをアーカイブコンテンツで上書きする特定のユースケースがあります。これはすべて大丈夫で実装が簡単ですが、元のターゲットファイルの元の所有権と権限も維持したいと思います。たとえば、
$ touch file && tar cf test.tar.gz file && sudo chown www-data:www-data file && sudo tar xf test.tar.gz && ls -l file -rw-r--r-- 1 tim tim 0 May 1 11:26 file
ここでは、自分のユーザー()でファイルを作成し、tim:tim
それをアーカイブし、所有権を変更してwww-data:www-data
から(ルートとして)アーカイブを抽出して元のファイルを上書きします。ご覧のとおり、所有権は事前にアーカイブされた状態のファイル所有権に変更されていますが、抽出後はwww-data:www-data
.
マニュアルページをかなり詳しく見てみましたが、tar
私が望むことをすぐに達成するための確実な方法が見つかりません。私は何を逃したことがありませんか?
答え1
一般ユーザーはwww-dataが所有するファイルを上書きすることはできず、所有者は書き込み権限のみを持っているため、目的の内容はこの例では機能しません。
ユーザーがこれらのファイルに書き込むことができる場合を使用すると効果的です--overwrite
。ただし、tar
ファイルの変更時間と権限を変更しようとすると、通常のユーザーとして書き込みが許可されないため、エラーが発生します。あなたに属していないファイルはこれを行います。