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

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

问题描述

普通用户登录Linux系统后,su rootsudo -s切换到root用户后,/etc/profile 中配置的PATH不起效果。

问题分析和疑问

/etc/profile 定义的PATH不是全局有效吗?

解决办法

su - root 代替 su rootsudo -s

原理分析

1. 不同用户初始的PATH是不一样的。并不是所有用户共用一个PATH。
2. 切换用户系统会先将PATH设为初始值,然后再根据调用的初始化脚本,添加PATH中的路径。

实验分析

在/etc/profile.d/下有文件export_path.sh:

ubuntu@VM-0-15-ubuntu:~$ cat /etc/profile.d/export_path.sh
#!/bin/bash

export PATH=$PATH:/usr/local/go/bin/:/usr/local/nginx/sbin/

用户登录系统时,会自动执行该文件,在PATH变量中添加路径:
/usr/local/go/bin//usr/local/nginx/sbin/

以下是执行3种不同的切换root用户的命令后的环境变量:

ubuntu@VM-0-15-ubuntu:~$ sudo -s
root@VM-0-15-ubuntu:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
root@VM-0-15-ubuntu:~# exit
exit
ubuntu@VM-0-15-ubuntu:~$ su root
Password:
root@VM-0-15-ubuntu:/home/ubuntu# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
root@VM-0-15-ubuntu:/home/ubuntu# exit
exit
ubuntu@VM-0-15-ubuntu:~$ su - root
Password:
root@VM-0-15-ubuntu:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin/:/usr/local/nginx/sbin/

可以看到:

1. 执行3种不同的切换root用户的命令后,环境变量PATH的值都不完全相同;
2. 只有执行su - root后,才在PATH变量中添加路径:/usr/local/go/bin/ 和 /usr/local/nginx/sbin/

su - root,产生一个登录shell去执行后面的指令。登录 shell 执行的是shell 登录的流程,会执行 /etc/profile,/etc/profile.d/下定义的*.sh都会执行。

su root,产生一个非登录交互shell,非登录交互shell,只执行 用户家目录下 .profile等配置文件。

sudo -s 环境用的是当前用户本身的环境。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值