Есть ли разница между поведением gksu foo
и gksudo foo
?
Можно ли их использовать взаимозаменяемо?
Оба файла указывают на то же место:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
symlinked к gksu
. Но это не означает, что они делают то же самое, отнюдь нет.
Приложения могут обнаружить команду, используемую для выполнения его. Это обычно argv[0]
на языках C-стиля или $0
в сценариях оболочки стиля Границы. Приложение может посмотреть на это и в этом случае, на самом деле оно изменяется, как оно работает. Первый признак этого находится в 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 (как Stefano указывает), и если это все еще не может решить, это примет значение по умолчанию к su
режим.
В Ubuntu (!) Нет разницы.
gksu
обычно регистрируют пользователя root и запускают приложение в этом сеансе. Однако в Ubuntu по умолчанию используется «режим sudo», который эквивалентен запуску gksudo
. Это потому, что в Ubuntu вы не можете войти в систему как root по умолчанию.
gksudo
является графическим эквивалентом sudo
(и, как указывает Оли, просто символическая ссылка на gksu)
Из записи gconf gconf:
Более того, на разнице между sudo и gksudo:
Вы никогда не должны использовать обычный sudo для запуска графических приложений от имени root. Вы должны использовать gksudo (kdesudo на Kubuntu) для запуска таких программ. gksudo устанавливает HOME = ~ root и копирует .Xauthority в каталог tmp. Это предотвращает принадлежность файлов в вашем домашнем каталоге пользователю root. (AFAICT, это все, что особенного в среде запущенного процесса с gksudo vs. sudo).
blockquote>
& nbsp; - (из документации сообщества через Криса Уилсон )
Я знаю, что это старая ветка, но меня попросили рассказать вам о тонком, но существенном различии между 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
(именно это и произошло со мной, в результате чего некоторые системные файлы были удалены). [ 1127]
Поэтому, пожалуйста, используйте gksudo
вместо gksu
.