it-swarm.com.de

Debian 10 Buster | update-grub | Befehl nicht gefunden

update-grub Fehlgeschlagen mit einer Fehlermeldung

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

@ GAD3R Ausgabe von

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

Note1 Ich habe Debian 10 Buster Alpha 3 Release (Xfce) mit dem AMD64 CD ISO Installer unter Verwendung einer Standardinstallation installiert (außer dass ich den print server Entfernt und den ssh server).

Anmerkung 2 Ich habe das Root-Konto verwendet (su root).

7
linux64kb

Lösungen (die besten zuerst)

  1. su - root Anstelle von su root - schönste Lösung (danke an Rui)
  2. erweitern Sie den Pfad des regulären Benutzers in/etc/enviroment oder ~/.bashrc oder einer ähnlichen Konfigurationsdatei
  3. befehle explizit aufrufen; Die Verwendung dieser Lösung würde erfordern, dass alle Skripte geändert werden, die zufällig einen anderen Befehl von sbin aufrufen (dies ist nicht praktikabel, es gibt jedoch ein Beispiel dafür im Abschnitt zur Fehlerbehebung).

Ergebnisse

Dies geschah, weil der PATH auf eine wirklich seltsame Art und Weise funktioniert (tatsächlich wie geplant).

  1. regular user login -> Umgebung PATH enthält keine/usr/sbin => Meinung: funktioniert wie geplant, ziemlich logisch
  2. su root -> Administratorrechte, aber die Umgebung fehlt/usr/sbin:/sbin => Meinung: funktioniert wie geplant, aber unlogisch, weil ein Konto mit Root-Zugriffsebene Befehle von sbin ausführen kann, ohne den Pfad zu den Binärdateien manuell hinzuzufügen
  3. su - root -> Administratorrechte,/usr/sbin auf dem Pfad => Meinung: funktioniert wie geplant, ziemlich logisch

Noch etwas Hintergrund

In /etc/login.defs sind zwei Pfade definiert, aber wenn ich nicht su - Oder su - root Starten kann, erhalte ich ENV_PATH. Ich weiß, dass dies so konzipiert wurde, um die Umgebung des tatsächlichen Benutzers zu erhalten, aber in diesem Einzelfall verwirrt es mich wirklich, warum nicht automatisch /usr/sbin Und /sbin Zu thew hinzufügen Pfad eines "regulären Benutzers" nach einem erfolgreichen 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

Fehlerbehebung

Ich habe festgestellt, dass es in update-grub Einen Befehl /usr/sbin Gibt.

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

Lief es aus, nur um die nächste Fehlermeldung zu erhalten.

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

Nach grub-mkconfig Gesucht und unter /usr/sbin/grub-mkconfig Gefunden. Dann kam es zu mir, mal sehen, wie das update-grub - Skript aussieht.

#cat /usr/sbin/update-grub |grep grub-mkconfig
exec grub-mkconfig -o /boot/grub/grub.cfg "[email protected]"

Modifiziert/usr/sbin/update-grub, um grub-mkconfig Über seinen expliziten Pfad aufzurufen ...

exec /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg "[email protected]"

... dann genannt update-grub mit seinem expliziten Pfad und tada, es hat funktioniert!

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

Schlussfolgerung

Dies muss etwas über den Pfad sein

8
linux64kb

Diesen Weg:

#Sudo update-grub

Das Wort "Sudo" ist Teil des Befehls.

Ja, das ist einfach.

1
João Paulo

Aktualisieren Sie zuerst Ihre lokale Paketliste:

Sudo apt update && Sudo apt upgrade

Finden Sie den richtigen Startmodus:

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

dann ist die erzwungene Neuinstallation des Grub-Pakets für das Leagcy-Paket grub-legacy und für efi grub-efi vorhanden (ich gehe davon aus, dass Ihr Boot-Modus EFI ist):

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

Wenn das Problem immer noch nicht behoben werden kann, versuchen Sie Folgendes:

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

Der Befehl update-grub Ist nur ein Skript, das das Tool grub-mkconfig Ausführt, um eine grub.cfg-Datei zu generieren. Siehe Archlinux GRUB Dokumentation

Ref:

0
finn

Ich habe die Antwort von João-Paulo verwendet, aber ich brauchte ein wenig Hilfe, um in die Gruppe Sudo zu gelangen.

  1. Öffnen Sie ein Terminal.

  2. Führen Sie groups aus, um zu überprüfen, ob Sie zur Gruppe Sudo gehören:

    $ groups        
    ... Sudo ...
    

    ein. Wenn Sie nichtSudo in der Liste sehen, fügen Sie sich mit dem Root-Konto hinzu:

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

    Schließen Sie das Terminal, melden Sie sich ab und wieder an. Führen Sie groups erneut aus, um zu bestätigen, dass Sie sich in Sudo befinden.

  3. Führen Sie Sudo update-grub Aus. Es sollte auf Ihrem $PATH Mit Sudo verfügbar sein.

0
Mike