Solución:
Soluciones (las mejores primero)
-
su - root
en lugar desu root
– la mejor solución (gracias a Rui) - extender la ruta del usuario normal en / etc / enviroment o ~ / .bashrc o un archivo de configuración similar
- llamar a los comandos de forma explícita; el uso de esta solución requeriría que uno modifique todos los scripts que llaman a otro comando de sbin (esto no es práctico, sin embargo, hay un ejemplo en la sección de solución de problemas)
Recomendaciones
Esto sucedió porque el PATH funciona de una manera realmente extraña (en realidad funciona según lo diseñado).
-
regular user login
-> el entorno PATH no contiene / usr / sbin => opinión: funciona según lo diseñado, bastante lógico -
su root
-> derechos de administrador, pero falta el entorno / usr / sbin: / sbin => opinión: funciona según lo diseñado, pero ilógico, porque una cuenta con nivel de acceso root debería poder ejecutar comandos desde sbin sin agregar la ruta a los binarios manualmente -
su - root
-> derechos de administrador, / usr / sbin en la ruta => opinión: funciona según lo diseñado, bastante lógico
Un poco más de antecedentes
Hay dos PATH definidos en /etc/login.defs, pero a menos que empiece su -
o su - root
, Voy a obtener ENV_PATH. Sé que esto ha sido diseñado de esta manera, para mantener el entorno del usuario real, pero en este caso único, realmente me deja boquiabierto, ¿por qué no agregar automáticamente /usr/sbin
y /sbin
a la ruta w de un “usuario normal” después de una exitosa 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
Solución de problemas
He descubierto que hay un update-grub
comando en /usr/sbin
.
# find / -name update-grub
/usr/sbin/update-grub
Lo ejecuté, solo para obtener el siguiente mensaje de error.
# /usr/sbin/update-grub
/usr/sbin/update-grub: 4: exec: grub-mkconfig: not found
Buscado para grub-mkconfig
y lo encontré debajo /usr/sbin/grub-mkconfig
. Entonces se me ocurrió, veamos cómo update-grub
¿Cómo se ve el guión?
#cat /usr/sbin/update-grub |grep grub-mkconfig
exec grub-mkconfig -o /boot/grub/grub.cfg "[email protected]"
Modificado / usr / sbin / update-grub para llamar grub-mkconfig
por su ruta explícita …
exec /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg "[email protected]"
… luego llamó update-grub
con su ruta explícita y tada, ¡funcionó!
# /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
Conclusión
Esto debe ser algo sobre el PATH