【Linux】环境变量

1.环境变量

1-1 概念介绍

  • 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数;
  • 如:在编写C/C++代码的时候,在链接的时候,从来不知道所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。

命令行参数:

函数有参数,没有参数也用void表示传空;那么main函数作为整个程序的入口,是不是也有参数呢,有的话是什么?

事实上main函数也有参数,main函数被系统start函数调用,main函数的参数为main(int argc,char* argv[]);int argc表示参数的个数,char * argv[]是一个指向字符或字符串的数组。

编写代码查看数组内的内容:

先被bash获得,然后被切分为不同选项放入指针数组中。

再来看看下面的程序代码:

这个程序代码清晰地表示出了:命令行参数用途是为了让一个程序通过选项,实现不同的子功能。

main函数的命令行参数,是实现程序不同子功能的方法。这也是指令选项的实现原理。在main函数启动时,对应的进程中会有一张argv表,用来支持实现选项功能。

为什么之前写main函数不用写这两个参数?因为我们的程序只有一个功能。

1-2 一个例子,一个环境变量

要执行一个程序,必须先找到它,(谁找?bash找,通过PATH来找环境变量),所以每次执行我们自己的程序时需要加上./code.c,那为什么执行系统命令时不用添加路径呢?因为系统中存在环境变量,来帮助系统找到目标二进制文件。

环境变量:PATH,系统中搜索指令的默认搜索路径。

查看环境变量:

一个路径一个路径地找,以冒号作为分隔符,如果都没有找到就会报错。

【问题1】站在存储的角度上,如何理解环境变量呢?

在系统初始启动时,在bash内部形成一张环境变量表,这张表就是一个指针数组的样子,我们查看到的环境变量的内容都是用指针一个一个指向的。

bash行输入命令时,命令行参数表先获取输入内容的命令参数,然后再由bash获取指令的环境变量,一个一个对应匹配去环境变量表中找到它的路径,所以bash内部有两张表。

【问题2】环境变量,最开始从哪里来的呢?

环境变量最开始是从系统相关的配置文件来的。

【问题3】为什么有些指令可以直接执行,不需要带路径,而我们的二进制程序就需要带路径才能执行?

如果把我们自己的环境变量配置放入这个系统默认的环境变量文件中,再去执行代码的编译运行,那么编译时就不用带路径了。

如果Linux系统有十个用户登录呢?存在十个bash,然后从自己的环境变量表中读取对应的系统配置文件。

1-3 认识更多的环境变量

  • HOME:环境变量是当前用户的家目录
  • PATH:指定命令的搜索路径
  • SHELL:当前shell,它的值通常是/bin/bash

1-4 获取环境变量的方法

1.环境变量相关的指令

export MYENV 导入自己的环境变量

env 显示所有的环境变量

echo $xxxx 显示某个环境变量值

unset 取消设置自己的环境变量

2.命令行参数最多有几个?

命令行参数最多有3个,是父进程传递给我们的

3.获得环境变量的方法:

方法一:main函数获得父进程的(bash)环境变量,环境变量可以被子进程继承。

方法二:getenv,获得指定环境变量

方法三:environ,获取所有环境变量的列表

1-5 理解环境变量的特性

1.环境变量具有全局特性

2.补充概念,给后面的内容埋个伏笔

a.本地变量

这个是本地变量,但bash会记录环境变量和本地变量,可以用set来查看,本地变量不会被子进程继承,只在bash内部被使用。

相关推荐
喵了meme4 小时前
Linux学习日记24:Linux网络编程基础
linux·网络·学习
whlqjn_12114 小时前
linux下使用SHC对Shell脚本进行封装和源码隐藏
linux·centos
weixin_462446235 小时前
K8s 集群部署基础:Linux 三节点 SSH 互信(免密登录)配置指南
linux·kubernetes·ssh
Hard but lovely5 小时前
Linux: 线程同步-- 基于条件变量 &&生产消费模型
linux·开发语言·c++
m0_738120725 小时前
应急响应——知攻善防靶场Linux-1详细应急过程
linux·运维·服务器·网络·web安全·ssh
Guistar~~5 小时前
【Linux驱动开发IMX6ULL】WS73 驱动移植的详细教程基于USB协议--WIFi网卡、蓝牙BLE、星闪SLE
linux·驱动开发
GHL2842710906 小时前
无法连接服务端socket
linux·服务器·网络
阿华hhh6 小时前
项目(购物商城)
linux·服务器·c语言·c++
摸鱼仙人~6 小时前
大模型文章生成的风格个性化与多文体写作:一套可落地的方法论
linux·运维·服务器
煤球王子6 小时前
浅学文件系统4(页面缓存)
linux