切换用户后,/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 环境用的是当前用户本身的环境。

你可能感兴趣的:(Linux,linux,操作系统)