Linux での .bashrc と .profile の違いは何ですか?

公開: 2022-09-29
bash プロンプトを表示している Linux ラップトップ
Fatmawati achmad zaenuri/Shutterstock.com

Bash を実行している Linux マシンにログオンすると、特定のファイルが読み取られます。 シェル環境を構成します。 しかし、どのファイルがいつ読み取られるかは、混乱を招く可能性があります。 これが実際に起こることです。

さまざまな種類のシェル

シェルを起動したときに得られる環境は、構成ファイルまたはプロファイルファイルに保持されている設定によって定義されます。 これらには、テキストの色、コマンド プロンプト、エイリアス、およびプログラムの名前を入力したときに実行可能ファイルを検索するパスなどを確立する情報が保持されます。

ファイル システム内のさまざまな場所に、これらの設定が保存されているさまざまなファイルが多数あります。 ただし、シェルを起動したときにどのファイルが読み取られるかを調べる前に、使用しているシェルの種類を明確にする必要があります。

コンピューターの電源を入れると、正確には何が起こりますか?
関連コンピュータの電源を入れると、正確には何が起きますか?

ログイン シェルは、ログインするシェルです。 コンピュータを起動してログインすると、グラフィカル デスクトップ環境の下にログイン シェルがあります。 SSH 接続を介して別のコンピューターに接続する場合は、ログイン シェルにもログインします。

ターミナル ウィンドウを開いたときに表示されるシェルのタイプは、非ログイン シェルです。 すでにログインしている場合は、シェルを起動するために認証する必要はありません。ログイン シェルと非ログイン シェルは対話型シェルです。 指示を入力し、「Enter」キーを押し、画面上の応答を読んで使用します。

非インタラクティブなシェルもあります。 これらは、スクリプトの実行時に起動されるシェルのタイプです。 スクリプトが新しいシェルで起動されます。 スクリプトの先頭にあるシバン#!/bin/bashは、使用するシェルを指定します。

 #!/ビン/バッシュ

echo -e "Hello, World!\n"

このスクリプトは、非対話型の Bash シェルで実行されます。 シェルは非対話型ですが、スクリプト自体は非対話型であることに注意してください。 このスクリプトは端末ウィンドウに出力され、ユーザー入力を簡単に受け入れることができます。

関連: Linux を使い始めるための 9 つの Bash スクリプトの例

非対話型シェル

非対話型シェルは、起動時にプロファイル ファイルを読み取りません。 環境変数は継承しますが、エイリアスについては何も知りません。たとえば、エイリアスがコマンド ラインで定義されているか、構成ファイルで定義されているかなどです。

コマンド ライン パラメータとしてシェルに渡されたオプションを調べることで、シェルが対話型かどうかをテストできます。 オプションに「i」がある場合、シェルはインタラクティブです。 Bash の特別なパラメーター$-には、現在のシェルのコマンド ライン パラメーターが含まれています。

 [[ $- == *i* ]] && echo 'インタラクティブ' || echo '非インタラクティブ' 

対話型および非対話型のシェル セッションを識別するための Bash テスト

「猫」を意味するxcというエイリアスを作成しましょう。 $PATH変数が設定されていることも確認します。

 エイリアス xc=cat
 エコー $PATH 

エイリアスの設定と $PATH の値のエコー

この小さなスクリプト内からこれらの両方にアクセスしようとします。 このスクリプトをエディターにコピーし、「int.sh」として保存します。

 #!/ビン/バッシュ

xc ~/text.dat
echo "変数=$PATH"

スクリプトを実行可能にするには、 chmodを使用する必要があります。

 chmod +x int.sh 

chmod を使用してスクリプトを実行可能にする

スクリプトを実行しましょう:

 ./int.sh 

エイリアスにはアクセスできないが、継承された環境変数にはアクセスできるスクリプトの実行

非対話型シェルでは、スクリプトはエイリアスを使用できませんが、環境変数は使用できます。 対話型シェルは、プロファイルと構成ファイルの使用においてより興味深いものです。

関連: Linux の Bash で環境変数を設定する方法

対話型ログイン シェル

対話型ログイン シェルには 2 つのタイプがあります。 1 つは、コンピューターにログインできるシェルです。 デスクトップでは、これは通常、デスクトップ環境の基礎となるシェルです。 ウィンドウまたはタイリング デスクトップ環境を使用しているかどうかに関係なく、何かが Linux システムでユーザーを認証し、ログインを許可する必要があります。

デスクトップ環境がインストールされていないサーバーでは、対話型シェルに直接ログインします。 デスクトップ環境をやめてターミナルにアクセスすれば、デスクトップ コンピューターでも同じようなことができます。 GNOME では、Ctrl+Alt+F3 キーの組み合わせでこれを行うことができます。 GNOME セッションに戻るには、Ctrl+Alt+F2 キーの組み合わせを押します。 SSH 経由で接続するシェルもログイン シェルです。

呼び出されるプロファイルと構成ファイルは、環境変数を使用して設定できるため、ディストリビューションごとに異なる可能性があります。 さらに、すべてのファイルがすべてのディストリビューションで使用されるわけではありません。 一般的な Bash インストールでは、対話型ログイン シェルが「/etc/profile」ファイルを読み取ります。 これは、システム全体のシェル構成オプションを保持します。 存在する場合、このファイルは「/etc/bash.bashrc」や「/usr/share/bash-completion/bash_completion」などのファイルも読み取ります。

次に、Bash は「~/.bash_profile」ファイルを探します。 存在しない場合、Bash は「~/.bash_login」ファイルを探します。 そのファイルが存在しない場合、Bash は「.profile」ファイルを見つけようとします。 これらのファイルのいずれかが見つかって読み取られると、Bash は検索を停止します。 したがって、ほとんどの場合、「~/.profile」はまったく読み取られない可能性があります。

多くの場合、「~/.bash_profile」または「~/.profile」ファイルの一種のバックストップとして、次のようなものを見つけることができます。

 # bash を実行している場合
if [ -n "$BASH_VERSION" ]; それから
  # .bashrc があれば含める
  if [ -f "$HOME/.bashrc" ]; それから
    . 「$HOME/.bashrc」
  フィ
フィ

これにより、アクティブなシェルが Bash であることが確認されます。 存在する場合、「~/.bashrc」ファイルを検索し、見つかった場合はそれを読み取ります。

インタラクティブな非ログイン シェル

Bash のインタラクティブな非ログイン シェルは、「/etc/bash.bashrc」を読み取り、次に「~/.bashrc」ファイルを読み取ります。 これにより、Bash はシステム全体およびユーザー固有の設定を持つことができます。

この動作は、Bash のコンパイル時にコンパイル フラグを使用して変更できますが、「/etc/bash.bashrc」ファイルのソースと読み取りを行わないバージョンの Bash に遭遇することはまれであり、特殊な状況です。

デスクトップでターミナル ウィンドウを開くたびに、これら 2 つのファイルを使用して、対話型の非ログイン シェルの環境を構成します。 Geany IDE のターミナル ウィンドウなど、アプリケーションによって起動されたシェルでも同じことが起こります。

構成コードをどこに配置する必要がありますか?

個人のカスタマイズ コードを配置するのに最適な場所は、「~/.bashrc」ファイルです。 エイリアスとシェル関数は「~/.bashrc」で定義でき、すべての対話型シェルで読み込まれ、利用できるようになります。

お使いのディストリビューションがログイン シェルで "~/.bashrc" を読み取らない場合は、このコードを "~/.bash_profile" ファイルに追加します。

 # bash を実行している場合
if [ -n "$BASH_VERSION" ]; それから
  # .bashrc があれば含める
  if [ -f "$HOME/.bashrc" ]; それから
    . 「$HOME/.bashrc」
  フィ
フィ

モジュール性が最高

エイリアスがたくさんある場合、または複数のマシンで同じエイリアスを使用したい場合は、シェル関数と同じように、それらを独自のファイルに保存するのが最善です。 これらのファイルは、「~/.bashrc」ファイルから呼び出すことができます。

テスト コンピューターでは、エイリアスは「.bash_aliases」という名前のファイルに保存され、「.bash_functions」という名前のファイルにシェル関数が保持されます。

次のように、「~/.bashrc」ファイル内からそれらを読み取ることができます。

 # 自分のエイリアスを読み込む
if [ -f ~/.bash_aliases ]; それから
  . ~/.bash_aliases
フィ

# 自分のシェル関数を読み込む
if [ -f ~/.bash_functions ]; それから
  . ~/.bash_functions
フィ
Linux でエイリアスとシェル関数を作成する方法
関連Linux でエイリアスとシェル関数を作成する方法

これにより、エイリアスと関数をコンピューター間で簡単に移動できます。 上記の行を各コンピューターの「~/.bashrc」ファイルに追加し、エイリアスとシェル関数を含むファイルを各コンピューターのホーム ディレクトリにコピーするだけです。

これは、あるコンピューターの「~/.bashrc」から他の各コンピューターの「~/.bashrc」ファイルにすべての定義をコピーする必要がないことを意味します。 また、特に異なるディストリビューションで Bash を実行している場合は、「~/.bashrc」ファイル全体をコンピューター間でコピーするよりも優れています。

要約すれば

本当に知っておく必要があるファイルは次のとおりです。

  • /etc/profile : システム全体の構成設定。 ログイン シェルで使用されます。
  • ~/.bash_profile : 個々のユーザーの設定を保持するために使用されます。 ログイン シェルで使用されます。
  • ~/.bashrc : 個々のユーザーの設定を保持するために使用されます。 インタラクティブな非ログイン シェルで使用されます。 ログインシェルの「~/.bash_profile」または「~/.profile」ファイルから呼び出されることもあります。

便利な方法の 1 つは、個人設定を「~/.bashrc」に置き、「~./bash_profile」ファイルが「~/.bashrc」ファイルを呼び出すようにすることです。 つまり、個人設定は 1 つのファイルに保持されます。 ログイン シェルと非ログイン シェルで一貫したシェル環境が得られます。 これを、エイリアスとシェル関数をシステム以外のファイルに保存することと組み合わせることは、きちんとした堅牢なソリューションです。