Soluções (melhores primeiro)
-
su - root
em vez desu root
- melhor solução (graças a Rui) - estenda o caminho do usuário normal em / etc / enviroment ou ~ / .bashrc ou arquivo de configuração similar
- comandos de chamada explicitamente; usar essa solução exigiria que alguém modificasse todos os scripts que chamam outro comando do sbin (isso não é prático, mas há um exemplo disso na seção de resolução de problemas)
Resultados
Isso aconteceu porque o PATH funciona de uma maneira muito estranha (na verdade funciona como planejado).
-
regular user login
- > o ambiente PATH não contém / usr / sbin = > opinião: funciona como projetado, bastante lógico -
su root
- > direitos de administrador, mas falta o ambiente / usr / sbin: / sbin = > opinion: funciona como planejado, mas ilógico, porque uma conta com nível de acesso root deve ser capaz de executar comandos a partir do sbin sem adicionar o caminho para os binários manualmente -
su - root
- > direitos de administrador, / usr / sbin no caminho = > opinião: funciona como projetado, bastante lógico
Mais algumas informações
Existem dois PATH definidos em /etc/login.defs, mas a menos que eu inicie su -
ou su - root
, eu irei obter o ENV_PATH.
Eu sei que isso foi projetado desta forma, para manter o ambiente do usuário real, mas neste caso único, realmente confunde minha mente, por que não adicionar automaticamente /usr/sbin
e /sbin
para o caminho w de um "usuário regular "após um 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
Solução de problemas
Descobri que existe um comando update-grub
em /usr/sbin
.
# find / -name update-grub
/usr/sbin/update-grub
Executou, apenas para obter a próxima mensagem de erro.
# /usr/sbin/update-grub
/usr/sbin/update-grub: 4: exec: grub-mkconfig: not found
Pesquisou grub-mkconfig
e encontrou /usr/sbin/grub-mkconfig
.
Então veio para mim, vamos ver como o script update-grub
se parece?
#cat /usr/sbin/update-grub |grep grub-mkconfig
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
Modificado / usr / sbin / update-grub para chamar grub-mkconfig
por seu caminho explícito ...
exec /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg "$@"
... então chamado update-grub
com seu caminho explícito e tada, funcionou!
# /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
Conclusão
Isso deve ser algo sobre o PATH