cp --no-preserve=mode 保存モードを使用するのはなぜですか?代替ツールを使用できますか?

cp --no-preserve=mode 保存モードを使用するのはなぜですか?代替ツールを使用できますか?
$ cp --no-preserve=mode --parents /sys/power/state /tmp/test/
$ cp --no-preserve=mode --parents /sys/bus/cpu/drivers_autoprobe /tmp/test/

2行のうち2行目は失敗します。

cp: cannot make directory ‘/tmp/test/sys/bus’: Permission denied

その理由は、/tmp/test/sys書き込み権限なしで作成されたためです(元と同じ/sys)。一般の人はmkdir /tmp/test/sys2これを行いません。

$ ls -la /tmp/test/
total 32
drwxr-xr-x  3 robert.siemer domain^users  4096 Oct 11 13:56 .
drwxrwxrwt 13 root          root         20480 Oct 11 13:56 ..
dr-xr-xr-x  3 robert.siemer domain^users  4096 Oct 11 13:56 sys
drwxr-xr-x  2 robert.siemer domain^users  4096 Oct 11 13:59 sys2

cpモードが維持されないようにどのように指示できますか?それ以外--no-preserve=modeは私の考えのように動作しません...?

または、シンボリックリンク以外の「何も」維持せずにファイルリストをコピーするには、どのツールを使用する必要がありますか?

ベストアンサー1

GNU coreutilsを使用している場合。これはバグで、バージョン8.26で修正されました。

https://lists.gnu.org/archive/html/bug-coreutils/2016-08/msg00016.html

だから代替ツールは最新のcoreutilsまたは、たとえば、rsync権限が保存されている場合でも、次のようにします。

$ rsync -a --relative  /sys/power/state /tmp/test
$ rsync -a --relative  /sys/bus/cpu/drivers_autoprobe /tmp/test/

この特定のsysfsファイルにrsyncに関連する他の問題があることがわかりましたが、以下を参照してください。 検証を無効にするrsyncオプションはありますか?

もう1つの大胆な回避策は、chmod各コマンドの後にすべてのディレクトリを実行することですcp

$ find /tmp/test -type d -exec chmod $(umask -S) {} \;

(上記のfind / chmodコマンドは以下にも適用されません。どの既存の権限とumaskの組み合わせです。 )

ところでこのバグをLinuxディストリビューションに報告すると、メンテナンスアップデートを使用して8.21パッケージを修正できます。

おすすめ記事