Linux下的环境变量【详解】

简介: Linux下的环境变量【详解】


一,环境变量的概念

1 概述

环境变量一般指的是在操作系统中用于指定操作系统运行环境的一些参数。

  在链接C/C++程序的代码时,会用到动静态库,但是动静态库我们并没有显示的去指定过让系统去那个路径下寻找它,但是每次都可以链接成功,这是因为有了环境变量的帮助。

  环境变量还会有一些特殊的用途,比如可以用作身份验证。

2 环境变量的分类

  • 按照生命周期来分,Linux环境变量可以分为两类:
  1. 永久的:需要用户修改相关的配置文件,变量永久生效
  2. 临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。
  • 按照作用域来分,Linux环境变量可以分为:
  1. 系统环境变量:系统环境变量对该系统中所有用户都有效。
  2. 用户环境变量:顾名思义,这种类型的环境变量只对特定的用户有效。

3 常见的环境变量

  • PATH:决定了 shell 将到哪些目录中寻找命令或程序
  • HOME:当前用户主目录(就是用户登录linux系统中时,默认的目录
  • USER:当前用户的用户名。
  • HISTSIZE:历史记录数
  • LOGNAME:当前用户的登录名
  • HOSTNAME:指主机的名称
  • SHELL:当前用户 Shell 类型,它的通常值是/bin/bash
  • LANGUGE:语言相关的环境变量,多语言可以修改此环境变量
  • MAIL:当前用户的邮件存放目录
  • PS1:基本提示符,对于 root 用户是 #,对于普通用户是 $

Linux 系统中环境变量的名称一般都是大写的,这是一种约定俗成的规范。

4 查看环境变量

4.1 shell变量

  echo的作用是用于字符串的输出.

  运行shell时,会同时存在三种变量:

  1) 局部变量: 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

  2) 环境变量: 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

  3) shell变量: shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

变量在shell中是这样被定义的name = “tanghuan”,定义变量时,变量名不加美元符号$.

变量的命名规则如下:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线 _。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

那后面的字符串的双引号是必须的吗?答案是否定的。

字符串可以用单引号,也可以用双引号,也可以不用引号。

  • 单引号字符串的限制:
  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

${NAME} $后面带上一个花括号可以帮助确定变量范围,是良好的编码习惯。

  • 双引号的优点:
  • 双引号里可以有变量
  • 双引号里可以出现转义字符

4.2 查看环境变量

echo $NAME//NAME是环境变量的名称

输入:echo $PATH

会输出这样一串字符:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

他们以 : 作为分隔符,将其分隔成一些子路径,当写入命令时,会自动一个子路径一个子路径的寻找命令自己的源文件,所以就不需要像我们自己写的文件那样,需要主动加上路径(./project),才能被系统所识别运行。

5 添加和删除环境变量

5.1 添加环境变量

  环境变量也是变量,跟shell变量的操作一样,不过PATH=(需要添加的环境变量)这么写可就错了,这样会覆盖掉原来的环境变量,所以得:PATH=$PATH:(需要添加的环境变量).

  需要注意的是,上面那样添加的环境变量在子进程及其后代进程不会产生影响,且只对本次登录有效,具有临时性。要是想对子进程及其后代进程也有效,需要引入export,

  需要这样写:export PATH=$PATH:(需要添加的进程)

  要是不小心像前者那么写并运行了也不用担心,更改的环境变量只限于本次登录,重新登录后。环境变量又会自动恢复成原来的默认路径了。

  原因是前面提到的环境变量的分类可以分为永久性和临时性,在当前终端下声明环境变量,是临时性的。要是想永久性的修改环境变量,需要对配置文件进行操作。

  1. cd ~
  2. vim ./bash_profile
  3. export PATH=$PATH:(需要添加的进程)
  4. 即可永久性的添加环境变量。

5.2 删除环境变量

删除永久性的环境变量需要进入到配置文件中删除相应的命令。

删除临时性的环境变量需要使用到unset (环境变量名称)命令,如unset PATH

  此时会清除所有的命令,若是只想清除部分路径,可以使用添加环境变量的方法进行修改

比如:PATH=(需要保留的路径):(需要删除的路径)可以:PATH=$(需要保留的路径).

6. 通过代码如何获取环境变量

6.1 命令行的第三个参数

命令行的第三个参数就是环境变量数组char* env[]

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
int i = 0;
for(; env[i]; i++){
printf("%s\n", env[i]);
}
return 0;
}

6.2 通过第三方变量environ获取

#include <stdio.h>
int main(int argc, char *argv[])
{
extern char **environ;
int i = 0;
for(; environ[i]; i++){
printf("%s\n", environ[i]);
}
return 0;
}

·

6.3 通过getenv获取

#include <stdlib.h>
int main()
{
  char* p = getenv("PATH");
  printf("%s\n",p);
  return 0;
}

7. 环境变量的全局性

  环境变量通常具有全局属性,可以被子进程继承下去。

  因为创建子进程时,是以父进程为模板或者父进程创建的,进程的环境变量信息可以通过子进程及其后代进程继承。

#include <stdio.h>
#include <stdlib.h>
int main()
{
  printf("初始PATH的值:%s\n", getenv("PATH"));
  putenv("PATH=/usr/local/sbin");
    printf("修改后PATH的值:%s\n", getenv("PATH"));
    int flag = fork();
    if(flag == 0)
    {
       //子进程
      printf("子进程的PATH:%s\n", getenv("PATH"));                                                                                          
 
    }
    return 0;
}

运行结果为:


    😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄

相关文章
|
5月前
|
Linux Shell
入职必会-开发环境搭建36-Linux常用操作-Linux环境变量
环境变量的作用是指定到哪个目录去找你输入的命令执行。环境变量的设置分为:临时设置和永久设置两种。
|
1月前
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
65 4
|
5月前
|
Java Linux
linux 对子用户配置java 环境变量
linux 对子用户配置java 环境变量
49 3
|
4月前
|
Linux Shell
在Linux中,如何设置环境变量?
在Linux中,如何设置环境变量?
|
4月前
|
Shell Linux
在Linux中,什么是环境变量?如何设置和查看环境变量?
在Linux中,什么是环境变量?如何设置和查看环境变量?
|
5月前
|
Linux
Linux环境变量及作用
Linux中的环境变量是系统配置参数,如HOME指示用户家目录,MAIL指邮件位置。`env`命令显示所有环境变量。系统有数百个变量,但了解关键的几个足够,如PATH、HOME、TERM等。环境变量由变量名和值组成,可自定义,如WORKDIR。局部变量需用`export`使其全局有效,以便其他用户使用。`su`命令用于切换用户,展示不同用户环境下变量值的差异。
Linux环境变量及作用
|
5月前
|
Ubuntu Linux Shell
Ubuntu/linux系统环境变量配置详解
理解和掌握如何配置环境变量对于使用和管理Ubuntu/Linux系统非常重要。
278 2
|
6月前
|
关系型数据库 MySQL Shell
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
119 4
|
6月前
|
Linux Shell 编译器
Linux进程——Linux环境变量
Linux进程——Linux环境变量
57 3
|
5月前
|
Java Linux Shell
【Linux】深度解剖环境变量
【Linux】深度解剖环境变量
46 0