理解環境變量

1.什麼是環境變量?

    由於linux是一個多用戶的操作系統,所以每個用戶都有自己的專用的運行環境。而這個環境有一組變量所定義,這組變量就是環境變量。用戶可以對自己環境變量進行修改以達到環境的要求。

    環境變量是和Shell緊密相關的,它是通過Shell命令來設置的。 環境變量又可以被所有當前用戶所運行的程序所使用。對於bash來說,可以通過變量名來訪問相應的環境變量。(shell)

2.linux中常見的環境變量

    PATH:指定命令的搜索路徑

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

    HOME:指定用戶的主工作目錄(即用戶登陸到Linux系統中時,默認的目錄)

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

    HISTSIZE:指保存歷史命令記錄的條數。

[xjf@localhost /]$ echo $HISTSIZE
1000

    LOGNAME:指當前用戶的登錄名。

[xjf@localhost /]$ echo $LOGNAME
xjf

    HOSTNAME:指主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變量中的。

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

    SHELL:指當前用戶用的是哪種Shell。

[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:      [email protected]
	> 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),唔哈哈哈!!

本文出自 “Pzd流川楓” 博客,請務必保留此出處http://xujiafan.blog.51cto.com/10778767/1773294

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章