理解环境变量

1.什么是环境变量?
linux

    因为linux是一个多用户的操做系统,因此每一个用户都有本身的专用的运行环境。而这个环境有一组变量所定义,这组变量就是环境变量。用户能够对本身环境变量进行修改以达到环境的要求。
shell

    环境变量是和Shell紧密相关的,它是经过Shell命令来设置的。 环境变量又能够被全部当前用户所运行的程序所使用。对于bash来讲,能够经过变量名来访问相应的环境变量。(shell)bash

2.linux中常见的环境变量dom

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

[xjf@localhost /]$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/xjf/bin

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

[xjf@localhost /]$ echo $HOME
/home/xjf

    HISTSIZE:指保存历史命令记录的条数。操作系统

[xjf@localhost /]$ echo $HISTSIZE
1000

    LOGNAME:指当前用户的登陆名。it

[xjf@localhost /]$ echo $LOGNAME
xjf

    HOSTNAME:指主机的名称,许多应用程序若是要用到主机名的话,一般是从这个环境变量中的。io

[xjf@localhost /]$ echo $HOSTNAME
localhost.localdomain

    SHELL:指当前用户用的是哪一种Shell。class

[xjf@localhost /]$ echo $SHELL
/bin/bash

    LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户能够修改此环境变量。

[xjf@localhost /]$ echo $LANG
zh_CN.UTF-8

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

[xjf@localhost /]$ echo $MAIL
/var/spool/mail/xjf

    PS1:命令基本提示符,对于root用户是#,对于普通用户是$。

[xjf@localhost /]$ echo $PS1
[\u@\h \W]\$

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

[xjf@localhost /]$ echo $PS2
>

3.修改环境变量

/*1.显示环境变量*/

[xjf@localhost /]$ echo $HOME
/home/xjf


/*2.设置一个新的环境变量*/

[xjf@localhost /]$ echo $NAME

[xjf@localhost /]$ export NAME="haotian"
[xjf@localhost /]$ echo $NAME 
haotian


/*3.显示全部的环境变量*/

[xjf@localhost /]$ env


/*4.显示本地定义的shell变量*/

[xjf@localhost /]$ set


/*5.清除环境变量*/

[xjf@localhost /]$ echo $NAME
haotian
[xjf@localhost /]$ unset NAME
[xjf@localhost /]$ echo $NAME


/*6.设置只读环境变量*/

[xjf@localhost /]$ readonly NAME
[xjf@localhost /]$ unset NAME
bash: unset: NAME: cannot unset: readonly variable
[xjf@localhost /]$ export NAME="diudiudiu"
bash: NAME: readonly variable

//设置只读变量后,这个变量就不容许修改,若是你仍是想修改的话,就能够先切换到root底下,而后
//在切回来就能够了(也能够退出当前用户,而后再进来)

[xjf@localhost ~]$ unset NAME
[xjf@localhost ~]$ export NAME="diudiudiu"
[xjf@localhost ~]$ echo $NAME
diudiudiu
[xjf@localhost ~]$ readonly NAME
[xjf@localhost ~]$ unset NAME
-bash: unset: NAME: cannot unset: readonly variable
[xjf@localhost ~]$ exit 
logout
[root@localhost ~]# su - xjf
[xjf@localhost ~]$ unset NAME
[xjf@localhost ~]$ echo $NAME

[xjf@localhost ~]$ export NAME="haotian"
[xjf@localhost ~]$ echo $NAME
haotian

为何这个直接退出,它就能够改了,因为在linux变量种类若是按生存周期分能够分为两类:

1.永久的:须要修改配置文件,变量永久有效

2.临时的:使用export定义的变量,变量在用户改变时失效。

最后看下面这个例子:

[xjf@localhost Test_1]$ cat a.c
/*************************************************************************
	> File Name: a.c
	> Author:    xjf
	> Mail:      doo_magic@126.com
	> Created Time: Sat 14 May 2016 12:07:45 PM CST
 ************************************************************************/

#include<stdio.h>

int main()
{
	printf("First linux program\n");
	return 0;
}
[xjf@localhost Test_1]$ gcc -o a a.c 
[xjf@localhost Test_1]$ ./a
First linux program
[xjf@localhost Test_1]$ a
-bash: a: command not found
[xjf@localhost Test_1]$ gcc -o a.exe a.c
[xjf@localhost Test_1]$ a.exe
-bash: a.exe: command not found

//上面这个可执行程序a和a.exe为何不能执行,./a就能够执行呢??

缘由是可执行程序所在的目录没有包含在环境变量PATH的值中。在这种状况下,用户必须给出可执行文件的完整路径名才能运行指定的可执行文件。在上面的状况中,圆点符号(.) 表示当前目录。接下来看下面方式:

[xjf@localhost Test_1]$ a
-bash: a: command not found
[xjf@localhost Test_1]$ a.exe
-bash: a.exe: command not found
[xjf@localhost Test_1]$ /home/xjf/test/Test_1/a
First linux program
[xjf@localhost Test_1]$ /home/xjf/test/Test_1/a.exe
First linux program

//就能够完美执行了

也能够经过修改环境变量的方式来达到目的:

[xjf@localhost Test_1]$ ll
total 20
-rwxrwxr-x. 1 xjf xjf 4691 May 14 12:27 a
-rw-rw-r--. 1 xjf xjf  347 May 14 12:08 a.c
-rwxrwxr-x. 1 xjf xjf 4691 May 14 12:11 a.exe
[xjf@localhost Test_1]$ a
-bash: a: command not found
[xjf@localhost Test_1]$ a.exe
-bash: a.exe: command not found
[xjf@localhost Test_1]$ pwd
/home/xjf/test/Test_1
[xjf@localhost Test_1]$ export PATH=$PATH:/home/xjf/test/Test_1
[xjf@localhost Test_1]$ a
First linux program
[xjf@localhost Test_1]$ a.exe
First linux program
[xjf@localhost Test_1]$ ./a
First linux program
[xjf@localhost Test_1]$ ./a.exe 
First linux program

好(you)神(need)奇(weight),唔哈哈哈!!

相关文章
相关标签/搜索