Debian 10 Buster | Update-grub | Не найден команда

for file in `ls`|cut -d"-" -f1
do
  cat ${file}-* > ${file}
done

это будет отбирать файлы с таким же префиксом имени и отправлять вывод в файл с тем же префиксом, при условии, что у вас нет других случайных файлов в том же каталоге, в котором вы находитесь

5
18.11.2018, 21:14
3 ответа

Решения (сначала лучшие)

  1. su - rootвместоsu root-лучшее решение (благодаря Rui)
  2. расширить путь обычного пользователя в /etc/enviroment или ~/.bashrc или аналогичный файл конфигурации
  3. вызывать команды явно; использование этого решения потребует изменения всех сценариев, которые вызывают другую команду из sbin (это нецелесообразно, тем не менее, в разделе устранения неполадок есть пример этого)

Выводы

Это произошло из-за того, что PATH работает очень странно (на самом деле работает так, как задумано ).

  1. regular user login-> окружение PATH не содержит /usr/sbin => мнение:работает как продуманный, вполне логичный
  2. su root-> права администратора, но в среде отсутствует /usr/sbin :/sbin => мнение:работает как задумано, но нелогично, потому что учетная запись с правами root должна иметь возможность выполнять команды из sbin без добавления пути к бинарникам вручную
  3. su - root-> права админа, /usr/sbin по пути => мнение:работает как продуманный, вполне логичный

Еще предыстория

В файле /etc/login.defs определены два PATH, но если я не начну su -или su - root, я получу ENV _PATH. Я знаю, что это было разработано таким образом, чтобы сохранить среду реального пользователя, но в этом единственном случае это действительно уму непостижимо,почему бы не добавить автоматически /usr/sbinи /sbinк пути "обычного пользователя" после успешногоsu root

# cat /etc/login.defs |grep PATH=
ENV_SUPATH  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH    PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Поиск и устранение неисправностей

Я обнаружил, что в /usr/sbinесть команда update-grub.

# find / -name update-grub
/usr/sbin/update-grub

Запустил его, чтобы получить следующее сообщение об ошибке.

# /usr/sbin/update-grub
/usr/sbin/update-grub: 4: exec: grub-mkconfig: not found

Искал grub-mkconfigи нашел его под /usr/sbin/grub-mkconfig. Тут мне пришло в голову, а давайте посмотрим, как выглядит скрипт update-grub?

#cat /usr/sbin/update-grub |grep grub-mkconfig
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"

Изменен /usr/sbin/update -grub для вызова grub-mkconfigпо его явному пути...

exec /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg "$@"

... затем вызвал update-grubс его явным путем и тада, это сработало!

# /usr/sbin/update-grub
Generating grub configuration file...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-4.18.0-2-amd64
Found initrd image: /boot/initrd.img-4.18.0-2-amd64
Found linux image: /boot/vmlinuz-4.16.0-2-amd64
Found initrd image: /boot/initrd.img-4.16.0-2-amd64
done

Заключение

Это должно быть что-то о PATH

14
27.01.2020, 20:40

Вы можете принудительно переустановитьgrub:

sudo apt-get install --reinstall grub
-2
27.01.2020, 20:40

Сначала обновите локальный список пакетов:

sudo apt update && sudo apt upgrade

Найти правильный режим загрузки:

[ -d /sys/firmware/efi ] && echo EFI || echo legacy 

затем принудительная переустановка пакета grub для пакета leagcy grub-legacyи для efigrub-efi(Я предполагаю, что вы используете режим загрузки EFI):

sudo apt install --reinstall grub-efi
sudo apt install grub-common

Если проблема все еще не решена, попробуйте это на:

sudo grub-mkconfig -o /boot/grub/grub.cfg
Команда

update-grub— это всего лишь скрипт, который запускает инструмент grub-mkconfigдля создания файла grub.cfg. См. документацию Archlinux GRUB

.

Ссылка:

2
27.01.2020, 20:40

Теги

Похожие вопросы