原创

su 和 su - 的区别

温馨提示:
本文最后更新于 2022年11月02日,已超过 780 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

问题场景: 一个用root 用户启动的项目运行了好久,突然停了,我先登录用户A,然后su root ,在启动项目,程序运行过程中 报
 -bash: ansible: command not found,命令找不到,也就是没有环境变量

第一步 验证ansible 是否真的不能运行

第二步 查找ansible 所在的位置

        whereis ansible

   ansible: /etc/ansible /usr/local/bin/ansible

第三步 ansible 应该就在/usr/local/bin/目录下,查看有没有将该环境变量添加到环境变量中

     echo $PATH

环境变量中的确没有/usr/local/bin

 第四步 将该目录添加到环境变量中去,正好问了一下同事,同事说不应该呀,前几天还有环境变量,怎么会突然没有环境变量了,他然后他 执行

    su - root

    ansible

可以正常执行

然后查看环境变量

echo $PATH

可以看到/usr/local/bin 已经在环境变量中

su root 和su - root 同样都是切换到root 用户,竟然通过echo $PATH 查看到的环境变量不一样,通过查资料发下

su 和su - 主要有以下不同:

    1 su root 只是切换到root 身份,具有了root权限,环境变量分为用户环境变量和系统环境变量,当前的用户环境变量仍然为 之前的用户环境变量,而非root 用户的环境变量。 su - root ,不仅切换到root 身份,具有了root权限,用户的环境变量也为root用户的环境变量。

   2 su root 当前的工作目录仍然为原来用户的工作目录  ,su - root 当前的工作目录将会切换为root用户的工作目录。

 

 

正文到此结束
本文目录