`/etc/profile`、`~/.bash_profile`、`/etc/bashrc` 和 `~/.bashrc` 都是用于设置环境变量和 Shell 配置的文件。
`/etc/profile` 是系统级别的配置文件,会在每次登录系统时被执行,用于设置全局的环境变量和 Shell 配置,对所有用户都生效,该文件通常包含设置全局环境变量、PATH 等系统级别的配置信息,也可以定义全局的别名、函数等。
`~/.bash_profile` 是用户级别的 Shell 配置文件,会在用户登录时被执行,用于设置用户的个人环境变量和 Shell 配置,只对当前用户生效。在 macOS 系统中,如果 `~/.bash_profile` 不存在,会尝试执行 `~/.bash_login`,如果 `~/.bash_login` 也不存在,则会尝试执行 `~/.profile`。
`/etc/bashrc` 是系统级别的 Shell 配置文件,在每次打开新的终端窗口时都会被执行,是每个用户登录到 Bash Shell 时都会自动读取的。该文件只作用于 Bash Shell,不会影响其他 Shell,用于设置默认的 Shell 环境变量、别名、函数等。只对当前终端窗口生效。
该文件通常包含设置 Bash Shell 的默认环境变量、别名、函数、配色方案等信息。这些配置对所有登录到 Bash 的用户生效。
`~/.bashrc` 是用户级别的 Shell 配置文件,在每次打开新的终端窗口时都会被执行,用于设置用户个人偏好的 Shell 环境变量、别名、函数等。只对当前终端窗口和当前用户生效。
一般情况下,排序登陆系统时这些文件的执行顺序如下:
1. `/etc/profile` 文件会在登录系统时被执行,其中设置的全局环境变量和 Shell 配置对所有用户和所有 Shell 会话生效。
2.如果登录的是 Bash Shell,接下来会执行用户的 `~/.bash_profile` 文件。如果该文件不存在,则会执行用户的 `~/.bash_login` 文件,如果该文件也不存在,则会执行用户的 `~/.profile` 文件。在执行这些文件时会先执行 `/etc/bashrc` 文件。
3.`/etc/bashrc` 文件会在每次打开新的终端窗口时被执行,其中设置的默认 Shell 环境变量、别名、函数等对所有用户在所有 Shell 会话中生效。
4.`~/.bashrc` 文件会在每次打开新的终端窗口时被执行,其中设置的用户个人偏好的 Shell 环境变量、别名、函数等只对当前用户在当前的 Shell 会话中生效。
需要注意的是,上述执行顺序并不是绝对固定的,可能会因为各种配置的不同而有所不同。例如,如果用户在 `~/.bash_profile` 文件中显式地调用了 `~/.bashrc`,那么 `~/.bashrc` 就会在 `~/.bash_profile` 之前被执行。
总之,以上的系统和用户级别的配置文件都是在用户登录时或者打开新的 Terminal 窗口时被执行,它们都用于设置环境变量、别名和函数等内容,只是作用范围和优先级不同。