$ 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
以外のモードを保存しないように指示するにはどうすればよいですか。
または、シンボリックリンク以外の「何も」を保存せずにファイルのリストをコピーするには、どのツールを使用すればよいですか?
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/
Rsyncにはこの特定のsysfsファイルに関して他の問題があるようですが、 検証を無効にするrsyncオプション? を参照してください。
別の厳しい回避策は、各chmod
コマンドの後にすべてのディレクトリをcp
することです。
$ find /tmp/test -type d -exec chmod $(umask -S) {} \;
(上記のfind/chmodコマンドは、既存の権限とumaskのanyの組み合わせに対しても機能しません。)
[〜#〜] btw [〜#〜]このバグをLinuxディストリビューションに報告すると、メンテナンスアップデートによって8.21パッケージが修正される可能性があります。