切换用户后,/etc/profile的配置不起效

遇到的问题

在配置linux的时候,发现一个问题:su root切换到root用户后,/etc/profile 中配置的PATH不起效果。linux

问题分析和疑问

  1. 是否是~/.profile,~/.bashrc等初始化当前用户的脚本有非法的初始化操做覆盖了PATH ?
  2. /etc/profile 定义的PATH不是全局有效吗?

解决办法

疑问1很快排除了,后来google 到这里找到解决思路。
用su - root 代替 su rootshell

跟着文中提到的几个概念(登陆shell,交互shell),查了一下资料,思路终于理清了。bash

  1. 不一样用户初始的PATH是不同的。切换用户系统会先将PATH设为初始值,而后再根据调用的初始化脚本,添加PATH中的路径。并非全部用户共用一个PATH
  2. su - root,产生一个登陆shell去执行后面的指令。登陆 shell 执行的是shell 登陆的流程,会执行 /etc/profile,/etc/profile.d/下定义的*.sh都会执行。
  3. su root,产生一个非登陆交互shell,非登陆交互shell,只执行 用户家目录下 .profile等配置文件。

一些相关的概念

  1. shell 是用户和操做系统内核通讯的接口。
  2. 因为历史的缘由,产生了不少shell的办法。/etc/shells文件记录了当前系统可用的shell。linux 系统默认的shell是bash。
  3. 能够经过命令: ps -ef | grep bash 查看当前活跃的shell
  4. exit 当前shell(login shell能够用logout退出)。
  5. echo $$能够查看当前shell ID , 退出shell先后能够执行这个指令进行验证。
相关文章
相关标签/搜索