Linuxのシェル初期化ファイルとユーザープロファイルを徹底解説
Linuxはマルチユーザー・タイムシェアリング方式のOSであり、複数のユーザーが同時に1台のシステムへログインして利用できます。そのため、システム管理者は、ソフトウェアのインストール・更新・削除、ユーザーが実行できるプログラム、閲覧・編集できるファイルなど、ユーザーごとの操作範囲を管理する役割を担っています。
Linuxでは、ユーザー環境の構築や維持を「システム全体(グローバル)」と「ユーザー固有(個人)」という2つの方法で行えます。通常、Linuxシステムを操作する基本手段はシェルであり、シェルはユーザーのログイン成功後に初期化処理として特定のファイルを読み込み、それに基づいて環境を構築します。
関連記事: Linuxで環境変数を設定する方法
本記事では、Linuxにおけるローカルユーザー管理の観点から、シェル初期化ファイルとユーザープロファイルの関係を解説します。カスタムシェル関数、エイリアス、変数、スタートアッププログラムをどこに記述すべきかも併せて紹介します。
重要: 本記事では、Linuxで最も広く使われているsh互換シェルであるbashに焦点を当てて説明します。
zsh、ash、fishなど別のシェルを使用している場合は、各シェルの公式ドキュメントを参照し、ここで取り上げる関連ファイルの詳細を確認してください。
Linuxにおけるシェルの初期化
シェルが起動されると、特定の初期化(スタートアップ)ファイルを読み込みます。これにより、シェル自体およびシステムユーザーのための環境——あらかじめ定義された(またはカスタマイズされた)関数、変数、エイリアスなど——がセットアップされます。
シェルが読み込む初期化ファイルには、次の2種類があります。
- システム全体のスタートアップファイル – システム上の全ユーザーに適用されるグローバルな設定を含み、通常は/etcディレクトリに配置されます。具体的には/etc/profile、/etc/bashrc(または/etc/bash.bashrc)などが該当します。
- ユーザー固有のスタートアップファイル – 特定のユーザーにのみ適用される設定を格納し、通常はホームディレクトリにドットファイルとして配置されます。システム全体の設定を上書きすることも可能です。.profile、.bash_profile、.bashrc、.bash_loginなどがあります。
また、シェルの起動モードは次の3つに分類できます。
1. 対話型ログインシェル
ユーザーが/bin/login経由でシステムに正常にログインした際に起動されるシェルです。認証情報は/etc/passwdファイルに保存されているものが参照されます。
対話型ログインシェルとして起動すると、/etc/profileと、それに対応するユーザー固有の~/.bash_profileが読み込まれます。
2. 対話型非ログインシェル
コマンドラインから/bin/bashや/bin/zshなどのシェルプログラムを実行して起動します。/bin/suコマンドでも起動できます。
さらに、グラフィカル環境からkonsole、terminator、xtermなどのターミナルプログラムを使って起動することも可能です。
この状態で起動されたシェルは親シェルの環境を引き継ぎ、追加の起動設定としてユーザー固有の~/.bashrcファイルを読み込みます。
$ su # ls -la
3. 非対話型シェル
シェルスクリプトの実行時に起動されるモードです。スクリプト(一連のシェルコマンドや汎用システムコマンド・関数)を処理し、特別な場合を除きコマンド間でユーザー入力を必要としません。親シェルから継承した環境を使用して動作します。
システム全体のシェルスタートアップファイルを理解する
このセクションでは、システム上の全ユーザー向けの設定を格納するスタートアップファイルについて詳しく見ていきます。
/etc/profileファイル – ログイン時のセットアップ用に、システム全体の環境設定とスタートアッププログラムを格納します。全ユーザーの環境に適用したい設定は、このファイルに追加します。
たとえば、グローバルなPATH環境変数はここで設定できます。
# cat /etc/profile
注意: RHEL/CentOS 7などの一部のシステムでは、「自分が何をしているのかを十分に理解していない限り、このファイルを直接変更しないこと。カスタム変更は/etc/profile.d/配下に.sh形式のシェルスクリプトを作成して行う方が望ましく、そうすれば将来の更新時にマージ作業が不要になる」といった警告が表示されます。
/etc/profile.d/ディレクトリ – 環境へのカスタム変更を行うためのシェルスクリプトを格納するディレクトリです。
# cd /etc/profile.d/ # ls -l
/etc/bashrc または /etc/bash.bashrcファイル – 全システムユーザーに適用されるシステム全体の関数やエイリアス、その他の設定を含みます。
システムで複数種類のシェルを利用している場合は、bash固有の設定をこのファイルにまとめておくのが良いでしょう。
# cat /etc/bashrc
ユーザー固有のシェルスタートアップファイルを理解する
続いて、システム上の特定ユーザー向けの設定を格納する、bashのスタートアップドットファイルについて解説します。これらはユーザーのホームディレクトリに配置されています。
# ls -la
~/.bash_profileファイル – ユーザー固有の環境設定とスタートアッププログラムの設定を格納します。以下のように、カスタムPATH環境変数をここで設定できます。
# cat ~/.bash_profile
~/.bashrcファイル – ユーザー固有のエイリアスと関数を格納するファイルです。
# cat ~/.bashrc
~/.bash_loginファイル – 通常、システムへのログイン時にのみ実行される固有の設定を含みます。~/.bash_profileが存在しない場合、bashはこのファイルを読み込みます。
~/.profileファイル – ~/.bash_profileと~/.bash_loginの両方が存在しない場合に読み込まれます。同じ種類の設定を格納でき、システム上の他のシェルからも参照可能です。本記事では主にbashを扱っていますが、他のシェルはbashの構文を解釈できない場合がある点に注意してください。
次に、必ずしもbashの初期化ファイルではないものの、知っておくと便利なユーザー固有ファイルを2つ紹介します。
~/.bash_historyファイル – bashはユーザーが入力したコマンド履歴を保持しており、その履歴リストはホームディレクトリ内の~/.bash_historyファイルに保存されます。
履歴を確認するには、次のコマンドを実行します。
$ history または $ history | less
~/.bash_logoutファイル – シェルの起動には使用されず、ログアウト手順に関するユーザー固有の指示を格納します。ユーザーが対話型ログインシェルを終了する際に読み込まれ、実行されます。
実用的な例としては、ログアウト時にターミナル画面をクリアすることが挙げられます。リモート接続の場合、切断後にきれいな画面状態を残せるため特に有用です。
# cat .bash_logout
さらに理解を深めるために、お使いのLinuxディストリビューションでこれらのシェル初期化ファイルの中身を実際に確認したり、bashのmanページを読んでみることをおすすめします。
以上です!本記事では、Linuxにおけるシェルのスタートアップ(初期化)ファイルについて解説しました。感想や質問があれば、ぜひコメント欄からお寄せください。
-
【保存版】シェルスクリプトでLinux変数を完全理解する方法 – declareコマンド徹底活用(パート10)
Linuxのシェルスクリプト言語は、昔から根強い人気を誇るテーマであり、今後もずっと注目され続けるでしょう。シェルスクリプトはまるで魔法のように、他のプログラミング言語と同等の手軽さでプログラムを作成できます。ただし、自分が何を行っているのか、どんな結果が期待できるのかを深く理解しておくことが重要です。 これまでお届けしてきたシェルスクリプト入門シリーズは、前回の「Linux変数の徹底解説」を含め、多くの読者様から高い評価をいただいています。本記事では、その内容をさらに一歩深掘りしていきます。 変数の属性とは Linux環境のそれぞれの変数には固有のオプションが存在し、これらは「属性」と呼ば
-
Linuxのlsコマンド徹底解説!ファイルとディレクトリを一覧表示する方法
Linuxのlsコマンドは、多くのユーザーが最初に使うことになる基本コマンドの一つです。この記事では、lsコマンドの基本的な使い方と、実務で頻繁に利用されるオプションについてわかりやすく解説します。 筆者が普段よく使うオプションの組み合わせは以下のとおりです。 ls -Zaltrh それでは、各オプションの意味をひとつずつ掘り下げながら、この組み合わせがなぜ便利なのかを説明していきます。 lsコマンドの基本構文 # ls [OPTION] [FILE] OPTIONS: [-a] 「.」または「..」で始まる隠しエントリを無視しない [-h] -lと併用した場合、サイズを人間が読みやすい形式で