cp --parents に対するフォルダ権限は、他のファイルのコピーを許可しません。

cp --parents に対するフォルダ権限は、他のファイルのコピーを許可しません。

シナリオ:一般ユーザーが実行するスクリプトを使用して複数のファイルをコピーし、dir構造をコピーしたいと思います。たとえば、

cp --parents /lib/libacl.so /tmp/my_root/
cp --parents /lib/libc.so.6 /tmp/my_root/

予想される結果:まずcp/tmp/my_root/libを作成し、ここにlibacl.soを置きます。 2番目はcplibc.so.6を/tmp/my_root/libに入れます。

問題は、最初のものはcp権限を使用して/tmp/my_root/libを生成するため、dr-xr-xr-x.2番目はcp権限が拒否されて失敗することです。

もちろん、rootでスクリプトを実行すると、すべてがうまく機能します。

1つの回避策は、まずディレクトリを作成してからファイルをコピーして、そのディレクトリに適切な権限を付与することです。しかし、これを行うより良い方法があるかどうか疑問に思います。たぶんいくつかのフラグがありますかcp?その人を確認しましたが、何も見つかりませんでした。

答え1

解決策は見えませんcp。同じ種類のコピーを実行するために使用できrsync、書き込めないディレクトリも作成されますが、lib新しいファイルを追加できます。あなたのコマンドは次のとおりです

rsync -LR /lib/libacl.so /tmp/my_root/
rsync -LR /lib/libc.so.6 /tmp/my_root/

-Rディレクトリ構造を維持します。シンボリックリンクを追加しましたが、-Lそれが多いようですcp。一般的に私たちが望むものではありませんが。-a権限とタイムスタンプ(ルートの場合は所有者/グループ)を保存するために追加できます。

rsync は通常、ネットワーク経由でファイルをコピーするために使用されますが、非常に一般的なコマンドです。


rsyncがない場合は、別のコマンドを使用してファイルをコピーできますが、書き込み可能ディレクトリ、例、tarおよびcpio:

tar cf - /lib/libc.so.6 | tar -C /tmp/my_root/ -xf -

または、chfトレースリンクを使用します。 CPIOの場合:

ls /lib/libc.so.6 | cpio -pd /tmp/my_root/

リンクをたどるには-Lを使用してください。

関連情報