简介

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息。Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环境都是相同的。这个默认环境就是一组环境变量的定义。每个用户都可以通过修改环境变量的方式对自己的运行环境进行配置。

分类

根据环境变量的生命周期我们可以将其分为永久性变量和临时性变量,根据用户等级的不同又可以将其分为系统级变量和用户级变量。怎么分都无所谓,主要是对它的理解。

对所有用户生效的永久性变量(系统级)

这类变量对系统内的所有用户都生效,所有用户都可以使用这类变量。作用范围是整个系统。 
设置方式: 用vim在/etc/profile文件中添加我们想要的环境变量。 
当然,这个文件只有在root(超级用户)下才能修改。我们可以在etc目录下使用ls -l查看这个文件的用户及权限。 

利用vim打开/etc/ profile文件,用export指令添加环境变量。 

【注意】:添加完成后新的环境变量不会立即生效,除非你调用source /etc/profile 该文件才会生效。否则只能在下次重进此用户时才能生效。

对单一用户生效的永久性变量(用户级)

该类环境变量只对当前的用户永久生效。也就是说假如用户A设置了此类环境变量,这个环境变量只有A可以使用。而对于其他的B,C,D,E….用户等等,这个变量是不存在的。

设置方法:在用户主目录”~”下的隐藏文件 “.bash_profile”中添加自己想要的环境变量。 
查看隐藏文件: ls -a或ls -al 
 
利用vim打开文件,利用export添加环境变量。与上相同。同样注意,添加完成后新的环境变量不会立即生效,除非你调用source ./.bash_profile 该文件才会生效。否则只能在下次重进此用户时才能生效。

可以看到我在上图中用红框框住了两个文件,.bashrc和.bash_profile。原则上来说设置此类环境变量时在这两个文件任意一个里面添加都是可以的。

~/.bash_profile是交互式login方式进入bash shell运行。 
~/ .bashrc是交互式non-login方式进入bash shell运行。

二者设置大致相同。通俗点说,就是.bash_profile文件只会在用户登录的时候读取一次,而.bashrc在每次打开终端进行一次新的会话时都会读取。

临时有效的环境变量(只对当前shell有效)

此类环境变量只对当前的shell有效。当我们退出登录或者关闭终端再重新打开时,这个环境变量就会消失。是临时的。

设置方法:直接使用export指令添加。 

设置环境变量常用的几个指令

echo

查看显示环境变量,使用时要加上符号“”例:echoPATH

export

设置新的环境变量 
export 新环境变量名=内容 
例:export MYNAME=”LLZZ”

修改环境变量

修改环境变量没有指令,可以直接使用环境变量名进行修改。 
例:MYNAME=”ZZLL”

env

查看所有环境变量

set

查看本地定义的所有shell变量

unset

删除一个环境变量 
例 unset MYNAME

readonly

设置只读环境变量。 
例:readonly MYNAME

常用的几个环境变量(一般都为大写)

PATH

指定命令的搜索路径。通过设置环境变量PATH可以让我们运行程序或指令更加方便。 
echo $PATH 查看环境变量PATH。 

每一个冒号都是一个路径,这些搜索路径都是一些可以找到可执行程序的目录列表。当我们输入一个指令时,shell会先检查命令是否是内部命令,不是的话会再检查这个命令是否是一个应用程序。然后shell会试着从这些搜索路径,即PATH(上图中路径)中寻找这些应用程序。如果shell在这些路径目录里没有找到可执行文件。则会报错。若找到,shell内部命令或应用程序将被分解为系统调用并传给Linux内核。

举个例子: 
现在有一个c程序test.c通过gcc编译生成的可执行文件a.out(功能:输出helloworld)。我们平常执行这个a.out的时候是使用 
①相对路径调用方式: ./a.out (”.”代表当前目录,”/”分隔符)。 
②还可以使用绝对路径调用方式:将其全部路径写出:/home/lzk/test/a.out(此路径是我的工作目录路径,只是个例子,仅供参考) 
 
③通过设置PATH环境变量,直接用文件名调用: 
在没设置PATH前,我们直接使用a.out调用程序会报错,因为shell并没有从PATH已拥有的搜索路径目录中找到a.out这个可执行程序。 
 
使用export指令,将a.out的路径添加到搜索路径当中,export PATH=$PATH:路径 
我们就可以使用a.out直接执行程序。 

HOME

指定用户的主工作目录,即为用户登录到Linux系统中时的默认目录,即“~”。

HISTSIZE

指保存历史命令记录的条数。我们输入的指令都会被系统保存下来,这个环境变量记录的就是保持指令的条数。一般为1000。 

这些历史指令都被保存在用户工作主目录“~”下的隐藏文件.bash_profile中。 

我们可以通过指令history来查看。 

LOGNAME

指当前用户的登录名

HOSTNAME

指主机的名称。

SHELL

指当前用户用的是哪种shell

LANG/LANGUGE

和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

MAIL

指当前用户的邮件存放目录

PS1

命令提示符,root用户是#,普通用户是$

PS2

附属提示符,默认是“>”

SECONDS

从当前shell开始运行所流逝的秒数

总结

环境变量是和shell紧密相关的,用户登录系统后就启动了一个shell,对于Linux来说一般是bash(Bourne Again shell,Bourne shell(sh)的扩展),也可以切换到其他版本的shell。bash有两个基本的系统级配置文件:/etc/bashrc和/etc/profile。这些配置文件包含了两组不同的变量:shell变量和环境变量。shell变量是局部的,而环境变量是全局的。环境变量是通过shell命令来设置。设置好的环境变量又可以被所以当前用户的程序使用。

引文链接:Linux环境变量及其设置

Linux环境变量及其设置的更多相关文章

  1. Ubuntu Linux 环境变量PATH设置

    前俩天编译linux下rar解压软件的时候说找不到  /usr/local/linux 路径,在设定path变量的时候,忽然就想看看,path最原始的变量值是多少....(在环境变量文件中保存.... ...

  2. linux环境变量的设置

    linux中环境变量分为系统环境变量和用户环境变量(和window中一样),系统环境变量对所有系统用户都有效,用户环境变量只对当前用户有效,我们以ubuntu为例说明 用户环境变量 用户环境变量通常存 ...

  3. Linux环境变量的设置和查看方法

    1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ ech ...

  4. 转 Ubuntu Linux 环境变量PATH设置

    Ubuntu Linux系统环境变量配置文件: /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. ...

  5. Linux 环境变量PS1设置

    新建用户不显示IP和机器名 CentOS下新增加一个用户,登录进去会发现shell脚本信息没有显示用户名和主机名,反而显示的是user1@202.173.1.12 解决方案: 1.在新建用户的-目录下 ...

  6. linux 环境变量的设置【转】

    现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以java环境变量为例介绍三种配置环境变量的方法. 1.修改/etc/profile文件 如果你的计算机仅仅作为开 ...

  7. 【Linux】Linux环境变量的设置和查看

    Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1 永久的:需要修改配置文件,变量永久生效. 2 临时的:使用export命令声明即可,变量在关闭shell时失效. 设置变量 ...

  8. linux 环境变量的设置

    方法一: 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”. 要让刚才的 ...

  9. Linux环境变量永久设置方法(zsh)

    1.之前一直使用:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./home/46005/cuda-9.0/lib64/来设置cuda库路径变量 -----临时的,当 ...

随机推荐

  1. 05-Servlet与内部加载机制(part1)

     一.什么是Servlet Servlet 运行在服务端的Java小程序, 是sun公司提供一套规范(接口)     主要功能: 用来处理客户端请求 响应给浏览器的动态资源 servlet的实质就是j ...

  2. 【SSH网上商城项目实战05】完成数据库的级联查询和分页

    转自:https://blog.csdn.net/eson_15/article/details/51320212 上一节我们完成了EasyUI菜单的实现.这一节我们主要来写一下CategorySer ...

  3. java队列queue的我觉得很好的使用方式

    LinkedList实现了queue接口,通常使用LinkedList 其中关键两个函数:offer().poll() offer()表示“排队”----插入到队列最前,poll()表示轮到了队列最前 ...

  4. vi 多行注释和取消注释

    注释 :1,10 s/^/#/   注释1到10行 取消注释 ctl+v 进入visual block模式 选中 #号 按d 或x 将其删除

  5. MySQL:SQL进阶

    一.数据库相关理论 1.系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_s ...

  6. HTML新手推荐

    对于前端的学习要先了解一下浏览器和html的发展史其次看看这篇文章:https://kb.cnblogs.com/page/129756/#chapter1我读到这句话时候感觉到了科技这个东西有很多时 ...

  7. 01--CSS的引入方式及CSS选择器

    一 CSS介绍 现在的互联网前端分三层: a.HTML:超文本标记语言.从语义的角度描述页面结构. b.CSS:层叠样式表.从审美的角度负责页面样式. c.JS:JavaScript .从交互的角度描 ...

  8. OpenCV获取与设置像素点的值的几个方法

    Title: OpenCV OpenCV像素值的获取与设置 Fn 1 : 使用 Mat 中对矩阵元素的地址定位的知识 (参考博文:OpenCV中对Mat里面depth,dims,channels,st ...

  9. 自定义View和ViewGroup(有这一篇就够了)

    为了扫除学习中的盲点,尽可能多的覆盖Android知识的边边角角,决定对自定义View做一个稍微全面一点的使用方法总结,在内容上面并没有什么独特的地方,其他大神们的博客上面基本上都有讲这方面的内容,如 ...

  10. Box(视图组件)如何在多个页面不同视觉规范下的复用

    本文来自 网易云社区 . 问题描述 Android App中的页面元素,都是由一个个Box(可以理解成一个个自定义View组件和Widget同级)组成,这些Box可以在不同的页面.不同的模块达到复用的 ...