一、区别:
1、/etc/profile:
此文件为系统的每位用户设置环境信息,当用户第一次登陆时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置。
2、/etc/bashrc:
为每一个运行bashshell的用户执行此文件.当bashshell被打开时,该文件被读取。
3、~/.bash_profile:
每位用户都可使用该文件输入专用于自己使用的shell信息,当用户登入时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
4、~/.bashrc
该文件包含专用于你的bashshell的bash信息,当登陆时以及每次打开新的shell时,该文件被读取.
5、~/.profile
在Debian中使用.profile文件代替.bash_profile文件.profile(由BourneShell和KornShell使用)和.login(由CShell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。在Debian中使用.profile文件代替.bash_profile文件。
6、~/.bash_logout
当每次退出系统(退出bashshell)时,执行该文件.。
二、文件作用的描述:
/etc/profile
此文件为每位用户的环境设置信息,当用户第一次登录时,该文件被执行。从/etc/profile.d文件目录中搜集shell的配置。
所以假如你有对/etc/profile有更改的话必须得重启你的更改才能生效,此更改对每位用户都生效。
/etc/bashrc
为每一个运行bashshell的用户执行此文件.当bashshell被打开时,该文件被读取,每次用户打开一个终端时,即执行此文件
英语描述为:
假如你想对所有的使用bash的用户更改某个配置并在之后打开的bash都生效的话可以更改这个文件,更改这个文件不用重启,重新打开一个bash即可生效。
~/.bash_profile
每位用户都可使用该文件输入专用于自己使用的shell信息,当用户登入时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
此文件类似于/etc/profile,也是须要须要重启才能生效,/etc/profile对所有用户生效,~/.bash_profile只对当前用户生效。
~/.profile
Linux的Shell种类诸多,常见的有:
BourneShell(/usr/bin/sh或/bin/sh)、
BourneAgainShell(/bin/bash)、
CShell(/usr/bin/csh)、
KShell(/usr/bin/ksh)、
ShellforRoot(/sbin/sh),等等。
不同的Shell语言的句型有所不同,所以不能交换使用。每种Shell都有其特色之处linux bashrc,基本上,把握其中任何一种就足够了。在本文中,我们关注的重点是Bash,也就是BourneAgainShell,因为易用和免费,Bash在日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认的Shell。
在通常情况下,人们并不分辨BourneShell和BourneAgainShell,所以,在下边的文字中,我们可以见到#!/bin/sh,它同样也可以改为#!/bin/bash。
因为这层缘由在Debian中使用.profile文件代替.bash_profile文件以兼容不同的shell
.profile(由BourneShell和KornShell使用)和.login(由CShell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。
~/.bashrc
该文件包含专用于你的bashshell的bash信息,当登陆时以及每次打开新的shell时,该文件被读取.(每位用户都有一个.bashrc文件,在用户目录下)
此文件类似于/etc/bashrc,不须要重启生效,重新打开一个bash即可生效,/etc/bashrc对所有用户新打开的bash都生效,但~/.bashrc只对当前用户新打开的bash生效。
~/.bash_logout
当每次退出系统(退出bashshell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能承继/etc/profile中的变量,她们是”父子”关系.
~/.bash_profile是交互式、login形式步入bash运行的;
~/.bashrc是交互式non-login形式步入bash运行的;
一般两者设置大致相同,所以一般后者会调用前者。
设置生效:可以重启生效,也可以使用命令:source
上面这三个文件是bashshell的用户环境配置文件,坐落用户的主目录下。其中.bash_profile是最重要的一个配置文件,它在用户每次登入系统时被读取,上面的所有命令就会被bash执行。
.bashrc文件会在bashshell调用另一个bashshell时读取,也就是在shell中再键入bash命令启动一个新shell时都会去读该文件。这样可有效分离登陆和子shell所需的环境。但通常来说就会在.bash_profile里调用.bashrc脚本便于统一配置用户环境。
.bash_logout在退出shell时被读取。所以我们可把一些清除工作的命令放在这文件中。
在/etc目录的bash.bashrc和profile是系统级(全局)的配置文件,当在用房主目录下找不到.bash_profile和.bashrc时,才会读取这两个文件。.bash_history是bashshell的历史记录文件,上面记录了你在bashshell中输入的所有命令。可通过HISSIZE环境变量设置在历史记录文件里保存记录的条数。aliasl=‘ls-l’是设置别称的句子,把它置于这种配置文档中就可使我们能用简单的’l’命令linux学习视频,取代’ls-l’命令。
当我们更改了这种配置件后,可用source.bash_profile命令使它更改内容马上生效。
三、文件执行的次序
关于登陆linux时,/etc/profile、~/.bash_profile等几个文件的执行过程。
如图所示:
其中/.bash_profile、/.bash_login、/.profile三个文件中常常系统中常常只存在一个,在不同的发行版中不同,如CentOS和RedHat中?/.bash_profile,而Debian和Ubunto等系列中常常是~/.profile
在登陆Linux时要执行文件的过程如下:
①在刚登陆Linux时,
首先启动/etc/profile文件,
之后再启动用户目录下的~/.bash_profile、~/.bash_login或~/.profile文件中
的其中一个,执行的次序为:~/.bash_profile、~/.bash_login、~/.profile
以上两个文件会在用户登入时执行
②下面开始执行用户的bash设置
假如~/.bash_profile文件存在的话,通常会以这样的形式执行用户的~/.bashrc文件。
在~/.bash_profile文件中通常会有下边的代码:
同样~/.bashrc中,通常都会在文件的后面有以下代码,来执行/etc/bashrc
if [ -f /etc/bashrc ] ; then
. /etc/bashrc
fi
所以,~/.bashrc会调用/etc/bashrc文件。最后,在退出shell时,就会执行~/.bash_logout文件。
**执行次序为
/etc/profile
~/.bash_profile | ~/.bash_login | ~/.profile
~/.bashrc
/etc/bashrc
~/.bash_logout
为了验证,我做了个实验,在/etc/profile,/etc/bashrc,/.bashrc和/.bash_profile文件的最后追加同一个变量分宫词予不同的值,实验结果表明变量最后的值为~/.bash_profile里的值。(4个文件都没有更改其他设置,都是安装系统后的默认值。)
再有就是4个文件都追加一个值到同一个文件,开机后查看该文件内容的次序为:
/etc/profile
~/.bash_profile
~/.bashrc
/etc/bashrc
作用域
关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile:此文件为系统的每位用户设置环境信息,当用户第一次登陆时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc:为每一个运行bashshell的用户执行此文件.当bashshell被打开时,该文件被读取。
(3)~/.bash_profile:每位用户都可使用该文件输入专用于自己使用的shell信息,当用户登入时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc:该文件包含专用于你的bashshell的bash信息,当登陆时以及每次打开新的shell时,该该文件被读取。
(5)~/.bash_logout:当每次退出系统(退出bashshell)时,执行该文件.另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能承继/etc/profile中的变量,她们是”父子”关系。
(6)~/.bash_profile是交互式、login形式步入bash运行的~/.bashrc是交互式non-login形式步入bash运行的一般两者设置大致相同,所以一般后者会调用前者。
其他
下边是几个反例:
图形模式登陆时,次序读取:/etc/profile和~/.profile图形模式登陆后,打开终端时,次序读取:/etc/bash.bashrc和~/.bashrc文本模式登陆时,次序读取:/etc/bash.bashrc,/etc/profile和~/.bash_profile从其它用户su到该用户,则分两种情况:
(1)假如带-l参数(或-参数linux bashrc,–login参数),如:su-lusername,则bash是lonin的,它将次序读取以下配置文件:/etc/bash.bashrc,/etc/profile和~/.bash_profile。
(2)假如没有带-l参数,则bash是non-login的,它将次序读取:/etc/bash.bashrc和~/.bashrc注销时,或退出su登陆的用户LINUX社区,倘若是longin形式,这么bash会读取:~/.bash_logout执行自定义的shell文件时,若使用“bash-la.sh”的形式,则bash会读取行:/etc/profile和~/.bash_profile,若使用其它方法,如:basha.sh,./a.sh,sha.sh(这个不属于bashshell),则不会读取里面的任何文件。
来源
文章评论