Ubuntu下sudo -s后环境变量的设置

本文介绍了在Ubuntu系统中如何正确地从普通用户切换到root用户,并确保切换后能正常加载环境变量。通过修改普通用户的.bashrc文件,使得使用sudo -s命令切换到root用户时能够继承所需的环境配置。

在Ubuntu下从普通用户用$sudo -s切换到root后,总是不带有环境变量,而用$su - root是切换到总的根用户,与此处的root有区别。一直找不到切换到root账户后的自动读取配置文件在哪里,今天受到高人指点:

$sudo -s

切换账户以后,用

$HOME

查看当前环境,原来还是在/home/xxx之下,所以,我们修改/home/xxx/.bashrc文件后,再次使用$sudo -s命令切换到超级用户,就带有环境变量了。


转载:忘了。。

你遇到的问题是: ```bash superset@VM-0-6-ubuntu:/home/ubuntu$ pwd /home/ubuntu ``` 明明切换到了 `superset` 用户,但当前工作目录仍然是 `/home/ubuntu`,而不是预期的 `/home/superset`。 这说明:**你没有正确进入 `superset` 用户的登录会话环境!** --- ## 🔍 问题原因分析 你执行了: ```bash sudo su -s /bin/bash superset ``` 这个命令 **只更换了 shell 和用户身份,但不加载用户的登录环境(如家目录、环境变量等)** 所以: - `$HOME` 仍是 `/home/ubuntu` - 当前路径停留在原地 `/home/ubuntu` - 无法创建 `/home/superset/.bash_history`(因为 bash 想写 `$HOME/.bash_history` → 实际是 `/home/ubuntu/.bash_history` 权限错乱) --- ## ✅ 正确解决方案:使用 `-` 参数完整切换用户 ### ✅ 推荐命令(关键区别加 `-`): ```bash sudo su - superset ``` 或者更明确地指定 shell: ```bash sudo su -l -s /bin/bash superset ``` > 参数说明: > - `-` 或 `-l`:表示 "login shell",会: > - 设置 `$HOME` 为 `/home/superset` > - 自动 cd 到家目录 > - 加载 `.profile`, `.bashrc` 等配置文件 --- ## 🛠️ 分步修复流程 ### 步骤 1:退出当前错误会话 ```bash exit ``` 回到 `ubuntu` 用户。 --- ### 步骤 2:确保家目录权限正确(你已经做了大部分) ```bash sudo mkdir -p /home/superset sudo chown -R superset:superset /home/superset sudo chmod 700 /home/superset sudo -u superset mkdir -p /home/superset/.cache/pip ``` ✅ 这些你都做对了! --- ### 步骤 3:**正确切换到 superset 用户** ```bash sudo su - superset ``` 📌 注意这里用了 `-`! 现在你应该看到: ```bash superset@VM-0-6-ubuntu:~$ pwd /home/superset ``` 并且提示符末尾是 `~`,表示已在主目录。 --- ### 步骤 4:验证环境正常 ```bash echo $HOME # 输出应为:/home/superset ls -la ~/.bash_history # 应存在且可读写 source /opt/superset/bin/activate pip install --upgrade pip ``` 🎯 此时不会再有以下警告: - `bash: history: /home/superset/.bash_history: cannot create...` - `WARNING: The directory '/home/superset/.cache/pip' ... not writable` --- ## 💡 对比三种 `su` 命令的区别 | 命令 | 行为 | 是否推荐 | |------|------|----------| | `sudo su superset` | 切换用户,保留原环境 | ❌ 不推荐 | | `sudo su -s /bin/bash superset` | 指定 shell,仍不加载家目录 | ⚠️ 半正确 | | `sudo su - superset` | 完整登录会话,切换 `$HOME` 和路径 | ✅ 强烈推荐 | --- ## ✅ 可选:初始化 `.bashrc` 和历史记录 首次登录时可以运行一次: ```bash cat > ~/.bashrc << 'EOF' export HISTSIZE=1000 export HISTFILE=~/.bash_history shopt -s histappend PS1='[\u@\h \W]\$ ' EOF touch ~/.bash_history chmod 600 ~/.bash_history ``` 这样下次登录就不会报 history 错误。 --- ## 📝 总结 | 错误操作 | 正确做法 | |--------|----------| | `sudo su -s /bin/bash superset` | 改成 `sudo su - superset` | | 当前路径在 `/home/ubuntu` | 必须自动跳转到 `/home/superset` | | `$HOME` 未更新 | 使用 login shell 才能重置 | > ✅ 关键口诀: > **“切换服务用户,一定要用 `su -`”** ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值