Есть ли разница между поведением gksu foo
и gksudo foo
?
Можно ли их использовать взаимозаменяемо?
Есть ли разница между поведением gksu foo
и gksudo foo
?
Можно ли их использовать взаимозаменяемо?
Оба файла указывают на одно и то же место:
$ 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.
Если вы посмотрите в источнике ( 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
.
В Ubuntu (!) нет разницы.
gksu
обычно регистрирует пользователя root и запускает приложение в этом сеансе. Однако на Ubuntu по умолчанию используется режим "sudo", что эквивалентно запуску gksudo
. Это потому, что на ubuntu вы не можете войти в систему с правами root по умолчанию.
gksudo
- графический эквивалент sudo
(и, как указывает Оли, просто символическая ссылка на gksu)
Из записи gconf в gksu:
Кроме того, на разницу между sudo и gksudo:
You should never use normal sudo to start graphical applications as root. You should use gksudo (kdesudo on Kubuntu) to run such programs. gksudo sets HOME=~root, and copies .Xauthority to a tmp directory. This prevents files in your home directory becoming owned by root. (AFAICT, this is all that's special about the environment of the started process with gksudo vs. sudo).
— (from the community documentation via Chris Wilson)
Я знаю, что это старый поток, но я был попросил сообщить вам о тонкой, но существенной разнице между 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
.