登录 UNIX/Linux 机器时,会执行哪些配置文件脚本?

登录 UNIX/Linux 机器时,会执行哪些配置文件脚本?

登录 UNIX/Linux 机器时,会执行哪些配置文件脚本?

通常有几个不同的配置文件脚本来设置 $PATH 变量和用户环境的其他方面。然而,在我见过的大多数用户中,他们有 CSH 的 .cshrc、bash 的 .bashrc、ksh 的 kshrc 等。

它们都是在登录时运行吗?是基于用户默认的shell吗?登录脚本机制如何工作?

例如,当使用 su 时 - 哪个脚本将运行?

答案1

这完全取决于正在启动的 shell。

每个 shell 的手册页都有一章描述 shell 在登录或注销时执行哪些脚本以及执行顺序。该章的标题可能是启动和关闭man tcsh) 或者召唤( man bash, man zsh)。

执行哪些脚本可能会根据 shell 是否为 shell 而有所不同登录外壳或不,和/或 shell 是否启动于交互模式或不。

这可以避免不必要的重复工作:例如,通过另一个程序的“转义到 shell”功能执行的 shell 不需要重新进行环境变量设置或任何其他可继承的设置,因为它可能已经从其父进程继承了它们,最终从登录 shell 中获取了它们。

同样,非交互式 shell 可以(并且应该!)跳过任何会产生输出的初始化过程,因为 shell 的输出(以及启动时提供的命令行)可能会由其他程序处理。在这种情况下,“人类友好”的输出是无用的,甚至可能对预期的处理有害。

在运行的特定情况下su -,该su命令将彻底重新初始化环境以匹配以 root 身份进行文本模式登录的状态,然后将root在“登录 shell 模式”下为用户执行默认 shell,就像它是一个真实登录。由于未-c使用任何选项,因此 shell 将是交互式的。在几乎所有情况下,该 shell 都是 POSIX 兼容的/bin/sh或等效的,以最大限度地提高第三方软件包的启动脚本兼容性。

(将 root 的 shell 更改为/bin/sh操作系统的出厂默认值或其他任何值通常都是一个坏主意。一些早期的启动脚本可能依赖于 shell 完全按预期工作。)

当作为登录 shell 启动时,POSIXsh兼容 shell 通常会首先运行系统范围的默认登录脚本/etc/profile,然后运行特定于用户的登录脚本~/.profile(如果存在)。

相关内容