15

Вероятно, это дублирующий вопрос, но я недостаточно знаком с процессом входа / загрузки CentOS (особенно на ВМ), чтобы знать, что искать.

Я использую CentOS 7 в VirtualBox. Я случайно добавил gnome-terminal в конец моего файла ~/.bashrc . Так что теперь, когда я вхожу, появляется окно терминала. Этот сеанс терминала выполняет .bashrc , который открывает другое окно и т.д. И т.д., И я залил тонну окон терминалов gnome-terminal .

Я пытаюсь войти в терминальную сессию без входа в систему через GUI (так что gnome-terminal терпит неудачу), но я не могу заставить его загрузиться без GUI. Я пытался использовать ответы на этот вопрос, но безуспешно. Я получаю GUI логин каждый раз: как загрузить CentOS в CLI? , Есть ли другой способ отредактировать конфигурацию grub при загрузке или способ получить доступ к новому экземпляру терминала из входа в GUI, например, Ctrl+Alt+F1 в Ubuntu? (Да, я попробовал это. Он не работает в CentOS 7 или в виртуальной машине VirtualBox.) Или есть какой-то другой способ получить терминальную сессию без графического интерфейса, чтобы я мог отредактировать свой .bashrc и исправить этот беспорядок?

4 ответа4

23

Вы можете загрузиться с живого компакт-диска Linux, а затем смонтировать файловую систему CentOS и отредактировать оттуда файл .bashrc.

14

Init /bin /sh из конфигурации grub

Вы можете отредактировать свою конфигурацию grub, чтобы загрузить корневую оболочку вместо того, чтобы переходить в графический интерфейс.

  1. Перезагрузите свою ВМ
  2. Когда появится меню Grub, выберите первую запись и нажмите e для редактирования. Если он не появляется, перезапустите и удерживайте Shift во время загрузки
  3. Найдите строку, начинающуюся с linux16 или linux . Моя выглядит так. Ваш может немного отличаться

    linux16 /vmlinuz-3.10.0-327.18.2.el7.x86_64 root=/dev/mapper/centos-root ro crashkernal=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF8
    
  4. Измените ro на rw (флаг readonly для readwrite, чтобы вы могли записать изменения) и добавьте init=/bin/sh в строку. Это говорит linux запускать /bin/sh вместо init при запуске. Пример для моей записи

    linux16 /vmlinuz-3.10.0-327.18.2.el7.x86_64 root=/dev/mapper/centos-root rw crashkernal=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF8 init=/bin/sh
    
  5. Нажмите Ctrl-X, чтобы запустить настройку. Это не будет сохранено.

  6. Появится корневая оболочка. Используйте его для редактирования вашего .bashrc и удалите оскорбительную строку.

    Обратите внимание, что вы не должны продолжать использовать ОС в этом состоянии, так как оболочка будет работать как PID 1, обычно зарезервированный для процесса init . Вы можете продолжить init вручную с помощью exec /sbin/init но я бы порекомендовал просто перезагрузиться

  7. Перезагрузитесь как обычно. Ваши предыдущие изменения будут забыты.

По сути, мы редактируем параметры загрузки, передаваемые Linux из GRUB, которые говорят Linux монтировать корневую файловую систему для чтения-записи и запуска /bin/sh для процесса инициализации.

Это работает для меня, используя Centos 7 и VirtualBox 4.3.12

12

Ctrl Alt F1 может быть захвачен хостом, или VirtualBox может не передавать его правильно. Несколько быстрых тестов говорят мне, что вы можете использовать ключ хоста, определенный в VirtualBox, вместо Ctrl Alt (это может быть левый Ctrl или левый на Mac). Итак, нажатие F1 переключилось на TTY1 в VirtualBox для меня (и аналогично для F7 обратно в GUI).

5

scp отремонтированная копия .bashrc на место

Если у вас есть другой компьютер для работы, возьмите копию поврежденного файла и устраните проблему, затем верните ее туда, откуда она пришла. Это позволяет избежать входа в систему и вызова любой из команд входа в систему.

user@backup ~ $ scp user@homehost:~/.bashrc busted.bashrc
user@backup ~ $ vim busted.bashrc # fix, fix
user@backup ~ $ scp busted.bashrc user@homehost:~/.bashrc
user@backup ~ $ rm busted.bashrc

Приложение: как указывает OP ниже, для этого требуется доступ SSH к homehost . Если это не вариант, но вместо него доступен FTP/SFTP, любой метод передачи файлов будет делать то, что вам нужно, то есть просто установить исправленный файл входа в систему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .