『 Linux 』环境变量(上)

简介: 『 Linux 』环境变量(上)



🚀什么是环境变量🚀

在c/C++当中,根据不同程序的需要,我们需要为该程序定义某些变量int _data,double _price;

这些变量本质上就是一段内存空间,用来存储程序需要的值或数据;

而在OS中,OS本身在运行当中也需要一些必要的值或者数据,所以在OS当中也会存在一些变量用来存储这些所谓必要的值或者数据参数;

本质上来说环境变量(environment variables)一般是指操作系统中指定操作系统运行环境的一些参数;

一般常见的环境变量有:

  • PATH
    指定命令的搜索路径;
  • HOME
    指定用户的主工作目录(即用户登陆到Linux系统当中时的默认路径);
  • SHELL
    当前Shell,它的值通常为/bin/bash;
    不同的环境变量有着不同的功能;

🚀查看环境变量🚀

在Linux当中可以使用env命令打印所有的环境变量;

查看环境变量一般的方式是利用echo命令将环境变量进行打印;

语法:

echo $NAME
  • 其中:
    NAME指环境变量名
    echo命令在Linux中的作用为:用于显示消息或输出其他命令的结果;
    其中若是使用echo打印环境变量时必须使用$符,否则将会直接将环境变量名当作字符串进行打印;
$ echo PATH
PATH
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin

🕹️和环境变量有关的命令🕹️

  • echo:显示某个环境变量值;
  • export:设置一个新的环境变量;
  • env:显示所有环境变量;
  • unset:清除环境变量;
  • set:显示本地定义的shell变量和环境变量;

🚀PATH环境变量🚀

存在一个程序mytest:

其主要的作用为打印hello world;

std::cout << "hello world"<< std::endl ;

$ /usr/bin/ls
Makefile  mytest  test.cpp
$ ls
Makefile  mytest  test.cpp
$ ./mytest 
hello world
$ mytest
-bash: mytest: command not found

已知ls本身就是一个程序,且该程序存在于路径usr/bin/ls;

在该程序中运行了两个程序:mytestls,分别为用户(我)创建的程序mytest与OS中自带的命令程序ls;


但是在使这两个程序运行时的方式并不同,在运行用户的程序时必须使用相对路径或者绝对路径从而运行程序,而在使用OS自身的程序时对路径的需求却可有可无;

很显然这个原因是因为:

本质上的原因是因为在OS当中,无论是运行什么程序都需要保证首先得找到这个程序(即拥有这个程序的路径)才能将该程序进行运行;

而例如ls之类的这样的命令,OS默认是可以直接找到它的,因为这些命令的所在位置都位于环境变量PATH当中;

  • 使用 echo 打印环境变量$PATH:
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin
  • 从打印出来的结果中可以发现,PATH环境变量以/.../..作为路径,:作为分隔符;
  • 使用which找到ls命令所在路径:
    which命令将在PATH环境变量中寻找某个指令的地址;
$ which ls
alias ls='ls --color=auto'
    /usr/bin/ls
  • ls的所在路径正是在PATH环境变量当中;
    当在Linux命令行上输入对应的命令时,OS将会在PATH环境变量中寻找该命令的地址;
    顺序为从左至右且以:作分隔符;
    /usr/local/bin,/usr/bin,/usr/local/sbin

🕹️设置PATH环境变量🕹️

若是想使自己的程序设置成类似于ls命令;

可以使用两种方式:

  • 将文件移至PATH环境变量的任意路径当中:
    由于PATH环境变量中所存储的命令或者文件都是以路径的形式进行存储;
    所以可以将需要的文件添加至PATH环境变量中的任意路径;
    但是实际上这种方式一般是不可取的:

虽然以这种方式可以达到预期的效果:使得自己的程序能像命令一样直接运行

但是对应的有很大的副作用;

由于PATH环境变量内的文件是OS预先设置好的,由于这种操作在Linux当中相当于将自己写的命令安装至OS中;

所以如果贸然的将自己的程序添加至路径当中可能会出现污染命令池;

  • 使用export命令将程序加入PATH环境变量:
    语法:
export PATH=$PATH:程序路径
  • 使用pwd查看可执行程序所在路径以及使用echo命令打印当前PATH环境变量:
$ pwd
/home/_user/Begin/my_-linux/Pro23/Environment1201/T1201
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin
  • 使用export将路径加入到PATH环境变量后再对PATH环境变量进行打印:
export PATH=$PATH:/home/_user/Begin/my_-linux/Pro23/Environment1201/T1201  # 设置
$ echo $PATH  # 打印
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin:/home/_user/Begin/my_-linux/Pro23/Environment1201/T1201
  • 此时多了一个/home/_user/Begin/my_-linux/Pro23/Environment1201/T1201的路径;
    不带路径直接运行该程序:
$ mytest
hello world
  • 同时使用which也可以在$PATH环境变量中找到该程序:
$ which mytest
~/Begin/my_-linux/Pro23/Environment1201/T1201/mytest
  • 同时这种方式在测试设置$PATH环境变量较为安全;
    因为在不改配置文件的前提下只使用命令行的模式(类似于export)的方式对环境变量进行修改时,修改效果只在当前对话当中;
    当重新登陆该会话时环境变量将恢复:
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin

🚀HOME环境变量🚀

HOME环境变量即为指定用户的主工作目录(即用户登陆到Linux系统当中时的默认路径);

实际上不同的用户使用echoHOME环境变量进行打印时所得到的结果是不同的:

#------_user用户下------ 
$ echo $HOME
/home/_user
  #------root用户下------ 
# echo $HOME
/root

『 Linux 』环境变量(下)https://developer.aliyun.com/article/1424466

相关文章
|
4月前
|
Linux Shell
入职必会-开发环境搭建36-Linux常用操作-Linux环境变量
环境变量的作用是指定到哪个目录去找你输入的命令执行。环境变量的设置分为:临时设置和永久设置两种。
|
4月前
|
Java Linux
linux 对子用户配置java 环境变量
linux 对子用户配置java 环境变量
34 3
|
3月前
|
Linux Shell
在Linux中,如何设置环境变量?
在Linux中,如何设置环境变量?
|
3月前
|
Shell Linux
在Linux中,什么是环境变量?如何设置和查看环境变量?
在Linux中,什么是环境变量?如何设置和查看环境变量?
|
4月前
|
Linux
Linux环境变量及作用
Linux中的环境变量是系统配置参数,如HOME指示用户家目录,MAIL指邮件位置。`env`命令显示所有环境变量。系统有数百个变量,但了解关键的几个足够,如PATH、HOME、TERM等。环境变量由变量名和值组成,可自定义,如WORKDIR。局部变量需用`export`使其全局有效,以便其他用户使用。`su`命令用于切换用户,展示不同用户环境下变量值的差异。
Linux环境变量及作用
|
4月前
|
Ubuntu Linux Shell
Ubuntu/linux系统环境变量配置详解
理解和掌握如何配置环境变量对于使用和管理Ubuntu/Linux系统非常重要。
240 2
|
5月前
|
关系型数据库 MySQL Shell
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
|
5月前
|
Linux Shell 编译器
Linux进程——Linux环境变量
Linux进程——Linux环境变量
34 3
|
4月前
|
Java Linux Shell
【Linux】深度解剖环境变量
【Linux】深度解剖环境变量
32 0
|
4月前
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别