登录shell_非登录shell
//
.bash_profile .bashrc profile 文件的作用的执行顺序
http://blog.csdn.net/robertaqi/archive/2010/04/04/5449763.aspx
登陆shell与交互式非登陆shell的区别
1.登录shell
所谓登录shell,指的是当用户登录系统时所取的那个 shell。登录shell属于交互式shell。
登录shell将查找4个不同的启动文件来处理其中的命令。 bash shell处理文件的顺序如下:
1: /etc/profile
2:/etc/profile.d等待配置文件
3: $HOME/.bash_profile
4: $HOME/.bash_login
5 $HOME/.profile
/etc /profile是bash shell在系统上的主默认启动文 件,系统上 每一个用户在登陆时都将执行此文件。
通过设置这个文件,
超级用户可以为全系统内的所有bash用户建立默认特征。不同 Linux版本在此文件放置的命令不尽相同,
在redflag中,该文件设置了几个重要的变量,
如:PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC,详情可以查看具体的文件。
其余3个文件具备相同的功能——提供特定于用户的启动文件。大多 数Linux版本只使用其中之一。如:RedFlag使用.bash_profile ubuntu使用.profile .
shell依次查找~/.bash_profile、
~/.bash_login、
~/.profile(~是用户主目录的速记符),
并执行它找到的首个文件中的命令。
可以将命令放置在这些文件中以覆盖掉/etc/profile文件中的默认设置。
也就是后面的文件可以覆盖或者修改前面的设置 。
2. 交互式非登录shell
如果启动了一个bash shell而没有等录系统(如在CLI提示符中键入bash),
则启动了一个交互式非登录shell.
而登录shell的初始化文件(比如.bash_profile)通常会运行这个文件。这样,登录shell和非登录shell都可以使用.bashrc中的命令。
如以X Window环境登录Linux时,在X环境所起动的终端,那些shell都是非登录shell.
在交互式非登录shell中并不执行前面提到的初始化文件中的命令。然而,交互式非登录shell从登录shell继承了由这些初始化文件设置的 shell变量。
(1) $HOME/.bashrc
交互式非登录shell执行~/.bashrc文件中的命令.在每次执行shell脚本时,都会重新读取这个文件,所以是最完整的。
但是万事都不是一样的,debain系列的是不同的,如ubuntu
/etc/profile–>/etc/environment–>$HOME/.profile
要配置java等变量时,都/etc/environment中
bash again shell的启动文件
http://blog.csdn.net/chehlcy/archive/2010/03/03/5339739.aspx
1.登录设立shell
/etc/profile:shell 首先执行/etc/profile中的命令,超级用户可以为整个系统的用户建立默认配置
~/.bash_profile,~/.bash_login,~/.profile:然后社shell执行这三个文件中找到的第一个,可以在该文件中为具体用户建立配置。
~/.bash_logout:退出时执行
2.交互式非登录shell:该类社shell继承登录shell的所有配置并执行以下文件
/etc/bashrc:由~/.bashrc调用,可以在此建立全系统配置。
~/.bashrc:然后运行该文件,可以在此为具体shell建立配置。.bash_profile通常也会调用该文件
3.非交互式shell(运行shell脚本的shell)
不执行初始化文件,从登录shell处继承配置。
可以在/etc/profile或者 ~/bash_profile中用ulimit -n 8192类似方法改变进程能打开的最大文件数
关于登录linux时,/etc/profile、~/.bash_profile等几个文件的执行过程
http://blog.csdn.net/lemon_fantasy/archive/2008/10/07/3023075.aspx
在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在 ~/.bash_profile文件中一般会有下面的代码:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。
执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
以下内容来自《Shell 設計入門》
<!–[if !supportLists]–>
/etc/profile 由 root 所控管, 用來設定適合全體使用者的shell環境
<!–[if !supportLists]–> 若使用者自己覺得 /etc/profile 的設定, 並不合意, 可以修改自家目錄中的.bash_profile <!–[endif]–>
<!–[if !supportLists]–> 既然有了 .bash_profile, 為何要有 .bash_login 及 .profile ?這是因為有些人可能是從 Bourne shell移轉過來的, 那麼, 只要將 Bourne shell 主要的起動檔 .profile 移到自家目錄中, 放棄使用.bash_profile 及 .bash_login 即可繼續沿用以前的設定環境 <!–[endif]–>
<!–[if !supportLists]–>bash_login 存在理由或許和 c shell 有關, 但因為 bash 和 c shell 二者語法並不完全相容, 因此, 並不建議將 c shell 的啟動檔直接移過
登录Linux时/etc/profile、~/.bash_profile等几个文件的执行过程
http://blog.csdn.net/lyw2698/archive/2007/12/11/1928747.aspx
在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在 ~/.bash_profile文件中一般会有下面的代码:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。
执 行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5)~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc /profile中的变量,他们是”父子”关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
linux环境变量文件
http://blog.csdn.net/Johnvikey/archive/2009/12/05/4941922.aspx
关于linux环境变量文件
第一内容:
etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
第二内容:
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。
/etc/profile中设定的变量(全局)的可以作用于任何用户,而
~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系.
第三内容:
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
执扫顺序总结:
/etc/profile—— ~/.bash_profile( ~/.bash_login或 ~/.profile(linux版本而定))——-~/.bashrc——/etc/bashrc—— ~/.bash_logout
——————————————————————————–
具体
在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个(根据不同的linux操作系统的不同,命名不一样),
执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。
如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。
~/.bash_profile文件中一般会有下面的代码:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。
执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5)
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承
/etc/profile中的变量,他们是”父子”关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
/etc/profile和/etc/environment等各种环境变量设置文件的用处
先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。
将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。
用户环境建立的过程中总是先执行/etc/profile然后在读取/etc/environment。为什么会有如上所叙的不同呢?
应该是先执行/etc/environment,后执行/etc/profile。
/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。
系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。
对于用户的SHELL初始化而言是先执行/etc/profile,再读取文件/etc/environment.对整个系统而言是先执行/etc/environment。这样理解正确吗?
/etc/enviroment –> /etc/profile –> $HOME/.profile –>$HOME/.env (如果存在)
/etc/profile 是所有用户的环境变量
/etc/enviroment是系统的环境变量
登陆系统时shell读取的顺序应该是
/etc/profile ->/etc/enviroment –>$HOME/.profile –>$HOME/.env
原因应该是jtw所说的用户环境和系统环境的区别了
如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值那应该是以用户环境为准了。
Shell脚本和Shell的初始化
http://hi.baidu.com/��ireed/blog/item/f45b3a137b6172d8f6039e62.html
Shell脚本用source或者.来获得。
例:
假设文件ls.script在文件夹linux下,这个文件夹下还有个文件是example,
[ireed@redhat linux]$ ls
example ls.script
下面是ls.script的内容:
[ireed@redhat linux]$ cat ls.script
ls
对,也就是说ls.script的内容就一行是ls。
开始实验:
[ireed@redhat linux]$ source ls.script
example ls.script
[ireed@redhat linux]$ ls
example ls.script
[ireed@redhat linux]$ . ls.script
example ls.script
[ireed@redhat linux]$
我们看到获得ls.script与运行ls命令会得到同样的效果,都是显示linux文件夹下面的内容,如果你编辑其他的脚本文件,然后获得它,也是可以运行的。
登录Shell、非登录Shell、交互式Shell与非交互式Shell
也就是说左边有”login:”的就是登录Shell否则就是非登录Shell;交互与非交互Shell也是很好区分的.
启动登录Shell时获得/etc/profile,/etc/profile.d/*.sh及~/.bash_profile;
每次Shell启动时获得/etc/bashrc和~/.bashrc;
每次Shell退出时获得~/.bash_logout
只有登录Shell可以获得/etc/profile和~/.bash_profile;而/etc/bashrc和~/.bashrc被所有Shell获得.前两个文件用来配置环境变量,只被初始化一次,后两个习惯上用于Shell的自定义,如别名和Shell选项.
注意对称,对于环境变量,有一个通用的启动文件(/etc/profile)和一个本地的启动文件(~/.bash_profile),前者可以被系统管理员用来配置系统范围,后者被个人用户自定义自己的环境;/etc/bashrc和~/.bashrc也类似.
交互 式shell和非交互式shell、登录shell和非登录shell的区别。
首先,这是两个不同的维度来划分的,一个是是否交互式,另 一个是是否登录。
交互式shell和非交互式shell
交互式模式就是shell等待你的输入, 并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签 退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
chinaunix 论坛中关于登录shell与非登录shell、交互式shell与非交互式Shell的讨论:
Login Shell:当init3时,mingetty spawn出登录提示符的时候,你输入帐号和密码进入了,出现了shell提示符,这个过程就是登录外壳;
Interactive Shell:接下来你得到了一个像root@host />这样的提示符,你输入什么,它就解释出什么,这就是交互式外壳;你在当前Shell又fork了一个shell(bash),这个bash也是 交互式外壳。通常情况下interactive shell是login shell派生出来的。
Non Interactive Shell:你可能需要学习写一个bash script,用外部shell执行:bash script.sh,它(bash)从第一条命令执行到最后一条然后退出,不与你进行任何交互,它就是 非交互式外壳。
交互式非登录shell就是指你在Gnome图形界面中打开“终端”出来的那种窗口程序,
和登录shell 相比,它是“非登录”的,你并不需要输入用户名和密码,
和非交互式shell相比,这是“交互式”的,就像你说的那它:你输入什么,它就解释出什么
执行exit退出非登录shell状 态;
执行logout退出登录shell状态。
在登录shell里,确实只读取/etc/profile和~ /.bash_profile, ~/.bash_login, and ~/.profile按顺序最先的一个,并执行其中的命令。除非被 –noprofile选项禁止了;
在非登录shell里,确实只读取 /etc/bash.bashrc和~/.bashrc