Linux友人帐之环境变量

一、环境变量

1.1 环境变量的概念

1. 什么是环境变量?

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。

2. 为什么会有环境变量?

在Linux系统中,我们发现我们在执行一些指令时,比如ll等指令,直接就可以输入ll指令获得结果,而对于我们自己编译的程序,比如make之后的文件,就需要./文件才能执行。对于执行一个命令来说,我们知道,命令事实上也是一种文件,对于执行这个文件,我们就需要先找到这个文件,在将这个文件执行。而对于ll来说,其对应的文件事实上已经是Linux系统分配到全局的,也就是在默认路径(根目录),因此不需要指定路径搜索这个指令对应的文件,直接ll就代表从根目录查找从而执行。而对于make生成的程序,我们知道这个可执行程序是在当前路径下,并不在根目录中,因此我们也就无法直接输入文件名从而执行,而是需要找到这个文件对应的路径再去执行,因此./就代表着当前路径,而./此文件就代表找到这个文件的路径并且去执行它!

 command not found就意味着并没有从根目录找到这个命令对应的文件。

经过上面的描述,我们知道,如果我们将可执行程序也复制到根目录,那么就也可以直接输入文件名就可以执行该程序了

但是这么做是不好的,因为我们在根目录下拷贝就相当于下载了一个文件,这样不经过测试的指令程序事实上会污染系统的指令池的,因此为了改善这种方式,就有了环境变量的方式去处理这种问题!

1.2 环境变量PATH

env 命令

Linux友人帐之环境变量_第1张图片

Linux env 命令是用于显示和定义环境变量的一个工具。环境变量是一些存储在系统中的特殊变量,它们可以影响系统的行为和用户的工作环境。例如,PATH 环境变量指定了系统在执行命令时要搜索的目录列表,LANG 环境变量指定了系统使用的语言和字符编码等。

使用 env 命令,你可以查看当前系统中已存在的环境变量,也可以在指定的环境中执行其他命令。env 命令有以下常用的参数:

  • -i:创建一个新的空白环境,不继承当前的环境变量。
  • -u:从当前环境中删除指定的变量。
  • –help:显示帮助信息。
  • –version:显示版本信息。

以下是一些 env 命令的使用示例:

  • 显示当前系统的全部环境变量信息:

    env

  • 删除当前系统中的指定环境变量,例如 LOGNAME:

    env -u LOGNAME

  • 定义当前系统中的指定环境变量值,例如 PWD:

    env PWD=/Dir

  • 在一个修改后的环境下执行命令,例如在 PATH 中添加一个新的目录并执行 perl 命令:

    env PATH=$PATH:/new/dir perl --version

$符号
Linux友人帐之环境变量_第2张图片

PATH

为什么能够在系统中找到对应的指令呢?事实上系统中存在一个环境变量PATH,它能够去检索对应的指令,找到了就会去执行,找不到就会像上面一样提示not found,因此我们如果想用另一种方式去直接执行文件,就可以将这个文件路径添加到环境变量PATH中。

当我们查看PATH变量时,每一个:所间隔的就是一个检索的路径,因此只要把想直接执行的文件的路径也添加到这个里面,就能够检索到从而执行。 

自行设置环境变量(export 命令)
Linux友人帐之环境变量_第3张图片

Linux export 命令是用于设置或显示环境变量的一个常用命令。环境变量是一些在 shell 中执行程序时,shell 会提供给程序的一组变量。环境变量可以影响程序的运行行为,例如 PATH 环境变量可以指定程序的搜索路径,LANG 环境变量可以指定程序的语言设置等。使用 export 命令,你可以新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登录操作,如果你想永久地修改环境变量,你需要修改相关的配置文件,例如 ~/.bashrc 或 /etc/profile 等。

export 命令的基本语法是:

export [选项] [变量名]=[变量值]

其中,选项可以是以下之一:

  • -f 代表变量名中为函数名称。
  • -n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
  • -p 列出所有的 shell 赋予程序的环境变量。

如果没有指定选项和参数,export 命令会列出当前所有的环境变量及其值。

例如,如果你想设置一个名为 MYENV 的环境变量,值为 7,你可以输入:

export MYENV=7

如果你想查看当前所有的环境变量,你可以输入:

export -p

如果你想删除一个名为 MYENV 的环境变量,你可以输入:

export -n MYENV

注:对于export定义的本地变量,实际上是字符串类型,并且可以加双引号,也可以不加双引号,但是对于字符串来说,建议加上双引号,因为字符串可能会有空格这种字符。  

Linux友人帐之环境变量_第4张图片

source 命令

Linux source 命令是一个用于在当前 shell 环境中读取和执行文件中的命令的内置命令。source 命令通常用于保留或更改当前 shell 中的环境变量,例如刷新配置文件,导入函数,或者执行脚本。source 命令的基本语法是:

source 文件名 [参数]

或者

. 文件名 [参数]

其中,. 是 source 命令的另一种写法,作用相同。文件名是要执行的文件的路径,参数是要传递给文件中的命令的参数。如果不指定文件名和参数,source 命令会列出当前 shell 的环境变量。

source 命令有以下几种常见的用法:

  • 刷新当前 shell 环境。如果在当前 shell 中修改了一些环境变量,例如别名,路径,语言等,可以使用 source 命令重新加载配置文件,使修改立即生效,而不需要注销或重启。例如,如果修改了 ~/.bashrc 文件中的别名,可以使用 source ~/.bashrc 或 . ~/.bashrc 来刷新当前 shell 环境。
  • 在当前环境下执行 shell 脚本。如果在一个 shell 脚本中使用了一些在当前 shell 中定义的变量,可以使用 source 命令在当前 shell 中执行该脚本,而不是启动一个新的子 shell。这样可以保证脚本中的变量能够被正确识别和使用。例如,如果在一个脚本 test.sh 中使用了一个在当前 shell 中定义的变量 website,可以使用 source test.sh 或 . test.sh 来执行该脚本。
  • 从脚本中导入 shell 函数到当前环境。如果在一个脚本中定义了一个或多个 shell 函数,并且想在当前 shell 中使用这些函数,可以使用 source 命令将这些函数导入到当前环境中。这样就可以在当前 shell 中直接调用这些函数,而不需要每次都运行脚本。例如,如果在一个脚本 func.sh 中定义了一个函数 foo,可以使用 source func.sh 或 . func.sh 来导入该函数到当前环境中,并且可以直接使用 foo 来调用该函数。

 自定义环境变量

Linux友人帐之环境变量_第5张图片

通过指令 :export PATH=$PATH:/home/cfy/sbl/lesson13就可以将这个指令追加到PATH环境变量中。

Linux友人帐之环境变量_第6张图片

1.3 其他常见环境变量 

  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • HOSTNAME:主机名
  • USER:当前用户名
  • PWD:当前系统路径
  • HISTSIZE:shell 能记忆的最多历史命令的条数
  • uname:

uname命令 

uname命令是一个Linux/Unix命令,用于显示操作系统的信息。它的语法如下:

```
uname [options]
```

常用的选项包括:

- `-a`:显示所有信息(默认选项)
- `-s`:显示操作系统的名称
- `-n`:显示主机名
- `-r`:显示内核版本号
- `-v`:显示操作系统的版本号
- `-m`:显示机器类型
- `-p`:显示处理器类型

例如,运行`uname -a`命令会显示所有信息,包括操作系统名称、主机名、内核版本号、操作系统版本号、机器类型和处理器类型。

 id命令

  •  Linux id命令是一个用于显示用户的ID,以及所属群组的ID的shell内建指令,它可以显示用户的UID(User ID)、GID(Group ID)以及附属于用户的所有组 ID
  • Linux id命令的基本语法是:

id [选项] [用户名称]

其中,[用户名称]是指定要显示的用户的名称,如果不指定,则默认为当前用户。[选项]是用来控制id命令的行为的参数,例如:

  • -g 或 --group:显示用户所属群组的ID。

  • -G 或 --groups:显示用户所属附加群组的ID。

  • -n 或 --name:显示用户,所属群组或附加群组的名称。

  • -r 或 --real:显示实际ID。

  • -u 或 --user:显示用户ID。

 1.4其他相关命令

set命令

Linux set命令是一个非常强大的命令,它可以让你控制shell的行为和环境。Linux set命令有两种用法,一种是不带任何参数,另一种是带有一个或多个参数。下面我将分别介绍这两种用法。

  • 不带任何参数的set命令:当你在shell中输入set命令后,它会显示当前shell的所有变量和函数,包括系统变量、用户变量和自定义函数。这些变量和函数的值可以用来配置shell的环境或者在脚本中使用。例如,你可以输入set | grep PATH来查看当前shell的PATH变量的值,或者输入set | grep hello来查看是否定义了名为hello的函数。
  • 带有一个或多个参数的set命令:当你在shell中输入set命令后,加上一个或多个参数,它会根据这些参数来改变shell的执行方式。这些参数可以分为两类,一类是以-开头的选项,另一类是以+开头的选项。以-开头的选项表示启用某种功能,以+开头的选项表示禁用某种功能。例如,你可以输入set -e来启用错误检测功能,或者输入set +e来禁用错误检测功能。

注意,我们所创建的本地变量(局部变量)不能被env找到,但是却可以被set找到,这也就说明了set能够找到shell本地的变量和环境变量,也就是局部变量和全局变量。

而对于set本身,因为里面既有环境变量又有本地变量,因此其内容远多于env,对于类似于续行符 \这样的符号,其内部也存在。

unset命令

  •  Linux unset命令是一个用于删除变量或函数的shell内建指令,它可以清除已定义的shell变量(包括环境变量)和shell函数,释放它们占用的内存空间
  • Linux unset命令的基本语法是:
  • unset [-fv] [变量或函数名称]

    其中,[变量或函数名称]是指定要删除的变量或函数的名称,可以是一个或多个。[-fv]是用来控制unset命令的行为的参数,例如:

  • -f:仅删除函数。

  • -v:仅删除变量。

  • Linux unset命令的使用示例如下:

    • 删除环境变量mylove及其对应的值,输入如下命令:

    unset -v mylove

    • 删除函数myfunc及其定义,输入如下命令:

    unset -f myfunc

    • 同时删除变量myvar和函数myfunc,输入如下命令:

    unset myvar myfunc

1.5 环境变量的意义

我们拿ls 指令举例:

我们发现,ls 后的指令为什么不需要./,而是直接输入文件名就行了呢?也就是为什么ls就知道这个文件的当前路径在哪里呢?

实际上,这是因为我们有一个环境变量PWD,通过PWD就能够找到对应的路径:

Linux友人帐之环境变量_第7张图片

我们发现,当我们cd ..到什么路径,PWD就会变成什么路径。因此,ls 就是通过这个环境变量找到了这个文件。

既然环境变量中有PWD,那我们也可以自己实现PWD指令:

因此,环境变量的意义就在于其可以找到指定文件的路径。环境变量就相当于系统启动时加载到内部的全局变量。

你可能感兴趣的:(Linux,linux,运维,服务器)