web-dev-qa-db-ja.com

ログイン時にソースされるスクリプトのシーケンス

すべてのログイン設定を~/.bash_profileに集中したいと思います。デフォルトで~/.bashrcがありましたが、~/.bash_profileに置き換えました。

ただし、ログインすると、~/.bash_profileの前の何かが取得され、以下が表示されます。

Linux ubnt10-dev1 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc

  System information as of Fri May  9 12:17:39 EDT 2014

  System load:  0.01              Processes:           74
  Usage of /:   5.5% of 18.58GB   Users logged in:     0
  Memory usage: 4%                IP address for eth0: 123.x.x.x
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/

New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Fri May  9 12:11:52 2014 from 123.x.x.x

~/.bash_profileで定義された自分のスプラッシュグリーティングのみが表示されるように、これを削除したいのですが、ユーザーがログインしたときにソース/実行されたスクリプトのロジック/シーケンスがわかりません。

ボーナスとして、ユーザーがログインしてセッションを開始したときだけでなく、システムの起動時の自動化されたソーシング/実行のシーケンスについても知りたいと思っています。

40
amphibient

これは一種の複雑です。まず、詳細は実行しているシェルの種類によって異なります。 自分を盗用する

  • 端末エミュレータ(gnome-terminalなど)を開くと、対話型の非ログインシェルと呼ばれるものを実行しています。

  • コマンドラインからマシンにログインするか、su - usernameなどのコマンドを実行すると、interactive loginShellが実行されます。

  • グラフィカルにログインすると、まったく異なるものが実行されます。詳細はシステムとグラフィカル環境によって異なりますが、一般的には、ログインを処理するのはグラフィカルシェルです。多くのグラフィカルシェル(Ubuntuのデフォルトを含む)は/etc/profileおよび~/.profileを読み取りますが、それらのすべてが読み取りを行うわけではありません。

  • 最後に、シェルスクリプトを実行すると、非対話型、非ログインシェルで実行されます。

起動時にbashが読み取るファイルは、実行中のシェルのタイプによって異なります。以下は、man bash(強調鉱山)のINVOCATIONセクションの抜粋です。

Bashが対話型ログインShell として、または--loginオプションを使用した非対話型シェルとして呼び出されると、最初にファイルからコマンドを読み取り、実行します/ etc/profile (そのファイルが存在する場合)。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、および〜/ .profileをその順序で探し、最初に存在するコマンドを読み取って実行しますそして読みやすいです。 --noprofileオプションは、この動作を禁止するためにシェルを起動するときに使用できます。

インタラクティブシェルログインシェルではない場合、bashは/etc /からコマンドを読み取り、実行しますbash.bashrc および~/.bashrc(これらのファイルが存在する場合)。これは、-norcオプションを使用して禁止できます。 --rcfileファイルオプションは、bashに/etc/bash.bashrcおよび〜/ .bashrcの代わりにファイルからコマンドを強制的に読み取らせて実行させます。

これらは初期化ファイルです。また、グローバル環境変数を設定できる/etc/environmentがありますが、それはソースではなく読み取りです(内部のコマンドは実行されませんが、変数定義は設定されます)。

さて、あなたが見る挨拶はまた別のものです。これは/etc/motdで設定され、pam_motdを介して表示されます。 man motdで説明されているように:

/ etc/motdの内容は、ログインに成功した後、ログインシェルを実行する直前にpam_motd(8)によって表示されます。

「motd」という略語は「今日のメッセージ」を表しており、このファイルは伝統的にまさにその目的で使用されてきました(すべてのユーザーへのメールよりもはるかに少ないディスク容量が必要です)。

Debian GNU/Linuxでは、/ run/motd.dynamicのコンテンツも表示されます。このファイルは、ブート時に/etc/init.d/motdによって生成されます。

メッセージを削除するには、/etc/motdファイルを空にし、/etc/init.d/motdが存在する場合は何も生成されないようにします。


とにかく、表示する出力に基づいて、ssh経由でログインしているようです。つまり、インタラクティブログインShell を実行しています。その意味については上記を参照してください。そのため、要約すると、ログイン時に気になるものは次のとおりです(この順序で)。

  1. SSHデーモンは、PAMライブラリのpam_motdモジュールを介して、/etc/motdの内容を表示します。 pam_envモジュールを介して、/etc/environmentおよび~/.pam_environmentから環境変数を設定します。
  2. ログインシェルが開始され、次のファイルが順番に読み込まれます。
    1. /etc/profile
    2. /etc/bash.bashrc(デフォルトのUbuntu /etc/profileソース/etc/bash.bashrc)。
    3. ~/.bash_profile。ここで読み取ることができた他のファイル(~/.profileおよび~/.bash_login)は、~/.bash_profileが存在するため無視されます。
52
terdon

Ssh経由でログインしたときに表示される情報は、/ etc/profileを参照する前に作成されます。 /etc/update-motd.dのファイルのシーケンスを見てください。これにより、表示されているメッセージがさまざまなスクリプトによって生成された場所がわかります。

1
Reese