为什么默认 PATH 中 /usr/local/games 位于 /usr/games 之后?

为什么默认 PATH 中 /usr/local/games 位于 /usr/games 之后?

PATHUbuntu(13.10以上)中,管理员(组中用户sudo)登录桌面环境后,环境变量的默认值为:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

在/usr/local/sbin 中在/usr/本地/bin出现 /usr/sbin/usr/bin。 然而,/usr/local/游戏出现 /usr/游戏

这有什么原因吗?还是只是打字错误?

更多信息

  • 普通/管理员用户PATH登录后的默认设置su - user

    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
    
  • 普通/管理员用户PATH登录虚拟控制台后的默认设置:

    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    
  • PATH用户默认root(使用登录后sudo -i;我还没有尝试启用 root 用户并通过虚拟控制台登录):

    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
  • 内容/etc/环境

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    
  • 相关行/etc/sudoers

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    
  • 相关行/etc/login.defs

    ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
    

重复主要问题:原因是什么/usr/local/游戏出现在之后/usr/游戏,而不是之前,在默认的PATH

还有一个相关的问题:的价值从何PATH而来?似乎/etc/环境/etc/login.defs在不同情况下使用。

答案1

我除了“这是一个错误”之外,想不出任何理由。

据我所知,/usr/local/games这是相当晚才添加的/etc/environment。我的 12.04 机器没有它。

我真的很费劲才找到它的来源/etc/environment。结果发现它不是打包的文件,而是在安装时创建的(我猜是为了防止它在升级过程中损害现有配置)。感谢Unix.SE 上的这个答案,我们可以看到它来自libpam-modulespostinst脚本。

# Add PATH to /etc/environment if it's not present there or in
# /etc/security/pam_env.conf
if [ "$1" = "configure" ] && dpkg --compare-versions "$2" lt 1.1.3-7ubuntu3; then
        if ! grep -qs ^PATH /etc/security/pam_env.conf; then
                if ! grep -qs ^PATH= /etc/environment; then
                        echo 'PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"' >> /etc/environment
                elif ! grep -qs "^PATH=.*/usr/local/games" /etc/environment; then
                        sed -i '/^PATH=/ s,:/usr/games,:/usr/games:/usr/local/games,g' /etc/environment
                fi
        fi
fi

是的,我建议报告针对 pam 的错误

相关内容