web-dev-qa-db-ja.com

ログインシェルと非ログインシェルとは何ですか?

非ログインシェルの設定は.bashrcファイルに移動し、ログインシェルの設定は.profileファイルに移動すると言われています。

ログインシェルと非ログインシェルが本当に意味するものは何ですか?

技術用語をできるだけ使用せずに説明してください。

77
DUKE

簡単に言えば:

  • シェルまたはターミナルを開いて(または1つに切り替えて)プロンプトを表示する前にログイン(ユーザー名?パスワード?)を要求する場合、それはログインシェルです。
  • そうでない場合(gnome-terminalなど)、すぐに使用できる場合は、非ログインシェルです。

Ubuntu Desktopの通常のユーザーである場合、onlyログインシェルは...デスクトップです(ログインするにはパスワードを入力します;)?まあ、技術的にはGUIを起動するのはログインシェルですが、専門用語を使用しています。そして、はい、.profileの設定を読み取ります

あなた(通常のユーザー)がログインシェルを見るのはおそらくlooksがログインシェルのように見えるのは、デスクトップに問題があり、仮想端末に切り替える場合です Ctrl+Alt+F1 ショートカット。


ログインシェルを使用する他の一般的なケースは次のとおりです。

  • sshを介してリモートでコンピューターにアクセスする(またはssh localhostでローカルに接続する)
  • bash -l(またはsh -l)を使用した初期ログインシェルのシミュレーション
  • 最初のrootログインシェルをSudo -i でシミュレートする
    • またはSudo -u username -i別の非rootユーザーの場合
  • su - username(およびtheir password)を使用して別の非rootユーザーとして認証する
  • Sudo loginコマンドを使用してユーザーを切り替える
83
ish

正しい「技術用語」なしで答えが得られるとは思いません。この質問は、「ログインシェルとは何ですか」というクエリに対してGoogleで最初に表示される質問なので、以下のより正しい答えを提供します。

ログインシェルは、単にログインシェルであると言われたシェルです。 notは、ログイン後にポップアップするシェルを意味しますが、通常、ログインするアプリケーションは、シェルに起動してログインシェルであると通知します。シェルにログインする必要があることを伝えるには、次の方法があります。

  1. -lまたは--login引数を知っていると仮定してシェルを実行する(-lを知らないシェルは知りませんが、--loginはいくつかのシェルでのみサポートされます) 。
  2. argv[0]-{some_string}に設定してシェルを実行します(つまり、通常のargv[0]またはその他の文字列の前にHYPHEN-MINUSを追加します)。これはsshとsuが行うことです:suは-su as argv[0]で実行可能ファイルを実行します(argv[0]は現在実行中の実行可能ファイル名と関係があると考えているすべての人にこんにちは)、sshは-zshユーザーが/bin/zshをシェルとして設定したとき。

シェルのLoginessは、パスワードの入力や他の認証手順の実行とはまったく関係ありません。 sshやloginなどの一部のプログラム(またはurxvtなどの一部の端末エミュレーター)は、HYPHEN-MINUSで始まるargv[0]を使用して、ログインシェルとしてシェルを実行します。 suやSudo(またはzsh:-のセクションPRECOMMAND MODIFIERSで説明されているman zshmiscプリコマンド修飾子を参照)のようなものはデフォルトではこれを行いませんが、そうすることができます。引数(つまり、bash -l)を使用してログインシェルになるようシェルに指示する唯一のオプションがあります:コマンド引数付きのssh(リモートエンドで実行するものをsshに明示的に指示します)。

一般に、まずシェルを起動するために使用されるプログラムのドキュメントを参照して、シェルがログイン1であるかどうかを判断し、次にアプリがログインシェルを起動するかどうかを判断するテストを実行することをお勧めします(たとえば、echo.profile)。

8
ZyX