Linux Shell編程(4) - 環境變量配置文件

1、環境變量配置文件簡介

1. 環境變量的做用

環境變量配置文件主要是定義對系統操做環境生效的系統默認環境變量,如PATH、HISTSIZE、PS一、HOSTNAME等。

2. source 命令

修改配置文件後,註銷從新登陸以後纔會生效,使用source命令能夠不用從新登陸,令配置文件生效。

語法

  • source 配置文件

shell

  • . 配置文件

實例

[root~]# source .bashrc
[root~]# . .bashrc

3. 主要的環境變量配置文件

/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc

4. 環境變量配置文件加載順序

正常登陸

`/etc/profile` ——> `~/.bash_profile` ——> `~/.bashrc` ——> `/etc/bashrc` ——> 命令提示符
    |
    |——> `/etc/profile.d/*.sh` ——> `/etc/profile.d/lang.sh` ——> `/etc/locale.conf`

非正常登陸(使用 su 命令切換用戶)

`/etc/bashrc` ——> 命令提示符
    |
    |——> `/etc/profile.d/*.sh` ——> `/etc/profile.d/lang.sh` ——> `/etc/locale.conf`

2、環境變量配置文件功能

1. /etc/profile 文件的做用

USER 變量
LOGNAME 變量
MAIL 變量
PATH 變量
HOSTNAME 變量
HISTSIZE 變量
umask
遍歷調用 /etc/profile.d/*.sh 文件

實例

  • /etc/profile 文件,省略了部份內容
# /etc/profile

# PATH 變量
pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}

if [ -x /usr/bin/id ]; then
    if [ -z "$EUID" ]; then
        # ksh workaround
        EUID=`/usr/bin/id -u`
        UID=`/usr/bin/id -ru`
    fi
    # USER 變量
    USER="`/usr/bin/id -un`"
    # LOGNAME 變量
    LOGNAME=$USER
    # MAIL 變量
    MAIL="/var/spool/mail/$USER"
fi

# HOSTNAME 變量
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
# HISTSIZE 變量
HISTSIZE=1000

# 聲明爲環境變量
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# /usr/share/doc/setup-*/uidgid file
# 定義 umask
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

# 遍歷調用 `/etc/profile.d/*.sh` 文件
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

2. /etc/bashrc 文件的做用

PS1 變量
PATH 變量
umask
遍歷調用 /etc/profile.d/*.sh 文件

實例

  • /etc/bashrc 文件,省略了部份內容
# /etc/bashrc

# are we an interactive shell?
# PS1 變量
if [ "$PS1" ]; then
  if [ -z "$PROMPT_COMMAND" ]; then
    case $TERM in
    xterm*|vte*)
      if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
      elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
          PROMPT_COMMAND="__vte_prompt_command"
      else
          PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
      fi
      ;;
    screen*)
      if [ -e /etc/sysconfig/bash-prompt-screen ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
      else
          PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
      fi
      ;;
    *)
      [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
      ;;
    esac
  fi
  # Turn on parallel history
  shopt -s histappend
  history -a
  # Turn on checkwinsize
  shopt -s checkwinsize
  [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
fi

# ----------只有非正常登陸的shell纔會執行下面腳本----------------
if ! shopt -q login_shell ; then # We're not a login shell
    # Need to redefine pathmunge, it get's undefined at the end of /etc/profile
    # PATH 變量
    pathmunge () {
        case ":${PATH}:" in
            *:"$1":*)
                ;;
            *)
                if [ "$2" = "after" ] ; then
                    PATH=$PATH:$1
                else
                    PATH=$1:$PATH
                fi
        esac
    }

    # /usr/share/doc/setup-*/uidgid file
    # umask
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
       umask 002
    else
       umask 022
    fi

    SHELL=/bin/bash
    # 遍歷調用 `/etc/profile.d/*.sh` 文件
    for i in /etc/profile.d/*.sh; do
        if [ -r "$i" ]; then
            if [ "$PS1" ]; then
                . "$i"
            else
                . "$i" >/dev/null
            fi
        fi
    done
fi

3. ~/.bash_profile 文件的做用

調用了 ~/.bashrc 文件
在PATH變量後加入 :$HOME/bin 這個目錄

實例

  • ~/.bash_profile 文件
# .bash_profile

# 調用了 `~/.bashrc` 文件
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# 在PATH變量後加入 `:$HOME/bin` 這個目錄
PATH=$PATH:$HOME/bin

export PATH

4. ~/.bashrc 文件的做用

定義別名
調用 /etc/bashrc 文件

實例

  • ~/.bashrc ,省略了部份內容
# .bashrc

# 調用 `/etc/bashrc` 文件
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# 定義別名
alias ll='ls -AlhF --color=auto'
alias la='ls -A'
alias l='ls -CF'
alias vi='vim'

3、其餘文件

1. 註銷時生效的環境變量配置文件

~/.bash_logout

2. 歷史命令存儲文件

~/.bash_history

3. shell登陸信息文件

登陸時顯示的歡迎信息

/etc/moted

無論是本地登陸,仍是遠程登陸,均可以顯示此文件內容信息。

/etc/issue.net

遠程終端歡迎信息
要顯示此歡迎信息,由ssh的配置文件 /etc/ssh/sshd_config 決定。須要在ssh配置文件中加入"Banner /etc/issue.net" 行,並重啓ssh服務纔會生效。

/etc/issue

本地終端歡迎信息
由於服務器大都採用遠程登陸,本地終端歡迎信息設置的意義不大。
  • 本地終端歡迎信息支持轉義符
轉義符 做用
\d 顯示當前系統日期
\s 顯示操做系統名稱
\l 顯示登陸終端號
\m 顯示硬件體系結構,如i386/i686等
\n 顯示主機名
\o 顯示域名
\r 顯示內核版本
\t 顯示當前系統時間
\u 顯示當前登陸用戶的序號
相關文章
相關標籤/搜索