非対話型ログインシェルはありますか?

非対話型ログインシェルはありますか?

私は間の違いを知っています対話型/非対話型そしてログイン/非ログイン殻はありますが、実際には決してそうではないようです。いいえ- インタラクティブログインスクリプトのようなものがない場合は、シェルを使用してください/bin/bash --login some-script.sh(少し奇妙に見えます)。これは正しいですか、それとももっと一般的ですか?

答え1

ログイン対非ログイン、対話型対非対話型BashシェルのBashの概念について話しているとします。祈るマンページセクション。 (説明とは異なります。ジェームズ・ヨンマンの答え「シェル」(またはユーザーコマンドソルバー)として使用される任意のコマンドpasswd(5)ファイルとプログラムがユーザー入力を許可するかどうか(たとえば、/usr/sbin/nologin明らかにそうではありません)

あなたは正しいです。これは/bin/bash --login some-script.shおそらく、病理学的な例である可能性がある非対話型ログインBash呼び出しを生成します。非対話型ログインシェルが発生することはまれですが、驚くべきことではありませんssh somehost < some-file。実行コマンドが与えられず、sshdBashを起動するように設定して、Bashをログインシェルと考えさせます。ただし、stdinが端末に接続されていないため、Bashはそれ自体が対話型モードに設定されません(含まれていません)。 )。argv[0]-bash$-i

ssh somehost somecommand(個人的には、このシナリオは新しいログインですが、「ログインシェル」とは見なされない反対のシナリオよりも合理的に見えますsomehost。)

ずっと前にやるべきことを最近やって、実行用のBashモードテーブルと初期化ファイル。これが混乱していると思っても心配しないでください。少なくとも私もそうでした。私を混乱させるのは、彼らの元の意図がいつ.bashrcそれをすべきかという規則を持つことでした。

答え2

実際、新しくインストールされたシステムのほとんどのログインシェルは非対話型です。

$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
  5 /bin/bash
 23 /bin/false
  1 /bin/sh
  1 /bin/sync
 17 /usr/sbin/nologin

明らかに、/bin/bash彼らは/bin/sh伝統的なシェルであり、インタラクティブです。ただし、このリストの他のすべての項目は非対話型です。このリストを読んでいて、そのうちの1つが何をしているのかわからない場合は、そのマニュアルページ(またはman nologinman syncを探してください。

このコマンドが実際に行うこと

Captain Manの投稿履歴を見ると、Unixの経験が非常に不足していることがわかります。したがって、従わないことについてのコメントの質問は、出力だけでなく、答えの上部のコマンドラインに関連している可能性があります。したがって、コマンドラインについても説明します。たとえこの質問に関するトピックではありませんが。

コマンドはUnixパイプ。パイプラインは、左から右に読み取る一連のコマンドで、最初のコマンドの出力が2番目のコマンドの入力になり、2番目のコマンドの出力が3番目のコマンドの入力になるように、次のコマンドが実行されます。パイプの終わり。最後のプロセスの出力が端末に表示されます(リダイレクトされない限り)。バラよりシェルパイプのウィキペディアエントリより多くの情報を知りたいです。

パイプラインが何をしているのかわからない場合は、セクションごとに実行して進行状況を確認できます。使用しているコマンドのマニュアルページ(ここ、awkおよびsort)を読むこともできますuniq。実際、今しなければなりません。お待ちしております。

パイプラインの手順を段階的に実行しましょう(自分のUnixシステムでこれを安全に実行できます)。

~$ awk -F:  '{print $7}' <  /etc/passwd | sed -e 's/^/    /'
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/usr/sbin/nologin
[ ... and so on, I've left the rest out ... ]

上記の出力は/etc/passwdファイルの7番目のフィールドの内容です。これは、すべての人のログインシェルが何であるかをシステムに通知する(フラットテキストファイル)データベースです。詳細を知りたい場合は、/etc/passwdその内容を読んで(世界で読むことができます)、マニュアルページを確認してください(man 5 passwd)

したがって、完全なリストを読んで人気のあるプロジェクトが何であるかを知ることができますが、質問は実際に非対話型シェルがどれくらい一般的であるかについての質問なので、質問に答えるのに良い形式ではありません。数えましょう。最も簡単な方法は、アイテムを最初にソートすることです。

~$ awk -F:  '{print $7}' <  /etc/passwd | sort
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
[ ... and so on, I've left the rest out ... ]

このプログラムを使用して、uniq一意の項目のみを表示できます。

~$ awk -F: '{print $7}' < /etc/passwd |sort|UNIQLO| sed -e 's/^/ /' /bin/bash /bin/false /bin/sh /bin/sync /usr /sbin/nologin

でもちょっと待って、それではダメです。一人が何人いますか?質問してみましょうuniq(マンページを読んでください!):

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
      5 /bin/bash
     23 /bin/false
      1 /bin/sh
      1 /bin/sync
     17 /usr/sbin/nologin

もちろん、これは答えの上部に表示される結果です。アイテムを順番に表示するために並べ替えてみましょう。

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort
     17 /usr/sbin/nologin
      1 /bin/sh
      1 /bin/sync
     23 /bin/false
      5 /bin/bash

待って、そうではありません。 17 は 1 の前に来、5 は 23 の後に続きます。問題は、アイテムがソートされていることです。アルファベット順sort数字と逆順に並べ替えるように依頼してみましょう。

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort -n -r
     23 /bin/false
     17 /usr/sbin/nologin
      5 /bin/bash
      1 /bin/sync
      1 /bin/sh

私はこれが元の答えのすべてを説明すると思います。それでもこれらのコマンドの詳細がわからない場合は、マニュアルページをお読みください。まだ何が起こっているのかについてのメカニズムがわからない場合は、UnixとLinuxを説明する本(オンラインまたは印刷物)を読むことから始めることをお勧めします。

関連情報