当前位置: 首页 > news >正文

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进程。
在这里插入图片描述

相关文章:

  • 接口自动化测试怎么做?
  • PCDN通过个人路由器,用更靠近用户的节点来分发内容,从而达到更快地网络反应速度
  • 【Qt】sqlite数据库中将数据全部删除后,db文件没有变小
  • 【算法】刷题记录
  • 基于Geotools的PostGIS原始操作之CQL过滤及按属性名称生成面属性时间-以湖北省地级市行政区划为例
  • OpenCV直方图均衡化全面解析:从灰度到彩色图像的增强技术
  • python: range和arange区别
  • 智能合约安全审计平台——形式化验证模型构建
  • QPS是什么??
  • 组件安全工程化革命:从防御体系构建到安全基因重塑
  • 各地物价和生活成本 东欧篇
  • 【Code】《代码整洁之道》笔记-Chapter15-JUnit内幕
  • 使用人工智能大模型腾讯元宝,如何做课题研究?
  • Redis 常见的集群架构
  • 基于SpringBoot的社区老人健康信息管理系统(源码+数据库+万字文档)
  • 用AI直接生成架构图的初步探索
  • 电商中的订单支付(内网穿透)
  • python ftplib 上传文件名 乱码的解决办法
  • 网络入侵检测Suricat之流(flow)检测
  • 安卓性能调优之-掉帧测试
  • 国台办:实现祖国完全统一是大势所趋、大义所在、民心所向
  • 四部门:强化汛期农业防灾减灾,奋力夺取粮食和农业丰收
  • 新能源汽车,告别混乱创新
  • 中国-拉共体成员国重点领域合作共同行动计划(2025-2027)
  • 王毅集体会见加勒比建交国外长及代表
  • 我国7名优秀护理工作者荣获第50届南丁格尔奖