Odpowiedzi:
Oba pliki wskazują to samo miejsce:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
jest dowiązany do gksu
. Ale to nie znaczy, że robią to samo, wręcz przeciwnie.
Aplikacje mogą wykryć polecenie użyte do jego uruchomienia. Zazwyczaj jest to argv[0]
w językach $0
w stylu C lub w skryptach powłoki w stylu Bourne'a. Aplikacja może na to patrzeć iw tym przypadku faktycznie zmienia sposób działania. Pierwsze wskazanie tego znajduje się na man gksu
stronie:
gksu is a frontend to su and gksudo is a frontend to sudo.
Jeśli spojrzysz na źródło ( apt-get source gksu
) run_mode
, zobaczysz, jak to wykrywa:
{ /* support gksu_sudo_run */
gchar *myname = g_path_get_basename (argv[0]);
if (!strcmp(myname, "gksudo"))
run_mode = SUDO_MODE;
g_free (myname);
}
Możesz to zmienić za pomocą argumentów --su-mode
/ -w
i --sudo-mode
/ -S
(abyś mógł uruchamiać równoważne polecenia bez potrzeby użycia gksudo
dowiązania symbolicznego ... Ale to zależy od ciebie.
Jeśli chcesz wiedzieć, jak naprawdę różnią się te „tryby”, możesz tylko trochę uciec gksu
. Musisz to śledzić libgksu
. Jest to biblioteka, która faktycznie sprawdza uprawnienia przed przekazaniem do systemu.
Jeśli nie zostanie określony żaden tryb (np. Wywołujeszgksu
bez argumentów), zanim osiągnie libgksu
, sprawdzi Gconf (jak wskazuje Stefano), a jeśli nadal nie będzie mógł zdecydować, przejdzie w su
tryb domyślny .
bash
włącza tryb ścisły POSIX po wywołaniu jako sh
. I gksu
jest również świadomy nazwy wywołania.
W Ubuntu (!) Nie ma różnicy.
gksu
normalnie logowałby się jako użytkownik root i uruchamiał aplikację w tej sesji. Jednak w Ubuntu domyślnie używa „trybu sudo”, który jest równoważny z uruchomieniem gksudo
. Wynika to z faktu, że na Ubuntu domyślnie nie można zalogować się jako root .
gksudo
jest graficznym odpowiednikiem sudo
(i jak zauważa Oli, tylko symboliczny link do gksu)
Z wpisu gksu w gconf:
Ponadto na temat różnicy między sudo i gksudo:
Nigdy nie powinieneś używać normalnego sudo do uruchamiania aplikacji graficznych jako root. Powinieneś używać gksudo (kdesudo na Kubuntu) do uruchamiania takich programów. gksudo ustawia HOME = ~ root i kopiuje .Xauthority do katalogu tmp. Zapobiega to posiadaniu plików w katalogu domowym przez root. (AFAICT, to wszystko, co jest szczególne w środowisku uruchomionego procesu z gksudo vs. sudo).
- (z dokumentacji społeczności za pośrednictwem Chrisa Wilsona )
Wiem, że to stary wątek, ale zostałem poproszony o opowiedzenie o subtelnej, ale zasadniczej różnicy między gksu
i gksudo
.
Chociaż długo i intensywnie szukałem, nigdzie nie mogę znaleźć udokumentowanej różnicy, a jednak ona istnieje. Nie dowiedziałem się również, dlaczego jest taka różnica. Znalazłem to w trudny sposób, gdy przypadkowo usunąłem niektóre pliki systemowe właśnie z powodu tej różnicy (omówione w wątku na forach Ubuntu ) - korzystałem gksu
, ale od tego czasu zawsze starałem się używać gksudo
.
Podsumowując, spróbuj tego.
touch abc
touch abc.tmp
touch abctmp
Uruchom następujące sześć poleceń. Pierwsze pięć daje taki sam (oczekiwany) wynik (tj. Po prostu abc.tmp
), podczas gdy szósty zawiera dodatkowy plik ( abctmp
), którego nie powinien.
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
Wyobraź sobie problemów podczas wymiany -print
ze -delete
w find
poleceniu (co jest dokładnie to, co się ze mną stało, powodując niektóre pliki systemowe do usunięcia).
Więc użyj gksudo
zamiast gksu
.
gksudo
jest to równoważne z pisaniemgksu --sudo-mode