一、Bash是什么?

维基百科定义:

bash是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell—这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同Version 7 Unix一起发布。bash则在1987年由布莱恩·福克斯创造。在1990年,Chet Ramey成为了主要的维护者。

bash属于shell脚本的一种类型,它是大多数GNU变体(包括GNU/Linux)系统以及Mac OS X v10.4默认的shell,下边咱们就一起了解一下bash。

二、在介绍shell配置文件之前,先跟大家介绍一下什么是登陆shell和非登陆shell,即login shell 与 non-login shell。

login shell:

取得bash 时需要完整的登入流程,也就是说,需要通过输入账号和密码登陆操作系统,这时候获取的shell环境为login shell。咱们通过tty1 ~ tty6 登陆,输入用户的账号与密码,获得的shell就是login shell。

no-login shell:

取得bash接口的方法不需要重复登陆的举动。比如使用x Window登录linux,再使用图形化界面开启,用鼠标开启一个终端,这时候终端接口无需再重复输入账号和密码,这样的bash就叫做no-login shell。你在原来的bash 环境下再次下达 bash 这个命令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。

三、

交互式shell和非交互式shell(interactive shell and non-interactive shell)

交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。

shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。

四、bash的配置文件:

profile类:交互式登录用户

/etc/profile:全局生效,对所有用户有效;(login shell 才会读)

/etc/profile.d/*.sh:全局生效,对所有用户有效;/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置;

~/.bash_profile:是交互式,login方式,进入bash运行的,

补充说明:bash 在读完了整体环境配置的 /etc/profile 并藉此呼叫其他配置文件后,接下来则是会读取使用者的个人配置文件。 在 login shell 的 bash 环境中,所读取的个人偏好配置文件其实主要有三个,依序分别是:

  1. ~/.bash_profile

  2. ~/.bash_login

  3. ~/.profile

~/.bash_profile:仅对某用户自己有效;每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。(login shell 才会读)

功能:

1).设定环境变量;

2).运行命令或者脚本;

bashrc类:非交互式登录用户

/etc/bashrc:全局有效,为每一个运行bash shell的用户执行此文件,当bash shell被打开的时候,该文件被读取;

~/.bashrc:仅对某用户自己有效,该文件包含专用于你自己的bash shell的bash信息,当登录时以及每次打开新的shell的时候,该文件被读取;

功能:

1).设定本地变量;

2).定义命令别名;

上边这几个bash配置文件的读取顺序:

/etc/profile--~/.bash_profile--~/.bashrc--/etc/bashrc

如果这四个文件都设置变量的话,最后一个生效,因为最后一个覆盖了前边三个设置的变量。

一些其他与bash相关的配置文件:

/etc/inputrc:其实这个文件并没有被运行啦!/etc/profile 会主动的判断使用者有没有自定义输入的按键功能,如果没有的话, /etc/profile 就会决定配置『INPUTRC=/etc/inputrc』这个变量

~/.bash_logout:当每次退出系统的时候,执行该文件。

.bash_history:记录了您以前输入的命令

/etc/sysconfig/i18n:配置系统的字符集文件

我们来看看整个 login shell 的读取流程:

设置当前局部变量的时候,可以使用soure /etc/profile或者. /etc/profile让其立刻生效,重新登录就会失效

,让设置的变量永久生效,直接写到/etc/profile文件中,然后. /etc/profile加载一下即可。

以通过 $PS1 变量来设置提示符。

echo $PS1

[root@Vmware5 ~]# echo $PS1

[\u@\h \W]\$