什么是登录和非登录 shell?

什么是登录和非登录 shell?

据说非登录shell的设置进入.bashrc文件和登录shell的设置进入.profile文件。

登录和非登录 shell 的真正含义是什么?

请尽量不要使用技术术语进行解释。

答案1

简单的说:

  • 如果您打开一个 shell 或终端(或切换到一个),并且它在给您提示之前要求您登录(用户名?密码?),那么它是一个登录 shell。
  • 如果没有的话(比如gnome 终端),并允许您立即使用它,它是一个非登录 shell。

如果你是 Ubuntu 桌面的普通用户,仅有的登录 shell 是...你的桌面(你输入密码才能进入,对吧 ;)?好吧,从技术上讲,它是一个启动 GUI 的登录 shell,但这有点专业了。是的,它会读取.profile

你(普通用户)唯一可能看到登录 shell 的情况是看起来就像登录 shell 一样,如果您的桌面遇到一些问题,您可以使用++Ctrl快捷方式切换到虚拟终端。AltF1


拥有登录 shell 的其他一般情况包括:

  • 通过远程访问您的计算机ssh(或使用本地连接ssh localhost
  • bash -l使用(或sh -l)模拟初始登录 shell
  • 使用以下命令模拟初始root登录 shell:sudo -i
    • 或为另一个非用户sudo -u username -iroot
  • 以另一个非root用户的身份进行身份验证(并且su - username他们的密码)
  • 使用sudo login命令切换用户

答案2

我不认为正确的答案可以不用“技术术语”。由于这个问题是 Google 中第一个针对“什么是登录 shell”查询弹出的问题,因此我在下面提供了一个更正确的答案:

登录 shell 只是一个被告知要成为登录 shell 的 shell。它确实不是指的是登录后弹出的 shell,尽管通常登录应用程序会告诉 shell 它启动的是登录 shell。有以下方法可以告诉 shell 它应该是登录 shell:

  1. -l运行带有或参数的 shell --login,假设它知道它(我不知道任何不知道 的 shell -l,但--login只有少数 shell 支持)。
  2. 运行 shell 时argv[0]设置为-{some_string}(即在通常或其他字符串前面加上 HYPHEN-MINUS argv[0])。ssh 和 su 所做的就是:su 只运行可执行文件-suas argv[0](大家认为 helloargv[0]与当前运行的可执行文件名称有关),ssh 在-zsh用户将其设置/bin/zsh为 shell 时运行 zsh。

shell 的登录性与任何人要求您输入密码或执行其他身份验证程序完全无关。某些程序(如 ssh 或 login)(或某些终端仿真器,如 urxvt)使用以连字符开头的 shell 作为登录程序运行argv[0]。某些程序(如 su 或 sudo(或 zsh:请参阅-中的 PRECOMMAND MODIFIERS 部分中描述的预命令修饰符man zshmisc))默认情况下不执行此操作,但可以告知。有些程序只有使用其参数(即bash -l)告诉 shell 为登录程序的唯一选项:带有命令参数的 ssh(明确告诉 ssh 在远程端运行什么)。

一般来说,最好首先查阅用于调用 shell 的程序的文档来确定 shell 是否是登录 shell,然后再执行一些测试来确定应用程序是否将启动登录 shell(例如,通过添加echo.profile)。

相关内容