gksudo和gksu有什么区别?


58

是否有行为之间的区别gksu foogksudo foo
它们可以互换使用吗?

Answers:


39

这两个文件指向相同的位置:

$ ls -l /usr/bin/gksudo 
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu

... gksudogksu。但这并不意味着他们同样的事情,还差得远。

应用程序可以检测到用于运行它的命令。这通常argv[0]是C风格的语言或$0Bourne风格的shell脚本。应用程序可以对此进行查看,在这种情况下,实际上它可以更改其工作方式。该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中,默认情况下,由于启用了/ apps / gksu / sudo-mode,因此我们只会使用gksudo。因此,除非有人强制使用--su-mode选项,否则不会使用gksu。
Vish

5
@Oli:我不会立即得出结论,只是因为它是一个符号链接而没有区别。查看busybox,根据符号链接的名称,执行不同的操作。在这种情况下,我不知道它是否正确,但AFAIK确实是这样。
Lekensteyn

1
-1,极具误导性:软件使用不同的名称来表示它们可能会有所不同。例如bash,当调用时,打开POSIX严格模式sh。而且gksu 也意识到调用的名字。
MestreLion

在屏幕太小,手指太大的情况下在手机上使用互联网,我一定无意中拒绝了。我要求赔偿:)
雅各布·弗利姆

37

在Ubuntu(!)中,没有区别。

  • gksu通常会登录root用户并在此会话上运行应用程序。但是,在Ubuntu上,默认情况下使用“ sudo模式”,等效于running gksudo。这是因为在ubuntu上,默认情况下您不能以root用户身份登录

  • gksudo是图形上的等效项sudo(正如Oli所指出的,只是gksu的符号链接)

从gksu的gconf条目中:

替代文字

此外,关于sudo和gksudo之间的区别:

您永远不要使用普通的sudo以root身份启动图形应用程序。您应该使用gksudo(在Kubuntu上为kdesudo)运行此类程序。gksudo设置HOME =〜root,并将.Xauthority复制到tmp目录。这样可以防止您的主目录中的文件由root拥有。(AFAICT,这是有关使用gksudo与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-deletefind命令(这正是发生在我身上,造成被删除一些系统文件)。

因此,请使用gksudo代替gksu


刚刚在12.04LTS上尝试过。尚不完全了解为什么,但是有所不同。gksu的源代码表明,这gksudo等同于键入gksu --sudo-mode
Warren Hill

@WarrenHill-是的,理论上!但实际上没有。我不知道为什么。
帕迪·兰道

2
有趣,并在13.04上进行了验证。绝对看起来像是报价处理错误。
l0b0

4
提出了错误
l0b0

1
@ l0b0-谢谢,我已将错误添加到错误中。
Paddy Landau
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.