Linux從初期化檔案談Linux的Shell(轉)

BSDLite發表於2007-08-11
Linux從初期化檔案談Linux的Shell(轉)[@more@]  一,前言:

  本文主要解說BASH的Shellscript,使用者LOGIN,端末軟體啟動等時的初期化檔案和各個檔案讀入的順序,並且將對初期化檔案的內容進行詳細的解說。
  
  二,概述:

  Linux的標準Shell是Bash,Bash的作用並不僅僅是對Shellscript的解釋和實行,並且在使用者登入控制,Term等端末軟體的命令列接受的命令進行處理等方面起著重要的作用。這樣的Shell由於是接受使用者的命令(鍵盤或其它)然後處理之後將結果顯示在螢幕上,所以叫對話式(Interactive)Shell。像這樣的對話式Shell可以對別名的定義,環境變數的設定等進行處理,還可以將端末的一些設定根據自己的愛好來改變,比如LS的顏色化表示,將自己的根目錄變成%,#,在什麼樣的端末上都可以用BackSpace鍵進行消除等。。。。。
  像這樣的處理如果記述在初期化檔案之中,在Shell啟動時就可以自動執行,這些初期化檔案可以放在自己的根目錄下根據自己的喜好定製,當然,一些共通的設定可以放在全使用者共痛的初期化檔案中。如果你想將你的Linux設定成適合自己使用的話(這可是Linux的長處),你一定要對Linux的各種初期化檔案的處理順序,各個檔案的不同作用等有一定的瞭解,本文將對此進行詳細的解說。
  
  三,SHELL利用的各種初期化檔案

  Shell啟動時處理的初期化檔案大致可分為兩類,使用者LOGIN時啟動的LoginShell和別的檔案啟動時被
  
  喚醒的二級SHELL。
  初期化檔案的內容全部是用Shellscript寫成的,在Shell啟動時自動(或者由其它檔案喚醒)讀入,由Shell自身解釋並實行,所以初期化檔案的第一行必須是[#!/bin/sh]或[#!/bin/bash],並且不用加實行屬性。本節將從以下幾個方面進行詳細解說:
  
  .LoginShell利用時的初期化檔案
  .二級Shell利用的初期化檔案
  .兩種檔案的合理的分別利用
  
  
  3.1 LoginShell利用時的初期化檔案
  Login時,將使用者名稱和密碼輸入之後,在[/etc/passwd]之中記述的Shell會被啟動,LINUX的標準SHELL是Bash,如果想確認自己使用的是何種SHELL的話,在命令列輸入
  
  $ grep "^'whoami':" /etc/passwd
  
  之後,結果是以分割開來的,第一段是使用者名稱,最後一段就是自己的LoginShell啦。
  現在說明一下上面的命令,'whoami' 是對whoami實行之後的結果置換,也就是自己的使用者名稱,[^]是正規表現的用法,表示以什麼什麼開始的意思。比如自己的使用者名稱是[john],這條命令就是從檔案[/etc/passwd]之中檢索以[john:]開始的行並表示。
  在作為LoginShell的Bash啟動之後,兩個檔案會被連續讀入,由LoginShell解釋實行。開始是全使用者共通的初期化檔案[/etc/profile],接著是各使用者根目錄下的[.bash_profile]
  Linux安裝之後,多數情況下會在各使用者根目錄下設定.bash_profile檔案,自己的根目錄下有沒有此檔案,用[ls -a] 確認,如果沒有的話,Bash將如何處理請參照本節的附錄。
  /etc/profile,.bash_profile之中典型的處理內容是:PATH,USER等重要的環境變數的設定,程式異常終了時croe檔案的大小的限制,新建檔案的讀寫屬性等。具體的/etc/profile,.bash_profile檔案的內容在後面將詳細介紹。
  
  3.2 二級Shell利用的初期化檔案
  像X Window System的 kterm等軟體啟動時啟動的Shell,由於也可以接受使用者的命令,所以也叫對話式Shell當二級對話式Shell啟動時,會自動讀入使用者根目錄下的.bashrc,由呼叫的Shell解釋並執行。一般地說,全使用者共通的設定記述在/etc/bashrc中,但/etc/bashrc不能被自動讀入,必須由.bashrc指示才能被讀入。具體的可以用Bash的source命令或[.]實現,如在.bashrc中做如下記述:
  1: if [ -f /etc/bashrc ]; then
  2: . /etc/bashrc
  3: fi
  注:"-f" 是檔案是否存在的判斷條件。
  /etc/bashrc,.bashrc之中典型的處理內容是:一般環境變數的設定,組合變數[PSI]的設定,別名的定義, Shell涵數的定義,端末設定的變更等。
  
  3.3 兩種初期化檔案的合理的分別利用
  在各使用者的根目錄下有兩個初期化檔案:.bash_profile和.bashrc,如果相同的內容在兩個檔案中都寫的話,就會造成不必要的重複和修改上的麻煩,如何才能合理的分別使用呢,基本原則是:
  *在.bashrc中不會發生衝突的儘量在.bashrc中記述,從.bash_profile中喚起.bashrc。
  *Login時執行一次就行的命令和二級對話式Shell啟動時反覆執行會發生壞影響的命令在 .bash_profile中記述,
  在.bash_profile中喚起.bashrc。的方法和從.bashrc讀入/etc/bashrc 的方法一樣,在.bash_profile中 做如下記述:
  1: if [ -f ~/.bashrc ]; then
  2: . ~/bashrc
  3: fi
  
  附錄:

  .bash_login 和.profile
  如果使用者根目錄下沒有.bash_profile檔案時,Bash會在根目錄下查詢 .bash_login,如果 .bash_login 不存在的話,Bash會在根目錄下繼續查詢.profile檔案。
  其實,這些檔案都是從 C shell(.login), Bourne shell (.profile)來的,都是隻有LoginShell利用的 初期化檔案。不同的是,.profile是Bourne shell 和Bash 都可以利用的初期化檔案。 從各初期化檔案分開使用的方面來看,設定一個Bash 專用的.bash_profile比較合適。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-946640/,如需轉載,請註明出處,否則將追究法律責任。

相關文章