Linux环境变量

  • 竞争性:进程数目多,资源少,竞争手段通过入队列,得到优先级
    竞争方式很多,

  • 独立性:不会因为一个进程挂掉导致其它进程出现问题
    如何做到
    在进程地址空间中讲

大部分电脑是单CPU,但是有很多进程在运行
多个进程在系统中运行,不带表他们是在同时运行
不能认为一个进程占有了CPU,就会一直执行到结束才释放CPU资源

  • 并行:多个进程在多个CPU下分别同时运行

  • 并发:操作系统会给每一个进程,在一次调度周期中,赋予一个时间片的概念,大部分操作系统是分时的,一段时间内,多个进程都会通过切换交叉的方式,让多个进程代码在一段时间内都能得到推进。这种叫并发

环境变量

环境变量是保持当前程序运行环境参数的变量,处于终端
优点:

-即时生效
-通过环境变量设置

系统中有两种变量,一种是环境变量,另一种是普通变量(直接在命令行写 字符串=值)

env

现象:

  • 自己写的可执行程序要执行要加路径 ---- ./
    系统中也有很多命令,也是可执行程序,直接运行命令名字
  • 为什么系统中的命令可以找到:
    因为系统中存在相关的环境变量,保存了程序的搜索路径
  • 环境变量是系统生成的变量,变量有变量名和变量内容,这些环境变量有不同应用场景

环境变量是在系统开机的时候形成的一组变量

查看系统环境变量的方式env

  • 主要是name=value,每个变量有自己独特的内容
  • 系统中搜索可执行程序的环境变量是path

echo $PATH显示path的内容
在这里插入图片描述

  • 内容都是一堆路径,用:分隔

path

把程序放入这个目录下就可以直接运行了
因为程序在运行时有一个默认检测的路径
usr/bin就是在PATH这个环境变量下

将自己的exe添加到环境变量中

  1. 自己的可执行程序所在路径没有在path环境中,如果直接放到/usr/bin目录下,这就叫安装软件
    cp myexe /user/bin/
  2. 把自己的exe所处路径添加到环境变量中

Linux命令行可以直接定义变量

  • 本地变量a=100,不会以环境变量存在
  • 环境变量export bb=1234
    export:导出环境变量

环境变量在系统启动的时候会自动执行配置文件
修改环境变量:

  1. 临时修改:直接在命令行中执行修改命令,只针对当前终端有效终端重启失效
  • 命令1. export+环境变量名称= 环境变量名称: + 新添加环境变量的值例如: e x p o r t P A T H = 环境变量名称:+新添加环境变量的值 例如:export PATH= 环境变量名称:+新添加环境变量的值例如:exportPATH=PATH:(exe的路径)
    $环境变量的意思是:将之前环境变量保留,如果不写原环境变量值会被覆盖
  • 命令2. source+环境变量文件,就会使其立即生效(让操作系统内核重新加载环境变量文件)

  1. 永久修改:将修改命令直接写到环境变量文件当中;

$后面说明这是变量,不是字符串

常用命令

  • env:查看所有环境变量
    env ${环境变量}
  • export:设置环境变量
    export PATH=$PATH:(exe的路径)
  • unset:清除环境变量。
  • set:查看所有变量,包括普通变量
  • which+命令:查看某个可执行程序所在的路径

函数:char* getenv(char* name)
将参数对应的环境变量值返回

常见环境变量:

  1. PATH:指定可执行程序的搜索路径(在PATH环境变量中保存了命令所在的路径)
  2. HOME:指定用户的主要工作目录(当前用户的家目录)
  3. SHELL:当前SHELL,它的值通常是/bin/bash(当前命令行解释器具体是哪个)

本地变量只在本shell内有效
环境变量是全局有效

bash也是进程,在usr/bin目录下
命令行中启动的进程的父进程都是bash

如何理解环境变量具有全局属性
环境变量会被子进程继承下去的
从bash处定义的环境变量,就能被所有子进程拿到

本地变量是在bash内部定义的变量

Linux中大部分命令是通过子进程执行,还有一部分命令是由bash自己执行
识别到ench,export就会调用自己的函数完成特定功能

这些命令称为内建命令

程序地址空间不是内存,本质是进程地址空间
是操作系统上的概念

环境变量文件:

系统级/etc/bashrc

  • /etc/bashrc这是一个文件,这里保存了很多环境变量,这个环境变量会被当前的所有用户加载;
  • 不要更改这个文件,哪个用户就更改自己的文件

用户级(两个):~/.bashrc 和 ~/.bash_profile

  • .说明当前文件是一个隐藏文件,意味着在当前用户的家目录下使用ls命令是看不到的,ls-a可以

每个用户下都有两个或其中之一的用户级环境变量

环境变量的获取

进程获取环境变量,三种方式
mian的第三个参数
全局变量方式
代码方式

方式一:通过main函数的第三个参数传递

main函数的参数

  • argc:程序运行参数的个数
    执行ls的时候,后面给-a,-l就是程序运行参数
    这些参数在运行的时候传递给程序内部
  • argv[ ]:逐个保存了所有的运行参数,以空格分开
    argv[0]首元素就是程序名
    程序根据不同的参数,就执行不同的代码,
  • env[ ]:

这就是ls后跟-a还是-l,显示出不同信息的原因

在这里插入图片描述在这里插入图片描述

第三个参数
每个元素是一个环境变量,每一个进程都会被传入环境变量

在这里插入图片描述在这里插入图片描述
程序运行后,变成进程,进程被调用方传入环境变量(谁传的后面讲)

函数定义的时候无参,强制给函数传参不会报错
加void后就不行了

方式二:C语言会自动定义一个第三方变量

extren char** environ声明要使用这个全局变量
在使用前进行声明
通过这个也可以把环境变量传入

使用for循环可以打印出来外界传入的环境变量

方式三:获取环境变量的结课

char* val=getenv(环境变量名)
通过环境变量名直接获得

这个val是一个字符串类型,用%s可以打印出对应环境变量的内容

为什么获取环境变量

通过环境变量获取运行该程序的当前用户名
如果不是指定用户不同,就会报错,root也不行

int main()
{
	char* id=getenv("USER");
	if(strcmp(id,"lzy")!=0)
		printf("权限不足\n");
}

环境变量是谁给我的

本地变量与环境变量

本地变量只在本shell内有效
环境变量是全局有效

如何理解环境变量具有全局属性

  • bash也是进程,在usr/bin目录下,命令行中启动的进程的父进程都是bash
  • 环境变量会被子进程继承下去的
  • 从bash处定义的环境变量,就能被所有子进程拿到

本地变量是在bash内部定义的变量

  • Linux中大部分命令是通过子进程执行,还有一部分命令是由bash自己执行
  • 识别到ench,export就会调用自己的函数完成特定功能
    这些叫内建命令

程序地址空间不是内存,本质是进程地址空间
是操作系统上的概念

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
process.env.NODE_ENV的值是由Node.js环境自动设置的,通常在启动应用程序时通过命令行参数或配置文件进行修改。在Node.js中,可以使用以下方法来修改process.env.NODE_ENV的值: 1. 命令行参数:在启动应用程序时,可以使用NODE_ENV参数来设置process.env.NODE_ENV的值。例如,在Windows命令提示符下可以执行以下命令: ``` SET NODE_ENV=production node app.js ``` 在类Unix系统(如Linux或Mac)下,可以执行以下命令: ``` NODE_ENV=production node app.js ``` 这将把process.env.NODE_ENV的值设置为"production"。 2. 配置文件:另一种常见的做法是使用配置文件来设置环境变量。你可以在配置文件中定义一个键值对,将"NODE_ENV"作为键,将所需的环境名称作为值。然后,在应用程序中加载配置文件并根据其内容设置process.env.NODE_ENV的值。 例如,使用JavaScript和dotenv库,你可以创建一个名为.env的文件,并在其中定义以下内容: ``` NODE_ENV=development ``` 然后,在你的应用程序中使用dotenv库将.env文件加载到process.env中: ```javascript require('dotenv').config(); ``` 这将使得process.env.NODE_ENV的值被设置为"development"。 无论是使用命令行参数还是配置文件,都需要在应用程序启动之前进行相应的设置。请注意,这些只是一些常见的方法,具体的设置方式可能根据你的应用程序架构和需求而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值