In questo tutorial impariamo cos'è il comando su (cambia utente) in Unix/Linux e la differenza tra su e su - comandi. Linux è un kernel del sistema operativo multiutente, il che significa che più utenti possono accedere a un sistema Linux contemporaneamente.
Puoi passare da un utente all'altro sulla riga di comando stessa con il comando su. Il comando su sta per 'utente sostitutivo' o può passare da un utente all'altro. Questo comando cambia le credenziali dell'utente in quelle di un utente o root specificato (per impostazione predefinita).
Cosa sta facendo il comando su
Il comando su, come indicato sopra, cambierà le credenziali dell'utente con quelle di un altro utente. Controlliamo un esempio
[raghu@redhat-server ~]$ su jack
Password:
[jack@redhat-server raghu]$ id
uid=501(jack) gid=501(jack) groups=501(jack),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh
Il comando id restituisce le informazioni sull'utente corrente. Nell'output sopra, puoi vedere l'utente modificato. Quando non viene fornito alcun argomento al comando su, cambia in utente root per impostazione predefinita. Le pagine man di Ubuntu hanno spiegato più informazioni.
[jack@redhat-server raghu]$ su
Password:
[root@redhat-server raghu]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh
Simulare l'accesso con su -
Con il comando su --login o su -l o semplicemente 'su -', puoi cambiare utente come se fosse un login da un terminale.
[raghu@redhat-server ~]$ su - jack
Password:
[jack@redhat-server ~]$ id
uid=501(jack) gid=501(jack) groups=501(jack),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh
Differenza tra su vs su-
La differenza tra 'su' e 'su -' è che alcune variabili di ambiente come la variabile PATH non cambiano i valori solo con su (cioè se l'opzione -l o - è omessa). Alcuni comandi potrebbero non essere eseguiti se PATH non è impostato correttamente. Ad esempio, considera il seguente scenario:
[jack@redhat-server ~]$ su root
Password:
[root@redhat-server jack]# fdisk -l
bash: fdisk: command not found
[root@redhat-server jack]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/jack/bin
Puoi vedere che le directory sbin non sono incluse nel PATH dell'utente root. Quindi non esegue il comando fdisk. Ora proviamo ad accedere con su - comando:
[jack@redhat-server ~]$ su -
Password:
[root@redhat-server ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1044 8281507+ 8e Linux LVM
[root@redhat-server ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
Un'altra differenza tra questi due comandi sono gli script di accesso. Per prima cosa, discutiamo di alcuni script di accesso:
Quando un utente accede a un sistema, i seguenti 4 file vengono eseguiti se le credenziali dell'utente sono legittime:
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
Quando accedi con il comando 'su -', tutti questi script vengono eseguiti. Ma con su, vengono eseguiti solo gli script bashrc, ovvero gli script /etc/bashrc e ~./bashrc.
In Ubuntu potresti ricevere un errore di autenticazione quando esegui il comando su. Ricevi questo errore perché in Ubuntu l'account root è disabilitato per impostazione predefinita.
user@host:~$ su
Password:
su: Authentication failure
Invece di su usa sudo -i
o sudo
seguito dal tuo comando.
Conclusione
In questo tutorial, abbiamo appreso la differenza tra i comandi "su" e "su -" in Linux. Maggiori informazioni sono disponibili in man su. Spero che ti sia piaciuto leggere e per favore lascia i tuoi suggerimenti qui sotto.
Leggi anche:
- 38 comandi Linux di base da apprendere con esempi
- Come aggiungere un utente a Sudoer su Debian