Linux系统中怎么设置环境变量
这篇文章给大家介绍Linux系统中怎么设置环境变量,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
在王屋等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、网站设计 网站设计制作按需定制网站,公司网站建设,企业网站建设,成都品牌网站建设,全网营销推广,成都外贸网站建设,王屋网站建设费用合理。
环境变量
环境变量是以键值对的形式实现的,是在整个系统范围内都可用的变量,并由所有派生的子进程和 Shell 继承。而环境变量的名称是区分大小写的,且通常以大写的形式命名 ( MYVAR1, MYVAR2... )
单个值的环境变量看起来是这样的:
KEY=value1
如果你想要将多个值赋予环境变量,则通常用冒号 ( : ) 作为分隔符。每一对键值对最终看起来是这样子的:
KEY=value1:value2:value3
如果要赋予环境变量的值包含空格,则需要使用引号:
KEY="value with spaces"
Shell 变量
Shell 变量是专门用于设置或定义它们的 Shell 中的变量。每个 Shell ,例如 zsh 和 bash ,都有一组自己内部的 Shell 变量。它们通常用于跟踪临时数据,比如当前工作目录,而用法则与环境变量相同。
如果你想让 Shell 变量作为全局变量使用,可以使用 export
指令:
$ export MYVAR=lxlinux.net $ echo $MYVAR lxlinux.net $ env | grep MYVAR MYVAR=lxlinux.net
常见的环境变量与 Shell 变量
一些环境变量和 Shell 变量是非常有用的,并且经常会被引用。以下是一些常见的,你以后可能会遇到的环境变量:
变量名 | 含义 |
---|---|
TERM | 这指定运行 Shell 时要模拟的终端类型。可以针对不同的操作需求模拟不同的硬件终端。不过,你通常不需要管这个变量。 |
USER | 当前登录的用户 |
PWD | 当前的工作目录 |
OLDPWD | 上一个工作目录,这个变量由 Shell 保存,以便通过执行 cd - 切换回上一个工作目录。 |
LS_COLORS | 这定义了 ls 指令的颜色输出代码,用于向 ls 指令添加颜色输出。这通常用于区分不同的文件类型并使用户对文件类型等信息一目了然。 |
当前用户邮箱的路径 | |
PATH | 系统在查找指令时会检查的目录列表。当用户输入一个指令时,系统将按此目录列表的顺序检查目录,以寻找相应的可执行文件。 |
LANG | 当前的语言和本地化设置,包括字符编码。 |
HOME | 当前用户的主目录 |
_ | 上一个被执行的指令 |
除了以上这些环境变量,你也可能会经常遇到以下这些 Shell 变量:
变量名 | 含义 |
---|---|
BASHOPTS | 执行 bash 时所启用的选项列表,这对于确定 Shell 环境是否按照预期的方式运行很有帮助。 |
BASH_VERSION | 人类可读格式的正在执行的 bash 版本 |
BASH_VERSINFO | 机器可读格式的正在执行的 bash 版本 |
COLUMNS | 用于设置绘制到屏幕上的输出信息的宽的列数 |
DIRSTACK | pushd 和 popd 命令可用的目录堆栈。 |
HISTFILESIZE | 存储到文件中的命令历史记录的行数。默认为 ~/.bash_history 文件的行数。 |
HISTSIZE | 内存中允许存储的命令历史记录的行数,即 histroy 命令所能打印出来的行数。 |
HOSTNAME | 计算机的主机名 |
IFS | 内部字段分隔符,用于分隔命令行上的输入。 默认以空格作为分隔符。 |
PS1 | 定义主命令提示符。 这用于定义启动 Shell 会话时命令提示符的外观。而 PS2 用于声明跨越多行的命令的命令提示符。 |
SHELLOPTS | 可以用 set 命令设置的 Shell 选项。 |
UID | 当前用户的 UID (用户 ID) |
查看 Shell 变量与环境变量
在 Linux 系统中,有以下几种命令可以让你查看环境变量:
env
— 该命令可以让你在自定义的环境中运行程序,并且不需要改变当前的环境。当不带参数使用 env
命令时,它会打印出当前的环境变量列表。
printenv
— 可以打印出所有的或者指定的环境变量。
set
— 该命令可以设置或者删除 Shell 变量。当不带参数使用 set
命令时,它将打印出包括环境变量与 Shell 变量在内的所有变量以及 Shell 函数的列表。
默认状态下,env
和 printenv
的功能是完全相同的:
$ printenv SSH_CONNECTION=10.0.2.2 37182 10.0.2.15 22 LESSCLOSE=/usr/bin/lesspipe %s %s LANG=C.UTF-8 XDG_SESSION_ID=5 USER=alvin MYVAR=lxlinux.net PWD=/home/alvin HOME=/home/alvin SSH_CLIENT=10.0.2.2 37182 22 XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop SSH_TTY=/dev/pts/0 MAIL=/var/mail/alvin TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LOGNAME=alvin XDG_RUNTIME_DIR=/run/user/1000 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin LESSOPEN=| /usr/bin/lesspipe %s _=/usr/bin/printenv
只有在更具体的功能上才能体现出 env
命令与 printenv
命令的区别。例如,使用 printenv
命令,你可以请求单个变量的值:
$ printenv SHELL /bin/bash $ printenv HOME /home/alvin $ printenv MYVAR lxlinux.net
env
命令可通过将一组变量传递给命令来修改程序运行的环境:
env MYVAR=lxlinux.net command_to_run command_options
printenv
与 env
命令只能打印出环境变量,而如果你想打印出所有变量或者 Shell 函数的列表,你可以使用 set
指令。
$ set BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_COMPLETION_VERSINFO=([0]="2" [1]="8") BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="4" [2]="20" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") BASH_VERSION='4.4.20(1)-release' COLUMNS=140 DIRSTACK=() EUID=1000 GROUPS=() HISTCONTROL=ignoreboth HISTFILE=/home/alvin/.bash_history HISTFILESIZE=2000 HISTSIZE=1000 HOME=/home/alvin HOSTNAME=ubuntu-bionic HOSTTYPE=x86_64 IFS=$' \t\n' LANG=C.UTF-8 LESSCLOSE='/usr/bin/lesspipe %s %s' LESSOPEN='| /usr/bin/lesspipe %s' LINES=35 LOGNAME=alvin .....
该命令将显示一个包含所有变量的大列表,因此你可能会希望将输出传递给 less
命令。
$ set | less
设置 Shell 变量与环境变量
Linux 系统中可以设置环境变量的命令有以下几种:
set
— 该命令可以设置或者取消设置 Shell 变量。当不带参数使用 set
命令时,它将打印出包括环境变量与 Shell 变量在内的所有变量以及 Shell 函数的列表。
unset
— 该命令可以删除 Shell 变量以及环境变量。
export
— 该命令可以设置环境变量。
为了更好地理解 Shell 变量和环境变量之间的区别,我们先从设置 Shell 变量开始讲,然后再讲环境变量。
先从在当前会话中定义一个 Shell 变量开始:
$ MYVAR=lxlinux
你可以用 echo $MYVAR
来验证变量是否已设置:
$ echo $MYVAR lxlinux
使用 printenv
命令检验该变量是否为环境变量:
$ printenv MYVAR
没有输出返回,这就意味着 MYVAR 变量并不是环境变量。
export
命令可以用来设置环境变量。要创建环境变量,只需用 export
命令将 Shell 变量导出为环境变量:
$ export MYVAR
你可以用以下语句检验:
$ printenv MYVAR lxlinux
当然,你也可以只用一行代码来设置环境变量:
$ export MYNEWVAR="My New Variable"
但是以这种方式创建的环境变量只能用于当前会话,如果你打开一个新的 Shell 会话,或者退出登陆,所有的变量都将会丢失。
我们也可以将环境变量还原为 Shell 变量,或者将其完全删除:
MYVAR 变量被定义为环境变量,我们可以通过输入以下代码将其还原为 Shell 变量:
$ export -n MYVAR
这样,MYVAR 变量就不再是环境变量了,但依然还是 Shell 变量。
无论是 Shell 变量还是环境变量,想要完全删除变量,都可以使用 unset
命令来删除:
$ unset MYVAR
可以通过以下语句来验证 MYVAR 变量已经删除:
$ echo $MYVAR
由于变量已经删除了,所以没有任何返回。
环境变量的持久化
许多程序都需要使用环境变量来决定具体的执行方式,但是,我们并不希望每次启动新的 Shell 会话时都必须重新设置重要的变量,因此我们需要将重要的环境变量写入配置文件中。
Shell 会话有不同的启动方式,比如,连接到终端的交互式 Shell 与未连接到终端的非交互式 Shell,还有登录式 Shell 与非登录式 Shell, 而 bash Shell 会根据会话不同的启动方式而读取不同的配置文件。
但是,在大多数 Linux 发行版中,当你启动一个新的 Shell 会话时,一般都会从以下文件中读取环境变量:
/etc/environment
— 使用此文件来设置系统范围内可用的环境变量。
/etc/profile
— 每当 bash 登录 Shell 时,都会加载此文件中设置的变量。
~/.bashrc
— 每个用户特定的 Shell 配置文件。例如, 如果你使用的是Bash,就可以在其中声明变量。
如果要将新的环境变量加载到当前的 Shell 会话中,可以使用source命令:
$ source ~/.bashrc
如果你想要设置环境变量,你就可以考虑将其添加到 /etc/profile
、/etc/bash.bashrc
或 /etc/environment
文件中。
结论
在本文章中,我们了解了一些常见的环境变量和 Shell 变量,也学习了如何设置和查看这些变量,其实这些变量一直都在我们的 Shell 会话中,而且对许多程序都很有用,有很多常见的场景都会引用到这些变量。希望这对你的工作也有帮助。如果你还对这两种变量有任何疑问,请留言告诉我呗!
最后,最近很多小伙伴找我要Linux学习路线图,于是我根据自己的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。无论你是面试还是自我提升,相信都会对你有帮助!目录如下:
关于Linux系统中怎么设置环境变量就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
文章题目:Linux系统中怎么设置环境变量
浏览地址:http://myzitong.com/article/iegocd.html