遇到的問題
在配置linux的時候,發現一個問題:su root切換到root用戶后,/etc/profile 中配置的PATH不起效果。
問題分析和疑問
- 是不是/.profile,/.bashrc等初始化當前用戶的腳本有非法的初始化操作覆蓋了PATH ?
- /etc/profile 定義的PATH不是全局有效嗎?
解決辦法
疑問1很快排除了,后來google 到這里找到解決思路。
用su - root 代替 su root
跟着文中提到的幾個概念(登錄shell,交互shell),查了一下資料,思路終於理清了。
- 不同用戶初始的PATH是不一樣的。切換用戶系統會先將PATH設為初始值,然后再根據調用的初始化腳本,添加PATH中的路徑。並不是所有用戶共用一個PATH。
- su - root,產生一個登錄shell去執行后面的指令。登錄 shell 執行的是shell 登錄的流程,會執行 /etc/profile,/etc/profile.d/下定義的*.sh都會執行。
- su root,產生一個非登錄交互shell,非登錄交互shell,只執行 用戶家目錄下 .profile等配置文件。
一些相關的概念
- shell 是用戶和操作系統內核通信的接口。
- 由於歷史的原因,產生了很多shell的辦法。/etc/shells文件記錄了當前系統可用的shell。linux 系統默認的shell是bash。
- 可以通過命令: ps -ef | grep bash 查看當前活躍的shell
- exit 當前shell(login shell可以用logout退出)。
- echo $$可以查看當前shell ID , 退出shell前后可以執行這個指令進行驗證。
