gksu foo
和的行为有什么区别吗gksudo foo
?
它们可以互换使用吗?
答案1
两个文件都指向同一个位置:
$ 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
模式。
答案2
在 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 拥有。(据我所知,这就是使用 gksudo 与 sudo 启动进程的环境的所有特殊之处)
。—(来自社区文档通过克里斯·威尔逊)
答案3
我知道这是一个老话题,但我一直要求告诉你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
。