环境变量
Linux是一个多用户的操作系统,每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。
概念:
一般指在操作系统中用来指定操作系统运行环境的一些参数。 每个用户都可以通过修改环境变量的方式对自己的运行环境进行配置。
分类:
(1)系统级环境变量(设置的环境变量全局生效)
这类变量对系统内的所有用户都生效,所有用户都可以使用这类变量。
查看:在/etc/目录下使用ls-l查看这个文件的用户及权限。
[a@localhost ~]$ ls -l /etc/
-rw-r--r--. 1 root root 1816 Mar 21 15:56 profile
设置方式:用vim在/etc/profile文件中添加我们想要的环境变量。
添加完成后新的环境变量不会立即生效,当调用source/etc/profile该文件才生效。
[a@localhost ~]$ source /etc/profile
(2)用户级环境变量(只对用户生效)
查看:ls -a
[a@localhost ~]$ ls -a
. .client.c.swp .gnome2 libmymath.so .pulse-cookie time.o
.. .config .gnome2_private libmytime.a .recently-used.xbel Videos
\ .dbus .gnote .local .server.c.swp .viminfo
abc Desktop .gnupg main.o .ssh .vimrc.swp
add.o .dmrc .gstreamer-0.10 .Makefile.swp sub.o .xauthHKibmS
.arp.sh.swp Documents .gtk-bookmarks .mozilla Templates .xsession-errors
.bash_history Downloads .gvfs Music test.c .xsession-errors.old
.bash_logout .esd_auth hello.o .nautilus test.txt
.bash_profile .fontconfig .ICEauthority Pictures .themes
.bashrc .fork.c.swp .icons process
设置方式:在用户目录“~”下的隐藏文件”.bash_profile”(上图左下)中添加自己想要的环境变量,与上相同,vim打开文件,利用export添加环境变量。
(3)临时环境变量(只对当前终端生效)
当我们退出登录或者关闭终端再重新打开时,这个环境变量就会消失。是临时的。
设置方式:直接使用export指令添加
[a@localhost ~]$ export PRINT="happytoday"
[a@localhost ~]$ echo $PRINT
happytoday
[a@localhost ~]$
设置环境变量常用的几个指令
(1)echo:查看显示环境变量
[a@localhost ~]$ echo $SHELL
/bin/bash
[a@localhost ~]$
(2)export:
(a)查看所有环境变量的声明
[a@localhost ~]$ export
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/home/a"
declare -x HOSTNAME="localhost.localdomain"
declare -x LANG="en_US.UTF-8"
(b)设置新环境变量名
export 新环境变量名 = 内容
[a@localhost ~]$ echo $a
[a@localhost ~]$ export a=zjx
[a@localhost ~]$ echo $a
zjx
[a@localhost ~]$
(当创建环境变量a并给它赋值zjx时,再次查看显示结果)
(3)env:查看所有环境变量
(4)set:查看本地定义的所有shell变量
(5)unset:删除一个环境变量
[a@localhost ~]$ echo $a
zjx
[a@localhost ~]$ unset a
[a@localhost ~]$ echo $a
[a@localhost ~]$
(6)readonly:将环境变量设为只读状态
(只能读不能对它修改)
[a@localhost ~]$ readonly YEAR=2018
[a@localhost ~]$ echo $YEAR
2018
[a@localhost ~]$ export YEAR=2017
bash: YEAR: readonly variable
[a@localhost ~]$
常用的几个环境变量
PATH
查看环境变量PATH
[a@localhost ~]$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/a/bin
每一个冒号都是一个路径,这些搜索路径都是一些可以找到可执行程序的目录列表
eg:
现在有一个c程序hello.c通过gcc编译生成的可执行文件a.out(功能:输出helloworld)。我们平常执行这个a.out的时候是使用
①相对路径调用方式: ./a.out (”.”代表当前目录,”/”分隔符)。
②还可以使用绝对路径调用方式:将其全部路径写出:/home/a/a.out
[a@localhost ~]$ ls
\ a.out Documents hello.o libmytime.a Pictures sub.o test.txt time.o
abc bb Downloads libmymath.a main.o process Templates time.c Videos
add.o Desktop hello.c libmymath.so Music Public test.c time.h
[a@localhost ~]$ ./a.out
hello[a@localhost ~]$ pwd
/home/a
[a@localhost ~]$ /home/a/a.out
③通过设置PATH环境变量,直接用文件名调用:
[a@localhost ~]$ a.out
-bash: a.out: command not found
[a@localhost ~]$ export PATH=$PATH:/home/a
[a@localhost ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/a/bin:/home/a
[a@localhost ~]$ a.out
hello[a@localhost ~]$
在没设置PATH前,我们直接使用a.out调用程序会报错,因为shell并没有从PATH已拥有的搜索路径目录中找到a.out这个可执行程序。
使用export指令,将a.out的路径添加到搜索路径当中,export PATH=$PATH:路径
我们就可以使用a.out直接执行程序。
HOME
指定用户的主工作目录,即为用户登录到linux系统中时的默认目录,即“~”。
HISTSIZE
指保存历史命令记录的条数。我们输入的指令都会被系统保存下来,这个环境变量记录的就是保持指令的条数。一般为1000。
查看条数:
[a@localhost ~]$ echo $HISTSIZE
1000
查看历史内容:
a@localhost ~]$ history
1 ls
2 ls cd
3 ll
4 ls
5 ls -a
6 ls -l
7 exit
8 ls
9 ls -l
10 ls -r
11 ls -t
12 ls -s
13 cd
其它常用环境变量:
MAIL:是指当前用户的邮件存放目录
SHELL:是指当前用户用的是哪种Shell
LOGNAME:是指当前用户的登录名
HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的
LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量
环境变量通常具有全局属性
由于具有全局属性,可以被子进程继承下去
[a@localhost ~]$ vim path.c
[a@localhost ~]$ cat path.c
#include<stdio.h>
#include<stdlib.h>
int main()
{
char * env = getenv("MYENV");
if(env)
{
printf("%s\n",env);
}
return 0;
}
[a@localhost ~]$ gcc path.c
[a@localhost ~]$ ./a.out
直接查看发现没有结果,导出环境变量再次运行发现结果有了。
[a@localhost ~]$ export MYENV="happytoday"
[a@localhost ~]$ ./a.out
happytoday
[a@localhost ~]$
说明环境变量是可以被继承下去的。