login shell和non-login shell取得的环境变量是不一致的
login shell和non-login shell取得的环境变量是不一致的
一、login shell
login shell是说在取得bash时需要完整的登陆流程。什么时候取得bash呢?当然就是用户登陆的时候。当你在tty1~tty6登陆,需要输入账号和密码,此时取得的bash就是login shell。
那这个login shell具体会读那些配置文件呢?
、etc/profile: 这是系统的整体设置, 如果你修改了这个文件,任何用户登陆时候都会按照你的修改改变,建议不要修改这个文件。每个用户登陆取得bash的时候都会读取这个文件,可以用vi来打开这个script读一下。根据你的UID读取PATH, MAIL, USER,LOGNAME, HOSTNAME, HISTSIZE等设置。然后设置你的umask的值,然后是读取/etc/profile.d/*.sh中的一系列文件。这个目录下主要规定了语系,颜色,vi的命令别名等,具体可以查看这个文件夹。这个是我的/etc/profile做的事情,咱们的可不一定一样哦。
有的说还会读取/etc/inputrc,/etc/sysconfig/i18n等,当然不同的系统配置当然不一样了,如果想深入学习的话可以读一下这个文件的shell,看一下具体都做了哪些问题。
2、 ~/.bash_profile 或 ~/.bash_login 或~/.profile
其实上边的这个三个文件只会读取一个的,如果存在~/.bash_profile就不会读取后两个; 如果不存在, 则读取~/.bash_login, 如果/.bash_login存在的话就不会读取/.profile; 如果/.bash_login不存在则读取/.profile。不同的系统,这三个文件的存在情况不一样。这三个文件属于用户个人偏好设置,如果你要配置个人的环境,就修改这里边就可以了。
我们可以去读一下这三个文件看看帮我们干了些什么事情,我们用vi打开对应的shellscript, 发现其实只帮我们做了一下判断/.bashrc这个文件是不是存在,如果存在的话,读取这个文件。我们用vi打开/.bashrc, 在~/.bashrc中,也只帮我们做了一件事情就是判断/etc/bashrc是否存在,存在的话读取/etc/bashrc。然后我们去读一下/etc/bashrc中的shell源码,发现在/etc/bashrc中帮我们做了几件事情,设置umask,设置PS1(就是命令提示符前边的一部分字符的格式),读取/etc/profile.d/*.sh等。是不是和/etc/profile做的事情差不多。
二、non-login shell
non-login shell就是取得bash不需要重复登录,就像你在桌面视图中用ctrl+alt+T启动的shell输入窗口就是non-login shell。还有就是你在shell窗口直接su切换的用户,都属于non-login shell。
non-login shell只会读取~/.bashrc这个文件,具体步骤和上边一样。
如果我们修改了我们的~/.bashrc如果想让配置立即生效,我们只需要用source命令。例如:$ source ~/.bashrc
三、su和sudo命令---------------------
平常我们切换root的时候一般直接su, 这样是不对的,因为我们如果直接su的话,有上边我们的分析是不会读取/etc/profile的,所以你的环境变量PATH,MAIL等是不会改变的,此时是non-login shell, 如果想读取/etc/profile的话我们需要用
我们切换其他用户的时候,加入切换到wukong,我们一般直接su wukong,这都是不对的,切换到一般用户我们需要用
才会读取~/.bash_profile等文件。现在知道怎么使用su命令了吧。
- login shell和non-login shell环境配置、 环境变量的设置、查看
- 关于ansible远程执行的环境变量问题(login shell & nonlogin shelll)
- Linux下Bash的操作环境相关,issue,motd,login shell,non-login shell,source,stty,set
- Linux中环境变量到底写在哪个文件中?解析login shell 和 no-login shell
- login-shell 和 non-login shell 对环境配置文件的读取
- Ubuntu交互式与非交互式、login与non-login以及环境变量文件
- login shell和non-login shell环境配置
- Linux中环境变量到底写在哪个文件中?解析login shell 和 no-login shell
- 环境配置文件: login, non-login shell, /etc/profile, ~/.bash_profile, source, ~/.bashrc
- 管道符和作业控制、shell变量和环境变量配置文件
- AIX 环境下取得昨天日期的 Shell
- shell环境变量
- Shell基础之环境变量配置文件
- 8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件
- shell变量赋值与环境
- shell环境变量了解
- RHCE课程-RH033Linux基础笔记四之shell以及环境变量
- shell的本地变量和环境变量
- linux命令行与shell脚本大全_第五章_使用环境变量
- shell脚本中的SQL*Plus的环境变量