Linux-环境变量

1.概念

环境变量是系统提供的一组name=value形式的变量,不同的环境变量有不同的用途,环境变量通常具有全局性。

2.查看环境变量的方式

方式1:echo $环境变量名

cpp 复制代码
[xxl@VM-0-2-centos 916]$ echo $USER
xxl

方式2:指令**env**
方式3:使用getenv() 函数,头文件**#include<stdlib.h>** 。getenv(环境变量名)

cpp 复制代码
[xxl@VM-0-2-centos 916]$ cat mycmd.c        //mycmd.c的代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
    printf("USER:%s\n",getenv("USER"));    //使用getenv查看USER环境变量
    return 0;
}    
[xxl@VM-0-2-centos 916]$ ./mycmd        //执行mycmd
USER:xxl

方式4:使用main函数的参数

cpp 复制代码
int main(int argc,char* argv[],char* env[])

argv和env都是字符指针数组,argv内有argc个元素;argv是命令行参数表,env是环境变量表。

cpp 复制代码
[xxl@VM-0-2-centos 916]$ cat mycmd.c    //mycmd.c的代码
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char* argv[],char* env[])
{
    int i=0;
    for(;env[i];i++)
    {
	printf("env[%d]->%s\n",i,env[i]);
    }
    return 0;
}

方式5:第三方变量**environ** ,头文件**#include<unistd.h>**。environ是char**类型,使用时需要extern。

cpp 复制代码
[xxl@VM-0-2-centos 916]$ cat test.c    //test.c的代码
#include<stdio.h>
#include<unistd.h>
int main()
{
    extern char** environ;
    int i=0;
    for(;environ[i];i++)
    {
	printf("%d:%s\n",i,environ[i]);
    }
    return 0;
}

3.常见的环境变量

Linux的环境变量表

cpp 复制代码
XDG_SESSION_ID=16249
HOSTNAME=VM-0-2-centos
TERM=xterm
SHELL=/bin/bash
HISTSIZE=3000
SSH_CLIENT=59.42.57.163 48043 22
SSH_TTY=/dev/pts/0
USER=xxl
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/xxl
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/xxl/.local/bin:/home/xxl/bin
GOPROXY=https://mirrors.tencent.com/go,direct
PWD=/home/xxl/917
LANG=en_US.utf8
SHLVL=1
HOME=/home/xxl
LOGNAME=xxl
SSH_CONNECTION=59.42.57.163 48043 10.1.0.2 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
XDG_RUNTIME_DIR=/run/user/1000
HISTTIMEFORMAT=%F %T 
_=/usr/bin/env
OLDPWD=/home/xxl

PATH:指定命令的搜索路径。

HOME:指定用户的工作目录。

SHELL:当前的命令行解释器(shell),通常是/bin/bash。

HISTSIZE:历史命令被保存的条数,可以使用history指令查看历史命令。

HOSTNAME:主机名。

SSH_TTY:终端设备文件,可以使用echo在终端之间互相打印数据。

cpp 复制代码
echo "hello" >/dev/pts/25        //将hello输入到/dev/pts/25终端上

USER:当前用户。

LS_COLORS:配色方案。

PWD:当前进程所对应的路径。

LANG:编码方案。

LOGNAME:当前登录用户。

OLDPWD:上次的路径,可以使用cd -切换到上次的路径。

4.和环境变量相关的指令

echo:查找某个系统变量。

cpp 复制代码
echo $USER

export:设置一个新的环境变量。

cpp 复制代码
export MYVAL=12345

env:显示所有环境变量。

unset:清楚环境变量。

cpp 复制代码
unset MYVAL

set:显示本地变量和环境变量。

5.环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以'\0'结尾的环境字符串。

6.环境变量的全局性

我们运行的进程都是子进程,bash本身在启动的时候会从操作系统的配置文件中读取环境变量信息,子进程回继承父进程中的环境变量。

cpp 复制代码
[xxl@VM-0-2-centos 916]$ cat test.c    //test.c的内容
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
    printf("MYVAL:%s\n",getenv("MYVAL"));
    return 0;
}
[xxl@VM-0-2-centos 916]$ export MYVAL=54321    //创建环境变量MYVAL
[xxl@VM-0-2-centos 916]$ ./test    //创建并运行bash的子进程test
MYVAL:54321

7.本地变量和内建命令

本地变量没有全局性,本地变量只会在bash内部有效,不会继承给子进程。

相关推荐
kmomo..2 小时前
Linux 驱动开发学习笔记:I2C 子系统从入门到实践
linux·驱动开发·学习
敲上瘾2 小时前
分布式系统——Redis哨兵:自动故障转移与选举原理
linux·数据库·redis·分布式·缓存·微服务
倔强的石头1062 小时前
【Linux指南】进程通信系列(二):匿名管道 —— pipe 的本质、fork 继承与四种读写规则
java·linux·运维
一条破秋裤2 小时前
09-读写多个sys属性文件
linux
小张成长计划..2 小时前
【Linux】25:线程概念和控制
java·linux·jvm
硅基手札2 小时前
【Linux 内核专栏 18】进程间通信 IPC(下)— Socket·Netlink·fd 三件套·futex·线程同步
linux·运维·驱动开发·单片机·嵌入式硬件·mcu·架构
djjjx.2 小时前
Linux进程篇(二):深入浅出 [进程概念与进程父子关系]:从底层原理到实战应用
linux·运维·服务器
贵州诚鑫致达科技有限公司11 小时前
Linux的yum源怎么重启?源不是服务
linux·运维·服务器
澜山奕秋14 小时前
RHCSA
linux·运维·服务器