当前位置: 首页 > Linux

Linux系统环境变量的设置和查看

时间:2023-04-06 11:11:35 Linux

大家好,我是良旭。众所周知,在Linux系统中,有两种变量,环境变量和shell变量。环境变量在程序及其子程序中是全局可用的,通常用于存储默认文本编辑器或浏览器、可执行文件的路径等信息。Shell变量仅在当前shell中可用,可用于存储当前用户的ID等信息。那么什么是环境变量,什么是shell变量,如何设置和查看这两个变量呢?接下来让良旭为您解答:环境变量环境变量以键值对的形式实现,在系统范围内可用,被所有派生的子进程和shell继承。环境变量的名称是区分大小写的,通常以大写命名(MYVAR1,MYVAR2...)单值环境变量看起来像这样:KEY=value1如果你想给多个值赋值环境变量通常用冒号(:)分隔。每个键值对最终看起来是这样的:KEY=value1:value2:value3如果要赋给环境变量的值包含空格,需要用引号:KEY="valuewithspaces"Shell变量Shell变量是专门用的shell中设置或定义它们的变量。每个shell,例如zsh和bash,都有自己的一组内部shell变量。它们通常用于跟踪临时数据,例如当前工作目录,并且使用方式与环境变量相同。如果想让Shell变量作为全局变量使用,可以使用导出命令:$exportMYVAR=lxlinux.net$echo$MYVARlxlinux.net$env|grepMYVARMYVAR=lxlinux.net常用环境变量和Shell变量有些环境变量和Shell变量非常有用,经常被引用。以下是一些您以后可能会遇到的常见环境变量:变量名称含义TERM指定运行Shell时要模拟的终端类型。针对不同的操作需求,可以模拟不同的硬件终端。但是,您通常不需要担心这个变量。USER当前登录用户PWD的当前工作目录为OLDPWD之前的工作目录。该变量由Shell保存,以便您可以通过执行cd-切换回之前的工作目录。LS_COLORS这定义了ls命令的颜色输出代码,用于将颜色输出添加到ls命令。这通常用于区分不同的文件类型,并为用户提供一目了然的信息,例如文件类型。MAIL当前用户邮箱的路径PATH系统查找命令时检查的目录列表。当用户输入一个命令时,系统会按照这个目录列表的顺序依次检查目录,找到对应的可执行文件。LANG当前语言和区域设置,包括字符编码。HOME当前用户家目录_上次执行的命令除了上述环境变量,你可能还经常遇到以下shell变量:帮助它按照预期的方式工作。BASH_VERSION以人类可读格式执行的bash版本BASH_VERSINFO以机器可读格式执行的bash版本COLUMNS用于设置绘制到屏幕的输出信息宽度的列数DIRSTACKpushd和可用的目录堆栈弹出命令。HISTFILESIZE存储到文件的命令历史行数。默认为~/.bash_history文件中的行数。HISTSIZE允许存储在内存中的命令历史行数,即histroy命令可以打印的行数。HOSTNAME计算机的主机名IFS用于分隔命令行输入的内部字段分隔符。默认情况下,空格用作分隔符。PS1定义主要命令提示符。这用于定义启动shell会话时命令提示符的外观。以及用于声明跨越多行的命令的PS2命令提示符。SHELLOPTS可以使用set命令设置的Shell选项。UID当前用户的UID(用户ID)查看Shell变量和环境变量在Linux系统中,有以下命令可以让你查看环境变量:当前的环境需要改变。当不带参数使用env命令时,它会打印出当前的环境变量列表。printenv—可以打印所有或指定的环境变量。set—此命令可以设置或删除shell变量。当不带参数使用set命令时,它会打印所有变量的列表,包括环境和shell变量以及shell函数。默认情况下,env和printenv的功能完全相同:$printenvSSH_CONNECTION=10.0.2.23718210.0.2.1522LESSCLOSE=/usr/bin/lesspipe%s%sLANG=C.UTF-8XDG_SESSION_ID=5USER=alvinMYVAR=lxlinux。netPWD=/home/alvinHOME=/home/alvinSSH_CLIENT=10.0.2.23718222XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktopSSH_TTY=/dev/pts/0MAIL=/var/mail/alvinTERM=xterm-256colorSHELL=/bin/bashSHLVL=1LOGNAME=alvinXDG_RUNTIME_DIR=/run/user/1000PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binLESSOPEN=|/usr/bin/lesspipe%s_=/usr/bin/printenv只能体现env命令和printenv在更具体的功能命令上的区别。例如,使用printenv命令,您可以请求单个变量的值:$printenvSHELL/bin/bash$printenvHOME/home/alvin$printenvMYVARlxlinux.netenv命令可以修改程序运行的环境传递一组变量给命令:envMYVAR=lxlinux.netcommand_to_runcommand_optionsprintenv和env命令只能打印出环境变量,如果要打印出所有变量或Shell函数的列表,可以使用set命令.[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=140DIRSTACK=()EUID=1000GROUPS=()HISTCONTROL=ignorebothHISTFILE=/home/alvin/.bash_historyHISTFILESIZE=2000HISTSIZE=1000HOME=/home/alvinHOSTNAME=ubuntu-bionicHOSTTYPE=x86_64IFS=$'\t\n'LANG=C.UTF-8LESSCLOSE='/usr/bin/lesspipe%s%s'LESSOPEN='|/usr/bin/lesspipe%s'LINES=35LOGNAME=alvin.....此命令将显示所有变量的大列表,因此您可能希望将输出通过管道传递给less命令。$设置|less设置Shell变量和环境变量在Linux系统中有几个命令可以设置环境变量:set—这个命令可以设置或取消设置Shell变量。当不带参数使用set命令时,它会打印所有变量的列表,包括环境和shell变量以及shell函数。unset—此命令删除shell变量和环境变量。export—此命令可以设置环境变量。为了更好地理解shell变量和环境变量之间的区别,让我们从设置shell变量开始,然后转到环境变量。首先在当前会话中定义一个shell变量:$MYVAR=lxlinux您可以使用echo$MYVAR验证该变量是否已设置:$echo$MYVARlxlinux使用printenv命令验证该变量是否为环境变量:$printenvMYVAR没有返回输出,这意味着MYVAR变量不是环境变量。导出命令可用于设置环境变量。创建环境变量只需使用export命令将Shell变量导出为环境变量即可:$exportMYVAR可以使用如下语句查看:$printenvMYVARlxlinux当然也可以只使用一行代码设置环境变量:$exportMYNEWVAR="MyNewVariable"但是这种方式创建的环境变量只能在当前会话中使用,如果你打开一个新的shell会话,或者注销,所有变量都会丢失。我们还可以将环境变量恢复为shell变量,或者将其完全删除:MYVAR变量被定义为环境变量,我们可以通过键入以下命令将其恢复为shell变量:$export-nMYVAR这样,MYVARvariable不再是环境变量,但它仍然是Shell变量。不管是shell变量还是环境变量,如果要彻底删除该变量,可以使用unset命令删除:$unsetMYVAR可以使用如下语句验证MYVAR变量是否已删除:$echo$MYVAR由于变量已经被删除,所以没有return。环境变量的持久化很多程序都需要使用环境变量来确定具体的执行方式,但是我们不想每次启动新的shell会话都重新设置重要的变量,所以我们需要将重要的环境变量写入到配置文件中.启动shell会话有不同的方式,例如,连接到终端的交互式shell和未连接到终端的非交互式shell,以及登录shell和非登录shell,bashshell将根据session的不同启动方式不同。读取不同的配置文件。然而,在大多数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学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以和我一起把这本电子书做得更完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站