什么叫系统变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么叫系统变量相关的知识,希望对你有一定的参考价值。

可变吗

系统变量就是系统中设置的变量 用户变量 是根据用户需要可自定义的变量 两者都是变量只是权限不一样 一个是系统级 的一个是用户级的 用户变量可按需要随意定义 只要不和系统变量产生交叉 系统变量则不可由用户随便更改

比如%systemroot%对应xp的windows目录和2k的winnt目录

WINDOWS系统变量

ALLUSERSPROFILE=H:\Documents and Settings\All Users //所有用户的PROFILE路径
APPDATA=H:\Documents and Settings\Administrator\Application Data //当前用户的应用程序路径
ClusterLog=H:\WINDOWS\Cluster\cluster.log //集群日志路径
CommonProgramFiles=H:\Program Files\Common Files //应用程序公用的文件路径
COMPUTERNAME=E2003 //计算机名称
ComSpec=H:\WINDOWS\system32\cmd.exe //当前的命令解释器
HOMEDRIVE=H: //当前用户的主盘
HOMEPATH=\Documents and Settings\Administrator //当前用户的主目录
LOGONSERVER=\E2003 //登录的服务器
NUMBER_O_PROCESSORS=1 //当前计算机的处理器数字
OS=Windows_NT //当前系统的内核
Path=H:\Program Files\Support Tools\;H:\WINDOWS\system32; //学过DOS的都知道
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH //以前DOS下默认的是COM,EXE,BAT,现在已经有这么多了哟,以前都不知道,脚本都可以不打扩展名了
PROCESSOR_ARCHITECTURE=x86 //处理器架构
PROCESSOR_IDENTIFIER=x86 Family 15 Model 1 Stepping 3, GenuineIntel //处理器标识符
PROCESSOR_LEVEL=15 //没注意过,不知道有什么用
PROCESSOR_REVISION=0103 //版本?
ProgramFiles=H:\Program Files //应用程序的默认安装目录
PROMPT=$P$G //学过DOS的都知道
SESSIONNAME=Console //会话名称?
SystemDrive=H: //系统所在的盘符
SystemRoot=H:\WINDOWS //系统所在的目录
TEMP=H:\DOCUME~1\ADMINI~1\LOCALS~1\Temp //当前用户的临时目录
TMP=H:\DOCUME~1\ADMINI~1\LOCALS~1\Temp //同上
USERDNSDOMAIN=MCSE.COM //当前用户所在的域的DNS表示
USERDOMAIN=MCSE //NETBios表示
USERNAME=administrator //当前用户名
USERPROFILE=H:\Documents and Settings\Administrator //当前用户的配置文件目录
windir=H:\WINDOWS //windows所在的目录,总是跟systemroot一样
参考技术A 是记录系统的一些信息的,比如说
comspec是说命令解释器的路径
windir是windows的安装路径
用户变量是记录用户个人的信息的,我的就有TEMP和TMP
是记录你的临时文件存放位置的,可以改。

系统在执行一些操作是要用到他们,比如你看到的%windir%
系统就识别为在变量中指定的路径。本回答被提问者采纳
参考技术B 系统变量是系统中所有的有关这个变量的调用都是系统制定的那个值。

Linux编程 13 (系统环境变量位置, 环境变量持久化)

一.系统环境变量位置

  在上章中,知道了如何修改系统环境变量,如PATH变量,以及创建自己的全局环境变量和局部环境变量。这篇学习怎么让环境变量的作用持久化。在此之前,先了解下系统环境变量文件会在哪些位置,当使用bash shell时,bash是如何查找环境变量位置的。下面先来介绍几个文件,这些文件叫启动文件或叫环境文件。

  bash检查的启动文件(环境文件)取决于你启动bash shell的方式。启动bash shell有3种方式:

         (1) 登录时的默认登录shell。

         (2) 交互式shell。

         (3) 运行脚本的非交互式shell。
    

  1.1 登录shell

    登陆shell是指:(1) 用户登陆时,输入用户名和密码后启动的shell(例如使用ssh登录远程主机等);(2) 通过带--login参数的命令:bash --login而启动的shell。当登录linux系统时,bash shell作为登录shell启动,登录shell会从5个不同的启动文件里读取命令。包括:/etc/profile,  $HOME/.bash_profile, $HOME/.bashrc, $HOME/.bash_login, $HOME/.profile。而/etc/profile文件是系统默认的bash shell的主启动文件。另外4个启动文件是针对用户的(不同发行版中,四个启动文件一般都只有一到二个),可根据个人需求定制。

     (1) /etc/profile文件

      只要登录了linux系统,bash就会执行/etc/profile启动文件中的命令(不同发行版的/etc/profile,有不同的设置和命令),profile文件内容如下图所示:
        
      profile文件内容太长,截取了一段。 上图有个for语句,它用来循环读取/etc/profile.d目录下的所有文件。该文件目录包含以下文件,如下图所示:
        
      上图启动文件中sh后缀的供bash shell 使用, csh后缀的供 c shell使用。lang.csh和lang.sh文件会尝试去判定系统上采用的默认语言字符集。对应LANG环境变量。
        

    (2) $HOME目录下的启动文件
      HOME目录下的隐藏文件,找到了$HOME/.bash_profile, $HOME/.bashrc。每个用户都可以编辑这些文件添加自己的环境变量,这此环境变量会在每次启动 bash sehll 会话时生效。 HOME目录如下图所示:
        
      .bash_profile启动文件会先去检查HOME目录下是不是有一个叫.bashrc的启动文件,如果有就会先执行里面的命令。bash_profile文件内容如下图所示:
        
      上图中,可以看到在.bash_profile文件中给PATH变量添加了一个目录路径,并用export PATH 导入到全局中。在.bash_profile文件中加的变量可以持久化。

 

  1.2 交互式shell进程

    交互式shell是指:就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。命令行提示符输入命令,只会检查用户HOME目录中的.bashrc文件。 该文件两个作用:1是查看/etc目录下通用的bashrc文件,2是为用户提供一个定制自己的命令别名(前面讲alias命令)和私有脚本函数(后面介绍)。 .bashrc文件内容如下图所示:
      

  1.3 非交互式shell

    非交互式shell是指:以shell script(非交互)方式执行。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。 系统执行shell脚本时用的这是这种shell。区别是它没有命令提示符。但当你的系统上运行脚本时,也许希望能够运行一些特定启动的命令。
    为了处理这种情况bash shell提供了BASH_ENV环境变量。当shell 启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。默认情况下并未设置该变量,使用printenv命令只返回提示符:
      

    正如上图所示:BASH_ENV环境变量没有设置值。这种非交互式shell 一般通过启动一个子shell来执行。如果父shell是登录shell,那么可以从/etc/profile,/etc/profiled/*.sh和$HOME/.bashrc文件中继承这些变量。如果父shell中的变量是局部变量时,那么子shell无法继承。如果不启动子shell, 变量已存在于当前shell中,就算不设置BASH_ENV,也可以使用当前的局部和全局变量。

    交互式与非交互式二者区别:读取的配置文件不同,交互式bash必然读取~/.bashrc文件;非交互式bash读取的是环境变量BASH_ENV(通常情况下)所指定的配置文件。

 

二. 环境变量持久化

  上面了解了各种shell进程对应的环境文件,找出永久性环境变量就容易多了。可以利用这些文件来创建自己的永久性全局变量或局部变量。全局变量是对所有用户都需要使用的变量,可以将新的变量或修改过的变量设置放在/etc/profile文件中,但升级了发行版该文件也会更新,所以这点要注意 (对所有用户)。
  最好是在/etc/profile.d目录中创建一个以.sh结尾的文件,把所有新的变量或修改过的变量全部放在此文件中(对所有用户)。
  对于存储个人用户永久性bash shell变量的地方是$HOME/.bashrc文件。这一点适用于所有类型的shell进程(仅对当前用户)。

  下面来演示给mysql工具包路径,添加到PATH全局变量中:

  (1)在虚拟根目录下输入mysqldump 工具,提示未找到命令,如下图所示:
    
  (2)找到mysqldump工具包的位置,路径是/usr/local/mysql/bin。如下图所示:
    
  (3) 查看现有PATH的路径列表,以冒号分隔的默认有5个路径。如下图所示:
    
  (4) 在$HOME/.bash_profile文件中加入一个PATH全局变量值,路径为/usr/local/mysql/bin。如下图所示:
    
  (5) exit退出终端或shutdown后重新开机,在虚拟根目录下输入mysqldump 工具,PATH设置的mysql工具包路径永久生效。如下图所示:
    
    再切换到mysql用户下,PATH的设置也是生效的,说明是跨用户生效的。
    
    在root用户下,使用子shell, PATH的设置也是生效的,说明跨进程,已设置成了全局变量。
    
  (6) 最后在看下PATH路径,/usr/local/mysql/bin  已添加了
    

 

 

  

以上是关于什么叫系统变量的主要内容,如果未能解决你的问题,请参考以下文章

Linux编程 13 (系统环境变量位置, 环境变量持久化)

戴尔g3 i5—9300H,64位操作系统系统变量path?

shell 怎么取远程服务器的变量值

c语言问题?????????

linux shell脚本,怎样变量传递执行结果

为什么要配置环境变量?