在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开发学习路线图

我也希望一些朋友能和我一起使这本电子书更加完美!

有收获吗?我希望退伍军人有三连击,以便更多的人可以阅读本文

老王
地址:深圳市福田区国际电子商务产业园科技楼603-604
电话:0755-83586660、0755-83583158 传真:0755-81780330
邮箱:info@qbt8.com
地址:深圳市福田区国际电子商务产业园科技楼603-604
电话:0755-83174789 传真:0755-83170936
邮箱:info@qbt8.com
地址:天河区棠安路288号天盈建博汇创意园2楼2082
电话:020-82071951、020-82070761 传真:020-82071976
邮箱:info@qbt8.com
地址:重庆南岸区上海城嘉德中心二号1001
电话:023-62625616、023-62625617 传真:023-62625618
邮箱:info@qbt8.com
地址:贵阳市金阳新区国家高新技术开发区国家数字内容产业园5楼A区508
电话:0851-84114330、0851-84114080 传真:0851-84113779
邮箱:info@qbt8.com