Permissions
為什麼 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/
兩行中的第二行將失敗
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 的任何組合。)
順便說一句,您可以將此錯誤報告給您的 Linux 發行版,他們可能會通過維護更新修復您的 8.21 軟體包。