GNU/Linux >> Linux Esercitazione >  >> Linux

Esegui il comando cd come superutente in Linux

Come hai notato, cd è un comando integrato nella shell e c'è un motivo per questo:la "directory corrente" è un parametro per processo che può essere modificato solo dal processo stesso .

La directory di lavoro della tua shell non può essere modificata da alcun processo figlio, quindi anche se riesci a eseguire cd in una subshell privilegiata, cambierà solo la directory di lavoro di quella subshell temporanea, e non importa quale metodo usi per aumentare i privilegi.

Quindi per sudo cd per funzionare, sudo stesso dovrebbe essere una shell integrata e avrebbe bisogno di un modo per aumentare i privilegi di un processo già in esecuzione. Attualmente tale meccanismo non esiste su Linux (né sulla maggior parte degli altri sistemi operativi).

Un modo per ottenere ciò che desideri è eseguire un interattivo shell con privilegi di root (qualsiasi metodo funziona) e usa solo il normale cd in esso:

[[email protected] /]$ sudo bash
[[email protected] /]# cd /root/secret

Se vuoi fare tutto in un unico comando, dovrebbe assomigliare a questo:prima cambia la directory di lavoro, quindi avvia una shell interattiva:

sudo bash -c "cd /root/secret && bash"
su -c "cd /root/secret && zsh"

Nota:il comando esterno non deve essere una shell, deve solo essere qualcosa che cambia la sua directory di lavoro ed esegue un nuovo comando. I sistemi Linux recenti hanno uno o due helper che potrebbero essere utilizzati:

sudo nsenter --wd="/root/secret" bash       # util-linux v2.23 (debian jessie)
sudo env --chdir="/root/secret" bash        # coreutils v8.28 (debian buster)

Il vantaggio di questo metodo è che non richiede virgolette nidificate; puoi eseguire un comando composto da più parole senza problemi con spazi bianchi o caratteri speciali.

Infine, alcuni programmi hanno un'opzione incorporata per cambiare la loro directory di lavoro:

sudo make -C /etc
sudo git -C /root/secret log

L'altra risposta non è sbagliata.

Forse una risposta migliore è:

Lo strumento sudo ha lo scopo di eseguire azioni come superutente e stai descrivendo qualcosa che è più un cambiamento di stato che precederebbe azioni come "ls" o "vi" o altre per renderle più semplici.

Suggerisco, ad es. se vuoi modificare un file in /root/private/:

sudo ls /root
sudo ls /root/private
sudoedit /root/private/<name from previous ls command>

Questo è decisamente più digitando e un po 'più difficile del semplice cambio di directory. Tuttavia, è lontano più controllabile e molto più in linea con i principi alla base di sudo rispetto all'esecuzione di qualche variante di "sudo bash".

Se lavori in un ambiente sicuro, il tuo team IA ti ringrazierà. Se ti ritrovi a chiederti:"Che cambiamento ho fatto l'altro giorno?", allora tu ti ringrazierò, perché non dovrai chiederti quale o quali file hai modificato.

Detto questo, abilitare ed eseguire una qualche forma di "sudo bash" è decisamente più semplice. Se stavi cercando qualcosa di più semplice, perché stai usando 'sudo' invece di accedere semplicemente come root?


Linux
  1. Esegui container su Linux senza sudo in Podman

  2. Comando Linux mv

  3. Linux du comando

  4. comando IP Linux

  5. comando cd di Linux

Comando W in Linux

Al comando in Linux

Comando Df in Linux

Nozioni di base sulla riga di comando di Linux:sudo

Come eseguire un alias con Sudo in Linux

Come eseguire il comando SUDO in WinSCP per trasferire file da Windows a Linux