技術ノート Linux Linux の .bashrc と .profile の違いは何ですか?

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

Bash を実行している Linux マシンは、シェル環境を構成するためにログインするときに特定のファイルを読み取ります。ただし、どのファイルがいつ読み取られるかは混乱を招く可能性があり、そのため、.bashrc ファイル、.bash_profile ファイル、または別の構成ファイルのいずれを編集する必要があるかを判断することが困難になります。知っておくべきことは次のとおりです。

さまざまな種類のシェル

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

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

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

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

非対話型シェルもあります。これらは、 スクリプト の実行時に起動されるシェルのタイプです。スクリプトは新しいシェルで起動されます。 シバン

#!/bin/bash

スクリプトの先頭で、どのシェルを使用するかを指定します。

 #!/bin/bash

echo -e “ハロー、ワールド!\n”

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

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

非対話型シェル

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

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

 [[ $- == *i* ]] && echo '対話型' ||エコー「非対話型」

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

エイリアス xc=cat

エコー $PATH

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

 #!/bin/bash

xc ~/text.dat

エコー「変数=$PATH」

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

 chmod +x int.sh

スクリプトを実行してみましょう。

 ./int.sh

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

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

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

対話型ログイン シェルには 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」ファイルを検索し、見つかった場合はそれを読み取ります。

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

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

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

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

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

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

設定コードをどこに置くべきですか?

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

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

 # bash を実行している場合

if [ -n “$BASH_VERSION” ];それから

# .bashrc が存在する場合はインクルードします

if [ -f “$HOME/.bashrc” ];それから

。 「$HOME/.bashrc」

フィ

フィ

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

モジュール性が最善です

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

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

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

 # エイリアスで読み取る

if [ -f ~/.bash_aliases ];それから

。 ~/.bash_aliases

フィ

# シェル関数で読み取る

if [ -f ~/.bash_functions ];それから

。 ~/.bash_functions

フィ

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

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

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

要約すれば

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

  • /etc/profile : システム全体の構成設定。ログインシェルによって使用されます。
  • ~/.bash_profile : 個々のユーザーの設定を保持するために使用されます。ログインシェルによって使用されます。
  • ~/.bashrc : 個々のユーザーの設定を保持するために使用されます。対話型の非ログイン シェルによって使用されます。ログイン シェルの「~/.bash_profile」または「~/.profile」ファイルから呼び出される場合もあります。

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

「 Linux の .bashrc と .profile の違いは何ですか?」に関するベスト動画選定!

UNIXとLinuxの違いについて
シェルスクリプトとは?【分かりやすい解説シリーズ #68】【プログラミング】