После случайного переименования / etc, как мне переименовать его обратно?

36

Я использую Ubuntu 18.04.

Я переименовал /etcпапку в apache2. Это была моя самая большая ошибка

Теперь я не могу переименовать его обратно, потому что мне нужно использовать sudo, но когда я пытаюсь, я получаю ошибку

sudo: unknown uid 1000

Как я могу решить эту проблему? У меня нет действующей системы для загрузки, и в режиме восстановления корневой терминал открывается, но затем закрывается, говоря cannot open password database.

енот
источник
17
Загрузитесь с установочного носителя, выберите «Попробуйте Ubuntu», подключите корневую файловую систему /mnt, выполните переименование, перезагрузите компьютер.
AlexP
Как загрузить установочный носитель?
Енот
@ Занна, Сдвиг не показывал мне меню. Может быть, другая кнопка может открыть его?
Racoon
@Zanna, меню Recovery -> root открывает терминал, но говорит, что не может открыть базу паролей и закрывается
Racoon
@ Занна, нет, не надо :(
Racoon

Ответы:

62

Простой способ решения подобных проблем - это загрузка с работающей системы, монтирование корневого раздела /mnt и переименование файла.

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

Перезагрузитесь или выключите питание, включите и, если вы обычно не видите меню GRUB при загрузке, нажмите Shiftили, Escчтобы перейти в меню GRUB.

Переместите курсор вниз в « Дополнительные параметры» для Ubuntu и нажмите enter, затем нажмите, eчтобы редактировать параметры загрузки (только один раз - изменения здесь не будут постоянными, поэтому мы не должны очищать их впоследствии).

Вы увидите экран, который выглядит примерно так 1 :

снимок экрана редактора меню GRUB

Переместите курсор вниз к строке, которая начинается с, linuxа затем переместите курсор в конец этой строки или в любое место среди параметров загрузки ядра. Убедитесь, что вы находитесь на правильной линии, и наберите здесь внимательно, так как система может не загрузиться без установки /etc.

Добавьте текст init=/bin/bashи нажмите F10для загрузки.

Это запустит систему с оболочкой Bash в качестве init. Вы получите корневую оболочку, а файловая система будет смонтирована только для чтения. 2 Чтобы сделать файловую систему доступной для записи, введите команду

mount -o remount,rw /

Теперь вы можете переименовать /etc(вы можете lsсначала)

mv /apache2 /etc

Теперь вы можете перезагрузиться или завершить обычную загрузку отсюда, заменив корневую оболочку на обычную систему инициализации 3 :

exec systemd 

Я тестировал эту процедуру на Ubuntu MATE 18.04.


1 Большое спасибо Kulfy за скриншот хорошего качества редактора GRUB от VirtualBox!
2 Хотя PATH не может быть установлен из файлов конфигурации /etcв этом сценарии, Bash автоматически установит его .
3 Если у exec systemdвас не работает, exec /sbin/initследует сделать свое дело. Если нет, readlink -e /sbin/initследует указать путь к какой-либо программе инициализации, которую вы можете затем указать execс помощью полного пути. Если вы не можете пойти по этому пути, просто введите reboot.

Занна
источник
4
Очень подробный, включая скриншот +1 :)
WinEunuuchs2Unix
3
@Kulfy большое спасибо! это замечательно: я не могу использовать VB, потому что мне не хватает оперативной памяти. Очень любезно с вашей стороны, чтобы помочь улучшить мой ответ
Zanna
3
Я думаю, что я взял слишком большой скриншот: P ;-) и спасибо за скриншоты :)
Kulfy
1
@Racoon Не за что, рад, что вы исправили это :)
Zanna
Попытка проверить это, но не работает в Ubuntu 18.04.Desktop. Следовал инструкциям дословно . Не работает. После F10того, как появятся только несколько строк и остановится на пустом экране. Можешь что-нибудь предложить?
Виджай
8

Если у вас есть работающий USB, вы сможете загрузить его и смонтировать существующую файловую систему, а затем переименовать вашу /etcоттуда. Вот учебник о том, как создать живой USB, если вам это нужно.

После загрузки с живого USB (если используется диск Ubuntu 18.04), выберите «Попробуйте Ubuntu без установки», и он, по сути, предоставит вам полный экземпляр установки Ubuntu, который не будет сохраняться после завершения работы. После загрузки у вас есть несколько вариантов:

Путь командной строки

Откройте терминал и запустите lsblk. Найдите том, который будет исходным установочным диском, и запишите, какой это номер (/ dev / sd #)

Затем создайте точку монтирования для диска с помощью mkdir -p /mnt/directory, затем подключите диск с помощью sudo mount /dev/sd# /mnt/directory. Перейдите к каталогу с помощью, cd /mnt/directoryи теперь вы должны быть в корневом каталоге вашей установки, но теперь с работающей sudoкомандой. запустите sudo mv apache2 etcи перезагрузите вашу гипотетически работающую ОС.

Графический способ

Откройте утилиту Дисков, выполнив поиск Дисков. Выберите том, который выглядит как ваш установочный диск, и смонтируйте его. Откройте диспетчер файлов и выберите подключенный том, щелкните правой кнопкой мыши /apache2папку и переименуйте ее /etc, затем перезагрузите.

Мятный
источник
«Графический путь» не работает, потому что на Rt нет опции «Переименовать». нажмите кнопку.
Виджай
1
@Vijay Это вероятно из-за прав доступа к файлам, вам нужно будет открыть файловый менеджер от имени root, чтобы сделать это графически. Для этого запустите команду sudo nautilusиз терминала. (Ubuntu использует «nautilus» в качестве файлового менеджера так же, как Windows использует «explorer».)
AJMansfield
2
@AJMansfield, конечно, это не имеет значения для работающей системы, но в целом мы должны использовать, sudo -H nautilusчтобы избежать того, чтобы root стал владельцем конфигурационных файлов $HOME, потенциально делая их недоступными для программ, запускаемых от имени обычного пользователя. Вы, наверное, знаете об этом, но я упоминаю для других читателей.
Занна
6
  1. Сделайте загрузочный USB как показано здесь.

  2. Загрузитесь с USB, нажав клавишу, как показано здесь.

  3. Узнайте ваш раздел файловой системы, запустив gparted. Предположим, это sdxy.

  4. Запустить на терминале sudo mount /dev/sdxy /mnt

  5. Запустить на терминале sudo mv /mnt/apache2 /mnt/etc

  6. Проверьте вашу файловую систему в / mnt для изменения имени.

  7. Запустить на терминале sudo reboot

  8. При появлении запроса выньте USB и нажмите Enter

Виджай
источник
@Kulfy Я пытался, но без sudo не работает. Смотрите здесь .
Виджей
Это потому, что sda2 был смонтирован с помощью sudo, поэтому только sudo может выполнять действия. Но если вы монтируете диск с помощью nautilus (без какого-либо специального разрешения), вы можете выполнять задачи без sudo.
Кульфи
Проверил это `ubuntu @ ubuntu: ~ $ mount / dev / sda2 / mnt mount: это может сделать только root ubuntu @ ubuntu: ~ $
Виджай
1
AFAIK mountпрограмма очень строгая и всегда должна запускаться как root; единственное исключение из этого - когда файловая система включена fstabи имеет userопцию. Программа udisksctlпозволяет обычным пользователям монтировать устройства, используя, например udisksctl mount -b /dev/sda1(она создает подходящую точку монтирования в /media/$USER/). Я не пробовал использовать udisksctlиз действующей системы, но в действующей системе всегда есть привилегированный пользователь, способный работать sudoбез пароля, поэтому нет необходимости в таких утилитах, udisksctlкоторые, в противном случае, так полезны
Zanna