$ users
vorac
# Non-login shell, /root/.profile not sourced.
$ su
$ users
vorac
# Login shell, /root/.profile sourced.
$ su -
$ users
vorac
したがって、前の例では、別のユーザーとしてログインシェルを起動しましたが、依然として元のユーザーのみが「ログイン」されていました。 「ログインユーザー」という概念はどのように定義されていますか?
答え1
Unix / Linuxシステムは、現在ログインしているユーザーのデータベースをファイルとして維持します/var/run/utmp
(一部のUnixバリアントには並列ファイルもありますが、utmpx
すべて同じ目的で使用されます)。このlogin
プログラムは物理コンソールのログインを制御し、Xサーバーを搭載したコンピュータのSSHデーモンまたはGUIログインプログラムは、ユーザーがログインまたはログアウトしたときにこのファイルの情報を更新します。who
コマンドはこのデータベースから情報を読み取ります。
起動するシェルは、プログラムやsshデーモンによって起動されたログインシェルと同じように動作しますが(同じinitファイルの実行など)、ログインをファイルに書き込まないというsu -
点で「ログイン」シェルです。したがって、このシェルは出力に表示されないというコマンドを使用しています。login
utmp
who
一方、たとえばscreen
セッションを開始し、screen
ファイルにエントリを記録し、utmp
コマンド出力でセッションを表示できますwho
。
また、一部のグラフィックDEでは、ユーザーが開くすべての新しい端末ウィンドウが新しいログインと見なされてログインしますがutmp
、他の場合はそうではありません。utmp
フルDEセッションユーザーにログインするためのマスターエントリは1つだけです。もちろん、これは端末アプリケーションによって異なります。