在Linux系统中设置和查看环境变量
大家好,我是梁旭。
众所周知,在Linux系统中,有两种类型的变量:环境变量和shell变量。
环境变量在程序及其子程序中全局可用,并且通常用于存储信息云南快3 ,例如默认的文本编辑器或浏览器,可执行文件的路径等。 Shell变量仅在当前Shell中可用,并可用于存储信息,例如当前用户的ID。
那么什么是环境变量,什么是外壳变量yabo2020 ,以及如何设置和查看这两个变量?
接下来,让梁旭为您回答:
环境变量
环境变量以键值对的形式实现。它们是整个系统中可用的变量,并被所有派生子进程和shell继承。环境变量的名称区分大小写,并且通常以大写字母(MYVAR1,MYVAR 2. ..)
命名。
单个值的环境变量如下所示:
KEY=value1
如果要为环境变量分配多个值,通常使用冒号(:)作为分隔符。每个键值对最终看起来都像这样:
KEY=value1:value2:value3
如果要分配给环境变量的值包含空格,则需要使用引号:
KEY="value with spaces"
Shell变量
Shell变量是Shell中的变量BG真人 ,专门用于设置或定义它们。每个shell(例如zsh和bash)都有自己的内部shell变量集。它们通常用于跟踪临时数据(例如当前工作目录),其用法与环境变量相同。
如果要将Shell变量用作全局变量,则可以使用export命令:
$ export MYVAR=lxlinux.net
$ echo $MYVAR
lxlinux.net
$ env | grep MYVAR
MYVAR=lxlinux.net
常见环境变量和外壳变量
一些环境变量和shell变量非常有用,经常被引用。以下是将来可能会遇到的一些常见环境变量:
变量名的含义
条款
这指定运行命令行管理程序时要模拟的终端类型。可以针对不同的操作要求模拟不同的硬件终端。但是,您通常不必担心此变量。
USER
当前登录的用户
PWD
当前工作目录
OLDPWD
最后一个工作目录,此变量由Shell保存,以便您可以通过执行cd-切换回最后一个工作目录。
LS_COLORS
这定义了ls指令的颜色输出代码,用于将颜色输出添加到ls指令。通常用于区分不同的文件类型,使用户一眼就能知道文件类型和其他信息。
邮件
当前用户邮箱的路径
路径
在查找命令时系统将检查的目录列表。当用户输入指令时,系统将按照该目录列表的顺序检查目录,以找到相应的可执行文件。
Lang
当前的语言和本地化设置,包括字符编码。
首页
当前用户的主目录
_
上次执行命令
除了上述环境变量外,您还可能经常遇到以下Shell变量:
变量名的含义
BASHOPTS
执行bash时启用的选项列表。这有助于确定Shell环境是否按预期运行。
BASH_VERSION
以人类可读格式运行的bash版本
BASH_VERSINFO
正在运行的bash版本为机器可读格式
列
用于设置在屏幕上绘制的输出信息的宽列数
DISTACK
可用于推入和弹出命令的目录堆栈。
HISTFILESIZE
文件中存储的命令历史记录的行数。默认值为〜/ .bash_history文件中的行数。
历史记录
可以存储在内存中的命令历史记录的行数,即histroy命令可以打印的行数。
主机名
计算机的主机名
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命令linux 查看用户环境变量,您可以请求单个变量的值:
$ 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变量linux 查看用户环境变量,并学习了如何设置和查看这些变量。实际上,这些变量一直存在于我们的Shell会话中,对许多程序非常有用。有许多引用这些变量的常见方案。希望这也会对您的工作有所帮助。如果您仍然对这两个变量有任何疑问,请留言并告诉我!
最后,最近,许多朋友向我询问Linux学习路线图,因此,根据我的经验,我花了一个月的空闲时间熬夜并编写了一本电子书。无论您是面试还是自我完善,我相信它都会对您有所帮助!目录如下:
免费提供给所有人,只要问您给我个赞!
电子书| Linux开发学习路线图
我也希望一些朋友能和我一起使这本电子书更加完美!
有收获吗?我希望退伍军人有三连击,以便更多的人可以阅读本文
老王