Linux 切换用户及环境变量的问题
背景
前几天用Linux的时候遇到一个问题,使用su
切换用户时,用户已经切换了,但是环境变量却还是原来用户的,导致命令执行不了。
现象
首先,用普通用户登录Linux,运行echo $PATH
:
square@debian:~$ whoami
square
square@debian:~$ echo $PATH
/home/square/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
随后,使用su root
切换到root用户:
square@debian:~$ su root
root@debian:~# whoami
root
root@debian:~# echo $PATH
/home/square/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
root@debian:~# source /etc/profile
root@debian:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
可以看到,切换到root用户后,环境变量是之前的普通用户的,必须手动执行source /etc/profile
,环境变量才变成root用户的。
问题原因
su
只获取用户的权限,没有获取环境变量;
su -
获取用户的权限和环境变量;
# sudo asks for *your* password and must be configured via /etc/sudoers
sudo -s # Shell for superuser
sudo -i # Login shell for superuser
sudo -u jimmy -s # Shell for user "jimmy"
sudo -u jimmy -i # Login shell for user "jimmy"
# su asks for the root password and usually requires no configuration
su # Shell for superuser
su - # Login shell for superuser
su jimmy # Shell for "jimmy"
su - jimmy # Login shell for "jimmy"
解决方案
使用su -
切换root用户,
square@debian:~$ echo $PATH
/home/square/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
square@debian:~$ su - root
Password:
root@debian:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通