[环境变量]介绍

476 阅读8分钟

个人总结

path环境变量,是用来配置可执行文件(可执行文件)的绝对路径的(完整路径), 这样我们就可以在命令行(终端)的任何位置来执行可执行文件(命令),而不用输入该可执行文件的完整路径。

因为系统在执行可执行文件的时候,会自动的去环境变量中去查找。

一、什么是环境变量

PATH 环境变量在操作系统中扮演着非常重要的角色,它主要用于指定【操作系统】去搜索【可执行文件】的目录路径。

当你在命令行(终端)中输入一个命令时(该命令其实就是一个可执行文件),操作系统会按照PATH环境变量中指定的目录顺序,去查找是否存在以该命令名命名的可执行文件。

如果找到了,就执行该文件;如果没有找到,系统就会报错,提示“命令未找到”或类似的消息。

具体来说,PATH环境变量的作用包括:

  1. 简化命令的输入:用户无需输入可执行文件的绝对完整路径(因为这样太麻烦了),只需输入可执行文件名(或别名alias,如果你设置了的话)即可执行。这极大地提高了命令行操作的效率和便捷性。

  2. 支持多版本管理:通过修改PATH环境变量,可以很容易地切换不同版本的工具或程序。例如,在安装了多个版本的Python或Node.js时,通过调整PATH中各个版本的路径顺序,可以控制【默认】使用哪个版本的解释器。

  3. 允许全局访问:一旦某个目录被添加到PATH中,那么该目录下的所有可执行文件都可以从系统的任何位置被调用,无需切换到该目录下。

  4. 支持第三方软件:很多第三方软件在安装时会自动将其可执行文件的路径添加到PATH中,这样用户就可以在任何地方通过命令行启动这些第三方软件了。

  5. 提高安全性:虽然这一点不是PATH的直接作用,但通过仔细管理PATH,可以限制哪些程序可以被执行,从而提高系统的安全性。例如,避免将不安全的目录添加到PATH中,可以减少恶意程序被误执行的风险。

在Windows、Linux和macOS等操作系统中,PATH环境变量的管理和使用方式略有不同,但基本原理是一致的。

用户可以通过命令行工具(如Windows的setsetx,Linux和macOS的export和修改.bash_profile.bashrc等文件)来查看、添加或修改PATH环境变量。

二、.bash_profile文件和.bashrc文件有什么区别?环境变量我应该添加在哪一个文件中

在Linux系统中,.bash_profile.bashrc都是用于配置用户环境的重要文件,

但是它们之间存在一些关键的区别,这些区别决定了在添加环境变量时应该选择哪一个文件。

1/区别

  1. 执行时机

    • .bash_profile:该文件在用户登录时执行,无论是通过图形界面登录还是通过SSH远程登录。它主要用于设置用户登录时的环境变量和启动程序。
    • .bashrc:该文件在用户每次打开一个新的终端(bash shell)时执行。它主要用于设置与终端操作相关的配置,如提示符、别名、函数等,也可以设置环境变量。
  2. 作用范围

    • .bash_profile的影响范围更广,因为它在用户登录时执行,所以设置的环境变量和启动程序会影响到用户登录后的整个会话。
    • .bashrc的影响范围则相对局限,它只影响当前终端会话。但是,由于它每次打开新终端时都会执行,所以对于那些希望每次打开终端时都能自动设置某些配置的用户来说,.bashrc是一个很好的选择。

2/环境变量的添加

  • 全局环境变量:如果你希望设置的环境变量对所有用户都有效,那么应该考虑修改/etc/environment文件或/etc/profile文件(以及/etc/profile.d/目录下的脚本),而不是.bash_profile.bashrc。这是因为.bash_profile.bashrc都是针对单个用户的配置文件。

  • 单个用户的环境变量

    • 如果你希望设置的环境变量只在用户登录时生效,并且希望这些变量在整个登录会话中都可用,那么应该将它们添加到.bash_profile文件中。
    • 如果你希望设置的环境变量在每次打开新终端时都自动生效,并且这些变量主要与终端操作相关,那么可以将它们添加到.bashrc文件中。

3/总结

  • 对于大多数用户来说,如果只是想设置一些常用的环境变量(如PATH),并且希望这些变量在用户登录后的整个会话中都可用,那么将它们添加到.bash_profile文件中是一个不错的选择。
  • 如果你需要为终端会话设置一些特定的配置(如提示符、别名等),并且希望这些配置在每次打开新终端时都自动生效,那么可以将它们添加到.bashrc文件中。

请注意,根据你的具体需求和Linux发行版的配置,可能还需要考虑其他因素。例如,在某些Linux发行版中,.bash_profile可能会自动调用.bashrc文件,以确保.bashrc中的配置也在用户登录时生效。因此,在添加环境变量之前,最好先了解你的Linux发行版的默认行为。

环境变量之间,用什么符号连接(英文的冒号:)

在Linux和类Unix系统中,当设置或修改环境变量时,特别是当需要将多个路径或值添加到同一个环境变量中时,通常使用冒号(:)作为分隔符来连接它们。

这是因为在这些系统中,环境变量(如PATH)通常被期望是一个由冒号分隔的目录列表。

例如,如果你想要将/usr/local/bin目录(bin目录下,一般会有很多的可执行文件)添加到你的PATH环境变量中,你可能会看到或执行类似以下的命令:

export PATH=$PATH:/usr/local/bin

在这个命令中,$PATH代表当前PATH环境变量的值,:是分隔符,而/usr/local/bin是你想要添加的新目录(该目录下有很多可执行的二进制文件)

执行这个命令后,PATH环境变量将包含它原来的所有值,以及新添加的/usr/local/bin目录,这些值之间由冒号分隔。

同样地,如果你正在修改另一个环境变量,并且需要添加多个值,你也应该使用冒号作为分隔符。但是,请注意,并非所有环境变量都使用冒号作为分隔符;这主要取决于环境变量的用途和系统的约定。然而,对于大多数与路径或列表相关的环境变量(如PATH、LD_LIBRARY_PATH等),冒号是标准的分隔符。

在Windows系统中,情况有所不同。Windows使用分号(;)作为环境变量中路径的分隔符。因此,在Windows上添加新路径到PATH环境变量时,你会看到类似这样的命令或操作:

cmd

set PATH=%PATH%;C:\path\to\your\directory

或者使用系统属性对话框中的“环境变量”按钮来图形化地修改环境变量,其中PATH变量的值也是由分号分隔的。

demo: 我安装了mongodb, 我现在想把mongodb的一些可执行文件添加到环境变量中,那么我可以这样操作: 在.bash_profile文件,或者.bashrc文件中, export PATH=$PATH:/Users/dida/mongodb/bin 最后,source .bashrc

export PATH="/opt/homebrew/bin:PATH"或者eval"PATH"或者eval "(/opt/homebrew/bin/brew shellenv)" 这两种添加Homebrew环境变量的方式有何不同

这两种方式都是为了将 Homebrew 的路径添加到系统的环境变量 PATH 中,使得可以在终端中使用 Homebrew 命令,但它们的实现方式和作用略有不同。

  1. export PATH="/opt/homebrew/bin:$PATH"

    • 这种方式是直接将 Homebrew 的安装路径(/opt/homebrew/bin)添加到当前 shell 会话的 PATH 变量的前面。
    • 这样做的结果是,当前会话中所有新启动的命令都会优先搜索 /opt/homebrew/bin,确保 Homebrew 的命令可以被找到。
    • 这种方法是比较简单直接的,但在关闭终端后,这个修改不会被保留,除非将其写入到配置文件(如 .bashrc.zshrc 等)中。
  2. eval "$(/opt/homebrew/bin/brew shellenv)"

    • 这条命令会执行 Homebrew 提供的 shellenv 子命令,它会输出一系列的环境变量设置,包括 PATH 的设置。
    • 使用 eval 这个命令会将输出的内容作为 shell 命令执行,从而将 Homebrew 相关的环境变量(如 PATHHOMEBREW_PREFIX 等)设置到当前的 shell 会话中。
    • 这种方式通常更为灵活和完整,因为它不仅设置了 PATH,还可能设置其他 Homebrew 需要的环境变量。
    • 同样,这种方式也需要在配置文件中写入才能使其在每次打开终端时自动生效。

总结来说,如果你只需要简单地添加 PATH,可以使用第一种方式;如果你希望完整地配置 Homebrew 的环境,第二种方式更为推荐。