LinuxやmacOSを利用する多くのユーザーは、コマンドラインインターフェースを日常的に使用しています。その中心にあるのがbashシェルです。このシェルの動作や外見をカスタマイズするための重要なファイルが、.bashrc
と.bash_profile
です。
この記事の目的
この記事の目的は、.bashrc
と.bash_profile
の基本的な役割と、それらを効果的に使用する方法を理解することです。特に、LinuxやmacOSの初心者、またはシェルのカスタマイズに興味を持つ中級者をターゲットとしています。
シェルとは?
シェルはユーザーとオペレーティングシステム(OS)との間のインターフェースを提供するプログラムです。ユーザーからのコマンドを受け取り、それをOSに伝えて実行します。シェルは、テキストベースのコマンドラインインターフェース(CLI)やグラフィカルユーザーインターフェース(GUI)の形で存在することができますが、ここでは主にCLIに焦点を当てます。
シェルはユーザーがOSにコマンドを入力するための手段を提供します。シェルは、ユーザーからのコマンドを解釈し、OSに伝えて実行します。また、環境変数を管理したり、スクリプトを実行したりすることもできます。
bashシェルの役割
bash(Bourne Again SHell)は、多くのLinuxディストリビューションやmacOSでデフォルトとして利用されるシェルの一つです。bashは、1979年に登場したオリジナルのBourneシェルの後継として、1989年にBrian Foxによって作成されました。bashシェルの主な役割は以下の通りです。
コマンドの実行
ユーザーからのコマンドを解釈し、OSに伝えて実行します。
スクリプトの実行
bashは、一連のコマンドを含むスクリプトを実行する能力も持っています。これにより、ルーチンタスクを自動化することができます。
環境変数の管理
bashは、環境変数の設定や取得を行うことができます。これにより、プログラムの動作をカスタマイズすることができます。
.bashrcとは?
.bashrc
は、bashシェルがインタラクティブモードで起動されるたびに自動的に実行される設定ファイルです。このファイルには、シェルの挙動をカスタマイズするためのコマンドや設定が記述されています。
具体的には、以下のような設定やカスタマイズが.bashrc
に含まれます:
エイリアスの設定
コマンドのエイリアスを定義することで、コマンドの実行を簡略化することができます。
プロンプトのカスタマイズ
プロンプトの表示形式を変更することで、シェルの操作をより便利にすることができます。
環境変数の設定
環境変数を設定することで、プログラムの動作をカスタマイズすることができます。
関数の定義
関数を定義することで、繰り返し使用するコードを簡略化することができます。
ユーザーは、この.bashrc
ファイルを編集することで、シェルの挙動や外見を独自にカスタマイズすることができます。
.bashrcファイルの定義と主な用途
.bashrc
ファイルは、bashシェルのユーザー固有の設定ファイルの一つです。このファイルには、シェルのセッションごとの挙動をカスタマイズするためのコマンドや設定が記述されています。
一般的な設定やカスタマイズ
エイリアスの設定
よく使うコマンドを短縮形に変換して、効率的に操作できるようにします。例えば、lsコマンドをllにエイリアスすることで、ls -alコマンドと同じように実行することができます。
プロンプトのカスタマイズ
シェルのプロンプトの外見や情報を変更します。PS1環境変数を設定することで、プロンプトの表示形式を変更することができます。
環境変数の設定
ソフトウェアやシステムの動作を制御するための変数を設定します。PATH環境変数を設定することで、コマンドの検索パスを変更することができます。
関数の定義
よく使う一連のコマンドを関数として定義し、名前をつけて簡単に呼び出せるようにします。例えばcd
コマンドとls
コマンドを組み合わせた関数を定義することで、cd
コマンドとls
コマンドを1つのコマンドで実行することができます。
# .bashrcまたは.bash_profileに以下の関数を追加
cdls() {
cd "$@" && ls
}
設定の適用
この関数を.bashrc
または.bash_profile
に追加した後、ターミナルをリロードするか、source .bashrc
(またはsource .bash_profile
)を実行して設定を適用します。この設定の適用は忘れやすい手順ですのでしっかりと覚えておきましょう。
その後、cdls [ディレクトリ名]というコマンドをターミナルで実行することで、指定したディレクトリに移動した後にそのディレクトリ内のファイルやフォルダをlsコマンドで表示することができます。
.bashrcが読み込まれるタイミング
.bashrcは
、bashシェルがインタラクティブモードで起動されるたびに読み込まれます。具体的なシナリオは以下の通り。
新しいターミナルウィンドウやタブの開始
GUI環境で新しいターミナルウィンドウやタブを開始すると、インタラクティブなbashセッションが開始され、.bashrc
が読み込まれます。
新しいインタラクティブなサブシェルの開始
bashコマンドを実行して新しいインタラクティブなサブシェルを開始すると、.bashrc
が再び読み込まれます。
ログインシェルの場合
多くのユーザーは.bash_profile
から.bashrc
を明示的に読み込む設定をしているため、ログイン時にも.bashrc
の内容が適用されることが一般的です。
.bash_profileとは?
.bash_profile
は、bashシェルのユーザー固有の設定ファイルのもう一つです。このファイルはユーザーがログインする際に読み込まれます。つまりシステムにログインするときや、ログインシェルとして新しいターミナルウィンドウを開始するときに、このファイルの内容が適用されます。
.bash_profile
は主に、ログイン時に一度だけ実行したいコマンドや設定を含めるためのものです。ログイン時に一度だけ実行する環境変数の設定や、特定のプログラムの起動などが考えられます。以下の例を参考にしてください。
ログイン時にvimエディタを起動したい場合
# ログイン時にvimを起動
vim &
ログイン時にPATH環境変数に/usr/local/binを追加したい場合
# PATHに/usr/local/binを追加
export PATH=$PATH:/usr/local/bin
.bashrcと.bash_profileの違い
.bashrc
と``.bash_profile`は、bashシェルの設定やカスタマイズを行うためのファイルですが、主に読み込まれるタイミングや目的が異なります。
.bashrc
このファイルは、bashシェルがインタラクティブモードで起動されるたびに読み込まれます。つまり、新しいターミナルセッションを開始する際や、新しいインタラクティブなサブシェルを開始する際にこのファイルの設定が適用されます。
.bash_profile
このファイルは、ユーザーがシステムにログインする際(ログインシェルの場合)に読み込まれます。通常、リモート接続や新しいターミナルウィンドウの開始時に読み込まれます。
それぞれのファイルが読み込まれるシナリオ
.bashrc
- 新しいターミナルウィンドウやタブを開始した時
- bashコマンドを使用して新しいインタラクティブなサブシェルを開始した時
.bash_profile
- システムにログインした時(例: リモート接続時)
- 新しいログインシェルセッションを開始した時(例: 新しいターミナルウィンドウを開始した時)
一般的なユースケースと例
.bashrc
- シェルのプロンプトの外見や情報をカスタマイズする設定
- エイリアスの設定(例: alias ll='ls -la')
- インタラクティブなセッションでのみ必要な関数の定義
.bash_profile
ログイン時に一度だけ実行する環境変数の設定
例: export PATH="$HOME/bin:$PATH")
.bashrc`を明示的に読み込む設定(多くのユーザーはこの設定を持っています)
[[ -f ~/.bashrc ]] && source ~/.bashrc
このコマンド[[ -f ~/.bashrc ]] && source ~/.bashrc
はbashシェルの条件式とコマンドを組み合わせたもので「ユーザーのホームディレクトリに.bashrc
ファイルが存在し、それが通常のファイルである場合、その.bashrc
ファイルを現在のシェルセッションで読み込む」という意味になります。各部分の意味を以下に詳細に解説します。
[[ -f ~/.bashrc ]]
この部分は、条件式です。具体的には以下の意味を持ちます。
[[ ... ]]
bashシェルの条件評価の構文です。
-f
このフラグは、指定されたファイルが存在し、かつそれが通常のファイルであるかどうかを確認するためのものです。
~/.bashrc
ユーザーのホームディレクトリにある.bashrcファイルを指します。
したがって、[[ -f ~/.bashrc ]]は「ホームディレクトリに.bashrcファイルが存在し、かつそれが通常のファイルである場合」という条件を表しています。
&&
このシンボルは、論理ANDを表すもので、左のコマンドが成功した場合(真を返した場合)にのみ、右のコマンドを実行します。
source ~/.bashrc
このコマンドは、指定されたスクリプト(この場合は~/.bashrc)を現在のシェルセッションで実行します。これは、新しいサブシェルを開始するのではなく、現在のシェルセッションでスクリプトを読み込むために使用されます。
ログイン時に特定のプログラムを起動する設定
効果的な利用方法
環境変数の設定方法
環境変数はシェルや他のプログラムが参照する変数です。これを設定するには、.bashrc
や.bash_profile
にexport
コマンドを使用します。
例
# ユーザーのホームディレクトリ内のbinディレクトリをPATH環境変数に追加する
export PATH="$HOME/bin:$PATH"
説明
export
コマンドは、環境変数を設定します。PATH
環境変数は、コマンドの検索パスを指定します。$HOME/bin
は、ユーザーのホームディレクトリ内のbinディレクトリを表します。:$PATH
は、既存のPATH環境変数に追加することを表します。
エイリアスの追加方法
エイリアスは、長いコマンドを短縮して入力するための方法です。.bashrc
にalias
コマンドを使用して定義します。
例
# `ll`を`ls -la`のエイリアスに設定する
alias ll='ls -la'
説明
alias
コマンドは、エイリアスを設定します。ll
は、エイリアスの名前です。ls -la
は、エイリアスに割り当てるコマンドです。
その他のカスタマイズ例
- シェル関数の定義: よく使うコマンドの組み合わせを一つの関数として定義して、簡単に呼び出すことができます。
- コマンドライン補間の設定: タブキーを使用してコマンドやファイル名を自動補完する設定を行うことができます。
よくあるトラブルとその対処法
ファイルが読み込まれない場合のトラブルシューティング
- ファイルの存在確認
まず、
.bashrc
や.bash_profile
がホームディレクトリに存在するか確認してください。ls -la ~
コマンドで確認できます。 - 設定の再読み込み
変更した設定を読み込むために、
source ~/.bashrc
またはsource ~/.bash_profile
を実行します。 - ログインシェルの確認
.bash_profile
はログインシェルのときにのみ読み込まれます。通常のシェルでの読み込みを確認する場合、.bashrc
を確認してください。 - エラーメッセージの確認 シェルを起動するときにエラーメッセージが表示される場合、そのメッセージをもとに問題の箇所を特定し、修正します。
重複した設定の問題点と解決策
- 設定の確認
同じ設定やエイリアスが
.bashrc
と.bash_profile
の両方に存在するか確認します。重複する設定は不要な方を削除します。 - エイリアスの確認
alias
コマンドを実行して、現在のエイリアスの一覧を表示します。重複または不要なエイリアスを削除します。 - 設定の整理 重複した設定や不要な設定を削除した後、関連する設定をまとめて、設定ファイルを整理します。例えば、環境変数の設定は一か所にまとめると見やすくなります。
- コメントの利用 設定ファイル内で、各設定の目的や機能を明確にするためのコメントを追加すると、後で設定を確認や修正する際に役立ちます。
まとめ
.bashrc
と.bash_profile
は、bashシェルのカスタマイズや設定を行うためのファイルです。
.bashrc
は、インタラクティブシェル(ターミナルやコマンドライン)を起動するたびに読み込まれます。
.bash_profile
は、ログイン時に一度だけ読み込まれます。
これらのファイルを使用して、環境変数の設定やシェルのエイリアスを追加などのカスタマイズを行うことができます。ただし、不適切な設定や重複した設定が存在すると、シェルの動作に影響を与える可能性があります。設定のトラブルシューティングや、適切な設定方法についての知識は、効率的なシェルの利用において非常に有用です。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.07.15
Linuxの認定資格LpicとLinuCどっちを取得すべき?
資格は複数ありますが、中でも代表格がLinuC(リナック)とLPIC(エルピック)です。どちらも評価される資格ですが、どちらに挑戦すればいいかわからない方も多いでしょう。
- Linux
2023.10.30
チルダ(~)とは何?ターミナルでのホームディレクトリとその役割
この記事の目的は、チルダの基本的な使用方法と、ターミナルでのその役割をわかりやすく解説することです。
- Linux
2024.03.11
システムエンジニア・ネットワークエンジニア初心者がマスターすべきLinuxコマンド
システムエンジニアやネットワークエンジニアにとって、Linuxコマンドは単なるスキルではなく、日々の業務を効率化する必須ツールです。サーバーのセットアップからトラブルシューティング、定期的なメンテナンスまで、幅広い場面で活用できます。
- Linux
- エンジニア