是否有进入不重启单用户模式的方法?


8

与old-days-UNIX一样,当您只需向其发送命令时init,您就会盯着带有外壳的黑色文本屏幕供自己使用。;)


在使用从10.11.6到10.14.2的各种版本的OS X / macOS进行了数小时的测试之后,启用和不启用SIP,不同的物理和虚拟机,数十次中只有一次没有sudo launchctl reboot userspace -s形成成功和可用的用户空间。重启!简而言之,无论文档的来源如何,上述命令均无效,并且不起作用,因此,无论该问题的答案是否被接受,我都认为它没有用,这是我投反对票的原因。
user3439894'1

我的回答恰好是“在El Captian上测试过的”,它在这里工作。答案已被大量编辑,但仍可以在其修订历史中找到。简而言之,我没有说它会在其他任何方面起作用
poige

1
我在El Capitan以及Sierra,High Sierra和Mojave下进行了测试。在sudo launchctl reboot userspace -s使用GUI的情况下,绝不会从终端预执行成功且可用的用户空间重启!请尊重,我不仅花费了大量的时间,精力和精力,而且还表达了我拒绝投票的正当理由,当然我没有义务这样做。在运行El Capitan及更高版本的三种不同的Apple系统(MacBook Pro,iMac和MacBook Air)上,它对我不起作用,如此处或文档中所宣传!非洲对我来说,故事的结尾。
user3439894'1

为我工作。这里:15.6.0 x86_64 root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64。你在说什么尊重 :)或者,如果您谈论尊重,您对我的话语的尊重在哪里?:)
poige

编辑答案。考虑视频录制并将其上传到youtube。;)
poige

Answers:


5

根据您的需要,尝试更改登录窗口以询问用户名,然后输入> console作为用户。

可能在10.10时已将其删除,因此,如果您不希望使用此旧式初始化类型旁路,则需要启动以进行恢复或ssh或使用终端应用程序。

另外,这不是真正的root单用户模式,需要在现代macOS的启动过程的早期进行。


看来我已经找到了问题的真正答案。将检查并回复
poige

@poige我当然不能在Mojave上使用它(但是我没有弄乱默认设置。)请随意编辑我的答案以使其完全符合您的要求,或者如果您测试后获得最佳答案,则可以自行回答。
bmike


>没有记录的方法可以在不重新引导的情况下从引导的操作系统过渡到单用户模式。这是错误的主张。
poige

嗨,@ poige,也许有一个单一用户模式的困惑。1个人赞成您的回答,5个人反对。如果您要添加其他内容,请随时提出新的答案?维基百科提到,macOS上的单用户模式仅在预引导时发生,因此我向您开放的含义与我对单用户的含义有所不同。让我知道我是否可以帮忙
bmike

3

理论

简而言之,有一种记录在案的man launchctl方式可以完成无内核重启的单模式切换。例如,可以使用SHELL命令从“终端”窗口进行部署:

sudo launchctl reboot userspace -s

实践

埃尔卡皮坦

我在工作于Macbook Air 2015的El Capitan上对其进行了测试。但是我也收到用户的报告说,他对El Capitan的尝试虽然没有成功。我能想到的唯一区别是Retina,它需要不同的图形模式或类似的模式。我没有Macbook,而Retina运行的是El Capitan,因此暂时我无法说出更多支持该版本的信息。

莫哈韦高山脉

我对High Sierra的尝试表明该功能不再起作用(与El Capitan相比)。再说一次,可能是由于视网膜引起的,目前尚不清楚。莫哈韦沙漠(Mojave)也不起作用。


贡献者的详尽解释¹

有一种方法可以从运行中的macOS恢复到单用户模式,而无需通过运行完全重启

sudo launchctl reboot userspace -s

这将仅重新启动macOS的用户空间部分,而无需重新启动Darwin内核,这等效于更改旧版UNIX上的运行级别。

有关更多详细信息,请参见man launchctl

reboot [system|userspace|halt|logout|apps|reroot ]
    Instructs launchd to begin tearing down userspace. With no argu-
    ment given or with the system argument given, launchd will make
    the reboot(2) system call when userspace has been completely
    torn down. With the halt argument given, launchd will make the
    reboot(2) system call when userspace has been completely torn
    down and pass the RB_HALT flag, halting the system and not ini-
    tiating a reboot.

    With the userspace argument given, launchd will re-exec itself
    when userspace has been torn down and bring userspace back up.
    This is useful for rebooting the system quickly under conditions
    where kernel data structures or hardware do not need to be re-
    initialized.

    -s       When rebooting the machine (either a full reboot or
             userspace reboot), brings the subsequent boot session
             up in single-user mode.

这意味着在技术层面sudo launchctl reboot userspace -s上不会调用reboot(2),因此提供了一种无需重启即可切换到单用户模式的方法。

维基百科上有关单用户模式的文章还说:

在OS X El Capitan和更高版本的macOS中,可以使用sudo launchctl reboot userspace -sTerminal中的命令将模式转换为单用户模式,并可以使用Command以单用户模式完全重启系统sudo launchctl reboot system -s


1 —由@ nohillside提供

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.