shell、bash、terminal和kernel之间的关系 (2)

另外,一些程序会根据/etc/shells这个文件来判断一个用户是否是有效用户,例如有些FTP服务会阻止那些shell不在/etc/shells里的用户登陆。这样,那些我们在/etc/passwd中设置了登录shell不在那个列表中的用户就不能使用这台主机上的ftp服务了

这样,我们就知道什么是shell和bash了吧

什么是terminal

我们在Linux下使用的terminal,实际上是一个“终端模拟软件”,它模拟了一台真正的终端,也就是几十年前时候的终端:只包括键盘+显示器,甚至是再之前时的电传打字机。现在,我们用的终端软件指的是可以运行shell命令的软件。它一般是捆绑在桌面环境上的,例如gnome terminal等等,我们自己也可以安装另外的terminal.它就是类似于输入法的一个应用程序。

什么是.bashrc

.bashrc位于/home/<用户名>的目录下

来源:https://linux.cn/article-9298-1.html

bash 是一个能解释你输入进终端程序的东西,并且基于你的输入来运行命令。它在一定程度上支持使用脚本来定制功能,这时候就要用到 .bashrc 了。

为了加载你的配置,bash 在每次启动时都会加载 .bashrc 文件的内容。每个用户的 home 目录都有这个 shell 脚本。它用来存储并加载你的终端配置和环境变量。

进入.bashrc

vim ~/.bashrc

打开之后可以看到有许多项。

我们可以在这里追加alias来为命令取别名,从而简化在terminal中的输入。例如,我们可以将常用的ssh连接命令取别名,这样就不需要每次都输入一长串了。

bash的运行模式

来源:

Bash有几种不同的运行模式,login shell与non-login shell,interactive shell与non-interactive shell(比如执行shell脚本)。这两种分类方法是交叉的,也就是说一个login shell可能是一个interactive shell,也可能是个non-interactive shell。

在下列情况下,我们可以获得一个login shell:

登录系统时获得的顶层shell,无论是通过本地终端登录,还是通过网络ssh登录。这种情况下获得的login shell是一个交互式shell。

在终端下使用--login选项调用bash,可以获得一个交互式login shell。

在脚本中使用--login选项调用bash(比如在shell脚本第一行做如下指定:#!/bin/bash --login),此时得到一个非交互式的login shell。

使用"su -"切换到指定用户时,获得此用户的login shell。如果不使用"-",则获得non-login shell。

login shell与non-login shell的主要区别在于它们启动时会读取不同的配置文件,从而导致环境不一样。login shell启动时首先读取/etc/profile全局配置,然后依次查找/.bash_profile、/.bash_login、~/.profile三个配置文件,并且读取第一个找到的并且可读的文件。login shell退出时读取并执行~/.bash_logout中的命令。
交互式的non-login shell启动时读取~/.bashrc资源文件。非交互式的non-login shell不读取上述所有配置文件,而是查找环境变量BASH_ENV,读取并执行BASH_ENV指向的文件中的命令。

通常我们要定制一些配置时,将配置写在/.bashrc中,然后在/.bash_profile中读取~/.bashrc,这样可以保证login shell和交互式non-login shell得到相同的配置。至于/etc/profile就不要轻易去改啦,毕竟会影响系统全局的配置。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwpgj.html