首页 > 系统相关 >Linux开发讲课39---设置和查看Linux系统的环境和Shell这两种变量

Linux开发讲课39---设置和查看Linux系统的环境和Shell这两种变量

时间:2024-07-21 13:26:04浏览次数:20  
标签:39 Shell 变量 usr printenv Linux MYVAR 环境变量

        在 Linux 系统中,有环境变量和 Shell 变量这两种变量。
        环境变量是在程序及其子程序中全局可用的,常常用来储存像默认的文本编辑器或者浏览器,以及可执行文件的路径等等这样的信息。而 Shell 变量仅在当前 Shell 中可用,可以用来存储当前用户的 ID 等信息。

        环境变量
环境变量是以键值对的形式实现的,是在整个系统范围内都可用的变量,并由所有派生的子进程和 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 变量是非常有用的,并且经常会被引用。以下是一些常见的,你以后可能会遇到的环境变量:

除了以上这些环境变量,你也可能会经常遇到以下这些 Shell 变量:

查看 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=$'        
'
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 会话中,而且对许多程序都很有用,有很多常见的场景都会引用到这些变量。希望这对你的工作也有帮助。如果你还对这两种变量有任何疑问,请留言告诉我呗!
查看 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=$'        
'
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 文件中。

标签:39,Shell,变量,usr,printenv,Linux,MYVAR,环境变量
From: https://blog.csdn.net/qq_42837317/article/details/140587024

相关文章

  • B3956 [GESP202403 三级] 字母求和 题解
    B3956[GESP202403三级]字母求和题解当时在考试,3分钟A了,结果第二题T了。#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+2;constintN1=1e3+2;typedeflonglongll;typedefunsignedlonglongull;#definefo(i,n,m)for(inti=n;i<=m;i++)......
  • Python - Pandas - loc vs iloc (DataFrame.loc[:,['column_name':]])
    原文链接:https://blog.csdn.net/weixin_48964486/article/details/123150832————————————————————————————————————————————————关于python数据分析常用库pandas中的DataFrame的loc和iloc取数据基本方法总结归纳及示例如下:1.......
  • Linux下编程常用基本命令
    Linux常用命令文件操作命令ls命令列出文件和目录命令ls-l//列出文件和目录的详细信息ls-R//列出所有文件ls-a//列出隐藏文件mv命令移动和重命名命令mvexample.txt/lem///移动目录下mvoldnamenewname//重命名rm命令移除命令rmexample.txt/......
  • xshell连接虚拟机
    1、新建连接进入xshell,点击左上角<新建>,新建立一个连接编辑跳出来的属性窗口点击<连接>名称自定义协议默认为SSH主机填写虚拟机的ip地址(在虚拟机终端输入ifconfig命令,根据提示安装相应工具)端口默认为222、启用ssh服务查看虚拟机是否启用ssh服务终端输入ps-e|......
  • 在 PowerShell 中,可以编写脚本来检测本地加载和远程加载的情况。这通常涉及到检查计算
    在PowerShell中,可以编写脚本来检测本地加载和远程加载的情况。这通常涉及到检查计算机上的特定服务或应用程序的状态或配置。以下是一些示例脚本和方法,可以用来实现这些检测:检测本地加载示例:检查本地服务的运行状态powershellCopyCode#检查本地服务状态$serviceName="M......
  • 在 PowerShell 中,"本地加载"和"远程加载"通常指的是运行脚本或命令的位置或方式。以下
    在PowerShell中,"本地加载"和"远程加载"通常指的是运行脚本或命令的位置或方式。以下是关于本地加载和远程加载的一些基本概念和示例:本地加载本地加载指的是在当前计算机上执行PowerShell脚本或命令。这些脚本和命令直接在本地计算机上运行,无需通过网络连接到其他计算机或服......
  • Linux工作原理5内核如何启动
    5内核如何启动现在你已经知道了Linux系统的物理和逻辑结构、什么是内核以及如何使用进程。本章将向你介绍内核是如何启动的。换句话说,你将学习内核如何移动到内存中,以及在第一个用户进程启动之前内核所做的工作。启动过程的简化视图如下:机器的BIOS或引导固件加载并运行引导......
  • PowerShell 命令来操作 Windows 注册表 Get-ItemProperty 命令可以获取指定注册表路径
    PowerShell提供了一些命令和方法来操作Windows注册表。以下是一些常用的PowerShell命令和示例:1.获取注册表项的值使用Get-ItemProperty命令可以获取指定注册表路径下的键值信息。powershellCopyCode#获取注册表项的值Get-ItemProperty-Path"HKCU:\Software\Micro......
  • IOError:[Errno 2]没有这样的文件或目录:'sample.csv'
    我收到IOError:[Errno2]Nosuchfileordirectory:'sample.csv'CSV文件与脚本位于同一位置。我也从相同的路径运行它。这是我的代码:importcsvkitfile_name='sample.csv'withopen(file_name,'rb')asf:reader=csvkit.reader(f)printreader......
  • Linux C++ 065-设计模式之组合模式
    LinuxC++065-设计模式之组合模式本节关键字:Linux、C++、设计模式、组合模式相关库函数:概念组合模式(CompositePattern),又叫做部分-整体模式,使得用户对单个对象和组合对象的使用具有一致性。它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理......