gksudo 和 gksu 有什么区别?

gksudo 和 gksu 有什么区别?

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 语言或$0Bourne 风格的 shell 脚本。应用程序可以查看它,在这种情况下,它实际上会改变其工作方式。第一个迹象是在页面中man gksu

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

如果你查看源代码(apt-get source gksurun_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

总而言之,尝试一下。

  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

相关内容