Shell变量_环境变量设置

环境变量设置

环境变量一般指的是用export内置命令导出的变量,用于定义shell的运行环境,保证shell命令的正确执行。

shell通过环境变量确定登录的用户名、PATH路径、文件系统等各种应用。

环境变量可以在命令行中临时创建,但是用户退出shell终端,变量即丢失,如要永久生效,需要修改环境变量的配置文件

  • 用户个人配置文件 /.bash_profile、/.bashrc 远程登录用户特有文件
  • 全局配置文件 /etc/profile、 /etc/bashrc、且系统建议最好建在 /etc/profile.d/,而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户
###修改个人的配置文件定义全局变量。
[mrxu@localhost myshell]$ cat ~/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export name="徐先生"
[mrxu@localhost myshell]$ 
[mrxu@localhost myshell]$ echo $name

[mrxu@localhost myshell]$ source  ~/.bash_profile 
[mrxu@localhost myshell]$ echo $name
徐先生
[mrxu@localhost myshell]$ exit
exit
[root@localhost myshell]# echo ${name}
脚本变量
[root@localhost myshell]# 
####在测试的时候遇到问题;修改mrxu用户下的 ~/.bash_profile文件添加全局变量name;  当用root登录时 su mrxu命令切换后查询变量值为空,只有source后才能加载出来,后查询原因只有su - mrxu 才会开启login shell,会加载到该配置文件; su mrxu 则开启no login shell不会加载到该配置文件
[root@localhost ~]# echo $name 

[root@localhost ~]# su mrxu   ###使用的no login shell        
[mrxu@localhost root]$ echo $name

[mrxu@localhost root]$ exit
exit
[root@localhost ~]# su -mrxu  ##语法错误需要空格
用法:
 su [选项] [-] [USER [参数]...]
选项:
 -, -l, --login                  使 shell 成为登录 shell
[root@localhost ~]# su - mrxu
上一次登录:五 9月  1 10:45:07 CST 2023pts/0 上
[mrxu@localhost ~]$ echo $name
徐先生
[mrxu@localhost ~]$ exit
登出
[root@localhost ~]# 

注意:

Login Shell

Login Shell通常是我们通过终端登录、切换到另一个账号以及使用ssh进行登录时创建的Shell环境。其一般是一次用户主动的第一次会话当中。

当创建Login Shell时,会按照下面顺序依次执行以下逻辑。

  1. 登录进程先执行/etc/profile
  2. /etc/profile会执行/etc/profile.d/*
  3. 之后登录进程执行~/.bash_profile
  4. ~/.bash_profile会执行~/.bashrc
  5. ~/.bashrc会执行/etc/bashrc

Non Login Shell
Non Login Shell通常是在Login Shell中创建的子Shell,比如在进程中创建Shell, 或者在Shell当中使用bash等命令创建一个子Shell,Non Login Shell通常无需进行用户登录、权限认证等逻辑。 所以你可以大胆的假设没有进行用户认证的Shell都是Non Login Shell。

需要注意的是,不是所有的用户登录的Shell都是Login Shell,它也有可能是Non Login Shell。比如当你通过su命令切换账号时却没有加上-时,此时Linux创建的是Non Login Shell。 su - work # Login Shell
su work # Non Login Shell
当创建Non Login Shell时,会按照下面顺序依次执行以下逻辑。

非登录进程会执行~/.bashrc
~/.bashrc会执行/etc/bashrc
/etc/bashrc 会在Non-Login Shell模式里执行 /etc/profile.d/

注意2:

  1. 每个用户都有自己的环境配置文件,/.bash_profile、/.bashrc,且以个人配置文件,优先加载变量,读取,以个人的优先生效。
  2. 当需要给所有用户都使用某个变量时,写入/etc/profile即可
[root@localhost ~]# cat -n /etc/profile
     1	# /etc/profile
 #.................
    74	
    75	unset i
    76	unset -f pathmunge
    77	export name="徐先生管理员"
    78	
[root@localhost ~]# sh
sh-4.2# echo $name
徐先生管理员
sh-4.2# exit
exit
[root@localhost ~]# echo $name
徐先生管理员
[root@localhost ~]# su - mrxu  ###mrxu下`~/.bash_profile`文件已调整name=徐先生;
上一次登录:五 9月  1 14:27:50 CST 2023pts/0 上
[mrxu@localhost ~]$ echo $name
徐先生
[mrxu@localhost ~]$ exit
登出
[root@localhost ~]# su mrxu
[mrxu@localhost root]$ echo $name #开启no login shell 不加载~/.bash_profile`
徐先生管理员
[mrxu@localhost root]$ 

检查系统环境变量的命令
  • set 输出所有变量,包括全局变量,局部变量(脚本函数这类)
  • env 只显示全局变量
  • declare 输出所有的变量,如同set
  • export , 显示和设置环境变量值
root@localhost ~]# set |wc -l
2849
[root@localhost ~]# set |grep ^name
name=徐先生管理员
[root@localhost ~]# 
[root@localhost ~]# declare |wc -l
2850
[root@localhost ~]# set |wc -l
2850
[root@localhost ~]# 
[root@localhost ~]# env |wc -l
48
[root@localhost ~]# export |wc -l
48
[root@localhost ~]# 
撤销环境变量
  • unset 变量名,删除变量或函数
[root@localhost ~]# su - mrxu
上一次登录:五 9月  1 14:34:06 CST 2023pts/0 上
[mrxu@localhost ~]$ echo $name
徐先生
[mrxu@localhost ~]$ unset name
[mrxu@localhost ~]$ echo $name

[mrxu@localhost ~]$ exit
登出
[root@localhost ~]# su - mrxu
上一次登录:五 9月  1 15:21:47 CST 2023pts/0 上
[mrxu@localhost ~]$ echo $name
徐先生
[mrxu@localhost ~]$ 
设置只读变量
  • readonly ,只有shell结束,只读变量失效
[root@localhost ~]# readonly she="安娜"
[root@localhost ~]# she="tom"
bash: she: 只读变量
[root@localhost ~]# 
系统保留环境变量关键字

bash内嵌了诸多环境变量,用于定义bash的工作环境。awk

#过滤出,格式化所有的环境变量名字
[root@localhost tmp]# export |awk -F '[ := ]' '{print $3}'
##
COLORTERM
DBUS_SESSION_BUS_ADDRESS
DESKTOP_SESSION
DISPLAY
XDG_SEAT
XDG_SESSION_DESKTOP
XDG_SESSION_ID
XDG_SESSION_TYPE
XDG_VTNR
XMODIFIERS
name

环境变量文件加载顺序
  1. 登录Linux,系统启动一个bash shell;bash会取若干系统环境文件,检查变量设置
  2. /etc/profile:全局环境变量文件, 为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d目录的配置文件中搜集shell的设置
  3. 然后读取/etc/profile.d目录下的脚本,有系统诸多脚本,也放入自定义需要登录加载的脚本,便于用于登录后立即运行脚本
  4. 运行 $HOME/.bah_profile (用户环境变量文件)
  5. 运行$Home/.bashrc

.....

最后运行/etc/bashrc

posted @   翻滚的小井蛙  阅读(743)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示