在 root 下复制文件在 OS X El Capitan 10.11 中失败
copying file under root got failed in OS X El Capitan 10.11
我正在尝试将根文件下的文件复制到 /System 文件夹中。它适用于所有以前的 OS X 版本,但不适用于 El Capitan 10.11
这里是我如何在终端的根目录下复制文件:
MACMINI:~ myusername$ sudo su -
MACMINI:~ root# cp /Users/myusername/Desktop/myfile.plist /System/Library/LaunchDaemons/
结果我收到一个错误:
cp: /System/Library/LaunchDaemons/myfile.plist: Operation not permitted
El Capitan 现在以 "rootless" 模式保护某些系统目录(a.k.a。系统完整性保护)。如果你 运行 命令 ls -lO /System/Library/LaunchDaemons
你会看到下面的目录和文件现在被标记为 "restricted."
您可以像这样禁用无根模式:
- 重启进入恢复模式(重启并按住 Cmd-R)
- 打开一个终端
- 使用这个命令:
csrutil disable
- 重新启动并运行 El Capitan 之前有效的命令
完成后,强烈建议您按照相同的步骤重新启用 SIP,但在步骤 3 中使用 csrutil enable
。
我 运行 在尝试安装 pear/pecl 模块和 macports/homebrew 应用程序时遇到了具有相同根本原因的问题。那些通常需要将文件安装到 /usr/include 和 /usr/lib,现在也受到限制。
注意:Internet 上有关此问题的先前答案为您提供了修改 NVRAM 设置的说明,但 Apple 表示 NVRAM 方法将停止使用 El Capitan 的 public 版本。 GM 版本已经禁用了 NVRAM 解决方法,因此此答案应该可以为您提供前进所需的内容。
更新:同样的方法适用于 macOS Sierra,并且在可预见的未来可能适用于新的 macOS 版本。
另一项更新!
看起来 Catalina 想把我们弄进去。他们把我之前被迫去的所有文件都移到了 Linux 必须去的地方:
他们留下了这个有趣的通知:
我有点想知道我现在用的是谁的电脑。
无论如何,我认为过去需要此解决方法的大多数工具(如 brew 和 PEAR)都已适应。我真的不知道,因为让 macOS 的行为 100% 像 Linux 已经变得愚蠢了,所以当我需要命令行 Linux 东西时我使用虚拟机。
此变通办法对 Catalina 仍然有效。我没试过。我不会为了研究而这样做,但如果我需要试一试,我会回来报告。
考虑到某些系统目录在 OS X 10.11 (El Capitan) 下根本无法被写入(即使使用 root),除非安全措施被禁用(参见 Chris Ostmo 的回答) 完全不使用自定义系统黑客修改这些目录显然是个好主意。
自己的 LaunchDaemons 应该安装到:
/Library/LaunchDaemons/
(不是/System/Library/LaunchDaemons/)
否,但如果您使用 El Captain 的第二个副本来启动您的系统,例如:
从之前安装在 USB 密钥上的 El Captain 启动,然后您可以执行此操作
cd /Volumes/Usb-Drive
然后要在 finder 中显示目录,请执行以下操作:
sudo chflags nohidden usr
然后用鼠标复制文件,拖放到finder中。
我正在尝试将根文件下的文件复制到 /System 文件夹中。它适用于所有以前的 OS X 版本,但不适用于 El Capitan 10.11
这里是我如何在终端的根目录下复制文件:
MACMINI:~ myusername$ sudo su -
MACMINI:~ root# cp /Users/myusername/Desktop/myfile.plist /System/Library/LaunchDaemons/
结果我收到一个错误:
cp: /System/Library/LaunchDaemons/myfile.plist: Operation not permitted
El Capitan 现在以 "rootless" 模式保护某些系统目录(a.k.a。系统完整性保护)。如果你 运行 命令 ls -lO /System/Library/LaunchDaemons
你会看到下面的目录和文件现在被标记为 "restricted."
您可以像这样禁用无根模式:
- 重启进入恢复模式(重启并按住 Cmd-R)
- 打开一个终端
- 使用这个命令:
csrutil disable
- 重新启动并运行 El Capitan 之前有效的命令
完成后,强烈建议您按照相同的步骤重新启用 SIP,但在步骤 3 中使用 csrutil enable
。
我 运行 在尝试安装 pear/pecl 模块和 macports/homebrew 应用程序时遇到了具有相同根本原因的问题。那些通常需要将文件安装到 /usr/include 和 /usr/lib,现在也受到限制。
注意:Internet 上有关此问题的先前答案为您提供了修改 NVRAM 设置的说明,但 Apple 表示 NVRAM 方法将停止使用 El Capitan 的 public 版本。 GM 版本已经禁用了 NVRAM 解决方法,因此此答案应该可以为您提供前进所需的内容。
更新:同样的方法适用于 macOS Sierra,并且在可预见的未来可能适用于新的 macOS 版本。
另一项更新!
看起来 Catalina 想把我们弄进去。他们把我之前被迫去的所有文件都移到了 Linux 必须去的地方:
他们留下了这个有趣的通知:
无论如何,我认为过去需要此解决方法的大多数工具(如 brew 和 PEAR)都已适应。我真的不知道,因为让 macOS 的行为 100% 像 Linux 已经变得愚蠢了,所以当我需要命令行 Linux 东西时我使用虚拟机。
此变通办法对 Catalina 仍然有效。我没试过。我不会为了研究而这样做,但如果我需要试一试,我会回来报告。
考虑到某些系统目录在 OS X 10.11 (El Capitan) 下根本无法被写入(即使使用 root),除非安全措施被禁用(参见 Chris Ostmo 的回答) 完全不使用自定义系统黑客修改这些目录显然是个好主意。
自己的 LaunchDaemons 应该安装到:
/Library/LaunchDaemons/
(不是/System/Library/LaunchDaemons/)
否,但如果您使用 El Captain 的第二个副本来启动您的系统,例如:
从之前安装在 USB 密钥上的 El Captain 启动,然后您可以执行此操作
cd /Volumes/Usb-Drive
然后要在 finder 中显示目录,请执行以下操作:
sudo chflags nohidden usr
然后用鼠标复制文件,拖放到finder中。