Linux下的环境变量实践总结

简介: Linux下的环境变量实践总结

【1】环境变量配置文件

使配置文件生效:

[root@localhost ~]# source 配置文件
[root@localhost ~]# . 配置文件

① 登录时生效的环境变量配置文件

在Linux系统登录时主要生效的环境变量配置文件有以下五个:

  • /etc/profile
  • /etc/bashrc
  • /etc/profile.d/*.sh
  • ~/.bash_profile
  • ~/.bashrc

环境变量配置文件调用过程:

[root@VM-24-14-centos ~]# vim /etc/environment
[root@VM-24-14-centos ~]# vim /etc/bashrc
[root@VM-24-14-centos ~]# vim /etc/profile
[root@VM-24-14-centos ~]# vim ~/.bashrc
[root@VM-24-14-centos ~]# vim ~/.bash_profile
# 在每个文件中加入对应的语句
export jane_order="$jane_order:/etc/environment"
export jane_order="$jane_order:/etc/bashrc"
export jane_order="$jane_order:/etc/profile"
export jane_order="$jane_order:~/.bashrc"
export jane_order="$jane_order:~/.bash_profile"

退出重新登录,打印变量:

[root@VM-24-14-centos ~]# echo $jane_order
$jane_order:/etc/environment:/etc/bashrc:/etc/profile:/etc/bashrc:~/.bashrc:~/.bash_profile

需要说明的是,/etc/environment这个默认是空,平时也不会使用。

1.1 在用户登录过程先调用/etc/profile文件

在这个环境变量配置文件中会定义这些默认环境变量:

  • USER变量:根据登录的用户,给这个变量赋值(就是让USER变量的值是当前用户)。
  • LOGNAME变量:根据USER变量的值,给这个变量赋值。
  • MAIL变量:根据登录的用户,定义用户的邮箱为/var/spool/mail/用户名。
  • PATH变量:根据登录用户的UID是否为0,判断PATH变量是否包含/sbin、/usr/sbin和/usr/local/sbin这三个系统命令目录。
  • HOSTNAME变量:主机名,给这个变量赋值。
  • HISTSIZE变量:定义历史命令的保存条数。
  • umask:定义umask默认权限。注意/etc/profile文件中的umask权限是在“有用户登录过程(也就是输入了用户名和密码)”时才会生效。
  • 调用/etc/profile.d/*.sh文件,也就是调用/etc/profile.d/目录下所有以.sh结尾的文件。

1.2 由/etc/profile文件调用/etc/profile.d/*.sh文件

这个目录中所有以.sh结尾的文件都会被/etc/profile文件调用,这里最常用的就是lang.sh文件,而这个文件又会调用/etc/sysconfig/i18n文件。/etc/sysconfig/i18n这个文件眼熟吗?就是默认语系配置文件。

765f2e49dce346afb629c9952e46a0ba.png

1.3 由/etc/profile文件调用~/.bash_profile文件

~/.bash_profile文件就没有那么复杂了,这个文件主要实现了两个功能:

  • 调用了~/.bashrc文件。
  • 在PATH变量后面加入了:$HOME/bin这个目录。那也就是说,如果我们在自己的家目录中建立bin目录,然后把自己的脚本放入“~/bin”目录,就可以直接执行脚本,而不用通过目录执行了。

~/.bash_profile文件内容如下:

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH

1.4 由~/.bash_profile文件调用~/.bashrc文件

~/.bashrc文件中主要实现了:

  • 定义默认别名
  • 调用/etc/bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

1.5 由~/.bashrc调用了/etc/bashrc文件

在/etc/bashrc文件中主要定义了这些内容:

  • PS1变量:也就是用户的提示符,如果我们想要永久修改提示符,就要在这个文件中修改
  • umask:定义umask默认权限。这个文件中定义的umask是针对“没有登录过程(也就是不需要输入用户名和密码时,比如从一个终端切换到另一个终端,或进入子Shell)”时生效的。如果是“有用户登录过程”,则是/etc/profile文件中的umask生效。
  • PATH变量:会给PATH变量追加值,当然也是在“没有登录过程”时才生效。
  • 调用/etc/profile.d/*.sh文件,这也是在“没有用户登录过程”是才调用。在“有用户登录过程”时,/etc/profile.d/*.sh文件已经被/etc/profile文件调用过了。

这样这五个环境变量配置文件会被依次调用,那么如果是我们自己定义的环境变量应该放入哪个文件呢?如果你的修改是打算对所有用户生效的,那么可以放入/etc/profile环境变量配置文件;如果你的修改只是给自己使用的,那么可以放入~/.bash_profile或~/.bashrc这两个配置文件中的任一个。

可是如果我们误删除了这些环境变量,比如删除了/etc/bashrc文件,或删除了~/.bashrc文件,那么这些文件中配置就会失效(~/.bashrc文件会调用/etc/bashrc文件)。那么我们的提示符就会变成:-bash-4.1#

② 注销时生效的环境变量配置文件

在用户退出登录时,只会调用一个环境变量配置文件,就是~/.bash_logout。这个文件默认没有写入任何内容,可是如果我们希望再退出登录时执行一些操作,比如清除历史命令,备份某些数据,就可以把命令写入这个文件。

③ 其他配置文件

还有一些环节变量配置文件,最常见的就是~/.bash_history文件,也就是历史命令保存文件。

【2】设置环境变量

① 添加到 ~/.bashrc 或者 ~/.bash_profile文件中

export JAVA_HOME=/usr/local/java

使其生效:

source ~/.bashrc
source ~/.bash_profile

注意其仅对当前用户有效。

② 添加到 /etc/bashrc /etc/environment/etc/profile 文件中

export JAVA_HOME=/usr/local/java

使其生效:

source /etc/bashrc
source /etc/environment
source /etc/profile

该方法是修改系统配置,需要管理员权限(如root)或者对该文件的写入权限,将会对所有用户生效。

【3】查看环境变量

① env

env 是一个外部命令,程序文件/bin/env,列出所有环境变量及其赋值。

② export

export命令可用于显示或设置环境变量,export命令的效果仅限于当前登录终端。如果需要设置环境变量永久生效,需要配置在文件中。

显示所有的shell赋予子程序的环境变量。

[root@VM-24-14-centos ~]# export -p
declare -x HISTSIZE="3000"
declare -x HISTTIMEFORMAT="%F %T "
declare -x HOME="/root"
declare -x HOSTNAME="VM-24-14-centos"
declare -x LANG="en_US.utf8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PROMPT_COMMAND="history -a; history -a; printf \"\\033]0;%s@%s:%s\\007\" \"\${USER}\" \"\${HOSTNAME%%.*}\" \"\${PWD/#\$HOME/\\~}\""
declare -x PWD="/root"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="59.109.218.227 5126 22"
declare -x SSH_CONNECTION="59.109.218.227 5126 10.0.24.14 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="root"
declare -x jane_order=":/etc/bashrc:/etc/profile:/etc/bashrc:~/.bashrc:~/.bash_profile"

设置变量

[root@VM-24-14-centos ~]# export jane=1
[root@VM-24-14-centos ~]# echo $jane
1

查看某个变量

[root@VM-24-14-centos ~]# echo $SHELL
/bin/bash
[root@VM-24-14-centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

③ env/export/declare/set区别

  • env:显示当前用户的环境变量,但不会显示其自定义变量。
  • export:功能同 env 一样,也是显示当前用户的环境变量,只不过该命令的输出是按变量名进行排序的。
  • declare:显示当前 Shell 中定义的所有变量,包括用户的环境变量和自定义变量,该命令的输出按变量名进行排序。
  • set:功能同 declare 一样,显示当前 Shell 中定义的所有变量,包括用户的环境变量和自定义变量。


目录
相关文章
|
2月前
|
存储 Linux Shell
Linux——环境变量与本地变量
Linux——环境变量与本地变量
|
2月前
|
关系型数据库 MySQL Linux
Linux环境变量
Linux环境变量
|
2月前
|
存储 Shell Linux
【Linux系统编程】环境变量的组织方式
【Linux系统编程】环境变量的组织方式
|
2月前
|
Linux Shell
【Linux系统编程】环境变量--2
【Linux系统编程】环境变量--2
|
2月前
|
存储 Linux Shell
【Linux系统编程】环境变量--1
【Linux系统编程】环境变量--1
|
2月前
|
存储 Linux
『 Linux 』环境变量(下)
『 Linux 』环境变量(下)
|
2月前
|
存储 安全 Linux
『 Linux 』环境变量(上)
『 Linux 』环境变量(上)
|
2月前
|
Linux Shell
Linux之进程(三)(环境变量)
Linux之进程(三)(环境变量)
22 0
|
3月前
|
存储 Unix Shell
Linux【脚本 04】Shell脚本传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明
Linux【脚本 04】Shell脚本传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明
81 0
|
3月前
|
存储 Linux C语言
Linux系统编程(环境变量编程)
Linux系统编程(环境变量编程)
23 0

相关产品

  • 云迁移中心