標籤:環境變數 bash shell 設定檔
介紹
瞭解Linux的啟動順序,也有助於本內容的理解,載入使用者環境是Linux啟動的最後一步。不同的shell 會使用不同的設定檔: bash (.profile), ksh (.profile), csh (.login)。
bash shell 被設計成相容sh, ksh, 它會在使用者主目錄依次檢查.bash_profile,.bash_login,.profile是否存在,並載入找到的第一個檔案。無論檔案名稱字如何,載入使用者環境的原理一樣,只設定一個設定檔即可。但若有相容bash,ksh的需要,只配置.profile即可。若在使用者登入後,修改了bash的設定檔,使用者可以手動負載檔案生效,如 . /etc/profile . ~/.bash_profile
/etc/skel目錄中有.bash_profile .bashrc ,當建立新使用者時, /etc/skel中的所有檔案會被複製一份放在使用者的家目錄中,用來設定使用者環境。
概念
shell 環境指令碼:管理bash 環境的最佳方案,就是通過/etc/profile.d/*.sh , /etc/profile.d/ 中*.sh 檔案是用來儲存應用軟體的profile, 用來配置相應軟體的環境變數。而不是直接修改/etc/profile.
子shell : 為什麼讓指令碼或命令在子shell 中運行?因為啟動子shell會建立一個全新的獨立的執行環境,在子shell 中運行所發生的改變不會影響到父shell 環境。
負載檔案:與編程上使用include同樣的原理,即在定義的位置將指定的檔案插入當前檔案。bash shell 允許使用者將多個命令集中在一個檔案中,然後執行這些命令,與直接在提示符下鍵入執行效果相同,這個過程稱為負載檔案。負載檔案的命令執行在當前shell 中,並可能修改當前shell 環境,獲得檔案的命令是shell 的內建命令source (. 是source 命令的同義字)
登入shell :以bash --login 方式啟動的shell,登入到一台機器上看到的第一個shell ,登入到虛擬控制台,遠程登入,啟動X的看不見的shell等。使用者登入時啟用的shell, 在/etc/passwd 中設定
非登入shell : 以bash方式啟動的shell 除登入shell以外均是非登入shell, 如X圖形下開啟的新終端,子shell, ,括弧命令分組,執行shell 指令碼時建立的新的非登入shell.使用者登入後手動執行的shell 程式
互動式shell : 手動啟動的子shell ,新開的X終端等
非互動式shell :以shell指令碼形式啟動,命令替換而調用的shell等,為避免潛在的啟動指令碼副作用,非互動式shell不在啟動時載入啟動指令碼
650) this.width=650;" src="http://img1.51cto.com/attachment/201411/2/2363901_14149182549tqX.png" />
不同方式使用shell時環境的載入
互動式登入shell
登入分為local login 和 remote login,bash在使用者登入時從四個檔案中讀取環境設定:
登入shell先載入/etc/profile(全域設定,此檔案也可在執行時獲得其它檔案) , 然後在使用者主目錄按.bash_profile .bash_login .profile的優先次序執行其中一個檔案,登入shell logout時,若主目錄中有.bash_logout,則執行.
載入順序:
/etc/profile > /etc/profile.d/*.sh>~/.bash_profile (.bash_login, .profile) > ~/.bashrc > /etc/bashrc
全域設定檔案:
① /etc/profile
② /etc/bashrc
目前使用者設定檔案:
③ ~/.bash_profile獨立使用者的設定檔
④~/.bashrc #如使永久生效的別名命令,即可將別名配置寫入此檔案,使用者登入shell時,執行其中的命令(使用者用於自訂shell)
互動式非login shell(執行新shell)
.bashrc使使用者登入時的環境變數設定與子shell的環境變數設定相分離,有獨立的執行環境。
載入~/.bashrc, 而此檔案預設僅載入/etc/bashrc, ~/.bashrc>/etc/bashrc>/etc/profile.d/*.sh
非互動式非登入shell
先檢查變數BASH_ENV, 若有定義 ,則先執行其所定義的開機檔案的內容,然後再執行指令碼。預設不載入任何啟動文件
以sh 檔案名稱調用bash
仿照舊版的sh,盡量相容於POSIX標準(bash特有功能將喪失)
loginshell 調用/bin/sh,bash 會讀取/etc/profile和~/.profile
互動式shell:執行/bin/sh, fork 一個子shell ,檢查並執行ENV變數中定義的內容.
執行shell script : 第一行為#!/bin/sh 裡, bash 不執行任何設定檔.
以bash --posix 方式執行
bash 使用與POSIX標準相容功能,檢查並執行ENV變數中定義的內容.
執行 bash -r 或以rbash的名稱調用
受限模式,bash功能受限,目的是讓使用者擁有少數功能,出於安全考慮. 此模式會執行~/.bashrc
相關檔
/etc/profile:所有使用者登入都會執行,設定的變數(全域)的可以作用於所有使用者,由root統一維護
/etc/bashrc:針對所有互動式shell
/etc/skel: 目錄中含有針對所有使用者的初始設定檔案
使用者可以自訂的一些檔案:
~/.bash_profile: 目前使用者環境配置。每個使用者都可使用該檔案輸入專用於自己使用的shell環境,當使用者登入時,該檔案僅僅執行一次!是以互動式login檔案運行bash的
~/.bashrc :該檔案包含專用於設定目前使用者shell環境,當登入以及每次開啟新的shell時,該檔案被讀取,是互動式non-login方式運行bash的。
~/.bash_logout使用者登入時執行,預設僅執行clear 命令
本文出自 “Adelphos” 部落格,請務必保留此出處http://adelphos.blog.51cto.com/2363901/1570938
Bash shell使用者環境