linux环境变量加载

水一篇linux下path路径设置的问题吧

今天在使用一个程序的时候, 发现使用sudo执行的时候查找不到命令, 想了想, 是sudo后切换了环境, 使用的是root的环境, 而我想用普通用户的权限来执行自然是用不了的

原文来自于 stackoverflow

系统范围

  1. /etc/environment 放置全局环境变量, 一般是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
  2. /etc/environment.d/*.conf 放置全局环境变量, $path命令不读取这个, 使用env命令会找到这里面设置的, 不会传给用户的shell, 这里设置
  3. /etc/xprofile, 启动x windows执行的shell脚本, 每一个使用x的用户运行此命令, x程序可见,一般不设置
  4. /etc/profile和/etc/profile.d/*, 在使用登录shell的时候会读取, 意思是执行sudo login root后会生效, 但是su root不生效
  5. /etc/<shell>.<shell>rc, 仅限于单个shell, 非常不建议, 比如bash是.bashrc

用户范围

  1. ~/.pam_environment, 加载pam时候加载(不好用)
  2. ~/.xprofile, 当用户登录到x的时候执行, 对于每一个用户的x程序可见
  3. /.profile,/._profile,~/._login, 从shell启动的程序可见
  4. ~/.<shell>rc, 同系统下, 打开shell生效

目前的解决方案: 将go的bin目录加入到/etc/environment, go的配置放在了/etc/environment.d/*.conf, 使其在登录root的时候也可以正常使用, 然后配置了一些在.profile里面,然后在.zshrc里面在source了.profile(这样不好)

but, 还有个问题, sudo运行还是没有go命令,原因是sudoers文件设置了一个secure_path, 意思都懂, 就是安全路径, 只允许使用这几个路径下面的, 我为了省事一点是直接注释了这一行, 正确应该学这个做添加环境路径

tips

su - :具有root的权限,但是使用的是普通用户的环境变量。

env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。该命令只使用”-“作为参数选项时,隐藏了选项”-i”的功能。若没有设置任何选项和参数时,则直接显示当前的环境变量。

path优先级问题, 会先读取系统的,才会读取自己设置的,比如java, 我自己装了一个java, 但是有次某程序给我装了openjdk,安装在了/usr/bin下面,导致我的不生效了就很烦


文章作者: ajin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ajin !
 上一篇
安全之蜜罐初探 安全之蜜罐初探
蜜罐技术以及思想以下仅为本人对于蜜罐的一些认识,其中引用了有用的回答,如有侵权,请发邮件给我,下文如有错误,敬请指出 来源蜜罐技术最早应用于圣地牙哥超级电脑中心, 由以为安全专家设立”蜜罐”引诱攻击者上钩, 通过朔源技术追踪,最终逮捕入侵者
2020-09-08
下一篇 
ubuntu更换内核 ubuntu更换内核
就在三天前, 我意外更新了最新ubuntu最新内核,然后,系统双双崩了,电脑键盘坏了,网络坏了,蓝牙坏了,什么都坏了,开始了修电脑 先重启,万一会好呢结论是,不会, linux不是windows google怎么换内核,发现都是一半一半,
2020-07-15
  目录