网站搜索

了解 Linux 中的 Shell 初始化文件和用户配置文件


Linux 是一种多用户、分时系统,这意味着多个用户可以登录并使用一个系统。系统管理员的任务是管理不同用户如何操作系统的各个方面,包括安装/更新/删除软件、他们可以运行的程序、他们可以查看/编辑的文件等。

Linux 还允许通过两种主要方式创建或维护用户环境:使用系统范围(全局)和用户特定(个人)配置。通常,使用Linux系统的基本方法是shell,shell根据用户成功登录后在初始化期间读取的某些文件来创建环境。

建议阅读: 如何在 Linux 中设置环境变量

在本文中,我们将解释与 Linux 中本地用户管理的用户配置文件相关的 shell 初始化文件。我们将让您知道在哪里保存自定义 shell 函数、别名、变量以及启动程序。

重要:就本文而言,我们将重点关注 bash,这是一个与 sh 兼容的 shell,它是Linux 系统上最流行/最常用的 shell。

如果您使用不同的 shell(zsh、ash、fish 等)程序,请通读其文档以了解有关我们将在此处讨论的一些相关文件的更多信息。

Linux 中的 Shell 初始化

当调用 shell 时,它会读取某些初始化/启动文件,这些文件有助于为 shell 本身和系统用户设置环境;即预定义的(和定制的)函数、变量、别名等。

shell 读取的初始化文件有两类:

  • 系统范围的启动文件 - 这些文件包含适用于系统上所有用户的全局配置,通常位于/etc目录中。它们包括:/etc/profiles/etc/bashrc/etc/bash.bashrc
  • 特定于用户的启动文件 – 这些存储配置适用于系统上的单个用户,通常作为点文件位于用户主目录中。他们可以覆盖系统范围的配置。它们包括:.profiles.bash_profile.bashrc.bash_login

同样,可以通过三种可能的模式调用 shell:

1.交互式登录Shell

用户使用 /bin/login 成功登录系统并读取 /etc/passwd 文件中存储的凭据后,将调用 shell。

当 shell 作为交互式登录 shell 启动时,它会读取 /etc/profile 及其特定于用户的等效项 ~/.bash_profile

2.交互式非登录Shell

shell 是使用 shell 程序在命令行启动的,例如 $/bin/bash$/bin/zsh。它也可以通过运行 /bin/su 命令来启动。

此外,还可以使用终端程序(例如图形环境中的 konsole、terminator 或 xterm)调用交互式非登录 shell。

当 shell 在此状态下启动时,它会复制父 shell 的环境,并读取用户特定的 ~/.bashrc 文件以获取其他启动配置指令。

su
ls -la

3.非交互式Shell

当 shell 脚本运行时,会调用 shell。在此模式下,它正在处理脚本(一组 shell 或通用系统命令/函数),并且不需要用户在命令之间输入,除非另有说明。它使用从父 shell 继承的环境进行操作。

了解系统范围的 Shell 启动文件

在本节中,我们将更多地介绍存储系统上所有用户配置的 shell 启动文件,其中包括:

/etc/profile 文件 – 它存储系统范围的环境配置和用于登录设置的启动程序。您想要应用于所有系统用户环境的所有配置都应添加到此文件中。

例如,您可以在此处设置全局 PATH 环境变量。

cat /etc/profile

注意:在 RHEL/CentOS 7 等某些系统中,您会收到诸如“不建议更改此文件,除非您知道你在做什么。最好在 /etc/profile.d/ 中创建自定义 .sh shell 脚本来对您的环境进行自定义更改,因为这将避免合并的需要未来的更新”。

/etc/profile.d/ 目录 – 存储用于对环境进行自定义更改的 shell 脚本:

cd /etc/profile.d/
ls  -l 

/etc/bashrc/etc/bash.bashrc 文件 – 包含系统范围的函数和别名,包括适用于所有系统用户的其他配置。

如果您的系统有多种类型的 shell,最好将 bash 特定的配置放入此文件中。

cat /etc/bashrc

了解特定于用户的 Shell 启动文件

接下来,我们将解释更多有关用户特定 shell (bash) 启动点文件的信息,这些文件存储系统上特定用户的配置,它们位于用户的主目录中,包括:

ls -la

~/.bash_profile 文件 – 该文件存储用户特定的环境和启动程序配置。您可以在此处设置自定义 PATH 环境变量,如下图所示:

cat ~/.bash_profile

~/.bashrc 文件 – 该文件存储用户特定的别名和函数。

cat ~/.bashrc

~/.bash_login 文件 - 它包含通常仅在您登录系统时执行的特定配置。当 ~/.bash_profile 不存在时,bash 将读取该文件。

~/.profile 文件 – 在缺少 ~/.bash_profile~/.bash_login 的情况下读取该文件;它可以存储相同的配置,系统上的其他 shell 也可以访问这些配置。因为我们在这里主要讨论 bash,所以请注意其他 shell 可能不理解 bash 语法。

接下来,我们还将解释另外两个重要的用户特定文件,它们不一定是 bash 初始化文件:

~/.bash_history 文件 – bash 维护系统上用户输入的命令的历史记录。此命令列表保存在用户主目录的 ~/.bash_history 文件中。

要查看此列表,请键入:

history 
or 
history | less

~/.bash_logout 文件 – 它不用于 shell 启动,但存储注销过程的用户特定指令。当用户从交互式登录 shell 退出时读取并执行它。

一个实际的例子是在注销时清除终端窗口。这对于远程连接很重要,关闭它们后会留下一个干净的窗口:

cat bash_logout 

要获得更多见解,请查看各种 Linux 发行版上这些 shell 初始化文件的内容,并通读 bash 手册页:

目前为止就这样了!在本文中,我们解释了 Linux 中的 shell 启动/初始化文件。使用下面的评论表给我们回信。