- Невозможно загрузиться в Ubuntu, появляется мигающий белый курсор
- 2 ответа
- Восстановление sh → dash Без живой среды
- Сначала выключите или перезагрузите компьютер (если можете).
- init=/bin/dash Должно сработать
- Альтернативный способ: режим восстановления может работать. Может быть.
- Проблемы с sh → zsh Процедура, которую вы пытались
- Получение zsh предоставлять /bin/sh
- Заметки
Невозможно загрузиться в 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.
Не удивительно, что /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 #
cd /bin rm sh ln -s dash sh
lrwxrwxrwx 1 root root 4 Oct 2 23:13 sh -> dash
Альтернативный способ: режим восстановления может работать. Может быть.
Для режима восстановления возможно функционирование без sh , Я не получил это, чтобы работать сам и на самом деле не знаю, будет ли это когда-нибудь — я получил Ubuntu для нормальной загрузки (без графического интерфейса) с sh как сломанная символическая ссылка, но это перестало работать для меня, прежде чем я попробовал режим восстановления (который не работал для меня тоже).
Для более надежного пути вернитесь к init=/bin/dash Должен работать. (Обратите внимание, что режим восстановления вообще не является ненадежным, просто нельзя ожидать, что он будет работать без /bin/sh .)
Если вы хотите попробовать режим восстановления:
- Чтобы войти в режим восстановления, зажмите Shift во время загрузки, чтобы открыть меню GRUB.
- Выберите Дополнительные параметры для Ubuntu.
- В меню доступных ядер нажмите ↓, чтобы переместить выбор к записи, заканчивающейся на (recovery mode) и нажмите Enter .
- Если это не сработает, вы можете перезагрузиться с помощью «magic SysRq», как описано выше. Если это сработает, вы увидите меню восстановления.
- В Меню восстановления нажимайте ↓ несколько раз, пока
root Drop to root shell prompt
выбран. Нажмите Enter .
Если вы заинтересованы в создании 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 не установлен вообще.
Символические ссылки не требуют, чтобы их цели существовали:
[email protected]:~$ rm foo rm: cannot remove ‘foo’: No such file or directory [email protected]:~$ ln -s foo bar [email protected]:~$ ls -l foo bar ls: cannot access foo: No such file or directory lrwxrwxrwx 1 ek ek 3 Oct 2 20:25 bar -> foo [email protected]:~$ 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
Заметки
- 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.