天天看點

Linux profile1,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout淺析 Part1

profile,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout淺析 Part 1

by:授客 QQ:1033553122

(CentOS-6.0-x86_64-bin-DVD1.iso為例)

1、  普通使用者

[root@localhost home]# useradd test

[root@localhost home]# passwd test

...

passwd: all authentication tokens updated successfully.

[test@localhost ~]$ cd /home/test

[test@localhost ~]$ ll -a

total 28

...

-rw-r--r--. 1 test test   18

May 30  2011

.bash_logout

-rw-r--r--. 1 test test  176 May 30  2011

.bash_profile

-rw-r--r--. 1 test test  124 May 30  2011

.bashrc

可見使用者主目錄/home/username/目錄下包含了以上3個檔案(及其它本文不關注的檔案)

#檢視.bash_profile檔案

[root@localhost test]# cat .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

代碼淺析:

-f ~/.bashrc:如果/home/test/.bashrc為普通檔案,那麼傳回真,即if

[ true ],

if [ -f ~/.bashrc ]:then

. ~/.bashrc 

#等同source

~/.bashrc

fi 

#結束if語句

如果-f

~/.bashrc傳回真,那麼執行/home/test/.bashrc腳本

#使用者特定的環境和啟動程式

#檢視.bashrc檔案

[root@localhost test]# cat .bashrc

# .bashrc

# Source global definitions

if [ -f /etc/bashrc ]; then

. /etc/bashrc

# User specific aliases and functions

/etc/bashrc傳回真,那麼執行/etc/.bashrc腳本

# User specific aliases and functions #使用者特定的别名和函數

#檢視.bash_logout檔案

[root@localhost test]# cat .bash_logout

# ~/.bash_logout

2、 

超級使用者

[root@localhost test]# cd /root/

[root@localhost ~]# ll -a

total 172

-rw-r--r--. 

1 root root   

18 May 20 

2009 .bash_logout

1 root root   311

Sep  3 22:42

1 root root   176

Sep 23  2004

如上,和普通使用者一樣,包含了以上3個檔案(及本文不關注的其它檔案)

[root@localhost ~]# cat .bash_profile

[root@localhost ~]# cat .bashrc

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

[root@localhost ~]# cat .bash_logout

對比root和普通使用者,我們可以得出:

1. 

linux使用者主目錄(超級使用者主目錄:~為/root

普通使用者主目錄:~為/home/username)下包含以3個檔案

~/.bash_profile

~/.bash_logout

預設情況下,這些檔案的設定,僅對單一使用者起作用

2. 

~/.bash_logout檔案預設啥都不做

3. 

~/.bash_profile:該檔案用于為單個使用者自身設定特定的局部環境(比如path環境變量)和啟動程式,某些情況下,還用于執行~/.bashrc檔案

4. 

~./bashrc:該檔案用于為單個運作bash

shell的使用者自身設定特定的資源(比如指令别名和函數,本地變量),某些情況下,還用于執行/etc/bashrc檔案(注:rc的含義是resource

configuration,該檔案是針對bash

shell的,這個角度來說它的作用域也是局部的,因為其它shell有其它shell自己的rc檔案)

5. 

當使用者登入時,該檔案僅僅執行一次!預設情況下,他設定一些環境變量,執行使用者的.bashrc檔案。

3、 

/etc/profile && /etc/bashrc

#etc目錄下的配置檔案

[root@localhost ~]# cd /etc/

[root@localhost etc]# ll -a | grep profile

1 root root   1459

Nov 12  2010

profile

drwxr-xr-x. 

2 root root   4096

Sep  4 14:06

profile.d

[root@localhost etc]# ll -a | grep rc

1 root root   2620

bashrc

1 root root   1596

Jan 12  2010

csh.cshrc

lrwxrwxrwx. 

1 root root    

11 Sep  3

00:46 init.d -> rc.d/init.d

1 root root    715

kshrc

1 root root     

7 Sep  3

00:46 rc -> rc.d/rc

10 Sep  3

00:46 rc0.d -> rc.d/rc0.d

00:46 rc1.d -> rc.d/rc1.d

00:46 rc2.d -> rc.d/rc2.d

00:46 rc3.d -> rc.d/rc3.d

00:46 rc4.d -> rc.d/rc4.d

00:46 rc5.d -> rc.d/rc5.d

00:46 rc6.d -> rc.d/rc6.d

drwxr-xr-x. 10 root root   4096

Sep  3 00:46

rc.d

13 Sep  3

00:46 rc.local -> rc.d/rc.local

15 Sep  3

00:46 rc.sysinit -> rc.d/rc.sysinit

#檢視/etc/profile檔案

[root@localhost etc]# cat profile

# /etc/profile

# System wide environment and startup programs, for login

setup

# Functions and aliases go in /etc/bashrc

# It's NOT good idea to change this file unless you know what

you

# are doing. Much better way is to create custom.sh shell script

in

# /etc/profile.d/ to make custom changes to environment. This

will

# prevent need for merging in future updates.

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE

HISTCONTROL

for i in /etc/profile.d/*.sh ; do

if [ -r "$i" ]; then

if [ "$PS1" ]; then

. $i

else

. $i >/dev/null 2>&1

done

unset i

unset pathmunge

說明:

#為登入而設定的系統全局環境和啟動程式,

#函數和别名放在/etc/bashrc

[root@localhost etc]# cat bashrc

# /etc/bashrc

# System wide functions and aliases

# Environment stuff goes in /etc/profile

# By default, we want this to get set.

# Even for non-interactive, non-login shells.

#

系統全局函數和别名

環境的配置放在/etc/profile

綜上,我們可以得出

linux /etc主目錄下包含以下2個檔案,1個目錄(及其它本文不關注的檔案)

/etc/profile

/etc/bashrc

/etc/pfofile.d/目錄

預設情況下,這些檔案的設定,僅對系統中所有使用者起作用,即作用域為全局

/etc/profile:系統為所有使用者設定全局預設環境(比如path環境變量)和啟動程式的配置檔案,并從/etc/profile.d目錄的配置檔案中搜集shell的設定

/bashrc:系統為所有運作bash

shell的使用者設定全局資源

(比如系統全局函數,變量和指令别名等)的配置檔案(注意:該檔案是針對bash

4、 

檔案執行順序

/etc目錄:/etc/profile,/etc/bashrc

~主目錄:~/.bash_pfoile,~/.bash_login,~/.profile,~/.bashrc,~/.bash_logout

注:不一定每個linux作業系統的~主目錄中都存在上述列出的所有檔案

這些檔案具體的執行順序是???執行順序和bash

shell的類型有關,是以先來了解下bash

shell的類型

login

shell

以下情形中的取得的bash,稱為login

shell:

字元界面下,在終端tty1~tty6,通過輸入帳号,密碼登入,取得的bash

通過ssh,xshell,putty等工具連接配接系統,取得的bash

字元界面下,通過指令su

-、su

–l、su

--login等取得的bash

interactive

以下情形中的取得的bash,稱為interactive

可視桌面下,通過建立一個終端(Applications->System

Tools->Terminal)取得的bash

字元界面下,通過指令bash

取得的bash

字元界面下,通過指令su、su

username取得的bash(注意:此處su不帶

選項)

為何要分login

shell和interactive

shell?

最初的設計是這樣考慮的,如果從字元終端登入或者遠端登入,那麼login

Shell是該使用者的所有其它程序的父程序,也是其它子Shell的父程序,是以環境變量在login

Shell的啟動腳本裡設定一次就可以作用于其它非login

Shell裡,但是login

Shell的本地變量、函數、别名等設定沒有辦法作用于子Shell,需要每次啟動非login

Shell時設定一遍,是以就需要有非login

Shell的啟動腳本

非login

shell

有它特定的用途,比如一個用Linux搭建一個ftp伺服器,并且建立了很多的ftp使用者,那麼就可以将這些使用者的預設shell改為nologin,這樣一來,這些雖然是Linux上的使用者可是卻無法登入進Linux主機,隻能登入ftp伺服器了

怎麼區分login

shell?

[root@localhost ~]# su -

[root@localhost ~]# echo $0

-bash

[root@localhost ~]# bash

bash

說明:echo

$0 –>輸出結果:-bash

表明此時的bash為login

shell,bash

則表明此時的bash為interactive

login shell下的檔案執行順序

A.  

當bash以login

shell的方式啟動時:

1、如果存在/etc/profile檔案,它先讀取檔案/etc/profile,并執行該檔案中的指令

2、然後查找~/.bash_profile,

~/.bash_login,

~/.profile,

按~/.bash_profile

-> ~/.bash_login -> ~/.profile的順序,從第一個存在且可讀的檔案中讀取指令并執行(注意:僅在3個檔案按順序讀取一個).

注意:

通過--noprofile選項可強制bash不讀取上面的任意檔案

作者:授客

QQ:1033553122

全國軟體測試QQ交流群:7156436

Git位址:https://gitee.com/ishouke

友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!

作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額随意,您的支援将是我繼續創作的源動力,打賞後如有任何疑問,請聯系我!!!

           微信打賞                       

支付寶打賞                  全國軟體測試交流QQ群  

Linux profile1,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout淺析 Part1
Linux profile1,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout淺析 Part1
Linux profile1,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout淺析 Part1

繼續閱讀