Bash shell使用者環境

來源:互聯網
上載者:User

標籤:環境變數   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使用者環境

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.