"sudo cd ..." one-liner? [duplicar]

20

Ocasionalmente, quiero cd en un directorio donde mi usuario no tiene permiso, por lo que recurro a sudo .

El comando obvio sudo cd somedir no funciona:

$ sudo mkdir test
$ sudo chmod go-rxw test
$ ls -l
drwx------ 2 root     root  [...snip...] test
$ cd test
-bash: cd: test: Permission denied
$ sudo cd test
sudo: cd: command not found

El uso de sudo su funciona:

$ sudo su
# cd test

¿Es posible convertir esto en un trazador de líneas único? (No es gran cosa, solo curiosidad ociosa:)

Las variaciones que probé no funcionaron:

$ sudo "cd test"
sudo: cd: command not found
$ sudo -i cd test
-bash: line 0: cd: test: No such file or directory
$ sudo -s cd test

El último no da un error, pero está dentro de un nuevo shell que sale al final de la línea, por lo que en realidad no me lleva a ninguna parte.

¿Alguien me puede aclarar por qué sucede esto? ¿Por qué no se encuentra sudo cd cuando, por ejemplo, sudo ls ... funciona bien?

    
pregunta j-g-faustus 02.01.2011 - 15:36

2 respuestas

21

Teóricamente, el problema es que si no tiene derechos de ejecución en un directorio, no debería poder leer el contenido del directorio. Ahora supongamos que puede hacer lo que quiere:

user@desktop:/$ sudo cd restricted-dir
user@desktop:/restricted-dir$ ls
file1 file2

Como puede ver, ingresó al directorio usando los privilegios sudo, luego, cuando sudo retorna, se vuelve a utilizar nuevamente y se encuentra en un directorio donde normalmente no debería estar.

Técnicamente, el problema es el siguiente.

sudo cd restricted-dir

cd es un shell incorporado, no un comando.

sudo cd -i restricted-dir

Probablemente estés en / root, pero tendría el mismo problema que con el siguiente.

sudo cd -s restricted-dir

Abre un nuevo shell de root, crea un cd en el directorio, luego sale del shell raíz y regresa al lugar donde comenzó.

En general, la única solución es abrir un shell raíz y mantenerlo abierto mientras se encuentre en ese directorio.

    
respondido por el petersohn 02.01.2011 - 15:52
5
sudo sh -c "cd restricted-dir; some-other-command"

es decir,

sudo sh -c "cd /root/restricted-dir; ls -l"

la pieza clave es "sh -c", que utilizo bastante a menudo para ejecutar una cadena de comandos en el mismo contexto / proceso de shell.

    
respondido por el Tagar 07.11.2015 - 05:56

Lea otras preguntas en las etiquetas