阅读内容

Linux的登陆脚本

[日期:2007-12-31] 来源:Linux公社  作者:Linux


看一篇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. 首先要分清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 什么的)。

4 .bashrc确实是为non-login 交互式shell准备的。login shell并不直接读取,但是在.bahs_profile中会执行。 

5 .对于login shell改bash_profile当然也可以。所以是修改.bash_profile还是.bashrc,要看具体的情况。 

6 .至于新建用户的问题,看看/etc/skel。

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




相关资讯       Linux脚本 
本文评论       全部评论
发表评论
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款


点评: 字数
姓名:

L
I
N
U
X


GOOGLE搜索
Google