bash shell 提供对Linux系统的交互式访问。它是作为普通程序运行的,通常是用户登录终端时启动。
用户登录时系统启动的shell(不一定是 bash shell)依赖于用户账户的配置。
/etc/passwd 文件包含一个所有系统用户账户组成的列表,以及一些关于每个用户的基本配置信息。
以下是/etc/passwd文件中的示例条目:
root:x:0:0:root:/root:/bin/bash
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
每个条目都有7个数据字段,使用冒号分割。系统使用这些字段中的数据向用户分配具体的特性。这些字段有:
- 用户名
- 用户密码(如果密码存储在其他文件中,则为占位符)
真正的密码存储于/etc/shadow中,/etc/shadow详见:https://blog.csdn.net/yaoyelinger0912/article/details/100052487 - 用户的系统用户ID编号,也称用户账户的UID
- 用户的系统组ID编号,也称用户账户的用户组ID(GID),注意和附加组区别
- 用户的全名,有些书中也说是用户账户的注释描述
- 用户的默认主目录,也称用户的家目录,启动会话时所在的位置
- 用户的默认shell程序,这就是用户登录时默认启动的shell
root用户是Linux系统的管理员,它的UID是0,使用/bin/bash作为自己的默认shell程序,意味着当root用户登录系统后,bash shell会自动启动。
Linux系统为各种非实际用户创建了大量用户账户,称为 系统账户。系统账户是一个特殊的账户,在系统中运行的服务使用它们访问系统资源,在后台模式中运行的所有服务都需要作为系统用户账户登录Linux系统。
Linux将500以下的UID保留用作系统账户。一些服务甚至需要特定的UID才能正常工作。当为普通用户创建账户时,大多数Linux系统都会从500开始分配第一个可用的UID。
所有的Linux发行版中默认使用的shell都是GNU bash shell。
默认情况下,当bash shell启动时,它将自动执行位于用户主目录的.bashrc文件中的命令。许多Linux发行版该文件会加载一个包含系统所有命令的设置的通用文件。该通用文件通常加载到/etc/bashrc文件。该文件经常用于设置各种应用程序中使用的环境变量。
.bashrc文件内部会调用 /etc/bashrc文件
[root@hadoop ~]# cat .bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
问题:当bash shell启动时,为什么能自动执行位于用户主目录的.bashrc文件?