交互式模式就是shell等待你的输入,并且执行你提交的命令。非交互式模式,在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。
当第一个用户登录时(login交互式shell),执行/etc/profile和~/.bash_profile;当运行bash shell时(nologin交互式shell),执行~/.bashrc。/etc/profile调用/etc/profile.d目录下的配置文件;~/.bash_profile会调用~/.bashrc;~/.bashrc会调用/etc/bashrc。
~/.bash_logout登出时执行一些清理任务
在当前shell定义的alias只在当前shell生效
所以如果要全局声明别名或者变量的话:变量写在/etc/profile.d/目录下,别名写在/etc/bashrc下
【.bash_profile 与 .bashrc 的区别】
.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.【login shell 与 non-login shell 的区别】1、当你直接在机器login界面登陆、使用ssh登陆或者su切换用户登陆时,.bash_profile 会被调用来初始化shell环境Note:.bash_profile文件默认调用.bashrc文件.bash_profile中有如下内容if [ -f ~/.bashrc ]; then . ~/.bashrcfi 2、当你不登陆系统而使用ssh直接在远端执行命令,.bashrc 会被调用3、当你已经登陆系统后,每打开一个新的Terminal时,.bashrc 都会被再次调用。测试准备工作hclient2主机hadoop用户家目录下执行[hadoop@hclient2 ~]$ echo "invoke hclient2:~/.bashrc">>.bashrc[hadoop@hclient2 ~]$ echo "invoke hclient2:~/.bash_profile">>.bash_profileLogin Shell1、窗口登陆Red Hat Enterprise Linux Server release 6.3 (Santiago)Kernel 2.6.32-279.el6.x86_64 on an x86_64hclient2 login: hadoopPassword:Last login: Mon Feb 25 23:03:45 on tty1invoke hclient2:~/.bashrcinvoke hclient2:~/.bash_profile[hadoop@hclient2 ~]$2、SSH 登陆[hadoop@hserver ~]$ ssh hclient2Last login: Mon Feb 25 22:42:19 2013 from hserverinvoke hclient2:~/.bashrcinvoke hclient2:~/.bash_profile[hadoop@hclient2 ~]$3、su 登陆[root@hclient2 ~]# su - hadoopinvoke hclient2:~/.bashrcinvoke hclient2:~/.bash_profileNon-login Shell:Note: ssh ...[user@] hostname [command]If command is specified, it is executed on the remote host instead of a login shell.[hadoop@hserver ~]$ ssh hclient2 hostnameinvoke hclient2:~/.bashrchclient2【故】若要配置环境变量之类,最保险是写在 .bashrc 文件中。因为不管是登陆还是不登陆,该文件总会被调用!