update-grub
エラーメッセージで失敗
# update-grub
bash: update-grub: command not found
@GAD3R出力
# [ -d /sys/firmware/efi ] && echo EFI || echo legacy
legacy
注1amd64 CD isoインストーラを使用して、デフォルトのインストールを使用してDebian 10 Buster Alpha 3バージョン(Xfce)をインストールしました(削除print server
と追加を除くssh server
)。
ノート2私はrootアカウント(su root
)を使用しています。
ベストアンサー1
ソリューション(最優先)
su - root
代わりにsu root
- 最高のソリューションです(Ruiに感謝します)- /etc/environment または ~/.bashrc または同様の構成ファイルから、一般ユーザーへのパスを拡張します。
- 明示的にコマンドを呼び出します。このソリューションを使用するには、sbinで他のコマンドを呼び出すすべてのスクリプトを変更する必要があります(これは実用的ではありませんが、トラブルシューティングセクションに例があります)。
発見する
これは、PATHが非常に奇妙な方法で動作するために発生します(実際に設計されたとおりに機能します)。
regular user login
->環境パスに/usr/sbinが含まれていません=>より:設計どおりに動作し、非常に論理的です。su root
->管理者権限がありますが、環境に/usr/sbin:/sbinが不足しています =>より:設計どおりに動作しますが、意味がありません。rootアクセス権を持つアカウントは、バイナリにパスを手動で追加せずにsbinでコマンドを実行できる必要があります。su - root
->管理者権限、そのパスの/usr/sbin =>より:設計どおりに動作し、非常に論理的です。
より多くの背景
/etc/login.defsには2つのPATHが定義されていますが、開始するかsu -
ENV_PATHsu - root
を取得しない限り。実際のユーザーの環境を維持するために意図的に設計されていることを知っていますが、この場合、成功後に「一般ユーザー」パスに/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に関する内容でなければなりません。