当前位置: 首页>>技术问答>>正文


什么是登录和非登录shell?

, , , ,

问题描述

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

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

请尽量使用技术术语解释。

最佳解决办法

简单的说:

  • 如果您打开一个shell或终端(或切换到一个),它会要求您在提示之前登录(用户名?密码?),这是一个登录shell。

  • 如果它没有(如gnome-terminal),并允许你直接使用它,它是一个非登录shell。

如果您是Ubuntu Desktop的普通用户,那么唯一的登录shell就是……您的桌面(您输入的密码是正确的;);好吧,从技术上讲,它是一个启动GUI的登录shell,但这已经进入行话。是的,它将读取.profile中的设置

您(普通用户)可能会看到一个看起来像登录shell的登录shell的唯一情况是,如果您的桌面出现问题,并使用Ctrl + Alt + F1快捷方式切换到虚拟终端。


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

  • 通过ssh远程访问您的计算机(或通过ssh localhost本地连接)

  • 使用bash -l(或sh -l)模拟初始登录shell

  • 使用sudo -i模拟初始root登录shell

    • sudo -u username -i用于另一个非root用户

  • 使用su - username(及其密码)作为另一个非root用户进行身份验证

  • 使用sudo login命令切换用户

次佳解决办法

如果没有“technical jargon”,我认为不能给出正确答案。由于这个问题是第一个出现在谷歌查询“什么是登录shell”的问题,我在下面提供了一个更正确的答案:

登录shell只是一个被告知是登录shell的shell。它并不意味着在您登录后弹出的shell,但通常记录您的应用程序告诉shell它将启动为登录shell。有以下方法告诉shell它应该是一个登录的:

  1. 使用-l--login参数运行shell,假设它知道它(我不知道任何不知道-l的shell,但只有几个shell支持--login)。

  2. argv[0]的运行壳设置为-{some_string}(即,将HYPHEN-MINUS添加到常用的argv[0]或其他一些串中)。这就是ssh和su所做的:su只用-su作为argv[0]运行可执行文件(大家好以为argv[0]与当前运行的可执行文件名称有关),当用户将/bin/zsh设置为shell时,ssh运行zsh和-zsh

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1225.html,未经允许,请勿转载。