切換用戶後,/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先後能夠執行這個指令進行驗證。
相關文章
相關標籤/搜索