Яка різниця між gksudo та gksu?


58

Чи є різниця між поведінкою gksu fooта gksudo foo?
Чи можна їх взаємозамінно використовувати?

Відповіді:


39

Обидва файли вказують на одне місце:

$ 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режимі.


1
Щоб додати коментар Олі; Хоча gksudo є посиланням на gksu, в Ubuntu за замовчуванням ми будемо використовувати лише gksudo, оскільки ввімкнено режим / apps / gksu / sudo. Тому, якщо хтось не змушує - параметр --su-mode gksu не використовується.
Виш

5
@Oli: Я б не відразу зробив висновок, що різниці немає лише тому, що це симпосилання. Подивіться на зайнятий ящик, залежно від назви символьної посилання виконуються різні дії. У цьому випадку я не знаю, правда це чи ні, але AFAIK це справді так.
Лекенштейн

1
-1, дуже оманливо: програмне забезпечення може поводитися по-різному, залежно від того, яке ім'я було використано для виклику їх. Наприклад, bashувімкнено жорсткий режим POSIX, коли викликається як sh. І gksu це також відомо ім'я виклику.
MestreLion

Використовуючи Інтернет на своєму мобільному телефоні з занадто маленьким екраном і занадто великими пальцями, я, мабуть, ненавмисно зволікаю. Я підтримав компенсацію :)
Яків Влійм

37

У Ubuntu (!) Різниці немає.

  • gksuяк правило, увійдіть в систему користувача root і запустіть програму на цьому сеансі. Однак для Ubuntu він за замовчуванням використовує "sudo mode", що еквівалентно запущеному gksudo. Це тому, що в ubuntu ви не можете ввійти як root за замовчуванням.

  • gksudoє графічним еквівалентом sudo(і як вказує Олі, просто символічне посилання на gksu)

Із запису gconf gksu:

alt текст

Крім того, про різницю між судо і gksudo:

Ніколи не слід використовувати звичайний sudo для запуску графічних програм як root. Для запуску таких програм слід використовувати gksudo (kdesudo на Kubuntu). gksudo встановлює HOME = ~ root та копіює .Xauthority у каталог tmp. Це запобігає становленню файлів у вашому домашньому каталозі. (AFAICT, це все, що особливо стосується середовища розпочатого процесу з gksudo vs. sudo).
 - документації громади через Кріса Вілсона )


14

Я знаю, що це стара нитка, але мене попросили розповісти про тонку, але істотну різницю між gksuі gksudo.

Хоча я виглядав довго і важко, я ніде не можу знайти документально підтвердженої різниці, і все ж вона існує. Я також не з'ясував, чому є різниця. Я виявив це важким способом, коли випадково видалив деякі системні файли саме через цю різницю (обговорювались в темі на Форумах Ubuntu ) - я використовував gksu, але з тих пір я переконався, що завжди користуюся gksudo.

Підводячи підсумок, спробуйте це.

  1. Створіть три файли в деякій папці:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Виконайте наступні шість команд. Перші п'ять дають такий самий (очікуваний) результат (тобто справедливий 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.


Щойно спробував це 12.04LTS. Ще не до кінця розумію, чому, але є різниця. Вихідний код для gksu показує, що gksudoеквівалентно набору текстуgksu --sudo-mode
Warren Hill

@WarrenHill - так, теоретично! Але не на практиці. Я не знаю чому.
Падді Ландау

2
Цікаво, і перевірено 13.04. Однозначно виглядає як помилка обробки цитат.
l0b0

4
Подала помилку .
l0b0

1
@ l0b0 - дякую, я додав свій голос за помилку.
Падді Ландау
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.