【linux】本地变量、环境变量与全局变量解析


一、本地变量

  • 本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程子进程无效。

二、环境变量

1.环境变量的分类

  • 环境变量(和程序绑定的,程序结束时,动态设置的环境变量也就结束):当前进程有效,并且能够被子进程调用,反之不行,子进程环境变量的设置对父进程无效。
    • 1.环境变量的值由用户决定,和Windows的用户环境变量一样,即使用户qpyue使用su切换root用户,echo USER依旧是以前的用户名称(qpyue),环境变量的值依旧不变。(除了HOME)

    • 2.即使两个qpyue用户同时登录,他们的环境变量都会重新从配置文件刷新,单独存储,所以环境变量的值互不影响(在两个bash程序存在过程中,任意一方环境变化不影响另一方)

1)按生效的范围分类

系统环境变量:公共的,对全部的用户都生效。
用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。

2)按生存周期的分类

永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
临时环境变量:使用时在shell中临时定义,退出 shell后失效。

2.环境变量相关命令

  • env:查看当前用户的环境变量
  • env|grep 环境变量名:筛选包含的环境变量
  • export :显示当前系统定义的所有环境变量
  • export 变量名=变量值 或者 变量名=变量值;export 变量名
  • printenv 环境变量名:查看指定环境变量的值
  • echo $环境变量名:查看指定环境变量的值
  • unset 环境变量名:查看指定环境变量的值
  • set查询当前用户的所有变量(临时变量与环境变量)

3.常用环境变量

PATH

功能和作用:可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序。如果可执行程序的目录不在PATH指定的目录中,执行时需要指定目录。

书写格式:PATH环境变量存放的是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录。 export PATH=目录1:目录2:目录3:…目录n:.

添加格式

1、临时添加,PATH 在终端关闭后就会消失。
export PATH=$PATH:$HOME/bin 或 export PATH=$HOME/bin:$PATH
2、永久添加环境变量(影响当前用户)
vim ~/.bashrc

在文档最后,添加:

export PATH="/apps/summary_fz_province/cdc_model/bin/black_table:$PATH"

保存,退出,然后运行:

source /etc/profile
3、永久添加环境变量(影响所有用户)
vim /etc/profile

在文档最后,添加:

export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"

保存,退出,然后运行:

source /etc/profile

其他环境变量

  • HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。
  • PWD:显示当前目录。
  • SHELL:当前用户用的是哪种Shell。
  • HISTSIZE:保存历史命令记录的条数。
  • HOSTNAME:主机的名称,应用程序如果要用到主机名的话,通常是从这个环境变量中取得。
  • LOGNAME:当前用户的登录名。
  • LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

三、全局变量

  • 全局变量:全局所有的用户和程序都能调用(文件配置),且继承,新建的用户也默认能调用。
  • 相关配置文件
文件名 说明 备注
/etc/profile 全局环境变量信息 系统和所有用户都生效
/etc/bashrc 全局的bash信息,所有用户都生效
$HOME/.bashrc 当前用户的bash信息,用户登录时读取 定义别名、umask、函数等。
$HOME/.bash_profile 当前用户的环境信息,用户登录时读取
$HOME/.bash_logout 当前用户退出当前shell时最后读取 定义用户退出时执行的程序等。
$HOME/.bash_history 当前用户退出当前shell时最后读取 history -w 保存历史记录 history -c 清空历史记录

3.1 /etc/profile 文件

​ 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 /etc/profile.d 目录的配置文件中收集 shell 的设置。如果你有对 /etc/profile 有修改的话必须得手动执行 source /etc/profile ,修改才会生效,此修改对每个用户都生效。

  • 如果存在etc/bash.bashrc则执行该文件。
  • 如果/etc/profile.d目录存在,执行该目录下所有以.sh结尾的脚本文件。
  • 添加PATH路径可以在/etc/profile文件中以export命令添加。

3.2 /etc/profile.d 文件

​ /etc/profile 在每次启动时会执行 /etc/profile.d 下全部的脚本文件。

[wqf@b1i10 ~]$ ls /etc/profile.d 
256term.csh  abrt-console-notification.sh  colorgrep.csh  colorls.csh  csh.local   lang.csh  less.csh  PackageKit.sh  vim.csh  vte.sh      which2.sh
256term.sh   bash_completion.sh            colorgrep.sh   colorls.sh   flatpak.sh  lang.sh   less.sh   sh.local       vim.sh   which2.csh

3.2 /etc/bashrc 文件

​为每一个运行终端的用户执行此文件。当终端被打开时,该文件被读取。如果你想对所有的使用终端的用户修改某个配置并在以后打开的终端都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个终端即可生效。

3.3 ~/.bash_profile文件

​ 每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次!默认情况下,它设置一些环境变量,执行用户的 ~/ .bashrc 文件。 此文件类似于 /etc/profile,也是需要手动执行 source ~/.profile,修改才会生效,/etc/profile 对所有用户生效,~/.profile 只对当前用户生效。

~/.bash_profile 或 ~/.bash_login 或 ~/.profile 文件 文件往往只存在一个,执行的顺序为:~/.bash_profile > ~/.bash_login > ~/.profile

[summary_fz_province@b1i10 ~]$ 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
---

3.4 ~/.bashrc 文件

​ 当用户登录时以及每次打开新的Shell时该文件都将被读取。(每个用户都有一个 ~/.bashrc 文件,在用户目录下) 此文件类似于 /etc/bashrc,不需要重启就可以生效,重新打开一个 bash 即可生效,/etc/bashrc 对所有用户新打开的 bash 都生效,但 ~/.bashrc 只对当前用户新打开的 bash 生效。不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。

3.5 登录Linux时要执行文件的过程

在登录Linux时要执行文件的过程如下:

1、在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,

2、然后启动用户目录下的”~/.bash_profile”,如果”~/.bash_login”和”~/.profile”文件存在的时候。执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。

执行顺序为: /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

3.6 /etc/profile, /etc/bashrc, ~/.bash_profile和 ~/.bashrc的差别

/etc/profile是全局性的功能,其中设置的变量作用于所有用户,~/.bash_profile中设置的变量能继承/etc/profile中的变量并作用于用户。
~/.bash_profile 是交互式、login 方式进入 bash 运行的;~/.bashrc 是交互式 non-login 方式进入 bash 运行的。


参考文章:
https://www.cnblogs.com/gmq-sh/p/6971588.html
https://blog.csdn.net/weixin_48896613/article/details/127170565
https://blog.csdn.net/mayue_web/article/details/97023615

猜你喜欢

转载自blog.csdn.net/sodaloveer/article/details/130380098
今日推荐