[Linux]环境变量

目录

基本概念

常见的环境变量

PATH测试

HOME测试

SHELL测试

和环境变量相关的命令

main函数的三个参数

环境变量的组织方式

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

通过系统调用获取或设置环境变量

基本概念

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性,可以被子进程继承下去.

常见的环境变量

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

  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

  • SHELL : 当前Shell,它的值通常是/bin/bash。

如何查看环境变量

查看环境变量方法
echo $NAME //NAME:你的环境变量名称

PATH测试

为什么我们运行自己的程序需要指定路径,而使用指令时(如ls等)却不需要?

[Linux]环境变量_第1张图片

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

        环境变量PATH内包含了数条路径(以进行分割),当我们运行程序时,如果我们没有指明路径,系统会自动从左往右在PATH里的路径下寻找,找到了该程序就能直接运行了。

如何让自己的程序能直接运行?不支持c++程序,只支持c程序

这里提供两种方法:

  • 方法一:将自己的程序导入到PATH下的路径中

sudo cp hello /usr/bin

        我们将hello程序拷贝到了PATH环境变量中的一条路径下。当我们直接运行该程序时,系统就能找到该程序了。

  • 方法二: 将程序的当前路径放入PATH中

    这里需要用到export操作

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

export PATH=$PATH:当前路径

 直接运行成功:

注意点:

  1. export是设置一个新的环境变量,我们这里相当于覆盖原有的PATH,因此设置时要带上PATH本来就有的路径(即$PATH),后面再跟上我们要添加的路径,不然会造成很多指令的失效,因为PATH中的路径没了,系统找不到指令了。

  2. 发生上面的问题时,我们重启我们的Xshell即可,因为在我们的家目录中有环境变量的配置文件,每次启动时都会自动将对应的环境变量导入到bash的上下文中。[Linux]环境变量_第2张图片

  3. 对单一用户生效的永久性变量(用户级),在用户主目录”~”下的隐藏文件 “.bash_profile”中添加自己想要的环境变量。

  4. 临时有效的环境变量(只对当前shell有效),直接使用export指令添加。

HOME测试

用户的主工作目录(即用户登陆到Linux系统中时,默认的目录):

cd ~命令 //返回家目录(与HOME中记录的家目录相同)   

SHELL测试

        我们在Linux操作系统当中所敲的各种命令,实际上需要由命令行解释器进行解释,而在Linux当中有许多种命令行解释器(例如bash等),我们可以通过查看环境变量SHELL来知道自己当前所用的命令行解释器的种类。

和环境变量相关的命令

  • echo: 显示某个环境变量值

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

  • env: 显示所有环境变量

[Linux]环境变量_第3张图片

常用的几个环境变量整理:

PATH 指定命令的搜索路径
HOME 指定用户的主工作目录
HISTSIZE 保存历史命令记录的条数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 用户当前用的哪种shell
MAIL 指当前用户的邮件存放目录
PS1 命令提示符,root用户是#,普通用户是$
PS2 附属提示符,默认是“>”
SECONDS 从当前shell开始运行所过去的秒数
  • set: 显示本地定义的shell变量和环境变量

本地定义的shell变量,env无法显示.

  • unset: 清除环境变量

本地定义的shell变量:[Linux]环境变量_第4张图片

环境变量:

[Linux]环境变量_第5张图片

main函数的三个参数

int main(int argc,char* argv[],char* env[])
{ }

 main函数的前两个参数:

  1 #include
  2 int main(int argc,char* argv[])
  3 {
  4   for(int i=0;i

[Linux]环境变量_第6张图片

 通过上面,我们可以很清楚的看到,argv[0]中是我们要运行的程序,后面则是跟上了我们添加的选项。

main函数的第三个参数:

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

[Linux]环境变量_第7张图片

打印出的是我们的环境变量。

环境变量的组织方式

[Linux]环境变量_第8张图片

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

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

  • 通过mian函数的第三个参数

上面已演示,不多赘述。

  • 通过第三方变量environ获取

        libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明

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

[Linux]环境变量_第9张图片

通过系统调用获取或设置环境变量

  • putenv

[Linux]环境变量_第10张图片

  • getenv

[Linux]环境变量_第11张图片

 使用getenv函数获取环境变量PATH的值:

#include 
#include 
int main()
{
 printf("%s\n", getenv("PATH"));
 return 0;
}

 

你可能感兴趣的:(Linux学习,linux,bash,Linux,操作系统,1024程序员节)