gksudo和gksu有什么区别?
gksu foo
和gksudo foo
的行为有什么区别吗?
它们可以互换使用吗?
两个文件都指向同一个地方:
$ ls -l /usr/bin/gksudo lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
… gksudo
与gksu
。 但这并不意味着他们做同样的事情,远非如此。
应用程序可以检测用于运行它的命令。 这通常是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用户身份登录 。 -
gksudo
是sudo
的图形等价物(正如Oli指出的那样,只是gksu的符号链接)
从gksu的gconf条目:
此外,关于sudo和gksudo之间的区别:
您永远不应该使用普通的sudo以root身份启动图形应用程序。 你应该使用gksudo(Kubuntu上的kdesudo)来运行这样的程序。 gksudo设置HOME = ~root,并将.Xauthority复制到tmp目录。 这可以防止主目录中的文件归root所有。 (AFAICT,这与gksudo与sudo开始流程的环境有关。)
– (来自Chris Wilson的社区文件 )
我知道这是一个老话题,但我被要求告诉你 gksu
和gksudo
之间的微妙但本质区别。
虽然我看起来很长很难,但我无法在任何地方找到记录的差异,但它确实存在。 我也没有发现为什么会有区别。 当我不小心删除一些系统文件时,我发现这很难,因为这种差异( 在Ubuntu论坛的一个post中讨论过 ) – 我一直在使用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
想象一下在find
命令中用-delete
替换-print
时的问题(这正是我发生的事情,导致一些系统文件被删除)。
所以,请使用gksudo
而不是gksu
。