尝试理解 .bashrc、.profile 等文件

尝试理解 .bashrc、.profile 等文件

我试图理解文件 .bashrc、.profile、.bash_profile 等之间的关系...以及登录/非登录 shell、交互式/非交互式 shell 等的含义...

我找到的每一条信息都太抽象了,而我想要的是具体实用的解释。

所以我的问题是(与Ubuntu等Linux系统相关)

  1. 系统启动并登录(显示图形桌面)时执行哪些文件?

  2. 打开终端模拟器时会执行哪些文件?

  3. 当我登录文本控制台时执行哪些文件(按 Ctrl-Alt-Fn 后)

  4. 在哪些其他事件中会执行这些文件?

  5. 如何启动交互式登录 shell?

  6. 如何启动非交互式登录 shell?

  7. 如何启动交互式非登录 shell?

  8. 如何启动非交互式非登录 shell?

请随意回答一些问题...谢谢...

答案1

首先,看waltinator的评论。但是,要回答您的一些问题(概念上比技术准确性更重要)..

  1. 当您登录 GUI 时,不会加载任何正常的 shell 文件。当您从 GUI 登录到 TUI(纯文本)shell 或终端程序时,它们会被加载。在 ruth 中,GUI 本身就是一个 shell,很像 bash,只不过它为您提供了图形界面而不是文本界面。它还有自己的配置文件和启动文件。

  2. 加载的确切文件取决于 shell。请参阅您正在使用的 shell 的文档。

  3. 往上看。虚拟终端和 GUI 中的终端程序都采用相同的路线:它们会导致您登录到定义为主登录 shell 的 shell(在 /etc/passwd 中为您的用户名定义/配置)。

几乎所有问题都一样,真的。

shell 的工作是执行其他程序。它们可以是 shell 的内部程序(内部命令)、shell 的指令文件(shell 脚本,很像 DOS 批处理文件)或系统中安装的其他应用程序/程序(外部程序)。它还可以以多种不同的模式运行;交互模式意味着它将显示命令提示符并等待您输入命令。非交互模式意味着当 shell 启动时,它会得到一个要执行的 shell 脚本,它会从脚本中获取命令,而不是您键入命令。

另一件需要理解的重要事情是,在 un*x 系统上,shell 的编程几乎就像您从地球的另一端通过互联网向它发送命令一样。即使您坐在计算机前,它仍然将您的登录会话视为通过网络进行的。这就是为什么无论是终端、控制台、网络、ssh/telnet、TUI/GUI、串行还是您可以想象的任何类型的登录,它的行为总是相同的。也许有一天我们甚至可以进行心灵感应登录,但 shell 仍然会像正常登录一样运行,并且仍然像现在一样工作。

关于“非登录”shell 的最后一点;它们也是同一件事。就您而言,唯一的区别是您可以开始一个已登录的 shell,无需再次登录(输入您的用户名和密码)。

当然,这一切的许多技术细节都略有不同,并且具有明显和微妙的副作用和含义。但这确实是您需要在网络上搜索资源和网站的地方,这些资源和网站更深入地详细介绍了 shell 的工作原理。

相关内容