Como anotaste, cd
es un comando integrado de shell, y hay una razón para eso:el "directorio actual" es un parámetro por proceso que solo puede ser cambiado por el proceso mismo .
Ningún proceso secundario puede cambiar el directorio de trabajo de su shell, por lo que incluso si logra ejecutar cd
en una subcapa privilegiada, solo cambiará el directorio de trabajo de esa subcapa temporal, y no importa qué método use para aumentar los privilegios.
Así que para sudo cd
para funcionar, sudo tendría que ser un shell integrado, y necesitaría alguna forma de aumentar los privilegios de un proceso que ya se está ejecutando. Actualmente no existe tal mecanismo en Linux (ni en la mayoría de los demás sistemas operativos).
Una forma de lograr lo que desea es ejecutar un interactivo shell con privilegios de root (cualquier método funciona), y simplemente use el cd
regular en ella:
[[email protected] /]$ sudo bash
[[email protected] /]# cd /root/secret
Si desea hacerlo todo en un solo comando, debería verse así:primero cambie el directorio de trabajo, luego inicie un shell interactivo:
sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"
Nota:el comando externo no tiene que ser un shell, solo tiene que ser algo que cambia su directorio de trabajo y ejecuta un nuevo comando. Los sistemas Linux recientes tienen uno o dos ayudantes que podrían usarse:
sudo nsenter --wd="/root/secret" bash # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash # coreutils v8.28 (debian buster)
La ventaja de este método es que no requiere cotizaciones anidadas; puede ejecutar un comando de varias palabras sin tener problemas con los espacios en blanco o los caracteres especiales.
Finalmente, algunos programas tienen una opción incorporada para cambiar su directorio de trabajo:
sudo make -C /etc
sudo git -C /root/secret log
La otra respuesta no está mal.
Posiblemente una mejor respuesta es:
La herramienta sudo está destinada a realizar acciones como superusuario, y está describiendo algo que es más un cambio de estado que precedería a acciones como 'ls' o 'vi' u otras para simplificarlas.
Sugiero, por ej. si desea editar un archivo en /root/private/:
sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>
Esto es definitivamente más tipeo y un poco más difícil que simplemente cambiar directorios. Sin embargo, está lejos más auditable y mucho más en línea con los principios detrás de sudo que ejecutar alguna variante de 'sudo bash'.
Si está trabajando en un entorno seguro, su equipo de IA se lo agradecerá. Si te encuentras preguntándote:"¿Qué cambio hice el otro día?", entonces tú se lo agradecerá, porque no tendrá que preguntarse qué archivo o archivos editó.
Dicho todo esto, habilitar y ejecutar alguna forma de 'sudo bash' es definitivamente más fácil. Si estaba buscando algo más fácil, ¿por qué usa 'sudo' en primer lugar en lugar de simplemente iniciar sesión como root?