데비안 10 스포일러 | 업데이트 grub 명령을 찾을 수 없습니다.

데비안 10 스포일러 | 업데이트 grub 명령을 찾을 수 없습니다.

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저는 루트 계정( su root)을 사용하고 있습니다.

답변1

솔루션(최고 우선)

  1. su - root대신 su root- 최고의 솔루션입니다(Rui에게 감사드립니다)
  2. /etc/environment 또는 ~/.bashrc 또는 유사한 구성 파일에서 일반 사용자에 대한 경로를 확장합니다.
  3. 명시적으로 명령을 호출합니다. 이 솔루션을 사용하려면 sbin에서 다른 명령을 호출하는 모든 스크립트를 수정해야 합니다(이것은 비실용적이지만 문제 해결 섹션에 예제가 있습니다).

발견하다

이는 PATH가 매우 이상한 방식으로 작동하기 때문에 발생합니다(실제로 설계된 대로 작동함).

  1. regular user login-> 환경 경로에 /usr/sbin이 포함되어 있지 않습니다 =>보다:설계된 대로 작동하며 매우 논리적입니다.
  2. su root-> 관리자 권한이 있지만 환경에 /usr/sbin:/sbin이 부족합니다 =>보다:설계된 대로 작동하지만 의미가 없습니다.루트 액세스 권한이 있는 계정은 바이너리에 경로를 수동으로 추가하지 않고도 sbin에서 명령을 실행할 수 있어야 합니다.
  3. su - root-> 관리자 권한, 해당 경로의 /usr/sbin =>보다:설계된 대로 작동하며 매우 논리적입니다.

더 많은 배경

/etc/login.defs에는 두 개의 PATH가 정의되어 있지만 시작하거나 su -ENV_PATH su - root를 얻지 않는 한. 실제 사용자의 환경을 보존하기 위해 의도적으로 설계된 것이라는 것을 알고 있지만 이 경우 성공 후 "일반 사용자" 경로 /usr/sbin에 자동으로 추가되지 않는 이유가 정말 혼란스럽습니다./sbinsu 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에 관한 내용이어야 합니다.

답변2

이 방법:

#sudo update-grub

이 명령은 루트로 실행해야 합니다.

답변3

먼저 로컬 패키지 목록을 업데이트하세요.

sudo apt update && sudo apt upgrade

올바른 부팅 모드를 찾으세요:

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

grub-legacy그런 다음 이전 패키지와 efi용 grub 패키지를 강제로 다시 설치합니다 grub-efi(부팅 모드가 EFI라고 가정합니다).

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

문제가 여전히 해결되지 않으면 다음을 시도해 보십시오.

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

update-grubgrub-mkconfig이 명령은 단순히 도구를 실행하여 grub.cfg 파일을 생성하는 스크립트입니다 . Archlinux GRUB 보기문서

인용하다:

답변4

강제로 다시 설치할 수 있습니다 grub.

sudo apt-get install --reinstall grub

관련 정보