练习使用linux下env,set,export等环境变量相关的函数及命令

1、env

功能:显示所有环境变量

2、echo $NAME(NAME为环境变量名)

功能:查看环境变量内容

3、测试PATH(放系统搜索可执行程序的路径)

创建一个简单的C程序:

编译执行:

注意:这里可执行文件名不能用test,因为在后面实现不加路径执行时,会与系统中的命令冲突,从而执行不了。

我们可以知道,ls不仅是命令也是程序。./test与ls同样为二进制命令,但是ls可以直接执行,但是./test为何要加上路径(.表示当前目录)才可以执行?

原因是ls已经被放到PATH环境中,执行时会去默认路径下找到,但是./test不在PATH中,不指定路径时,会找不到该命令。所有我们只要将test放入PATH中,在下次运行时就可以像ls一样不用加上路径了。将test放入PATH中一共有两种方法:

(1)第一种方法

先利用命令“echo $PATH”查看PATH的位置

然后将可执行文件mytest复制到PATH中的任一路径(注意:如图我们可以看见,普通用户无法执行该操作,我们需要切换到超级用户root

就可以实现不加路径即可执行mytest

同时我们可以看到,普通用户是不能执行该操作的,只能切换为超级用户root。

为了保证PATH的干净性,测试后我们需要将mytest从PATH中删除。

(2)第二种方法

将mytest文件所在路径放入PATH中,同样可以实现该功能。它直接将mytest导成了环境变量。此种方法,在下次打开Linux时,它会自动清理自己export进去的环境变量,不需要手动清理。

4、测试HOME(保存当前用户的家目录)

可以看到:~与$HOME的作用是相同的,且不同用户的家目录不同

5、测试HISTSIZE(历史命令的上限值)

  • history :显示最近使用的1000条命令

6、通过代码获取环境变量

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以 ’\0’ 结尾的环境字符串。

(1)命令行参数的第三个参数

    命令行参数的第三个参数是一个字符指针数组,每一个元素都是一个字符指针,都指向一个环境变量。

运行结果(一部分):

(2)通过第三方变量environ获取

    lib.c中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所有在使用时要有extern声明。

运行结果(一部分):

(3)通过系统调用来获取

  • getenv : 获得一个环境变量,参数为环境变量名字符串,头文件为<stdlib.h>

运行结果:

    

7、环境变量通常具有全局属性

编写一个查看环境变量MY_VAL的代码:

创建并查看MY_VAL环境变量:

可以看到,只有用echo $查看时,才能看到MY_VAL。直接查看,发现查不到,说明该环境变量根本不存在。

而将MY_VAL用export创建,则可以看到,程序运行也能得到。说明环境变量是可以被子进程继承的,也就是说环境变量具有全局属性。而未经过export的叫做本地变量,它是不可以被继承的。

同时,我们也可以看到:ench$只输出环境变量,而set不仅有环境变量,还有其他内容。    

最后,用unset消除环境变量

 
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页