Невозможно загрузиться в Ubuntu, появляется мигающий белый курсор
Я очень волнуюсь - поскольку мне действительно нужно восстановить свою Ubuntu - и потратил столько времени на попытки исправить это.
По сути, я просто следил за лабораторией для своего класса безопасности и столкнулся с этой проблемой.
ОК, поэтому я следовал этим командам:
cd /bin
rm sh
ln -s /bin/zsh /bin/sh
Затем, когда я открыл новый терминал, это дало какую-то ошибку. Итак, я думал, что это исчезнет после перезапуска моей системы.
Но, к моему несчастью, моя система больше не могла загружаться.
Сначала он открывает менеджер загрузки grub2, затем, когда я нажимаю Enter на Ubuntu, он загружается в черный экран с мигающим курсором в левом верхнем углу.
У меня много работы и вся моя среда программирования для работы и учебы в этой системе.
2 ответа
Я не думаю, что это может привести к невозможности загрузки, но вы можете вернуться к старому sh, выполнив это, поскольку / bin / sh в любом случае является просто символической ссылкой на / bin / dash...
Загрузка, пока вы не получите мигающий курсор, затем нажмите Ctrl+Alt+F2, чтобы получить терминал, затем выполните
cd /bin
sudo rm sh # if this fails then just go to next
sudo ln -s dash sh
Тогда можно перезагрузить (sudo reboot
)
Редактировать: для любого в будущем, если вы не можете получить доступ к приглашению оболочки при загрузке, нажав Ctrl+Alt+F2, вы можете сделать одно из следующего:
Вариант 1: загрузите live cd и нажмите try, затем откройте терминал и выполните
sudo mount /dev/sda1 /mnt #replace sda1 with whatever drive/partition your install is on
cd /mnt/bin
sudo rm sh #if this fails then just go to next
sudo ln -s dash sh
Вариант 2: загрузите live cd и нажмите try, затем откройте терминал и выполните
sudo mount /dev/sda1 /mnt #replace sda1 with whatever drive/partition your install is on
sudo chroot /mnt
cd /bin
rm sh # if this fails then just go to next
ln -s dash sh
Тогда можно перезагрузить (sudo reboot
)
Это должно вернуться к папке по умолчанию sh.
источник: /questions/724689/kak-zamenit-ispravit-isporchennyie-binsh-i-bindash/724704#724704
Не удивительно, что /bin/sh
символическая ссылка на /bin/zsh
вызвал проблемы, так как /bin/zsh
часто не существует Я подозреваю зш не был установлен, и именно поэтому все сломалось. Это кажется особенно вероятным 2, если ошибка, которую вы видели на новом терминале, была:
bash: /usr/bin/lesspipe: /bin/sh: bad interpreter: No such file or directory
Изготовление /bin/sh
ссылка на dash
Опять-таки (как это принято в Ubuntu по умолчанию) обычно это подходящее решение - и в вашем случае, поскольку ваша цель - восстановить вашу систему так, как она была раньше, это, безусловно, правильный путь. Это может быть достигнуто путем загрузки с живого носителя, как представлено в отличном ответе Термна 1, и другими способами.
Но если по какой-то странной причине вы захотите использовать zsh
вместо dash
за /bin/sh
в Ubuntu этого можно достичь, но не совсем так, как вы пытались.
Восстановление sh
→ dash
Без живой среды
Я думаю, что использование live CD/DVD/USB - это лучшее решение этой проблемы, потому что оно менее техническое, чем другие, и, скорее всего, без проблем преуспеет.
Но если вы хотите исправить это, просто загрузившись с жесткого диска, вы можете.
Это несколько менее долго и сложно, чем может показаться на первый взгляд, так как большая часть длины связана с (а) представлением двух альтернатив и (б) скриншотами.
Сначала выключите или перезагрузите компьютер (если можете).
Это относится ко всем решениям, а не только к тем, которые пытаются решить проблему при загрузке с внутреннего жесткого диска. Но это, вероятно, не большая проблема, если вы этого не сделали.
В зависимости от того, насколько сильно сломаны вещи, Ctrl + Alt + Delete может не завершиться успешно и перезагрузить вашу систему Ubuntu. (Обычно это происходит при нажатии в текстовой виртуальной консоли.)
Если Ctrl + Alt + Delete не работает, используйте:
- Alt + SysRq + R E I S U B для повторного вызова, или
- Alt + SysRq + R E I S U O для включения O ff.
Так как проблемы вызваны пропажей /bin/sh
не должно вызывать сбоев глубоко в ядре, я думаю, что эти "магические методы SysRq" всегда будут работать в этой ситуации.
init=/bin/dash
Должно сработать
Удерживайте нажатой клавишу Shift во время загрузки, чтобы открыть меню GRUB.
В целом он должен напоминать этот снимок экрана, но можно ожидать, что он будет выглядеть по-разному в зависимости от того, какую версию Ubuntu вы используете."Ubuntu" выбран по умолчанию. Оставьте этот выбор, но нажмите e, чтобы отредактировать его.
(Не волнуйтесь, ваши правки предназначены только для этой загрузки и не будут сохранены.)Перейти к концу строки, которая начинается
linux /boot/vmlinuz-...
, (Вы можете использовать клавиши со стрелками и End, чтобы добраться до конца строки.)Введите пробел, затем
init=/bin/dash
, Затем нажмите F10 для загрузки этой конфигурации.Источник: Как установить NOMODESET и другие параметры загрузки ядра в grub2
Тебе следует увидеть:
/bin/dash: 0: can't access tty: job control turned off #
Это корневая оболочка.
Переустановите readwrite корневой файловой системы, чтобы вы могли вносить изменения в файлы на диске:
mount -o remount,rw /
Эта команда и те, которые следуют за ней, (как правило) не будут производить никакого вывода, когда они будут выполнены. Это нормально.
Делать
/bin/sh
символическая ссылка наdash
вместоzsh
:cd /bin rm sh ln -s dash sh
Если вам нравится, вы можете проверить, что
sh
символическая ссылка была правильно перенастроена путем запускаls -l sh
, который должен показать что-то вроде:lrwxrwxrwx 1 root root 4 Oct 2 23:13 sh -> dash
(
sh -> dash
это ключевая часть.)Перезапустите с
reboot -f
, Ваша система должна быть исправлена.
Альтернативный способ: режим восстановления может работать. Может быть.
Для режима восстановления возможно функционирование без sh
, Я не получил это, чтобы работать сам и на самом деле не знаю, будет ли это когда-нибудь - я получил Ubuntu для нормальной загрузки (без графического интерфейса) с sh
как сломанная символическая ссылка, но это перестало работать для меня, прежде чем я попробовал режим восстановления (который не работал для меня тоже).
Для более надежного пути вернитесь к init=/bin/dash
Должен работать. (Обратите внимание, что режим восстановления вообще не является ненадежным, просто нельзя ожидать, что он будет работать без /bin/sh
.)
Если вы хотите попробовать режим восстановления:
Чтобы войти в режим восстановления, зажмите Shift во время загрузки, чтобы открыть меню GRUB.
Выберите Дополнительные параметры для Ubuntu.
В меню доступных ядер нажмите ↓, чтобы переместить выбор к записи, заканчивающейся на
(recovery mode)
и нажмите Enter.Если это не сработает, вы можете перезагрузиться с помощью "magic SysRq", как описано выше. Если это сработает, вы увидите меню восстановления.
В Меню восстановления нажимайте ↓ несколько раз, пока
root Drop to root shell prompt
выбран. Нажмите Enter.
Выполните шаги 5 и 6 (и необязательный шаг 7, если хотите) из
init=/bin/dash
Должен работать метод выше.Бежать
reboot
Заново.Вы могли бы, вероятно, бежать
exit
, затем выберите Продолжить. Но вместо этого я предлагаю перезагрузку, чтобы система могла загружаться чисто с доступным и работоспособнымsh
с самого начала. (Если вам удалось войти в режим восстановления сsh
как прерванная символическая ссылка, это еще не значит, что все работало просто по пути.)
Если вы заинтересованы в создании zsh
предоставлять sh
(или на самом деле, или просто теоретически), читайте дальше.
Проблемы с sh
→ zsh
Процедура, которую вы пытались
Как общая процедура, cd /bin; rm sh; ln -s /bin/zsh /bin/sh
(как предписано в вашей лабораторной работе) - плохой совет по крайней мере по двум причинам:
/bin/zsh
иногда не существует, даже еслиzsh
установлено. Это зависит от того, как оно было установлено и какая ОС используется.zsh
большая, сложная оболочка, которая не очень часто используется в качестве/bin/sh
и, таким образом, обычно не требуется быть доступным в однопользовательском режиме или каким-либо другим образом перед отдельным/usr
раздел может быть установлен. Исполняемые файлы, которые не нужны в однопользовательском режиме, обычно находятся в подкаталогах/usr
,Убунту
zsh
действительно обеспечивает/bin/sh
, Но в других системах это может быть/usr/bin/zsh
или даже/usr/local/bin/sh
(как в моей системе FreeBSD, где он установлен черезpkg
).Мотивация этого упражнения, возможно, заключалась в том, чтобы укрепить систему против "Shellshock" (или других возможных ошибок разбора, возникающих в процессе
bash
принимает функции оболочки, переданные в переменных среды). Но это не очень подходящий курс действий для этой цели.Хотя многие системы GNU/Linux, такие как Fedora, RHEL и Slackware, имеют
bash
предоставлять/bin/sh
во многих других оболочке/bin/sh
, Это включает в себя Ubuntu, который используетdash
, подобноzsh
,dash
не уязвим для "Shellshock" и не импортирует определения функций из переменных среды (или вообще) с использованием какого-либо механизма, поэтому подобная ошибка вряд ли повлияет на него.
Поэтому, в зависимости от контекста, это упражнение в том виде, в котором оно было вам представлено, могло быть ошибочным. Вы можете обсудить этот вопрос со своим профессором. Возможно, учебная программа или способ ее передачи могут быть улучшены.
В зависимости (даже в большей степени) от контекста эти соображения могут также вызывать беспокойство:
Часто,
sh
является символической ссылкой, жесткой ссылкой или копией другой установленной оболочки. Но в некоторых системах, особенно в некоторых Unix-подобных системах, которые не являются системами GNU/Linux,sh
может быть отдельным исполняемым файлом из всего остального. За исключением случаев, когда известно, что это не так, рекомендуется проверить, прежде чемrm
это!mv
В этом случае может быть более подходящим.Упражнения, которые изменяют конфигурацию системы, особенно те, которые требуют выполнения команд от имени root для выполнения необычных действий, обычно не должны выполняться на рабочих машинах. Эксперименты и исследования являются практически необходимыми и ценными. Но когда они могут привести к поломке, их лучше всего выполнять на установках, непрерывное функционирование которых не является существенным для важной работы, которую необходимо выполнить.
Другими словами, это хорошо, чтобы проверить вещи перед их развертыванием "по-настоящему". (Виртуальные машины часто хороши для этого.)
Зб убунту действительно обеспечивает копию оболочки 3 в /bin
так же как /usr/bin
, Но по умолчанию в Ubuntu, zsh
не установлен вообще.
Символические ссылки не требуют, чтобы их цели существовали:
ek@Ilex:~$ rm foo
rm: cannot remove ‘foo’: No such file or directory
ek@Ilex:~$ ln -s foo bar
ek@Ilex:~$ ls -l foo bar
ls: cannot access foo: No such file or directory
lrwxrwxrwx 1 ek ek 3 Oct 2 20:25 bar -> foo
ek@Ilex:~$ file bar
bar: broken symbolic link to `foo'
поскольку /bin/sh
является интерпретатором многих важных скриптов, используемых для загрузки системы и выполнения других задач, она должна существовать. Если сделать ссылку неработающей, система Ubuntu не будет работать.
Получение zsh
предоставлять /bin/sh
Ubuntu предназначен для использования dash
за sh
и не разработан или не протестирован с zsh
как sh
в уме. Пожалуйста, не пытайтесь сделать это в системе, которая вам нужна для критических задач. Это строго для образования / развлечения, и должно быть сделано в некритической виртуальной машине или другой некритической системе. 2
Установить зш ; по умолчанию в Ubuntu он не установлен.
sudo apt-get update sudo apt-get install zsh
точка
sh
вzsh
вместоdash
запустивcd /bin; rm sh; ln -s /bin/zsh /bin/sh
(как вы сделали).проверить
sh
хорошая ссылка наzsh
запустивfile sh
(или если вы больше не в/bin
использоватьfile /bin/sh
).Тебе следует увидеть
sh: symbolic link to `zsh'
(или же/bin/sh: symbolic link to `zsh'
).Перезагрузитесь и посмотрите, работает ли Ubuntu.
Заметки
- And apparently also, at least sometimes, from a text-based virtual console, also as explained in Termhn's answer. This worked for me one of the times I tested it 2, but failed another time I tested it. And I know it did not work for you. (In contrast, the live CD method is very reliable.)
- Testing for this answer was performed on a 64-bit Ubuntu Mate 14.10 Utopic Unicorn (beta) system running in a VirtualBox virtual machine. (Not because there's anything about that configuration that best models this problem, but just because that was the desktop Ubuntu system I had on hand for testing.) That something worked for me does not guarantee it will work for you, even on the same version of Ubuntu.
- На Ubuntu,
/bin/zsh
is usually a symlink to/etc/alternatives/zsh
which is usually a symlink to/bin/zsh5
(which is the actual Z Shell executable). But since both/bin
а также/etc
are located on the root filesystem even when/usr
is mounted over a network or otherwise on a separate volume, this is fine.