profile、environment和bashrc的區別

Bash運行相關的配置文件,摘自man pageshell

  • /bin/bash
    The bash executable
  • /etc/profile
    The systemwide initialization file, executed for login shells
  • /etc/bash.bashrc
    The systemwide per-interactive-shell startup file
  • /etc/bash.bash.logout
    The systemwide login shell cleanup file, executed when a login shell exits
  • ~/.bash_profile
    The personal initialization file, executed for login shells
  • ~/.bashrc
    The individual per-interactive-shell startup file
  • ~/.bash_logout
    The individual login shell cleanup file, executed when a login shell exits
  • ~/.inputrc
    Individual readline initialization file

##/etc/profileubuntu

/etc/profile:此文件爲系統的每一個用戶設置環境信息,當用戶第一次登陸時,該文件被執行.並從/etc/profile.d目錄的配置文件中搜集shell的設置.bash

  • profile 使用Bourne shell語法(兼容ksh,csh)等等(zsh?)。
  • profile 中的內容是爲全部用戶登錄作初始化的。

例如ubuntu下/etc/profile的默認內容以下:ide

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

`code

前半段主要是加載/etc/bash.bashrc的內容,後半段則是加載bash的一些初始化腳本,例如bash補全設置。input

##~/.bashrc和/etc/bashrc /etc/bashrc: 爲每個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取。it

  • Debian默認沒有/etc/bashrc,可是能夠新建一個並設置alias。
  • 有一個/etc/bash.bashrc/(命名真的好不科學),它的做用是初始化交互式shell相關,默認是配置PS1變量。
  • ~/.bashrc爲每一個用戶的bash配置文件,僅針對對應的用戶有效。
  • ~/.bashrc可使用bash的專有語法(因此一些fuction定義和alias能夠在裏面設置)。

/etc/enviroment

/etc/environment是設置整個系統的環境 * 最典型的是ubuntu裏的全局path設置io

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
  • Debian之中這個文件是空的,PATH屬性在profile設置。
  • 不清楚可否兼容Bourne shell,能夠設置各類環境變量。

##執行順序 /etc/environment -> /etc/profile -> /etc/bashrc -> ~/profile -> ~/.bashrc  後面設置的會覆蓋前面的設置。zsh

  • 例如你在四個文件設置了不一樣的變量,最後生效的是~/.bashrc的那個 。
  • 位於/etc下的幾個文件我的感受實際上起到了一個默認配置的做用。

##bashrc的一點配置原則 對於/etc/bashrc來講,我的感受應該盡最小配置原則,只有肯定全部用戶都用的到的配置才寫到裏面。事實上Debian乾脆默認就沒有/etc/bashrc這個文件,每當新建一個用戶的時候,都根據從/etc/skel/的模版文件生成一份用戶的~/.bashrc和~/.profile。若是你把太多的配置都集中到/etc/bashrc中,某些特殊須要的用戶就須要在本身的文件中覆蓋這些選項,與上一種方法相比,增長了人工,得不償失。table

相關文章
相關標籤/搜索