Есть ли способ войти в однопользовательский режим без перезагрузки?

8

Как и в old-days-UNIX, когда вы можете просто отправить команду, initи вы смотрите на черный текстовый экран с оболочкой для собственного использования. ;)

poige
источник
После многих часов тестирования с использованием различных версий OS X / macOS с 10.11.6 по 10.14.2, с включенным SIP и без него, на разных физических и виртуальных машинах не один раз из нескольких десятков раз sudo launchctl reboot userspace -sформировалось успешное и пригодное для использования пространство пользователя. перезагрузка! Проще говоря, независимо от источника документации, вышеупомянутая команда не работала и не работает, и поэтому, несмотря на тот факт, что ответ на этот вопрос был принят, тем не менее, я не нашел ее работоспособной и является причиной моего отрицательного ответа.
user3439894
В моем ответе указано, что именно «проверено на El Captian», где это работает. Ответ сейчас сильно отредактирован, но его все еще можно найти в его истории изменений. Проще говоря, я не говорил, что это сработает во всем остальном
poige
1
Я тестировал под Эль-Капитаном, а также в Сьерре, Хай-Сьерре и Мохаве. Ни в одном случае не sudo launchctl reboot userspace -sудалось выполнить успешную и полезную перезагрузку пользовательского пространства из Терминала в графическом интерфейсе! Пожалуйста, уважайте, что я не только потратил много времени, энергии и усилий, но и выразил вескую причину моего отрицательного голоса, на который, конечно, я не обязан это делать. Тот факт, что на трех разных системах Apple, MacBook Pro, iMac и MacBook Air, работающих под управлением El Capitan и более поздних версий, не работал для меня, как указано здесь или в документации! AFAIC Для меня конец истории.
user3439894
Работал на меня. Здесь: 15.6.0 x86_64 root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64. О каком уважении ты говоришь? :) Или если вы говорите об уважении, то где ваше уважение к моим словам? :)
poige
Отредактированный ответ. Думая о записи видео и загрузки его на YouTube. ;)
poige

Ответы:

5

В зависимости от ваших потребностей, попробуйте изменить окно входа в систему, чтобы запросить имя пользователя, а затем введите > console в качестве пользователя.

Вероятно, это было удалено в 10.10, поэтому вам нужно будет загрузиться для восстановления или ssh или использовать приложение терминала, если этот устаревший тип инициализации не тот, который вы ищете.

Кроме того, это не настоящий однопользовательский режим root, который должен происходить в начале процесса загрузки на современных macOS.

bmike
источник
Кажется, я нашел реальный ответ на свой вопрос. Будет проверять и отвечать
poige
@poige Я, конечно, не могу заставить его работать на Мохаве (но я не связывался с написанием значений по умолчанию). Не стесняйтесь редактировать мой ответ, чтобы сделать его именно тем, что вы хотите, или самостоятельно отвечать, если более чистый ответ лучше, когда вы тестируете ,
bmike
> Нет документированного способа перехода с загруженной ОС в однопользовательский режим без перезагрузки. это ложное утверждение.
Poige
Привет @poige, может быть, есть путаница, что такое однопользовательский режим. Один человек проголосовал за ваш ответ, а 5 - за. Не стесняйтесь сделать новый ответ, если у вас есть что-то еще, чтобы добавить? В этой Википедии упоминается, что однопользовательский режим в macOS происходит только перед загрузкой, так что я открыт для вас, если я имею в виду то, что вы считаете однопользовательским. Дайте мне знать, если я могу помочь
bmike
3

теория

В двух словах, есть документированный man launchctlспособ выполнения такого перехода в одиночный режим без перезагрузки ядра. Его можно развернуть, например, из окна терминала с помощью команды SHELL:

sudo launchctl reboot userspace -s

практика

Эль Капитан

Я тестировал его в El Capitan на Macbook Air 2015, где он работал. Но у меня также есть сообщение от пользователя, что его попытки на Эль-Капитане были безуспешными. Единственное различие, о котором я могу думать, - это Retina, которая требует другого графического режима или некоторого такого. У меня нет Macbook с Retina, работающей под управлением El Capitan, поэтому пока я не могу больше ничего сказать в поддержку такой версии.

Высокая Сьерра, Мохаве

Мои попытки с High Sierra показали, что эта функциональность больше не работает (по сравнению с El Capitan). Опять же, может быть, это из-за Retina, это не ясно. Мохаве тоже не работает.


Тщательное объяснение со стороны участника¹

Существует способ вернуться в однопользовательский режим из запущенного и запущенного 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 -sв Терминале, а система может быть полностью перезагружена в однопользовательском режиме с помощью команды sudo launchctl reboot system -s.


1 - Предоставлено @ nohillside

poige
источник