環境變量:定義每個用戶的操作環境
1. Source命令:修改配置文件后,必須注銷重新登錄才能生效,使用source命令后,立即生效環境變量配置文件;
命令如下:source 配置文件 或者 . 配置文件
2. 環境變量配置文件簡介:環境變量配置文件中主要是定義對系統操作環境生效的系統默認環境變量,如PATH等;PATH、HISTSIZE、PS1、HOSTNAME等環境變量寫入對應的環境變量配置文件;
3. 常見的環境變量:
1. /etc/profile
2. /etc/profile.d/*.sh
3. ~/.bash_profile
4. ~/.bashrc
5. /etc/bashrc
注:放在家目錄(3,4)下的環境變量配置文件,只會對當前用戶起作用;在/etc下的環境變量所有的用戶都起作用;
環境變量配置文件的功能
系統正常啟動過程的環境變量的啟動
先向下走,在向右走;
在其他用戶下切換用戶的過程
先向下,然后再向右;
一. /etc/profile的作用
1. USER變量:
2. LOGNAME變量:
3. MAIL變量:
4. PATH變量:
5. HOSTNAME變量:
6. HISTSIZE變量:
7. umask:
8. 調用/etc/profile.d/*.sh文件
二. umask #查看系統默認權限
1. 文件最高權限為666
2. 目錄最好權限為777
3. 權限不能使用數字進行換算,而必須使用字母;使用的是最高權限丟點默認的權限;
Eg:當前默認權限為022,那么創建的文件權限就是最高權限減去默認權限:wr-wr-wr- 減去 ----w--w- 那么創建的文件權限默認為wr--r--r-
4. Umask定義的權限,是系統默認權限中准備丟棄的權限如022,也就是----w—w-
三.~/.bash_profile的作用
1.調用了~/.bashrc 文件
2.在PATH變量后面加入了”:$HOME/bin”這個目錄
四./etc/bashrc的作用
1.PS1
2.umask
3.PATH變量
4.調用/etc/profile.d/*.sh文件
_______________________________________________________________________________________________________________________________________________________________________________
linux 下常見啟動文件配置
先將export LANG=zh_CN加入/etc/profile ,退出系統重新登錄,登錄提示顯示英文。將/etc/profile 中的export LANG=zh_CN刪除,將LNAG=zh_CN加入/etc/environment,退出系統重新登錄,登錄提示顯示中文。
用戶環境建立的過程中總是先執行/etc/profile然后在讀取/etc/environment。為什么會有如上所敘的不同呢?
應該是先執行/etc/environment,后執行/etc/profile。
/etc/environment是設置整個系統的環境,而/etc/profile是設置所有用戶的環境,前者與登錄用戶無關,后者與登錄用戶有關。
系統應用程序的執行與用戶環境可以是無關的,但與系統環境是相關的,
所以當你登錄時,你看到的提示信息,象日期、時間信息的顯示格式與系統環境的LANG是相關的,缺省LANG=en_US,如果系統環境LANG=zh_CN,則提示信息是中文的,否則是英文的。
對於用戶的SHELL初始化而言是先執行/etc/profile, 再讀取文件/etc/environment.
對整個系統而言是先執行/etc/environment。這樣理解正確嗎?
/etc/enviroment --> /etc/profile --> $HOME/.pro
/etc/profile 是所有用戶的環境變量
/etc/enviroment是系統的環境變量
登陸系統時shell讀取的順序應該是
/etc/profile ->/etc/enviroment -->$HOME/.profile -->$HOME/.env
原因應該是jtw所說的用戶環境和系統環境的區別了
如果同一個變量在用戶環境(/etc/profile)和系統環境(/etc/environment) 有不同的值那應該是以用戶環境為准了。
(1)/etc/profile: 此文件為系統的每個用戶 設置環境信息,當用戶第一次登錄時,該文件被執行. 並從/etc/profile.d目錄的配置文件中搜集shell的設置。
(2)/etc /bashrc: 為每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取。
(3)~/.bash_profile: 每個用戶都可使用該文件輸入專用於自己 使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件。
(4)~/.bashrc: 該文件包含專用於你 的bash shell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取。
(5) ~/.bash_logout:當每次退出系統(退出bash shell)時,執行該文件.
(6)~/.bash_profile 是交互式、login 方式進入 bash 運行的~/.bashrc 是交互式 non-login 方式進入 bash 運行的通常二者設置大致相同,所以通常前者會調用后者。
通過比較最后發現,在ubuntu下配置java運行環境時,所做的設置代表的意義了。
$ sudo vim /etc/profile
在文件最后添加
#set java environment
JAVA_HOME=/opt/jdk1.6.0_07
export JRE_HOME=/opt/jdk1.6.0_07/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
最后wq!
備注:在shell中執行程序時,shell會提供一組環境變量。export可新增,修改或刪除環境變量,供后續執行的程序使用。export的效力僅及於該此登陸操作。
在登錄Linux時要執行文件的過程如下:
在剛登錄Linux時,首先啟動 /etc/profile 文件,然后再啟動用戶目錄下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一個,執行的順序為:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的話,一般還會執行 ~/.bashrc文件。因為在 ~/.bash_profile文件中一般會有下面的代碼:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般還會有以下代碼:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc會調用 /etc/bashrc文件。最后,在退出shell時,還會執行 ~/.bash_logout文件。
執行順序為:/etc /profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
#################################################################
1.登錄shell
所謂登錄shell,指的是當用戶登錄系統時所取的那個 shell。登錄shell屬於交互式shell。
登錄shell將查找4個不同的啟動文件來處理其中的命令。 bash shell處理文件的順序如下:
1: /etc/profile
2:/etc/profile.d等待配置文件
3: $HOME/.bash_profile
5 $HOME/.profile
/etc /profile是bash shell在系統上的主默認啟動文 件,系統上 每一個用戶在登陸時都將執行此文件。
其余3個文件具備相同的功能——提供特定於用戶的啟動文件。大多 數Linux版本只使用其中之一。如:RedFlag使用.bash_profile ubuntu使用.profile .
shell 依次查找~/.bash_profile、
如果啟動了一個bash shell而沒有等錄系統(如在CLI提示符中鍵入bash),
在交互式非登錄shell中並不執行前面提到的初始化文件中的命令。然而,交互式非登錄shell從登錄shell繼承了由這些初始化文件設置的 shell變量。
(1) $HOME/.bashrc
交互式非登錄shell執行~/.bashrc文件中的命令.在每次執行shell腳本時,都會重新讀取這個文件,所以是最完整的。
但是萬事都不是一樣的,debain系列的是不同的,如ubuntu
/etc/profile:在登錄時,操作系統定制用戶環境時使用的第一個文件 ,此文件為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行。
______________________________________________________________________________________________________________________________________________________________________________________
深入淺出理解交互式shell和非交互式shell、登錄shell和非登錄shell的區別
首先我們需要把bash理解為一種模式,我們不如把這種模式想象成類似於洋蔥一樣的結構,我們可以一層一層剝開,也就是說我們可以一層一層的進入子shell。就好比我們進入一棟樓,打開一個房間是一個環境,在當前這個房間我們又看到了一個門,當我們打開這個門的時候,我們就已經進入了新的環境,也就是新的bash中。這牽扯到一個父shell和子shell的問題。
(1)全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
(2)個人配置:
~/.bash_profile
~/.bashrc
我們可以根據shell是否是交互式和shell是否是登錄式這兩個維度,來對shell進行分類。
交互式shell和非交互式shell(interactive shell and non-interactive shell)
交互式模式就是在終端上執行,shell等待你的輸入,並且立即執行你提交的命令。這種模式被稱作交互式是因為shell與用戶進行交互。這種模式也是大多數用戶非常熟悉的:登錄、執行一些命令、退出。當你退出后,shell也終止了。
shell也可以運行在另外一種模式:非交互式模式,以shell script(非交互)方式執行。在這種模式 下,shell不與你進行交互,而是讀取存放在文件中的命令,並且執行它們。當它讀到文件的結尾EOF,shell也就終止了。
舉個例子,最常見的交互式shell,就是我們利用虛擬機登錄Linux系統時的那個等待登錄界面,大概如下圖所示:
系統在等待我們鍵入登錄的用戶名和密碼,這就是一種交互式shell,而非交互式shell就像我們寫的那些很簡單的腳本,比如一個腳本展示出:helloworld。這個腳本不需要我們對其進行交互,它就只是很簡單的將其腳本中的命令按順序執行。
登錄式shell和非登錄式shell
登錄shell:是需要用戶名、密碼登錄后才能進入的shell(或者通過--login”選項生成的shell)。
非登錄shell:當然就不需要輸入用戶名和密碼即可打開的Shell,例如:直接命令“bash”就是打開一個新的非登錄shell,在Gnome或KDE中打開一個“終端”(terminal)窗口程序也是一個非登錄shell。
執行exit命令,退出一個shell(登錄或非登錄shell);
執行logout命令,退出登錄shell(不能退出非登錄shell)。
交互式登錄shell和非交互式登錄shell的區別
交互式登錄:(清除掉所有變量,通過文件重新讀入)
(1)直接通過終端輸入賬號密碼登錄
(2)使用“su - UserName”切換的用戶
執行順序:(影響該shell的配置文件)
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile--> ~/.bashrc--> /etc/bashrc
非交互式登錄:(會繼承上一個shell的全部變量)
(1)su UserName
(2)圖形界面下打開的終端
(3)執行腳本 (當我們執行腳本的時候.我們就已經進入到了一個子shell)
(4)任何其它的bash實例
執行順序:(影響該shell的配置文件)
~/.bashrc--> /etc/bashrc--> /etc/profile.d/*.sh
使用./test.sh或者 bash ./test.sh執行腳本的時候,是開啟一個子shell,這個子shell能繼承上一個父shell的變量,而這個子shell的變量,隨着子shell的退出而消失。當我們用. test.sh 或者source test.sh時,不開啟子shell,在當前shell運行,子shell中的所有值都影響當前。
一般我們對shell進行一些配置的時候,通常都是對~/.bashrc 和/etc/bashrc這兩個文件進行一些配置。