web-dev-qa-db-ja.com

Debian 10バスター| update-grub |コマンドが見つかりません

update-grubがエラーメッセージで失敗しました

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

@ GAD3Rの出力

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

注1デフォルトのインストールを使用してAMD64 CD isoインストーラーを使用してDebian 10 Buster Alpha 3リリース(Xfce)をインストールしました(print serverを削除してssh serverを追加した場合を除く) )。

Note2 rootアカウント(su root)を使用しました。

7
linux64kb

ソリューション(最初に最適なソリューション)

  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 =>opinion:がありませんが、設計どおりに動作しますルートレベルのアクセス権を持つアカウントは、手動でバイナリへのパスを追加せずにsbinからコマンドを実行できるはずです
  3. su - root->管理者権限、パス上の/ usr/sbin =>意見:設計どおりに機能し、非常に論理的

背景が少しあります

/etc/login.defsには2つのPATHが定義されていますが、su -またはsu - rootを開始しない限り、ENV_PATHを取得します。これは、実際のユーザーの環境を維持するためにこのように設計されていることを知っていますが、この1つのケースでは、私の心を揺さぶるので、/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

トラブルシューティング

update-grub/usr/sbinコマンドがあることがわかりました。

# 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 "$@"

明示的なパスでgrub-mkconfigを呼び出すために/ usr/sbin/update-grubを変更しました...

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

...次にupdate-grubと呼ばれ、明示的なパスとtadaで機能しました。

# /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に関するものでなければなりません

8
linux64kb

こちらです:

#Sudo update-grub

「Sudo」という単語はコマンドの一部です。

はい、簡単です。

1
João Paulo

まず、ローカルパッケージリストを更新します。

Sudo apt update && Sudo apt upgrade

正しい起動モードを見つけます。

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

次に、leagcy grub-legacyパッケージ用のgrubパッケージの強制再インストールがあり、efi grub-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 ドキュメント

Ref:

0
finn

私はjoão-pauloの答えを使用しましたが、intoSudoグループを取得するために少し助けが必要でした。

  1. 端末を開きます。

  2. groupsを実行して、Sudoグループに属しているかどうかを確認します。

    $ groups        
    ... Sudo ...
    

    a。 しないでくださいリストのSudoを参照し、ルートアカウントを使用して自分を追加します。

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

    ターミナルを閉じてログアウトし、再度ログインします。groupsを再実行して、Sudoにいることを確認します。

  3. Sudo update-grubを実行します。 Sudoを使用して$PATHで利用できるはずです。

0
Mike