command-not found 如何确定用户是否是管理员

command-not found 如何确定用户是否是管理员

irb1.9.1我是两台 ubuntu 服务器的管理员。在其中一台服务器上,当我尝试从未安装的软件包中运行命令(例如)时,收到以下消息:

The program 'irb1.9.1' is currently not installed.  You can install it by typing:
sudo apt-get install ruby1.9.1

在另一台服务器上,我得到以下答案:

The program 'irb1.9.1' is currently not installed.  To run 'irb1.9.1' please ask your administrator to install the package 'ruby1.9.1'

我可以sudo在两台服务器上执行此操作,所以我不明白第一台服务器如何知道我可以自己安装软件包并向我显示要运行的命令,而第二台服务器却不知道。

差异从何而来,我如何让第二台服务器像第一台服务器一样向我发出命令?

编辑回答 Braiam 的评论,apt-cache policy在两个服务器上返回相同的内容:

$ apt-cache policy command-not-found
command-not-found:
  Installed: 0.3ubuntu7.1
  Candidate: 0.3ubuntu7.1
  Version table:
 *** 0.3ubuntu7.1 0
        500 http://dk.archive.ubuntu.com/ubuntu/ raring-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     0.3ubuntu7 0
        500 http://dk.archive.ubuntu.com/ubuntu/ raring/main amd64 Packages

答案1

差异可能是由于您使用不同的 bash 版本或不同的 shell 造成的。使用:

echo $SHELL
bash --version

检查您当前的 shell 和/或当前的 bash 版本。

答案2

进一步调查该主题后,我发现command-not-found正在使用/usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py包含以下行的脚本:

self.user_can_sudo = grp.getgrnam("sudo")[2] in posix.getgroups() or grp.getgrnam("admin")[2] in posix.getgroups()

因此,基本上sudoadmin组中的任何人都将被视为管理员。其中一台机器配置为使用该wheel组,因此visudo将显示:

%wheel ALL=(ALL) ALL

在服务器上,我不是sudoadmin组的成员,所以command-not-found不知道我可以使用执行apt-get命令sudo。在将自己添加到sudo组后,我现在可以在终端上打印出要执行的 apt-get 命令。

相关内容