Windows环境变量 和 Linux环境变量

环境变量就像是一张地图,告诉程序员和程序在哪里可以找到所需的资源和工具。

  • 一、Windows环境变量
    • 1.1 什么是Windows环境变量?
    • 1.2 Windows环境变量的设置和访问
      • 1.21 设置环境变量
      • 1.22 查看环境变量
    • 1.3 常见的Windows环境变量
    • 1.4 环境变量的作用
    • 1.5 Windows环境变量长度限制问题
  • 二、Linux环境变量
    • 2.1 什么是Linux环境变量
    • 2.2 环境变量的作用
    • 2.3 Linux 环境变量的分类和对应的配置文件
    • 2.4 查看和修改Linux环境变量
      • 环境变量配置文件的语法
    • 2.5 常见的环境变量

一、Windows环境变量

Windows环境变量 接触的很多,图形化界面也很好设置,简单看一下即可。

1.1 什么是Windows环境变量?

环境变量是Windows操作系统中用于存储有关系统环境和配置的信息。它们是具有名称和对应值的对象,可以被应用程序和系统组件访问和使用。环境变量在Windows中扮演着连接各个组件和应用程序之间的桥梁作用。

Windows环境变量的配置文件是存储在注册表中的,并不像Linux那样是一个文本文件。 Windows中有两个级别的环境变量:用户级别和系统级别。

  1. 用户级别环境变量:这些环境变量只对当前用户有效,不会影响其他用户。

    用户级别的环境变量配置存储在注册表的以下位置:

    HKEY_CURRENT_USER\Environment
    

    你可以通过以下步骤打开注册表编辑器并访问用户级别的环境变量配置:

    • 按下 Win + R 组合键,打开“运行”对话框。
    • 输入 regedit,点击“确定”打开注册表编辑器。
    • 导航到 HKEY_CURRENT_USER\Environment 键。
  2. 系统级别环境变量:这些环境变量对所有用户都有效。

    系统级别的环境变量配置存储在注册表的以下位置:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
    

    你可以通过以下步骤打开注册表编辑器并访问系统级别的环境变量配置:

    • 按下 Win + R 组合键,打开“运行”对话框。
    • 输入 regedit,点击“确定”打开注册表编辑器。
    • 导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 键。

注意,对于环境变量的更改,特别是对注册表的更改,请务必小心谨慎。不正确的更改可能会导致系统故障或其他问题。所以,一般是在设置中修改环境变量。

1.2 Windows环境变量的设置和访问

1.21 设置环境变量

在Windows中,可以通过系统属性或命令行来设置环境变量。

  • 通过系统属性:

    • 右键点击"计算机"或"此电脑",选择"属性"。
    • 在打开的窗口中,点击"高级系统设置"。
    • 在"系统属性"窗口中,点击"环境变量"按钮。
    • 在"用户变量"或"系统变量"区域,可以添加、编辑或删除环境变量。
  • 通过命令行:

    • 使用set命令来设置临时环境变量,例如:
      set MY_VARIABLE=HelloWorld
      
    • 使用setx命令来设置永久环境变量,例如:
      setx MY_VARIABLE "HelloWorld"
      

通过“搜索”功能,可以很快打开环境变量设置:

Windows环境变量 和 Linux环境变量_第1张图片

1.22 查看环境变量

要查看当前环境变量的值,可以通过命令行或图形界面进行操作。

  • 命令行:使用echo命令,例如: echo %PATH%
    Windows环境变量 和 Linux环境变量_第2张图片

  • 图形界面:通过系统属性的"环境变量"窗口查看。
    Windows环境变量 和 Linux环境变量_第3张图片

1.3 常见的Windows环境变量

Windows系统中有许多常用的环境变量,其中一些是预定义的,而其他则可以根据需要自定义。以下是一些常见的环境变量:

  • PATH:指定可执行文件的搜索路径,使得可以直接在命令行中执行可执行文件。
  • TEMPTMP:指定临时文件的存储路径。
  • USERPROFILE:指定当前用户的用户文件夹路径。
  • SYSTEMROOT:指定Windows系统文件夹(通常为C:\Windows)的路径。

1.4 环境变量的作用

  1. 程序配置:环境变量可以用于配置应用程序的行为。通过设置特定的环境变量,可以影响应用程序的默认设置、文件路径、语言偏好等。

  2. 可执行文件的搜索:通过将可执行文件所在的路径添加到PATH环境变量中,可以使得命令行或脚本可以直接执行可执行文件,而无需指定完整的文件路径。

  3. 脚本编程:环境变量可以在脚本编程中使用,用于传递参数、配置选项和设置路径等。这使得脚本编程更加灵活和可配置。

1.5 Windows环境变量长度限制问题

Windows的环境变量长度有限制,但是具体的限制取决于不同的因素,例如操作系统版本、环境变量的类型、设置和读取环境变量的方法等。一般来说,有以下几个方面的限制:

  • 环境变量的理论最大长度是32,767个字符(总共,不是某一个),但是这个长度很难达到,因为所有的环境变量必须共享一个环境块,而环境块本身也有32,767个字符的限制。而且,环境块中还包含了一些其他的信息,例如每个变量名和值之间用空字符分隔,环境块的末尾用两个空字符结束等。所以实际上可用的长度要小于这个值。
  • 环境变量的实际最大长度还受到操作系统版本的影响。在Windows XP和Windows Server 2003中,由于一个bug,使用CreateEnvironmentBlock函数获取环境变量时,返回的path环境变量被截断为1,024个字节,即使它本来可以达到2,048个字节。这个bug已经有了一个热修复。
  • 环境变量的实际最大长度还受到设置和读取环境变量的方法的影响。不同的工具或命令可能有不同的限制。例如,在Windows 10中,使用set或setx命令设置环境变量时,值被截断为1,023个字符。使用env或printenv命令读取环境变量时,值被截断为8,191个字符。

一般来说,所有环境变量的总长度不会超过限定值(32767)。但是当你编辑某一个环境变量时,可能会出现:此对话框允许将值设置为最长2047个字符的提示,导致你无法添加新的环境变量。

这个就是Windows自己的问题了,举个例子:win 10 已经有“设置”这个功能了,但是进去之后,某些设置却仍然打开的是旧版的“控制面板”。也就是说:设置中的一些选项,可能并不支持Windows的最新标准。

解决方法:

  • 清理PATH环境变量,删除不再需要的值。
  • 在powershell中使用命令添加环境变量,PowerShell可以直接调用Windows API,所以可以接近32,767个字符的理论限制。
  • 使用短文件名,你可以用dir /x /ad命令来查看短文件名。例如,C:\Program Files (x86)可以替换为C:\PROGRA~2。
  • 使用嵌套的环境变量(我的解决方法):创建一个新的环境变量,比如NEWPATH,将一些路径赋值给它,然后在PATH环境变量中加上;%NEWPATH%。这样可以减少PATH环境变量的长度。
  • 例子:之前我的环境变量太多了,而且很多都很长(软件的安装路径),拿西门子的博途软件为例,新建一个Siemens变量(名称随意),值就是对应的目录:
    Windows环境变量 和 Linux环境变量_第4张图片
    然后在PATH变量中使用%Siemens%来代替原来的一长串路径:
    Windows环境变量 和 Linux环境变量_第5张图片

二、Linux环境变量

2.1 什么是Linux环境变量

环境变量是一种在Linux系统中存储和传递配置信息的机制。环境变量是一些以名称和值对的形式存在的变量,它们可以被shell和其他程序使用和修改。环境变量可以影响系统的行为,例如控制命令的搜索路径,设置语言和区域设置,指定临时文件的位置等。

2.2 环境变量的作用

  • 程序配置:环境变量可以用于配置各种应用程序的行为。例如,通过设置JAVA_HOME环境变量,可以告诉系统Java的安装路径,从而使得Java相关的应用程序能够正常运行。

  • 执行程序:环境变量中的路径信息可以让系统找到并执行可执行文件。通过将可执行文件所在的目录添加到PATH环境变量中,可以在终端中直接运行该可执行文件,而无需输入完整的路径。

  • 脚本编程:在编写脚本时,可以使用环境变量来传递参数、配置路径和设置其他相关选项,以实现更灵活的脚本编程。

2.3 Linux 环境变量的分类和对应的配置文件

环境变量可以分为两类:全局环境变量和局部环境变量。

  • 全局环境变量是对所有用户和进程都有效的环境变量,它们通常在系统启动时由系统配置文件或初始化脚本定义。全局环境变量可以用来设置系统级的参数,例如主机名,时区,网络代理等。

  • 局部环境变量是只对当前用户或进程有效的环境变量,它们通常在用户登录时或在运行某个程序时由用户配置文件或命令行定义。局部环境变量可以用来设置用户级的参数,例如用户名,主目录,命令别名等。

Linux系统中,全局环境变量和局部环境变量对应的文件分别是:

  • 全局环境变量对应的文件有:

    • /etc/profile: 这个文件是所有shell都可以读取的配置文件,它在交互式登录shell启动时被执行。
    • /etc/environment: 这个文件是存储环境变量的纯文本文件,它在登录时被读取。
    • /etc/bash.bashrc: 这个文件是针对Bash shell的配置文件,它在交互式非登录shell启动时被执行。
    • /etc/profile.d/: 这个目录下的所有文件都会被/etc/profile调用并执行。

    我的全局环境变量:
    /etc/profile:
    Windows环境变量 和 Linux环境变量_第6张图片

    这个环境变量是所有shell都可以读取的配置文件,它在交互式登录shell启动时被执行。它的意思是:

    • 如果PS1变量存在并且不为空,那么执行以下的命令。PS1变量是用来定义shell的提示符的。
    • 如果BASH变量存在并且不等于/bin/sh,那么说明当前使用的是Bash shell。这时,如果/etc/bash.bashrc文件存在并且可读,那么执行这个文件中的命令。这个文件是针对Bash shell的配置文件,它在交互式非登录shell启动时被执行。
    • 否则,如果当前用户的ID等于0,那么说明当前用户是root用户。这时,将PS1变量设置为# 。否则,将PS1变量设置为$ 。
    • 如果/etc/profile.d目录存在,那么遍历这个目录下的所有以.sh结尾的文件,如果这些文件存在并且可读,那么执行这些文件中的命令。这些文件通常用来定义一些特定的环境变量或函数。
    • 将/root/nvim-linux64/bin/nvim添加到PATH变量中,并将PATH变量导出到当前shell及其子进程的环境中。PATH变量是用来定义系统在执行命令时搜索可执行文件的目录列表的。/root/nvim-linux64/bin/nvim是一个文本编辑器程序的路径。

      /etc/environment:
      Windows环境变量 和 Linux环境变量_第7张图片
      这个文件是存储环境变量的纯文本文件,它在登录时被读取。这个文件中定义了PATH变量,它的值是一些目录的列表,以冒号分隔。这些目录是系统在执行命令时搜索可执行文件的地方。比如:/usr/bin下面有很多常用命令:Windows环境变量 和 Linux环境变量_第8张图片
      /etc/bash.bashrc:
      内容比较长,就不展示了
  • 局部环境变量对应的文件有:

    • 局部环境变量一般位于用户主目录下,下面的例子中~代表root用户的主目录,名称是root,位置是/root,用~来简写代替。

    • ~/.bashrc 是在每次启动一个交互式非登录shell时读取和执行的文件,例如在已经登录的shell中输入bash命令或者打开一个新的终端窗口。这个文件通常用于定义一些针对Bash shell的命令,例如别名,函数,提示符等。

    • ~/.bash_profile 是在每次启动一个交互式登录shell时读取和执行的文件,例如通过ssh或者本地登录到系统时。这个文件通常用于定义一些环境变量,例如PATH,LANG,EDITOR等。这些变量会被后续的shell继承。

    • 一般来说,~/.bash_profile 会包含一个调用~/.bashrc的语句,这样在登录时就可以同时执行两个文件中的命令。如果~/.bash_profile不存在,Bash会尝试读取~/.profile文件,这个文件是所有shell都可以读取的配置文件。

比如,我的用户环境配置文件是:~/.bashrc~/.profile

.profile 的内容:
Windows环境变量 和 Linux环境变量_第9张图片

它是所有shell都可以读取的配置文件,它在交互式登录shell启动时被执行。它的意思是:

  • 如果BASH变量存在并且不为空,那么说明当前使用的是Bash shell。这时,如果~/.bashrc文件存在并且可读,那么执行这个文件中的命令。这个文件是针对Bash shell的配置文件,它在交互式非登录shell启动时被执行。
  • 执行mesg n命令,并将错误信息重定向到/dev/null,即忽略错误信息。如果mesg n命令执行成功,那么返回true。mesg n命令是用来禁止其他用户向当前终端发送消息的。这样可以保护当前用户的隐私。

    .bashrc的内容:
    略。

注意:

  • 在某些Linux发行版中,可能使用其他文件名,如~/.bash_aliases~/.profile,作为用户的个人环境变量配置文件。
  • 全局环境变量文件的修改需要超级用户(root)权限,而用户级别的环境变量文件可以由用户自行编辑。

2.4 查看和修改Linux环境变量

在Linux系统中,有多种方法可以查看和修改环境变量。

  • 使用env命令显示的是当前环境中的环境变量,包括全局环境变量和用户级别的环境变量。

  • 使用echo命令可以打印某个环境变量的值,例如echo $PATH可以显示当前的命令搜索路径(显示的是当前shell的PATH环境变量的内容,它可能包含系统环境变量和用户的环境变量的内容).
    Windows环境变量 和 Linux环境变量_第10张图片

  • 使用export命令可以定义或修改一个环境变量,并将其导出到当前shell及其子进程的环境中。例如export PATH=/usr/local/bin:$PATH 可以将/usr/local/bin 添加到当前的命令搜索路径。

  • 使用unset命令可以删除一个环境变量,并将其从当前shell及其子进程的环境中移除。例如unset PATH可以删除当前的命令搜索路径。

  • 使用set命令可以显示当前shell的所有变量,包括环境变量和shell变量。shell变量是只对当前shell有效的变量,它们不会被导出到其他进程的环境中。

  • 使用source命令或.操作符可以执行一个脚本文件,并将其中定义的环境变量导入到当前shell的环境中。例如source ~/.bashrc. ~/.bashrc可以执行用户主目录下的.bashrc文件,并将其中定义的环境变量生效,也就是常说的刷新环境变量

环境变量中还可以为某个命令指定别名

alias php80=‘php80 -c /www/server/php/80/etc/php-cli.ini’

这个命令是用来定义一个名为php80的别名,它相当于执行php80 -c /www/server/php/80/etc/php-cli.ini这个命令。别名是一种简化输入或自定义命令的方式,它可以让你用一个简短的名称来代替一个长的或复杂的命令。这个命令相当于让你每次输入php80时,就相当于输入了php80 -c /www/server/php/80/etc/php-cli.ini,这样可以节省时间和精力。这个命令的含义是用php80这个程序来运行PHP脚本,并指定使用/www/server/php/80/etc/php-cli.ini这个文件作为配置文件。

环境变量配置文件的语法

一般来说我们使用exportalias就足够了,但是了解语法,可以帮助我们阅读配置文件。

2.5 常见的环境变量

Linux系统中有许多常见的环境变量,它们有不同的作用和含义。以下是一些常见的环境变量及其说明:

  • PATH: 定义了系统在执行命令时搜索可执行文件的目录列表,以冒号分隔。如果一个命令不包含完整的路径,系统会按照这个列表依次查找该命令是否存在。
    在这里插入图片描述

  • HOME: 定义了当前用户的主目录,即登录时默认进入的目录。这个目录通常包含用户的配置文件,数据文件等。
    在这里插入图片描述

  • USER: 定义了当前用户的用户名,即登录时输入的用户名。
    在这里插入图片描述

  • SHELL: 定义了当前用户使用的shell程序,即登录时启动的交互式命令解释器。常见的shell程序有bash, zsh, csh等。
    在这里插入图片描述

  • LANG: 定义了当前用户使用的语言和字符编码,即显示和输入文本时使用的语言规则和字符集。这个变量会影响系统支持的语言和区域设置,例如日期格式,货币符号,排序规则等。
    在这里插入图片描述

  • PS1: 定义了当前shell的提示符,即每次输入命令时显示在命令行前面的字符串。这个变量可以包含一些特殊的转义序列,例如\u表示用户名,\h表示主机名,\w表示当前工作目录等。
    在这里插入图片描述

  • TERM: 定义了当前终端的类型,即显示和输入文本时使用的终端模拟器或控制台。这个变量会影响系统支持的终端功能,例如颜色,光标,键盘映射等。
    在这里插入图片描述

  • EDITOR: 定义了当前用户使用的文本编辑器,即编辑文本文件时默认启动的程序。常见的文本编辑器有vim, nano, emacs等。

  • LD_LIBRARY_PATH: 定义了系统在执行程序时搜索动态链接库的目录列表,以冒号分隔。如果一个程序依赖于某些动态链接库,系统会按照这个列表依次查找该库是否存在。

  • TMPDIR: 定义了系统在运行时存储临时文件的目录。如果这个变量没有定义,系统会使用默认的临时文件目录,通常是/tmp或/var/tmp。



~

你可能感兴趣的:(Ubuntu,Linux,操作系统相关,windows,linux,运维)