Linux :环境变量
Linux:环境变量
- (一)环境变量的概念
- 1.环境变量PATH
- 2.环境变量HOME
- 3.环境变量SHELL
- (二) 环境变量相关指令
- 内建命令
- (三) main函数的参数
- 1.命令行参数
- 2. main 参数中的env
(一)环境变量的概念
-
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
-
我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
-
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
常见环境变量
- PATH : 指定命令的搜索路径
- HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
- SHELL : 当前Shell,它的值通常是/bin/bash。
查看环境变量方法
echo $NAME
//NAME:你的环境变量名称
1.环境变量PATH
PATH : 指定命令的搜索路
我们运行可执行程序时,需要加上./
,例如下面这样:
这是因为所有可执行程序,都需要告诉系统该程序的路径,而系统根据该路径找到该可执行程序再执行。
而在执行系统命令的时候却不需要这样,为什么??
这是因为环境变量PATH,系统通过环境变量PATH来找到ll命令的路径。也就是说ll命令就在PATH环境变量的默认路径下。
环境变量的本质是操作系统在内存/磁盘文件中开辟的空间,用来保存系统相关的数据。
环境变量PATH以:为分割符
,分割出多条路径,系统从左到右的路径中依次查找命令,直到找到为止。
我们也可以通过which
查找某个命令的路径
如果我们也向把我们的可执行程序像系统命令一样执行
我们可以有两种方法将我们的可执行程序放到坏境变量PATH里。
方法一:
将我们可执行程序放到PATH的某个路径种。
这种方法污染命令池
sudo cp proc /usr/bin
方法二:
把我们的当前路径添加到环境变量PATH
export PATH=$PATH:当前路径
我们只需要重新登录一次我们的当前Linux账号环境变量就会恢复,因为这个修改环境变量仅仅是对此次登录有效,只要我们不动配置文件,不会出问题的。
2.环境变量HOME
指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
3.环境变量SHELL
Linux中所敲的各种命令,实际上是需要命令行解释器进行解释的,而在linux中有许多命令行解释器如bash、sh等,我们可以通过查看环境变量SHELL来知道自己当前所用的命令行解释类型。
(二) 环境变量相关指令
-
echo (显示某个环境变量值)
echo $NAME
//NAME:你的环境变量名称,。上面已经展示。 -
export(新增一个环境变量)
-
env(显示所有的环境变量)
-
set(显示本地定义的shell变量和环境变量)
关于本地变量和环境变量可以看看这篇博客 -
unset(清除本地变量 || 环境变量)
内建命令
内建命令是指那些直接由操作系统核心提供,无需额外安装就可以在 Linux 环境下运行的基本命令。它们通常与 Linux 的系统管理、文件操作、网络管理等核心功能相关,例如 ls, cd, pwd, cat, mkdir 等。这些命令是 Bash 或其他 shell 环境默认支持的,不需要额外配置或第三方软件包就能使用。内建命令通常执行效率较高,因为它们是直接集成在内核或shell环境中的。
内建命令属于shell执行的一部分,因此执行内建命令不需要创建子进程,也不需要打开程序文件,这样不用操作文件IO,执行效率高,运行快。
这里echo的打印,依靠bash中内建命令完成。
常规命令(通过创建子进程完成的)
内建命令(bash不创建子进程,而是由自己亲自执行的,类似于bash调用了自己写的或者是系统提供的函数)
(三) main函数的参数
main函数其实是有参数的
int main(int argc, char *argv[], char *env[])
argc 和 argc 都和命令行参数有关
- argc:命令行字符串的个数
- argv:指针数组,存放命令行字符串
- env:存放环境变量信息
1.命令行参数
通过下面这个例子对命令行参数进行更深的理解
改图出自@
通过上面的例子,我们可以清晰的理解到为什么一个命令可以有多个子功能,其实就是通过命令行参数来实现。
2. main 参数中的env
环境变量的组织方式
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’
结尾的环境字符串。
env存放环境变量信息
也可以通过下面这样方式查看环境变量
- getenv(获取环境变量内容)
上面说到环境变量具有全局性,可以被继承
环境变量是从父进程继承得来,慢慢追溯到bash,甚至操作系统。
bash是命令行解释器,而输入各种命令创造进程的时候,该进程的环境变量便是继承自bash进程。