Qual è la differenza tra "sudo -i" e "sudo bash -l"


13

C'è una domanda recente riguardante più amministratori di sistema che lavorano come root ed è sudo bash -lstata citata.

Ho cercato questo su Google e SE, ma non capisco la differenza tra sudo bash -le sudo -i.

Dalle pagine man di bash e sudo sembra che la differenza potrebbe essere che sudo bash -lesegue ~ / .bash_profile, ~ / .bash_login e ~ / .profile e ~ / .bash_logout dell'utente root, ma dal test me stesso sembra esegue il normale .bashrc dell'utente e non quello principale. Potrei aver frainteso a quale utente l'espressione ~ faccia riferimento nelle pagine man. Sarebbe gradito chiarire la differenza e gli scenari di utilizzo.

Risposte:


10

Si differenziano per il fatto che se la shell di accesso dell'utente root specificata in / etc / passwd non è bash, il secondo comando ti fornirà una shell bash come root mentre il primo comando utilizzerà qualunque shell interattiva dell'utente root.


Ciao @ johnshen64, saresti in grado di chiarire i diversi scenari di utilizzo?
Rqomey,

2
alla gente piace la shell che stanno usando, quindi se vuoi essere sicuro di usare bash, allora dovresti usare la seconda forma. il secondo modulo simula anche un login effettivo (che significa -l). ovviamente, puoi anche digitare bash quando scopri che l'utente (il default è root) non ha bash come shell interattiva nell'uso di sudo -i. altrimenti la differenza è molto minore. come mostra l'altra risposta, ci sono anche alcune piccole differenze ambientali. nella maggior parte dei casi la differenza non ha importanza e la prima è più breve, poiché le distribuzioni più comuni usano bash. Uso raramente il secondo modulo.
johnshen64,

4

Anche per aggiungere alla risposta @ johnshen64 ho notato che l' sudo -iinvocazione aggiorna la $USERNAMEvariabile env a roote cd ~alla home dell'utente in questo modo;

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

Tuttavia, per non sudo bash -l $USERNAMEviene molestato e la directory di lavoro non viene modificata. (anche se questo non è coerente con altri utenti, vedi commenti ...)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

Quindi presumibilmente non stai ottenendo esattamente lo stesso set di ~/.bashrc, o non nello stesso ordine ecc.

(la mia scatola potrebbe essere stata incasinata un po 'dai miei .bashrcarmeggi, quindi YMMV)


Grazie @ Tom H: echo $USERNAMErestituisce root entrambe le volte per me (sul mio desktop Ubuntu e centos 5.2). PWD è come si segnala comunque.
Rqomey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.