Ответы:
Оба файла указывают на одно и то же место:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
является символической ссылкой на gksu
. Но это не значит, что они делают одно и то же, далеко не так.
Приложения могут обнаружить команду, используемую для ее запуска. Обычно это argv[0]
в языках C-стиля или $0
в сценариях оболочки Bourne-стиля. Приложение может посмотреть на это, и в этом случае, на самом деле, оно меняет свою работу. Первое указание на это на man gksu
странице:
gksu is a frontend to su and gksudo is a frontend to sudo.
Если вы посмотрите на source ( apt-get source gksu
) для run_mode
, вы увидите, как он обнаруживает это:
{ /* support gksu_sudo_run */
gchar *myname = g_path_get_basename (argv[0]);
if (!strcmp(myname, "gksudo"))
run_mode = SUDO_MODE;
g_free (myname);
}
Вы можете переопределить это с помощью аргументов --su-mode
/ -w
и --sudo-mode
/ -S
(чтобы вы могли запускать эквивалентные команды без использования gksudo
символической ссылки ... Но это ваше дело.
Если вы хотите знать , как эти «режимы» действительно отличаются, есть только немного спасаясь в gksu
. Вы должны следовать за этим в libgksu
. Это библиотека, которая на самом деле проверяет разрешения перед передачей в систему.
Если gksu
к моменту его достижения режим не указан (например, вы вызываете без аргументов) libgksu
, он проверит Gconf (как указывает Стефано) и, если он все еще не может принять решение, он будет использовать su
режим по умолчанию .
bash
включает строгий режим POSIX при вызове как sh
. И gksu
это также известно имя вызова.
В Ubuntu (!) Нет разницы.
gksu
обычно входил бы в систему как пользователь root и запускал приложение в этом сеансе. Однако в Ubuntu по умолчанию используется «режим sudo», который эквивалентен запуску gksudo
. Это потому, что в Ubuntu вы не можете войти в систему как root по умолчанию.
gksudo
является графическим эквивалентом sudo
(и, как указывает Оли, просто символическая ссылка на gksu)
Из gconf записи gksu:
Кроме того, о разнице между sudo и gksudo:
Вы никогда не должны использовать обычный sudo для запуска графических приложений от имени пользователя root. Вы должны использовать gksudo (kdesudo на Kubuntu) для запуска таких программ. gksudo устанавливает HOME = ~ root и копирует .Xauthority в каталог tmp. Это предотвращает принадлежность файлов в вашем домашнем каталоге пользователю root. (AFAICT, это все, что особенного в среде запущенного процесса с gksudo vs. sudo).
- (из документации сообщества через Криса Уилсона )
Я знаю, что это старая ветка, но меня попросили рассказать о тонкой, но существенной разнице между gksu
и gksudo
.
Хотя я долго и трудно, я не могу найти документированную разницу где - нибудь, и все же она существует. Я также не выяснил, почему есть разница. Я нашел это трудным способом, когда случайно удалил некоторые системные файлы именно из-за этой разницы (обсуждаемой в теме на форумах Ubuntu ) - я использовал gksu
, но с тех пор я всегда использовал их gksudo
.
Подводя итог, попробуйте это.
touch abc
touch abc.tmp
touch abctmp
Выполните следующие шесть команд. Первые пять дают тот же (ожидаемый) результат (т. Е. Просто abc.tmp
), тогда как шестое включает дополнительный файл ( abctmp
), чего не должно быть.
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
Представьте себе проблемы при замене -print
с -delete
в find
команде (это именно то , что случилось со мной, в результате чего некоторые системные файлы , которые будут удалены).
Поэтому, пожалуйста, используйте gksudo
вместо gksu
.
gksudo
эквивалентно вводу текстаgksu --sudo-mode