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

20

Occasionalmente voglio cd in una directory in cui il mio utente non ha il permesso, quindi ricorro a sudo .

Il comando ovvio sudo cd somedir non funziona:

$ 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

L'utilizzo di sudo su funziona:

$ sudo su
# cd test

È possibile trasformarlo in un unico rivestimento? (Non un grosso problema, solo curiosità oziosa:)

Le varianti che ho provato non hanno funzionato:

$ 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

L'ultimo non dà un errore, ma è in una nuova shell che esce alla fine della riga, quindi in realtà non mi porta da nessuna parte.

Qualcuno può illuminarmi sul motivo per cui ciò accade? Perché sudo cd non è stato trovato, quando per esempio sudo ls ... funziona bene?

    
posta j-g-faustus 02.01.2011 - 16:36

2 risposte

21

In teoria, il problema è che se non si dispone dei diritti di esecuzione su una directory, non si dovrebbe essere in grado di leggere il contenuto della directory. Supponiamo ora di poter fare ciò che volevi:

[email protected]:/$ sudo cd restricted-dir
[email protected]:/restricted-dir$ ls
file1 file2

Come puoi vedere, hai inserito la directory usando i privilegi sudo, poi, quando sudo ritorna, diventi di nuovo un utente, e sei in una directory dove normalmente non dovresti essere.

Tecnicamente, il problema è il seguente.

sudo cd restricted-dir

cd è una shell built-in, non un comando.

sudo cd -i restricted-dir

Probabilmente sei in / root, ma avrebbe lo stesso problema di quello successivo.

sudo cd -s restricted-dir

Apri una nuova shell di root, cd nella directory, quindi esci dalla shell di root e torna a dove hai iniziato.

Tutto sommato, l'unica soluzione è aprire una shell di root e tenerla aperta mentre ci si trova in quella directory.

    
risposta data petersohn 02.01.2011 - 16:52
5
sudo sh -c "cd restricted-dir; some-other-command"

cioè.

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

il pezzo chiave è "sh -c" che uso abbastanza spesso per eseguire una catena di comandi nello stesso contesto / processo della shell.

    
risposta data Tagar 07.11.2015 - 06:56

Leggi altre domande sui tag