Linux-环境变量

来源:互联网 发布:好看的女装品牌 知乎 编辑:程序博客网 时间:2024/06/06 03:25

    • 变量
    • 环境变量配置文件
      • etcprofile
      • etcbashrc
      • bash_profile
      • bashrc
      • bash_logout
      • 用户登录时加载profile和bashrc的流程
    • 设置环境变量
      • 临时设置环境变量
      • 修改环境变量配置文件
    • 重要的环境变量
      • PATH
      • HOME
      • SHELL
      • PWD和OLDPWD
      • USER和UID
      • PPID
      • PS1和PS2
      • IFS
    • 相关命令

变量

变量用于保存有用信息,如路径名、文件名、数字等,Linux 用户使用变量来定制其工作环境,使系统获知用户相关的配置。变量本质上是存储数据的一个或多个计算机内存地址。

变量可分为:

  1. 本地变量:仅在用户当前的Shell生命期的脚本中使用的变量,本地变量随着Shell进程的消亡而无效,在新启动的Shell中依旧无效,类似与C、C++等编程语言中的局部变量。
  2. 环境变量:适用于所有由登录进程所产生的子进程。环境变量在用户登陆后到注销之前的所有编辑器、脚本、程序中都有效。
  3. 位置参数:也属于变量,它用于向Shell脚本传递参数,是只读的。

环境变量,也称为全局变量,存在于所有的Shell 中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了。Linux 的环境变量具有继承性,即子shell 会继承父shell 的环境变量。

变量赋值:

变量名=值mytest="hello world."注意:等号两边不能有空格;‘值’包含空格时必须用双引号括起来。

环境变量配置文件

当进入系统的时候,linux 就会读入系统的环境变量,这些环境变量存放在相应的配置文件中。Linux 中有很多记录环境变量的文件,它们被系统读入是按照一定的顺序的。

环境设置文件有两种:系统环境设置文件和个人环境设置文件

  1. 系统中的用户工作环境设置文件:
    登录环境设置文件:/etc/profile
    非登录环境设置文件:/etc/bashrc

  2. 用户个人设置的环境设置文件:
    登录环境设置文件: $HOME/.bash_profile #环境变量设置的地方
    非登录环境设置文件:$HOME/.bashrc #定义别名的地方

登录环境:指用户登录系统后的工作环境。
非登录环境:指用户再调用子shell时所使用的用户环境。

/etc/profile

这个文件是每个用户登录时都会运行的环境变量设置,它为每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从/etc/profile.d 目录的配置文件中搜集shell 的设置。

/etc/profile文件是用户登陆时,使用bash所读入的第一个配置文件,接下来读入的是/etc/bashrc文件。

profile 文件中主要的功能:

  • $PATH:默认路径的配置,以及区分普通用户与管理员默认路径的差异。
  • $HOSTNAME:配置主机名。
  • $HISTSIZE:配置在Shell下所要记录的历史命令跳数,默认大小都以1000条为基本值。
  • 键盘的对应:这里配置的部分如 Tab 键功能,很多都可以在这一阶段做调整。
  • function:和bashrc一样,都是利用/etc/profile.d/目录下的配置文件所做的工作。由于bashrc中也有,所以还是以最后bashrc所执行的结果为准。

/etc/bashrc

这是有关用户登陆功能配置,也是所有用户一开始所需遵循的文件,如果需要针对用户定制,则需到用户主目录中使用 ~/bashrc 文件。若是与系统环境配置或是一些初始化的软件相关的执行配置,则是在/etc/profile文件中。

每个使用bash Shell的用户在登陆以后执行完/etc/profile 中内容以后都会执行此文件,在新开一个bash 的时候也会执行此文件。因此,如果要让每个使用bash 的用户每新开一个bash 和每次登陆都执行某些操作,或者给他们定义一些新的环境变量,就可以在这个里面设置。

/etc/bashrc 文件的配置对象与目的:

  • umask:让系统用户新增或建立文件时,有默认的权限可遵循,默认一般用户(UID大于99)为 002 ,而管理员(UID小于99)则是 022 。
  • $PS1:配置以不同方式登陆时的PROMPT命令,也就是用户在shell上操作是的提示符号,如[root@my_server profile.d]#字样。
  • aliases:很多系统命令使用的aliases(别名)就是在这里产生的,因为这一阶段主要就是将所有用户所要使用到的aliases配置完毕,像ls会出现的颜色,ll可以取代ls -l,以及将vim命令对应到vi等,都是在这里配置的,但这些其实都是在/etc/profile.d/目录下的配置文件。
  • function:也是利用/etc/profile.d/目录下的配置文件所做的工作,包括一些功能、参数等也在其中,这也是bashrc最后一个工作。

~/.bash_profile

设置用户级环境变量,只对单个用户有效。在Ubuntu系统中,此文件默认不存在,取而代之的是.profile文件,当存在.bash_profile文件时则使用.bash_profile文件。

用户登陆时,首先查找.bash_profile文件,若它不存在,则查找是否存在.bash_login文件,若它也不存在,则查找是否存在.profile文件。

~/.bashrc

该文件包含专用于单个用户的bash shell 的bash 信息,当用户登录时或每次打开一个新的shell 时, 该文件被读取。

此文件的修改会影响到用户以后的每一次登陆系统和每一次新开一个bash 。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么每次它新登陆系统或者新开一个bash ,都会去获取相应的特殊的环境变量和特殊操作。

~/.bash_logout

此文件在用户注销时执行,用户可以写入清除某些环境变量或记录登陆时间等命令。也可以不存在,用户注销时将不会执行任何额外的命令。

用户登录时加载profile和bashrc的流程

  1. /etc/profile -> /etc/profile.d/*.sh
  2. HOME/.bashprofile>HOME/.bashrc -> /etc/bashrc

说明:

  • bash首先执行/etc/profile脚本;
  • /etc/profile脚本先依次执行/etc/profile.d/*.sh ;
  • 随后bash会执行用户主目录下的.bash_profile脚本;
  • .bash_profile脚本会执行用户主目录下的.bashrc脚本;
  • .bashrc脚本会执行/etc/bashrc脚本;
  • 至此,所有的环境变量和初始化设定都已经加载完成;bash随后调用terminfo和inputrc,完成终端属性和键盘映射的设定。

设置环境变量

临时设置环境变量

在命令行下直接使用 export 命令临时添加环境变量,该变量只在当前的Shell或其子Shell下是有效的。

设置新环境变量HELLO:

[root@my_server ~]# HELLO="hello"   #设置一个变量[root@my_server ~]# echo $HELLOhello[root@my_server ~]# export HELLO   #加入环境变量中[root@my_server ~]# env | grep HELLO    #查看环境变量HELLO=hello等价于:export HELLO="hello"

向PATH变量中添加新路径:

[root@localhost ~]# export PATH=$PATH:/usr/local/bin   #将/usr/local/bin加入环境变量中

修改环境变量配置文件

在/etc/profile 文件中添加环境变量。此方式添加的环境变量对所有用户有效。在配置文件中设置的环境变量长期有效。

/etc/profile 配置文件针对所有用户设置环境变量。当需要针对某个用户设置环境变量时,可以修改该用户根目录下的.bash_profile文件(~/.bash_profile)或.profile文件(~/.profile),设置方式和/etc/profile文件类似。

设置新环境变量HELLO:

# vim /etc/profileexport HELLO="hello"    #在文档最后添加此行,即可添加此环境变量

向PATH变量中添加新路径:

# vim /etc/profileexport PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"  #在文档最后添加此行

修改/etc/profile 文件后,需执行以下命令才能立即生效。否则注销用户再次登录后方可生效。

# source /etc/profile    #使用source命令执行/etc/profile文件# . /etc/profile    #等效于上一条命令(注意:句点符号后面用空格与文件名分隔)

source命令也称为“点命令”,即句点符号“.”和source命令是等价的,source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

重要的环境变量

PATH

PATH 环境变量定义了可执行文件或Shell脚本的搜索路径。任何在PATH搜索路径中的可执行文件都可以在Linux系统的任何目录中直接执行。

PATH 中定义的不同路径使用冒号分隔。环境变量更改后,在用户下次登陆时生效。

HOME

HOME 记录当前用户的根目录,由/etc/passwd的倒数第2个域决定,HOME目录用于保存用户自己的文件。

SHELL

SHELL 变量保存默认的Shell,默认的值为/bin/bash,表示当前使用的Shell是bash Shell,如果要用另一个Shell,则需要重置SHELL变量值。

PWD和OLDPWD

PWD 记录当前的目录路径,当利用cd命令改变当前目录时,系统自动更新PWD的值,OLDPWD则记录上一个工作目录。

USER和UID

USER和UID是保存用户信息的环境变量,USER表示当前已登陆用户的名字,UID则表示当前已登陆用户的ID。

PPID

PPID 是创建当前进程的进程号,即当前进程的父进程号。

PS1和PS2

PS1和PS2称为提示符变量,用于设置提示符格式。如[root@my_server profile.d]#这段提示符就是一级提示符。当在Shell中输入不完全命令时(输入命令时末尾加上 \ 符号,表示未结束),将出现二级提示符,二级提示符内容即为PS2变量的值。

[root@my_server ~]# echo $PS1   #打印PS1变量值[\u@\h \W]\$

PS1用于设置一级Shell提示符的环境变量,也称为主提示符字符串。如下列出部分提示符变量中的特殊符号:

  • \d:以“周 月 日”格式显示日期
  • \H:主机名或域名
  • \h:主机名
  • \s:Shell的类型名称
  • \T:以12小时制显示时间,格式为HH:MM:SS
  • \t:以24小时制显示时间,格式为HH:MM:SS
  • \@:以12小时制显示时间,格式为am/pm
  • \u:当前的用户名
  • \v:bash Shell的版本号
  • \V:bash Sehll的版本号和补丁号
  • \w:当前工作目录的完整路径
  • \W:当前工作目录名字
  • #:当前命令的序列号
  • $:如果UID为0,打印#;否则,打印$

PS1变量设置:

[root@my_server ~]# echo $PS1[\u@\h \W]\$ [root@my_server ~]# PS1="[\u\@\H \w \#]\$"   #注意设置时空格的分布[root01:17 上午my_server ~ 19]$echo $PS1     #设置后的提示符[\u\@\H \w \#]$

PS2变量设置:

[root@my_server ~]# echo $PS2> [root@my_server ~]# PS2='>>'   #将二级提示符设置为“>>”[root@my_server ~]# echo \     #进入二级提示符>>[root@my_server ~]# PS2="\s >"   #也可以在二级提示符中使用特殊符号[root@my_server ~]# echo \bash >

IFS

IFS 用于指定Shell域分隔符,默认值为空格。

[root@my_server ~]# echo $PATH/usr/local/python2.7.11/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin[root@my_server ~]# export IFS=:[root@my_server ~]# echo $PATH/usr/local/python2.7.11/bin /usr/lib64/qt-3.3/bin /usr/local/sbin /usr/sbin /sbin /usr/local/bin /usr/bin /bin /root/bin

如上所示,将IFS设定为冒号,然后显示PATH的值,Shell就已冒号为分隔符,将PATH的各目录以空格分隔显示出来。

相关命令

环境变量相关命令:

  • env:显示当前用户所有的环境变量。
  • set :显示与设置当前本地变量,不带参数的set 就显示当前环境的所有的变量,包括环境变量和非环境变量。
  • unset :清除变量,可以清除本地变量或环境变量。
  • export :用于把变量变成当前shell 和其子shell 的环境变量,临时有效。修改配置文件可以永久有效。
  • readonly:设置只读变量。

查看环境变量的方式:

# echo $PATH    #使用echo查看某个环境变量的值# env    #查看当前用户的环境变量# set    #查看所有本地定义的环境变量

readonly用法:

[root@localhost fdfs]# readonly       #显示只读变量declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath"declare -ir BASHPID=""declare -ar BASH_VERSINFO='([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")'declare -ir EUID="0"declare -ir PPID="5306"declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"declare -ir UID="0"[root@localhost fdfs]# readonly test="1"      #定义只读变量[root@localhost fdfs]# test=2        #只读变量不可改bash: test: readonly variable
0 0