Risposte:
Entrambi i file puntano nello stesso posto:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
è collegato a gksu
. Ma questo non significa che facciano le stesse cose, tutt'altro.
Le applicazioni possono rilevare il comando utilizzato per eseguirlo. Questo è in genere argv[0]
nei linguaggi in stile C o $0
negli script di shell in stile Bourne. L'applicazione può vederlo e in questo caso, in realtà cambia il modo in cui funziona. La prima indicazione di questo è nella man gksu
pagina:
gksu is a frontend to su and gksudo is a frontend to sudo.
Se cerchi nel sorgente ( apt-get source gksu
) run_mode
, vedrai come rileva questo:
{ /* support gksu_sudo_run */
gchar *myname = g_path_get_basename (argv[0]);
if (!strcmp(myname, "gksudo"))
run_mode = SUDO_MODE;
g_free (myname);
}
Puoi sovrascriverlo con gli argomenti --su-mode
/ -w
e --sudo-mode
/ -S
(quindi puoi eseguire comandi equivalenti senza bisogno del gksudo
link simbolico ... Ma dipende da te.
Se vuoi sapere come queste "modalità" differiscono davvero, c'è solo un po 'di evasione gksu
. Devi seguirlo libgksu
. Questa è la libreria che controlla effettivamente le autorizzazioni prima di passare al sistema.
Se non viene specificata alcuna modalità (ad esempio, si chiama gksu
senza argomenti) quando raggiunge libgksu
, controllerà Gconf (come sottolinea Stefano) e se ancora non riesce a decidere, passerà alla su
modalità predefinita .
bash
attiva la modalità rigorosa POSIX quando viene invocato come sh
. Ed gksu
è anche a conoscenza del nome dell'invocazione.
In Ubuntu (!) Non c'è differenza.
gksu
accederebbe normalmente l'utente root ed eseguirà un'app in questa sessione. Tuttavia, su Ubuntu, per impostazione predefinita utilizza la "modalità sudo", che equivale a funzionare gksudo
. Questo perché su Ubuntu non è possibile accedere come root per impostazione predefinita.
gksudo
è l'equivalente grafico di sudo
(e come sottolinea Oli, solo un collegamento simbolico a gksu)
Dalla voce gconf di gksu:
Inoltre, sulla differenza tra sudo e gksudo:
Non si dovrebbe mai usare sudo normale per avviare applicazioni grafiche come root. Dovresti usare gksudo (kdesudo su Kubuntu) per eseguire tali programmi. gksudo imposta HOME = ~ root e copia .Xauthority in una directory tmp. Ciò impedisce che i file nella directory home diventino di proprietà di root. (AFAICT, questo è tutto ciò che è speciale sull'ambiente del processo avviato con gksudo vs. sudo).
- (dalla documentazione della comunità tramite Chris Wilson )
So che questo è un vecchio thread, ma mi è stato chiesto di parlarti di una differenza sottile ma essenziale tra gksu
e gksudo
.
Anche se ho guardato a lungo e duramente, non riesco a trovare una differenza documentata da nessuna parte, eppure esiste. Inoltre non ho scoperto perché c'è una differenza. L'ho trovato nel modo più difficile quando ho cancellato accidentalmente alcuni file di sistema proprio a causa di questa differenza (discussa in un thread nei forum di Ubuntu ) - che stavo usando gksu
, ma da allora mi sono assicurato di usarlo sempre gksudo
.
Per riassumere, prova questo.
touch abc
touch abc.tmp
touch abctmp
Esegui i seguenti sei comandi. I primi cinque danno lo stesso risultato (atteso) (cioè solo abc.tmp
) mentre il sesto include un file aggiuntivo ( abctmp
) che non dovrebbe.
find . -regextype posix-egrep -regex '.*\.tmp' -print
sudo find . -regextype posix-egrep -regex '.*\.tmp' -print
gksudo -- find . -regextype posix-egrep -regex '.*\.tmp' -print
gksudo --su-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
gksu --sudo-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
gksu -- find . -regextype posix-egrep -regex '.*\.tmp' -print
Immagina i problemi quando lo sostituisci -print
con -delete
nel find
comando (che è esattamente quello che mi è successo, causando l'eliminazione di alcuni file di sistema).
Quindi, per favore usa gksudo
invece di gksu
.
gksudo
equivale a digitaregksu --sudo-mode