红联Linux门户
Linux帮助

Linux的登陆脚本

发布时间:2007-12-31 00:12:46来源:红联作者:verytow
看一篇debian的学习笔记里面说,.bash_profile是bash全局设置文件,而.bashrc是当一个bash shell调用另一个bash shell时候读取的设置。我在配置debian的时候,参照网上的一个做法,将/etc/.bash_profile里面内容复制到/root/.bashrc内,并将下列反注释掉

if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi

使root帐户具有table补全的能力。

那么,我的问题就在这里,我登录linux时候,直接登录的root帐户,并没有调用其他的shell阿,那么怎么需要将这些复制到.bashrc中,并反注释掉这些,才能具有补全作用?如果我直接将.bash_profile中的这几句反注释掉,是不是root帐户也具有了补全的能力了?我安装系统时候,新建了一个用户,这个用户并不需要这一步设置,就直接具有补全作用了,这个帐户下的.bashrc有上面的内容了。这是为什么?

达人,给我解释一下把,多谢

回帖1

1. 首先要分清login shell和non-login shell, login shell是用户登录的时候启动的带身份验证的shell, /etc/passwd中可以看到,username对应的shell name,常见的是bin/bash. 当login shell启动后,会读入两个文件,/etc/profile 和用户根目录下的.bash_profile(如果没有,会再执行~/.bash_login, ~/.profile).

2. shell还分交互式shell和非交互式shell, 显然login shell也是一种交互式的shell。对于non-login的交互式shell, 启动时会执行~/.bashrc,而~/.bashrc中又会去执行/etc/bashrc. 对于login shell,为了更一致一些所以会在~/.bash_profile中执行~/.bashrc,所以对.bashrc的修改能影响所有的交互式shell。

3. 新添加一个用户时,会添加一个记录到/etc/passwd,创建用户的home目录,将/etc/skel目录下的内容,拷贝到home目录下,skel中包含了用户home目录的基本文件和目录结构,包括.bashrc.(当然这些都是可以用户自定义的,如useradd -k -m 什么的)。

回帖2:

所以
1 .bashrc确实是为non-login 交互式shell准备的。login shell并不直接读取,但是在.bahs_profile中会执行。
2 对于login shell改bash_profile当然也可以。所以是修改.bash_profile还是.bashrc,要看具体的情况。
3 至于新建用户的问题,看看/etc/skel。

当然最有效的就是把.bash_profile改了,登录看看,往/etc/skel里添加几个文件,改改.bashrc,再创建一个新用户看看。鉴于linux的多样性,实践+理解才是王道。
文章评论

共有 1 条评论

  1. guocuily 于 2009-11-30 18:23:10发表:

    辛苦