gksudo和gksu有什么区别?

gksu foogksudo foo的行为有什么区别吗?
它们可以互换使用吗?

两个文件都指向同一个地方:

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

gksudogksu 。 但这并不意味着他们同样的事情,远非如此。

应用程序可以检测用于运行它的命令。 这通常是C风格语言中的argv[0]或Bourne风格的shell脚本中的$0 。 应用程序可以查看它,在这种情况下,实际上它会改变它的工作方式。 第一个迹象是在man gksu页面:

 gksu is a frontend to su and gksudo is a frontend to sudo. 

如果你查看run_mode的源代码( apt-get source gksu ),你会看到它是如何检测到的:

  { /* 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用户身份登录 。

  • gksudosudo的图形等价物(正如Oli指出的那样,只是gksu的符号链接)

从gksu的gconf条目:

替代文字

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

您永远不应该使用普通的sudo以root身份启动图形应用程序。 你应该使用gksudo(Kubuntu上的kdesudo)来运行这样的程序。 gksudo设置HOME = ~root,并将.Xauthority复制到tmp目录。 这可以防止主目录中的文件归root所有。 (AFAICT,这与gksudo与sudo开始流程的环境有关。)
(来自Chris Wilson的社区文件 )

我知道这是一个老话题,但我被要求告诉你 gksugksudo之间的微妙但本质区别。

虽然我看起来很长很难,但我无法在任何地方找到记录的差异,但它确实存在。 我也没有发现为什么会有区别。 当我不小心删除一些系统文件时,我发现这很难,因为这种差异( 在Ubuntu论坛的一个post中讨论过 ) – 我一直在使用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 

想象一下在find命令中用-delete替换-print时的问题(这正是我发生的事情,导致一些系统文件被删除)。

所以,请使用gksudo而不是gksu