Respostas:
Ambos os arquivos apontam para o mesmo local:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
está vinculado a gksu
. Mas isso não significa que eles fazem as mesmas coisas, longe disso.
Os aplicativos podem detectar o comando usado para executá-lo. Isso geralmente ocorre argv[0]
em linguagens no estilo C ou $0
em scripts shell no estilo Bourne. O aplicativo pode analisar isso e, neste caso, na verdade, altera como ele funciona. A primeira indicação disso está na man gksu
página:
gksu is a frontend to su and gksudo is a frontend to sudo.
Se você procurar na fonte ( apt-get source gksu
) run_mode
, verá como ele detecta isso:
{ /* support gksu_sudo_run */
gchar *myname = g_path_get_basename (argv[0]);
if (!strcmp(myname, "gksudo"))
run_mode = SUDO_MODE;
g_free (myname);
}
Você pode substituir esse com os --su-mode
/ -w
e --sudo-mode
/ -S
argumentos (assim você pode executar comandos equivalentes sem a necessidade da gksudo
ligação simbólica ... Mas isso é até você.
Se você quiser saber como esses "modos" realmente diferem, há apenas um pouco de escape gksu
. Você precisa segui-lo libgksu
. Esta é a biblioteca que realmente verifica as permissões antes de entregá-las ao sistema.
Se nenhum modo for especificado (por exemplo, você chamar gksu
sem argumentos) quando chegar libgksu
, ele verificará o Gconf (como Stefano aponta) e, se ainda não puder decidir, o padrão será o su
modo.
bash
ativa o modo estrito POSIX quando chamado como sh
. E também gksu
está ciente do nome da chamada.
No Ubuntu (!), Não há diferença.
gksu
normalmente efetuaria login no usuário raiz e executaria um aplicativo nesta sessão. No entanto, no Ubuntu, o padrão é usar o "modo sudo", que é equivalente à execução gksudo
. Isso ocorre porque no ubuntu, você não pode fazer login como root por padrão.
gksudo
é o equivalente gráfico de sudo
(e, como Oli aponta, apenas um link simbólico para gksu)
Na entrada gconf do gksu:
Além disso, sobre a diferença entre sudo e gksudo:
Você nunca deve usar o sudo normal para iniciar aplicativos gráficos como root. Você deve usar o gksudo (kdesudo no Kubuntu) para executar esses programas. O gksudo define HOME = ~ root e copia .Xauthority para um diretório tmp. Isso evita que os arquivos no diretório inicial sejam de propriedade da raiz. (AFAICT, isso é tudo o que há de especial no ambiente do processo iniciado com gksudo vs. sudo).
- (a partir da documentação da comunidade via Chris Wilson )
Eu sei que esse é um tópico antigo, mas me pediram para falar sobre uma diferença sutil, mas essencial, entre gksu
e gksudo
.
Embora eu tenha procurado por muito tempo, não consigo encontrar uma diferença documentada em nenhum lugar e, no entanto, ela existe. Também não descobri por que há uma diferença. Achei isso da maneira mais difícil quando acidentalmente excluí alguns arquivos do sistema precisamente por causa dessa diferença (discutida em um tópico nos fóruns do Ubuntu ) - eu estava usando gksu
, mas desde então sempre me certifico de usá-lo gksudo
.
Para resumir, tente isso.
touch abc
touch abc.tmp
touch abctmp
Execute os seis comandos a seguir. Os cinco primeiros dão o mesmo resultado (esperado) (ou seja, apenas abc.tmp
), enquanto o sexto inclui um arquivo extra ( abctmp
) que não deveria.
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
Imagine os problemas ao substituir -print
por -delete
no find
comando (que é exatamente o que aconteceu comigo, fazendo com que alguns arquivos do sistema sejam excluídos).
Então, por favor use em gksudo
vez de gksu
.
gksudo
é equivalente a tipagemgksu --sudo-mode