[Linux] 环境变量

 2024-01-25 04:02:56  阅读 0

@[目录]

一、环境变量 1、概念

环境变量()一般是指操作系统中使用的一些参数,用于指定操作系统的运行环境。 它们是操作系统为了满足不同的应用场景而预先设置的大量全局变量。

环境变量通常有一些特殊的用途,并且它们通常在系统中具有全局属性。

要执行一个程序,首先需要找到该程序。 如何找到它? 这时候就需要带上路径。 问题是:如果我们不想带这条路怎么办?

将文件复制到系统默认路径下,我们不需要:

然而,这种方法有缺陷:我们的指令未经测试。 尽量不要在系统中安装代码,这样会污染系统指令池。

我们之所以能找到,是因为系统的环境变量的原因。 例如,在编写代码和链接时,我们不知道链接的动态库和静态库在哪里,但我们可以链接成功并生成可执行程序。 原因是有相关的环境变量帮助编译器找到

我们可以先看一下PATH

第二种不需要路径的方法:将当前路径添加到环境变量中:

export PATH=$PATH:加上路径

变量可以在Linux下的bash(命令行)中定义。 这是Linux下的环境变量。 登录时系统会执行 . 默认一次并在当前 shell 中查找环境变量。 因此,一旦启动成功,内存中就会维护一个变量$PATH。

下面的环境变量我们非常熟悉,比如之前配置的jdk环境变量

2. 常用环境变量

PATH:指定命令的搜索路径

HOME:指定用户的主工作目录(即用户登录Linux系统时的默认目录)

:当前登录的用户名

:CPU名称

SHELL:当前的Shell,其值通常为/bin/bash

查看环境变量的方法:上面提到的env(查看所有环境变量)和echo $NAME(NAME是环境变量的名称,比如PATH)

2.系统调用获取环境变量

如果我们不想通过指令获取环境变量而是想自己获取,那么我们可以通过以下方式获取环境变量

1.

废话不多说,我们直接实践一下:

USER环境变量最大的意义在于它可以识别当前的Linux用户:

我们可以通过这个直接判断我们是否是root用户:

这就解释了之前遇到的问题:怎么知道当前没有权限访问,直接被拒绝?

执行指令时,访问任意一个文件,该文件都有相应的属主和所属组,会根据环境变量user进行对应,并进行身份验证。 环境变量会在不同的应用场景中使用。

3、设置环境变量 echo:显示某个环境变量的值:设置一个新的环境变量 env:显示所有环境变量 unset:清除环境变量 set:显示本地定义的 shell 变量和环境变量

env 检查环境变量没有结果。 为了找到结果,我们可以使用

这是对的。 这不是环境变量。 程序运行时没有发现。 此时用于将局部变量导入到环境变量中:

1.子进程继承

当在命令行运行./mycmd时,bash是一个系统进程(fork),mycmd会成为一个进程,是bash的子进程。 环境变量具有全局属性的根本原因是它们会被子进程继承。 环境变量是为bash定义的,所有子进程都会继承它们。 这就是所谓的环境变量。因此,环境变量是全局的,而局部变量只会在当前进程中有效(在bash中)

我们为什么要继承它?

答:针对不同的应用场景,比如我们上面提到的身份认证,有些子流程需要利用这些信息来确认当前用户的信息。

set可以显示本地定义的shell变量和环境变量

清除并取消我们的环境变量

2.PWD

为什么我们的系统知道我们当前的路径在哪里:如果我们一开始就学了ls,只需要添加文件名,就不需要添加路径了。 那为什么ls知道当前路径在哪里呢? 残疾人士

环境变量维护 bash 中的当前路径。 当路径改变时,shell会调整环境变量的值。 运行ls会创建一个子进程,环境变量会被子进程继承,所以ls获取的是当前路径,所以ls不需要带路径

该环境变量必须存在,由系统设置

4. 命令行参数

main函数也有参数(最多三个)

main函数也会被系统调用。 所以我们可以简单理解为main函数的参数是由系统/父进程传递的:

我们先看一下其中两个参数

这时候如果我们直接去make,我们会发现:

所以我们需要修改它:

命令行参数实际上将程序名和选项传递给argv(指针数组)。 argv的大小需要根据选项的数量来定义。

参数的意义是可以通过命令行选项来控制它们,使结果不同。 我们可以通过一小串代码来理解:

5、获取环境变量的代码

我们上面说的就是其中之一

6.环境变量的组织

每个进程运行时都会收到一个环境表。 环境表是一个字符指针数组。 每个指针都指向一个以“\0”结尾的环境字符串。

七、总结

综上所述,环境变量的本质就是操作系统为我们设置的一批全局变量。 它们是在计算机启动、加载图形窗口或登录时为我们设置的。

之所以要比较配置环境变量,是为了找到对应的可执行程序在系统中的路径。

标签: 变量 全局 上路

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码