首页 > 系统相关 >【Linux】环境变量

【Linux】环境变量

时间:2023-02-27 12:03:43浏览次数:36  
标签:bin yzq centos 路径 usr Linux 环境变量

2. 环境变量

在操作系统当中由系统在开机之后帮我们维护的一些系统运行时的动态参数


我们自己写的代码,编译之后,运行的时候,为什么要带 ./ ?

  • . 代表当前路径 , / 代表路径分割符 . / 可执行程序说明使用相对路径的方式来定位可执行程序
  • 自己写的可执行程序和系统自带的指令之间没有区别

那为什么运行系统的指令不需要 ./ ?

  • 因为系统指令的路径在环境变量中

1. PATH环境变量

echo 作为打印字符串的一条命令

[yzq@VM-8-8-centos ~]$ echo abcd   
abcd

echo $PATH 查看环境变量PATH

[yzq@VM-8-8-centos ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/mydir/.local/bin:/home/mydir/bin

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/mydir/.local/bin:/home/mydir/bin 是以冒号作为分隔符,可以分割出来若干子路径

  • pwd、ls指令,会在环境变量所指明的若干路径中一个个去找,找到就会自动执行,不用带路径
  • 而我们自己实现的可执行程序,路径不在环境变量里,所以必须由用户自动指明它的路径

证明ls是系统指令

使用​​which​​ 指令,搜索特定指令所对应的路径

[yzq@VM-8-8-centos my]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls

ls的路径为 ​​/usr/bin/ls​​ 环境变量是从左到右,一条一条去查找,只要找到就停下来 ls指令在环境变量的​​usr/bin​​ 路径下,说明 ls 指令不用带路径

修改自己写的可执行程序对应路径

修改自己写的可执行程序的路径,让其不用添加路径即可运行


创建test.c文件

#include<stdio.h>
2 int main()
3 {
4 printf("hello");
5 }

输入 ​​gcc -o testc test.c​​ ,生成testc可执行程序 输入 ​​which testc​​ ,查询testc的路径

[yzq@VM-8-8-centos my]$ which testc
/usr/bin/which: no testc in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/mydir/.local/bin:/home/mydir/bin)

说明 testc路径不在环境变量中


使用​​pwd​​ ,查询当前testc的路径, 输入 ​​export PATH=$PATH: 当前路径​​ ,将testc的路径新增到到环境变量中

[yzq@VM-8-8-centos my]$ pwd
/home/mydir/my
[yzq@VM-8-8-centos my]$ export PATH=$PATH:/home/mydir/my

[yzq@VM-8-8-centos my]$ testc
hello

直接 使用 testc ,就运行可执行程序

2. env——查看系统环境变量

使用 env ,会出现如下环境变量

【Linux】环境变量 _centos

这些环境变量都是用户登录的时候设置好的,都是kv的


输入 ​​echo $HOSTNAME​​ 显示当前机器 名字

[yzq@VM-8-8-centos ~]$ echo $HOSTNAME
VM-8-8-centos

输入 ​​echo $SHELL​​ 显示当前所使用的shell

[yzq@VM-8-8-centos ~]$ echo $SHELL
/bin/bash

输入 ​​echo $HOME​​,当前为普通用户

[yzq@VM-8-8-centos ~]$ echo $HOME
/home/mydir

HOME环境变量表示当前用户所对应的家目录


切换成root用户后, 此时对应root目录

[root@VM-8-8-centos mydir]# echo $HOME
/root

对于不同登录的人,同一个环境变量里面放的不同的内容,所以环境变量是针对特定的人在特定的场景使用的

3. 获取环境变量

envp

main函数可以带3个参数分别为 int argc 和 char*argv [ ] 和char * envp[ ] (环境变量表)

【Linux】环境变量 _centos_02

  • char* envp[ ]是一个指针数组,char类型指针都指向字符串,但最后无效内容必须以NULL结尾

创建test.c文件

#include<stdio.h>
2 #include<unistd.h>
3 int main(int argc,char*argv[],char*envp[])
4 {
5 int i=0;
6 for(i=0;envp[i];i++)
7 {
8 printf("envp[%d]->%s\n",i,envp[i]);
9 }
10 }

创建makefile

mytest:test.c
2 gcc -o mytest test.c
3 .PHONY:clean
4 clean:
5 rm -f mytest

输入 make ,使用./mytest 执行可执行程序


【Linux】环境变量 _环境变量_03

发现envp是一张传递给当前进程的环境变量表 char类型指针指向环境变量字符串

environ

若main函数不传参数,还想要拿到环境变量,可以使用 ​​environ​


修改test.c文件

#include<stdio.h>
2 #include<unistd.h>
3 int main()
4 {
5 extern char** environ;//声明
6 int i=0;
7 for(i=0;environ[i];i++)
8 {
9 printf("environ[%d]->%s\n",i,environ[i]);
10 }
11 }

使用make, ./mytest执行可执行程序后

【Linux】环境变量 _可执行程序_04

使用environ 也可以拿到所有环境变量

getenv 函数获取 (主流)

char* getenv(const char* name);


修改test.c文件

1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 int main()
5 {
6 char*user=getenv("USER");
7 if(user==NULL)
8 {
9 perror("getenv");
10 }
11 else
12 {
13 printf("USER:%s\n",user);
14 }
15 }

输入 make, ./mytest 执行可执行程序

[yzq@VM-8-8-centos my]$ ./mytest
USER:yzq

获取到user的名称

4. 总结

  • 环境变量本质就是一个内存级的一张表,这张表由用户在登录系统的时候,进行给特定用户形成属于自己的环境变量表
  • 环境变量每一个都有自己的用途,有的是进行路径查找的,有的是进行身份认证的,有的是动态库查找的,有的用来进行确认当前路径的等等,每一个环境变量都有自己的应用场景,每一个元素都是kv的

环境变量对应的数据,是从系统的相关配置文件中读取进来的

使用 ​​cd ~​​ ,进入当前目录的主目录中

使用 ​​ls -la​​ , 显示隐藏文件

【Linux】环境变量 _环境变量_05

这是两个shell脚本,内部包含了配置文件

标签:bin,yzq,centos,路径,usr,Linux,环境变量
From: https://blog.51cto.com/u_15787387/6087052

相关文章

  • LINUX下VNC服务的安装配置
    必要前提是已经安装图形界面相关软件!!1.首先检查VNC软件是否已经安装[root@ocm1~]#rpm-qa|grepvncvnc-server-4.1.2-14.el5_3.12.启动VNC服务......
  • linux上安装python3(yum方式)
      可联通外网的linux系统终端上安装python31,建立yum仓库:https://mirrors.163.com/centos/7.9.2009/os/x86_64/2,使用yum下载安装对应包:#yum-ygroupinstall"De......
  • Linux安装Docker
    参考:https://www.runoob.com/docker/centos-docker-install.html CentOSDocker安装Docker支持以下的64位CentOS版本:CentOS7CentOS8更高版本...使用官......
  • vue环境变量配置 解决process.env取值undefind的问题?
    1.前端配置文件中,配置的参数取值为undefind如何解决,图片如下。  ·   2。需要到package.json中改变配置,加上--modedevelopment......
  • LINUX 干净卸载软件
    1、删除软件方法一、如果你知道要删除软件的具体名称,可以使用               sudoapt-getremove--purge软件名称 sudoapt-getautoremove--purge......
  • Maven安装与环境变量配置
    一、下载安装Maven。请访问Maven的下载页面:http://maven.apache.org/download.html,其中包含针对不同平台的各种版本的Maven下载文件。二、解压 maven压缩包。解压apac......
  • linux配置修改键盘布局
    1.修改图形化界面的键盘布局2.修改终端配置/etc/vconsole.confKEYMAP=dvorak3.修改/etc/X11/xorg.conf.d/00-keyboard.conf#Writtenbysystemd-localed(8),read......
  • 一枚Linux驱动开发的2022总结与2023计划
    2022总结2023计划能力与素质1.警惕身边的"奶头乐",追求高级的快乐奶头乐(英语:tittytainment),又译为奶头娱乐或奶嘴娱乐,是一个合成词,来自于英文“titty”(奶头)与“entert......
  • Linux 文件操作指令
     1.pwd(printcurrentworkingdirectory) 作用:打印当前终端所在目录用法:pwd2.ls(Listdirectorycontents)作用:列出当前目......
  • linux驱动移植-SPI驱动移植(OLED SSD1306)
    在之前Mini2440裸机开发之SPI(OLEDSSD1306)中我们介绍了关于OLEDSSD1306相关的知识,这里我们将会学习以内核驱动的方式去控制OLED。一、OLED128x64(SSD1306)1.1引脚说明当......