Невозможно загрузиться в 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 этого можно достичь, но не совсем так, как вы пытались.

Восстановление shdash Без живой среды

Я думаю, что использование 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 Должно сработать

  1. Удерживайте нажатой клавишу Shift во время загрузки, чтобы открыть меню GRUB.

    введите описание здесь
    В целом он должен напоминать этот снимок экрана, но можно ожидать, что он будет выглядеть по-разному в зависимости от того, какую версию Ubuntu вы используете.

  2. "Ubuntu" выбран по умолчанию. Оставьте этот выбор, но нажмите e, чтобы отредактировать его.
    (Не волнуйтесь, ваши правки предназначены только для этой загрузки и не будут сохранены.)

  3. Перейти к концу строки, которая начинается linux /boot/vmlinuz-..., (Вы можете использовать клавиши со стрелками и End, чтобы добраться до конца строки.)

    введите описание здесь

    Введите пробел, затем init=/bin/dash, Затем нажмите F10 для загрузки этой конфигурации.

    Источник: Как установить NOMODESET и другие параметры загрузки ядра в grub2

  4. Тебе следует увидеть:

    /bin/dash: 0: can't access tty: job control turned off
    #
    

    Это корневая оболочка.

  5. Переустановите readwrite корневой файловой системы, чтобы вы могли вносить изменения в файлы на диске:

    mount -o remount,rw /
    

    Эта команда и те, которые следуют за ней, (как правило) не будут производить никакого вывода, когда они будут выполнены. Это нормально.

  6. Делать /bin/sh символическая ссылка на dash вместо zsh:

    cd /bin
    rm sh
    ln -s dash sh
    
  7. Если вам нравится, вы можете проверить, что sh символическая ссылка была правильно перенастроена путем запуска ls -l sh, который должен показать что-то вроде:

    lrwxrwxrwx 1 root root 4 Oct  2 23:13 sh -> dash
    

    (sh -> dash это ключевая часть.)

  8. Перезапустите с reboot -f, Ваша система должна быть исправлена.

Альтернативный способ: режим восстановления может работать. Может быть.

Для режима восстановления возможно функционирование без sh, Я не получил это, чтобы работать сам и на самом деле не знаю, будет ли это когда-нибудь - я получил Ubuntu для нормальной загрузки (без графического интерфейса) с sh как сломанная символическая ссылка, но это перестало работать для меня, прежде чем я попробовал режим восстановления (который не работал для меня тоже).

Для более надежного пути вернитесь к init=/bin/dash Должен работать. (Обратите внимание, что режим восстановления вообще не является ненадежным, просто нельзя ожидать, что он будет работать без /bin/sh.)

Если вы хотите попробовать режим восстановления:

  1. Чтобы войти в режим восстановления, зажмите Shift во время загрузки, чтобы открыть меню GRUB.

  2. Выберите Дополнительные параметры для Ubuntu.

  3. В меню доступных ядер нажмите ↓, чтобы переместить выбор к записи, заканчивающейся на (recovery mode) и нажмите Enter.

    введите описание здесь

  4. Если это не сработает, вы можете перезагрузиться с помощью "magic SysRq", как описано выше. Если это сработает, вы увидите меню восстановления.

  5. В Меню восстановления нажимайте несколько раз, пока

    root              Drop to root shell prompt
    

    выбран. Нажмите Enter.

    введите описание здесь

  6. Выполните шаги 5 и 6 (и необязательный шаг 7, если хотите) из init=/bin/dash Должен работать метод выше.

  7. Бежать reboot Заново.

    Вы могли бы, вероятно, бежать exit, затем выберите Продолжить. Но вместо этого я предлагаю перезагрузку, чтобы система могла загружаться чисто с доступным и работоспособным sh с самого начала. (Если вам удалось войти в режим восстановления с sh как прерванная символическая ссылка, это еще не значит, что все работало просто по пути.)


Если вы заинтересованы в создании zsh предоставлять sh (или на самом деле, или просто теоретически), читайте дальше.

Проблемы с shzsh Процедура, которую вы пытались

Как общая процедура, cd /bin; rm sh; ln -s /bin/zsh /bin/sh (как предписано в вашей лабораторной работе) - плохой совет по крайней мере по двум причинам:

  1. /bin/zsh иногда не существует, даже если zsh установлено. Это зависит от того, как оно было установлено и какая ОС используется. zsh большая, сложная оболочка, которая не очень часто используется в качестве /bin/sh и, таким образом, обычно не требуется быть доступным в однопользовательском режиме или каким-либо другим образом перед отдельным /usr раздел может быть установлен. Исполняемые файлы, которые не нужны в однопользовательском режиме, обычно находятся в подкаталогах /usr,

    Убунту zsh действительно обеспечивает /bin/sh, Но в других системах это может быть /usr/bin/zsh или даже /usr/local/bin/sh (как в моей системе FreeBSD, где он установлен через pkg).

  2. Мотивация этого упражнения, возможно, заключалась в том, чтобы укрепить систему против "Shellshock" (или других возможных ошибок разбора, возникающих в процессе bash принимает функции оболочки, переданные в переменных среды). Но это не очень подходящий курс действий для этой цели.

    Хотя многие системы GNU/Linux, такие как Fedora, RHEL и Slackware, имеют bash предоставлять /bin/sh во многих других оболочке /bin/sh, Это включает в себя Ubuntu, который использует dash, подобно zsh, dash не уязвим для "Shellshock" и не импортирует определения функций из переменных среды (или вообще) с использованием какого-либо механизма, поэтому подобная ошибка вряд ли повлияет на него.

Поэтому, в зависимости от контекста, это упражнение в том виде, в котором оно было вам представлено, могло быть ошибочным. Вы можете обсудить этот вопрос со своим профессором. Возможно, учебная программа или способ ее передачи могут быть улучшены.

В зависимости (даже в большей степени) от контекста эти соображения могут также вызывать беспокойство:

  1. Часто, sh является символической ссылкой, жесткой ссылкой или копией другой установленной оболочки. Но в некоторых системах, особенно в некоторых Unix-подобных системах, которые не являются системами GNU/Linux, sh может быть отдельным исполняемым файлом из всего остального. За исключением случаев, когда известно, что это не так, рекомендуется проверить, прежде чем rm это! mv В этом случае может быть более подходящим.

  2. Упражнения, которые изменяют конфигурацию системы, особенно те, которые требуют выполнения команд от имени 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

  1. Установить зш Установить зш; по умолчанию в Ubuntu он не установлен.

    sudo apt-get update
    sudo apt-get install zsh
    
  2. точка sh в zsh вместо dash запустив cd /bin; rm sh; ln -s /bin/zsh /bin/sh (как вы сделали).

  3. проверить sh хорошая ссылка на zsh запустив file sh (или если вы больше не в /bin использовать file /bin/sh).

    Тебе следует увидеть sh: symbolic link to `zsh' (или же /bin/sh: symbolic link to `zsh').

  4. Перезагрузитесь и посмотрите, работает ли Ubuntu.


Заметки

  1. 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.)
  2. 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.
  3. На 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.
Другие вопросы по тегам