Відповіді:
Обидва файли вказують на одне місце:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
посилається на gksu
. Але це не означає, що вони роблять ті ж речі, далеко від цього.
Програми можуть виявити команду, яка використовується для її запуску. Зазвичай це argv[0]
на мовах С-стилю або $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
режимі.
bash
увімкнено жорсткий режим POSIX, коли викликається як sh
. І gksu
це також відомо ім'я виклику.
У Ubuntu (!) Різниці немає.
gksu
як правило, увійдіть в систему користувача root і запустіть програму на цьому сеансі. Однак для Ubuntu він за замовчуванням використовує "sudo mode", що еквівалентно запущеному gksudo
. Це тому, що в ubuntu ви не можете ввійти як root за замовчуванням.
gksudo
є графічним еквівалентом sudo
(і як вказує Олі, просто символічне посилання на gksu)
Із запису gconf gksu:
Крім того, про різницю між судо і gksudo:
Ніколи не слід використовувати звичайний sudo для запуску графічних програм як root. Для запуску таких програм слід використовувати gksudo (kdesudo на Kubuntu). gksudo встановлює HOME = ~ root та копіює .Xauthority у каталог tmp. Це запобігає становленню файлів у вашому домашньому каталозі. (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