理解環境變量

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),唔哈哈哈!!

相關文章
相關標籤/搜索