论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
运维.售后
›
运维.售后
›
【Linux】环境变量(初步熟悉环境变量)
【Linux】环境变量(初步熟悉环境变量)
写过一篇
金牌会员
|
2024-9-28 18:31:56
|
显示全部楼层
|
阅读模式
楼主
主题
768
|
帖子
768
|
积分
2304
1. 环境变量
在main函数的命令行参数中,有argc、argv、env三个参数。
argc:命令函参数的个数
argc:存放每个参数的具体数值
通过这两个参数,我们可以根据传进来的参数做出判断,来举行相对应的操纵,进而到达指令带选项的效果
那第三个参数env是什么呢?- - 环境变量
我们打印出了env中所有的数据,就是环境变量。
1.1 基本概念
环境变量(environment variables):一般是指在操纵体系中用来指定操纵体系运行环境的一些参数,未来会以shell的形式传递给所有进程,每个进程都会熟悉这些参数。
如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是还是可以链接乐成,生成可实行步调,原因就是有相关环境变量帮助编译器举行查找。
环境变量通常具有某些特殊用途,而且在体系当中通常具有全局特性。
常见的环境变量有哪些呢?
使用命令env可表现shell自己的环境变量。
2. 熟悉常见环境变量
2.1 PATH
PATH:指定命令的搜刮路径
各人在敲指令的时候有没有过如许的问题:为什么我自己写的可实行步调实行时要 ./ 指定路径,而实行体系命令时就不用带指定路径呢?
体系在实行指令的时候会去/usr/bin路径下去找
但是体系为什么会知道命令在/usr/bin路径下呢?
在shell登录的时候,环境变量PATH告诉shell去哪个路径下去查。
使用 echo 命令可以表现某一个环境变量 echo $PATH
PATH中包含多个路径,以冒号作为分隔符
因此,在shell运行某个命令时,它首先会去PATH中以冒号作为分隔的多个路径下去查找命令。当把PATH中所要求的路径全部找完,依旧没有找到的环境下,就会报出command not found;一旦在恣意路径下找到命令,就会将命令加载并实行。
以是我们在实行体系命令时不必要指定/usr/bin路径,它会自己去PATH中找。
当我们把自己的可实行文件的路径添加到PATH中时,我们实行时也就不必要再带路径了
以是可以如许:PATH = $PATH(原有路径) : 我的路径,将自己的路径添加到PATH中。
但是一旦退出shell,我们所添加的路径就没有了。
以是,PATH的本质:就是一个内存条理的变量,在shell中被维护起来,一旦shell退出再登录,该PATH就不会是我们修改后了,恢复成原有路径了。
那么PATH中最开始的内容是从哪里来的呢?
shell登陆时,会从体系和用户的配置文件中读取对应的环境变量的配置文件,然后形成自己的环境变量表。
以是我们可以将路径添加到配置文件中(家目次下的bashrc)。
2.2 HOME
HOME:当前用户所对应的家目次(即用户登陆到Linux体系中时,默认的目次)
当我们使用不同的用户登录的时候,体系要创建bash给我们做准备,bash要读取相关的配置文件来初始化PATH、HOME,以是我们登陆时会默认处在家目次下。
bash也是一个进程,以是它有自己的cwd,它就会使用配置好的HOME设置自己的cwd。
命令行实行的命令,都是bash的子进程,那子进程的task_struct从哪里来呢? - - 拷贝自父进程,以是子进程的cwd也就会继承bash当前的工作路径。
如果bash在不同的工作路径下,当它创建子进程时,路径就会被子进程继承,以是在查看子进程的路径时也会发生变化,子进程所有的操纵都是在所继承下来的路径中。
2.3 SHELL
SHELL : 登录时,启动的是哪一个Shell,它的值通常是/bin/bash
2.4 PWD
PW:用于保存当前进程所在的工作路径
除了使用命令函参数获取环境变量以外,还使用体系方式获取环境变量:getenv()
为什么要得到该环境变量呢?- - 进程可得到自己的PWD,可用于新建或打开当前路径下的文件
2.5 USER
USER:当前的用户身份
此时我们就可以在步调中使用getenv(“USER”)来识别用户身份。
环境变量另有许多,后续慢慢先容。
3. 明白环境变量
环境变量的本质
其实环境变量就是一张表,表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串
环境变量是体系提供的具有“全局”属性的变量
在命令行中,我们是可以界说变量的,但这些变量不是环境变量,是shell维护的,是本地变量。
那如何查体系中所有的变量呢?- - set命令
如何将一个本地变量变成环境变量呢? export + a(先界说变量) / export a=100(不用界说,直接导)
一旦一个变量被设置进环境变量表后,它就可以被其它进程访问。
子进程会继承父进程的
环境变量表和命令行参数
,不会继承本地变量表
在子进程中,可以得到父进程的环境变量,也可以取消一个环境变量。
使用:unset + 环境变量名
既然环境变量可以被子进程继承,那它一定也就能被子进程的子进程继承。也就是说环境变量可以被bash之后所有的进程看到,这不就相当于“全局变量”吗?
上图中,子进程确实可以看到ISRUNNING,以是环境变量具有“全局属性”。
除了使用命令行参数env,getenv(),体系中提供了一个第三方变量environ指向环境变量表,environ没有包含在任何头文件中,以是在使用时要用extern声明。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
写过一篇
金牌会员
这个人很懒什么都没写!
楼主热帖
hibernate入门
kubernetes数据持久化StorageClass动态 ...
回忆我的第一个软件项目
Debian/Ubuntu使用apt安装php8.x
26基于java的电影院售票管理系统设计 ...
OpenHarmony开源鸿蒙与HarmonyOS商业鸿 ...
管理软件定制公司 广州管理软件定制开 ...
基于LSTM的多变量多输出温湿度预测 ...
Jvm调优
简述PHP中trait的使用和同时引入多个tr ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表