Answers:
这两个文件指向相同的位置:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
与gksu
。但这并不意味着他们做同样的事情,还差得远。
应用程序可以检测到用于运行它的命令。这通常argv[0]
是C风格的语言或$0
Bourne风格的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
模式。
bash
,当调用时,打开POSIX严格模式sh
。而且gksu
是也意识到调用的名字。
在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的启动过程的环境的所有特殊信息)。
- (从社区文档通过克里斯·威尔逊)
我知道这是一个旧线程,但是有人要求我告诉您gksu
和之间的细微但必不可少的区别gksudo
。
尽管我经过漫长而艰苦的努力,但我找不到任何地方的书面差异,但确实存在。我也没有发现为什么会有区别。正是由于这种差异(在Ubuntu论坛的一个线程中进行了讨论),我意外地删除了一些系统文件时,才发现这很困难。我一直在使用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
想象一下问题,当您更换-print
用-delete
的find
命令(这正是发生在我身上,造成被删除一些系统文件)。
因此,请使用gksudo
代替gksu
。
gksudo
等同于键入gksu --sudo-mode