/etc/profile.dのスクリプトはいつ実行されますか?

/etc/profile.dのスクリプトはいつ実行されますか?

profile.dの仕組みを理解するのに問題があります。私が知っている限り、ユーザーがログインするたびにスクリプトが実行されます。私は現在私のサーバーでCentOS 6.10を実行していますが、次のような奇妙な動作が発生します。

管理者の電子メールアドレスに電子メールを送信するように設計された/etc/profile.dスクリプトがあります。誰かがこのスクリプトを介してログインすると、スクリプトが正しく実行され、電子メールが送信されます。ただし、スクリプトを実行するかどうかはログイン方法によって異なります。効果的な方法は次のとおりです。logchk.sh/bin/mailssh user@serveradress

  • ssh user@serveradressホストシステムに関係なく、ユーザーに関係なく
  • git pull user@repoadress電子メールスクリプトは実行されますが、次の場合にのみ可能です。一部ホストシステムに関係なくユーザー

以下は機能しません

  • git pull user@repoadress一部のユーザーの場合
  • SSH をプロトコルとして使用して filezilla 経由で接続

したがって、サーバーに接続しているユーザーに応じて、git pullFileZillaはスクリプトをトリガーしませんが、他のユーザーにはスクリプトをトリガーします。すべてのユーザーはbashシェルを使用し、ユーザーにroot権限があるかどうかにかかわらず、動作は同じです。

要約すると、このスクリプトはグローバル構成なので、一部のユーザーには実行され、他のユーザーには実行されない理由を理解できません。誰かが/etc/profile.dスクリプトが実行される時期の詳細を提供できることを嬉しく思います。

ベストアンサー1

バッシュに関するすべて

bashマニュアルページでこの点から始めましょう。

bashが対話型ログインシェルまたはoptionsを含む非対話型シェルとして呼び出されると、--loginまず/ etc / profileファイル(ファイルがある場合)からコマンドを読み取り、実行します。ファイルを読み込んだ後~/.bash_profile~/.bash_login、 を順に探して存在~/.profileし、読み取れる最初のファイルからコマンドを読み込み実行します。--noprofileこのオプションを使用すると、シェルの起動時にこの動作を無効にできます。

[...]

ログインシェルではなくインタラクティブシェルを起動すると、bashは~/.bashrcファイルが存在する場合にコマンドを読み取り、実行します。--norcこのオプションを使用すると、これを抑制できます。 file --rcfileオプションはbashが~/.bashrc

そして:

rshdBashは、過去のリモートシェルデーモン(通常)またはセキュアシェルデーモンによって実行されたときなど、ネットワーク接続に接続されている標準入力を使用して実行されていることを確認しようとしますsshd。 bashがこのように非対話型で実行中であると判断した場合~/.bashrc(ファイルが存在して読み取れる場合)、コマンドを読み取り実行します。そうではありません

SSHに関するすべて

コマンドを指定せずにリモートサーバーにSSHで接続すると...

ssh [email protected]

/etc/profile...これはサービスを受けるためにログインシェルを起動します。

一方、明示的に(のように)または暗黙的に(ssh接続を介して実行される他のツールを使用して)コマンドを実行すると、ssh [email protected] somecommandgitrsync非対話型シェルなのでサービスを受けられません/etc/profile。上記の3番目のマニュアルページに示すように、ファイルbashは非対話型シェルであるにもかかわらず読み続けられます。~/.bashrc

ドットファイルに関するすべて

このセクションで説明したドットファイルの特定の構成は、Fedora(およびおそらくほとんどのRHEL派生製品)にのみ適用されます。可能他のディストリビューションにも同様に適用されます。

ログインシェルを起動すると、bashはを読みます/etc/profile。スクリプトには通常のファイルが含まれています/etc/profile.d。したがって、誰かが実行されると、ssh user@serveraddress対話型ログインシェルが起動し、bashがを読み取るため、スクリプトが/etc/profile実行されますlogchk.sh

対話型非ログインシェルを起動するときまたはたとえば、ネットワーク接続を介して非対話型シェルを起動すると、sshbashは~/.bashrcファイルを読み込みます。.bashrcユーザーアカウント用に作成されたデフォルトファイルは次のとおりです。

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

そして/etc/bashrc 返品ソーススクリプトはで提供されています/etc/profile.d

したがって、誰かがデフォルト.bashrcファイルを持っている場合は、SSHを介してコマンドを実行すると(実行などgit pull user@repoaddress)、スクリプトも実行されますlogchk.sh。ただし、~/.bashrcアカウントのデフォルトファイルを置き換えたり変更したりしてもソースが提供されなくなった場合は、明示的に決定しない限り/etc/bashrcスクリプトは実行されません。/etc/profile.d

これにより、一部のユーザーの行動が異なる理由を説明できます。

おすすめ記事