Bash shell用戶環境

  • 介紹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中的全部文件會被複制一份放在用戶的家目錄中,用來設定用戶環境。bash



  • 概念ide

    shell 環境腳本:管理bash 環境的最佳方案,就是經過/etc/profile.d/*.sh , /etc/profile.d/ *.sh 文件是用來存儲應用軟件的profile, 用來配置相應軟件的環境變量。而不是直接修改/etc/profile.spa


    子shell : 爲何讓腳本或命令在子shell 中運行?由於啓動子shell會建立一個全新的獨立的執行環境,在子shell 中運行所發生的改變不會影響到父shell 環境設計

    加載文件:與編程上使用include一樣的原理,即在定義的位置將指定的文件插入當前文件。bash shell 容許用戶將多個命令集中在一個文件中,而後執行這些命令,與直接在提示符下鍵入執行效果相同,這個過程稱爲加載文件。加載文件的命令執行在當前shell 中,並可能修改當前shell 環境,得到文件的命令是shell 內置命令source (. source 命令的同義詞)blog

    登陸shell :以bash --login 方式啓動的shell,登陸到一臺機器上看到的第一個shell ,登陸到虛擬控制檯,遠程登陸,啓動X的看不見的shell等。用戶登陸時激活的shell, /etc/passwd 中設定ip

    非登陸shell : bash方式啓動的shell 除登陸shell之外均是非登陸shell, X圖形下開啓的新終端,子shell, ,括號命令分組,執行shell 腳本時建立的新的非登陸shell.用戶登陸後手動執行的shell 程序rem


    交互式shell : 手動啓動的子shell ,新開的X終端等

    非交互式shell :以shell腳本形式啓動,命令替換而調用的shell等,爲避免潛在的啓動腳本反作用,非交互式shell不在啓動時加載啓動腳本






  • 不一樣方式使用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 命令

相關文章
相關標籤/搜索