web-dev-qa-db-fra.com

Debian 10 Buster | update-grub | commande non trouvée

update-grub a échoué avec un message d'erreur

# update-grub
bash: update-grub: command not found

@ GAD3R Sortie de

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

Note1 J'ai installé la version Debian 10 Buster Alpha 3 (Xfce) à l'aide du programme d'installation iso du CD AMD64 en utilisant une installation par défaut (sauf que j'ai supprimé le print server et a ajouté le ssh server).

Note2 J'ai utilisé le compte root (su root).

7
linux64kb

Solutions (les meilleures d'abord)

  1. su - root au lieu de su root - la plus belle solution (merci à Rui)
  2. étendre le chemin de l'utilisateur normal dans/etc/enviroment ou ~/.bashrc ou un fichier de configuration similaire
  3. appeler des commandes explicitement; l'utilisation de cette solution nécessiterait que l'on modifie tous les scripts qui arrivent à appeler une autre commande depuis sbin (ce n'est pas pratique, néanmoins il y en a un exemple dans la section de dépannage)

Résultats

Cela est arrivé parce que le PATH fonctionne d'une manière vraiment étrange (fonctionne en fait comme prévu).

  1. regular user login -> l'environnement PATH ne contient pas/usr/sbin => opinion: fonctionne comme prévu, tout à fait logique
  2. su root -> droits d'administrateur, mais l'environnement manque/usr/sbin:/sbin => opinion: fonctionne comme prévu, mais illogique, car n compte avec un niveau d'accès racine devrait pouvoir exécuter des commandes depuis sbin sans ajouter manuellement le chemin vers les binaires
  3. su - root -> droits d'administrateur,/usr/sbin sur le chemin => opinion: fonctionne comme prévu, tout à fait logique

n peu plus de fond

Deux chemins sont définis dans /etc/login.defs, mais à moins que je ne démarre su - ou su - root, Je vais obtenir le ENV_PATH. Je sais que cela a été conçu de cette façon, afin de garder l'environnement de l'utilisateur réel, mais dans ce cas unique, cela me dérange vraiment, pourquoi ne pas ajouter automatiquement /usr/sbin et /sbin vers le chemin d'accès d'un "utilisateur régulier" après une réussite 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

Dépannage

J'ai trouvé qu'il y a un update-grub commande dans /usr/sbin.

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

Ran, juste pour obtenir le prochain message d'erreur.

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

Recherche de grub-mkconfig et l'a trouvé sous /usr/sbin/grub-mkconfig. Ensuite, il m'est venu, voyons comment le update-grub le script ressemble?

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

Modifié/usr/sbin/update-grub afin d'appeler grub-mkconfig par son chemin explicite ...

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

... puis appelé update-grub avec son chemin explicite et tada, ça a marché!

# /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

Conclusion

Cela doit être quelque chose sur le CHEMIN

8
linux64kb

Par ici:

#Sudo update-grub

Le mot "Sudo" fait partie de la commande.

Oui, c'est simple.

1
João Paulo

Mettez d'abord à jour votre liste de paquets locale:

Sudo apt update && Sudo apt upgrade

Trouvez le mode de démarrage correct:

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

puis, réinstallation forcée du paquet grub pour leagcy grub-legacy le paquet est là et pour efi grub-efi (Je suppose que votre mode de démarrage est EFI):

Sudo apt install --reinstall grub-efi
Sudo apt install grub-common

Si le problème n'est toujours pas résolu, essayez ceci sur:

Sudo grub-mkconfig -o /boot/grub/grub.cfg

update-grub la commande est juste un script qui exécute le grub-mkconfig outil pour générer un fichier grub.cfg. Voir l'Archlinux GRUB documentation

Réf:

0
finn

J'ai utilisé la réponse de joão-paulo, mais j'avais besoin d'un peu d'aide pour obtenir into le groupe Sudo.

  1. Ouvrez un terminal.

  2. Exécutez groups pour vérifier si vous êtes dans le groupe Sudo:

    $ groups        
    ... Sudo ...
    

    une. Si vous ne pas voyez Sudo dans la liste, alors ajoutez-vous en utilisant le compte root:

    su -
    # Enter your root password
    adduser <your_username> Sudo
    exit
    

    Fermez le terminal, déconnectez-vous et reconnectez-vous. Réexécutez groups pour confirmer que vous êtes bien dans Sudo.

  3. Courir Sudo update-grub. Il devrait être disponible sur votre $PATH en utilisant Sudo.

0
Mike