Linux で .bashrc ファイルを使用する方法

ある時点で、Linuxの経験に少し特別な味付けが必要だと感じたことがあるはずです。繰り返しのタスクに遭遇したり、よりスムーズなコマンドラインインターフェースを望んだりしたかもしれません。さて、驚くべきことに、あなたのシステムには鍵があります:ホームディレクトリに静かに寄り添う.bashrcファイルです!

このチュートリアルでは、~/.bashrcファイルの基本的な側面に深く入り、Linuxシステムとのやり取り方を変えていきます。カスタムコマンドプロンプトのカスタマイズからタスクの自動化、個人用のショートカットの設定まで、正しい道を進んでいます。

退屈なタスクとさようならし、より効率的で楽しいLinux体験へようこそ!

前提条件

~/.bashrcファイルで遊ぶ前に、以下の準備が整っていることを確認してください:

  • A Linux distribution is installed on your machine – This tutorial uses Ubuntu 20.04 LTS, but any other distribution works.
  • A non-root user with sudo privileges.

LinuxのBash Run Commands (.bashrc)ファイルとは何か?

Linuxの~/.bashrcファイルは、あなたの部屋にある秘密のおもちゃ箱のようなものと想像してください。このおもちゃ箱は、あなたが箱を開けると、お気に入りのおもちゃを用意してくれます。

しかし、~/.bashrcは秘密のファイルなので、lsコマンドを実行しても表示されません。まあ、-laパラメータを指定して隠しファイルも表示するようにするまでです。

ls -la

以下には、.bashrcファイルが他の隠しファイルと一緒にリストされています。

Listing all files, including hidden ones, in the working directory (home)

クイックコマンド実行のためのカスタムエイリアスの定義

A short definition wouldn’t cut into realizing the ~/.bashrc file’s role in customizing your Linux experience. So, how does this file work exactly? When you crack open that ~/.bashrc file, one of the powerful tricks it lets you achieve is defining custom aliases for your favorite commands.

たとえば、システムのローカルパッケージインデックスを更新するには、sudo apt-get updateと入力する代わりに、.bashrcファイルに同じ機能を持つエイリアスを定義します。

? 注意: このチュートリアルでは、管理タスク(システムの設定など)を説明するためにルートアカウントを使用してコマンドを実行しています(お勧めしません)。ただし、セキュリティ上の理由から、同様の操作をシステムで実行する場合は、sudo権限を持つ非ルートユーザーを使用してください。

コマンドのエイリアスを定義するには、次の手順に従います。

1. お好みのエディタ(nanovimなど)を使用して、ホームディレクトリ(~/)内の.bashrcファイルを開きます。

? 非ルートアカウントを使用している場合は、昇格した権限が必要なコマンドを実行する際にsudoを前置してください。

nano ~/.bashrc

2. 次に、ファイルの末尾に移動し、以下に示すように、対象のコマンド(すなわちsudo apt-get update)のalias(つまりupdate)を定義します。

alias update='sudo apt-get update'

ファイルへの変更を保存してエディターを閉じてください。

Defining an alias in the .bashrc file

3. 保存したら、ターミナルで以下のコマンドを実行してsourceします。~/.bashrcファイル。このコマンドはターミナルに出力を生成せず、変更を適用します。

source ~/.bashrc

4. 今度は、定義したupdateエイリアスを実行し、対応するコマンド(sudo apt-get update)が実行されることを確認してください。

update

以下の出力が、updateエイリアスがsudo apt-get updateコマンドを実行するのと同様に機能することを確認しますが、キーストロークが少ないことを示しています。

Testing the newly defined alias (update)

高度な生産性向上のための関数の作成

エイリアスが繰り返し実行する複雑な操作には不十分ですが、心配はいりません。関数は、エイリアスがつまずく場所で解決策を提供するためにここにあります。

エイリアスが単一のコマンドの省略形として機能するのに対し、関数は複雑な操作を実行するために設計された一連のコマンドを包含しています。

関数がどのように機能するかを理解するには、以下の手順を実行してください。

1. ~/.bashrcファイルに、manage_package(任意)と呼ばれる以下の関数を追加してください。

この関数は、実行されると、指定されたパッケージがインストールされているかどうかを確認し、その情報に基づいてパッケージを更新またはインストールします。

この関数は、興味のあるパッケージ名のみを単一の引数として受け取ることを覚えておいてください。

manage_package() {
  #dpkgを使用してパッケージのステータスをクエリしてパッケージがインストールされているかどうかを確認します。
  #$1は関数に渡される最初の引数のプレースホルダです(パッケージ名)。
  #出力はターミナルで抑制するために/dev/nullにリダイレクトされます。
  #if文はdpkg -sコマンドの終了ステータスを確認します。
  #ステータスが0(パッケージがインストールされている)の場合、
  #パッケージを更新するための最初のブロックに進みます。
  if dpkg -s "$1" &> /dev/null; then
    echo "Package '$1' is already installed. Updating..."
    sudo apt-get update && sudo apt-get install --only-upgrade "$1"
  #パッケージがインストールされていない場合、メッセージを表示して
  #sudo apt-get install "$1"を実行してパッケージをインストールします。
  else
    echo "Package '$1' is not installed. Installing..."
    sudo apt-get update && sudo apt-get install "$1"
  fi
}

2. 関数を追加したら、変更内容を保存してエディタを閉じ、~/.bashrcファイルをsourceして変更内容を適用します。

source ~/.bashrc

3. ソースされたら、ターミナルで関数(manage_package)を呼び出し、その後に以下に示すようにpackage-nameを指定して、確認、更新、またはインストールするパッケージを指定します。

このチュートリアルで選択したパッケージはNGINXですが、package-nameを好みのパッケージ名に置き換えてください。

manage_package package-name

出力を見てわかるように、このような関数は、パッケージ管理を簡単にしてくれます。重い作業を自動的に行うため、あなたはそれを行う必要がありません。

Executing the newly defined function

Linuxターミナルとシェルプロンプト(PS1)のパーソナライズ

Linuxターミナルを個人のワークスペースと考えてください。ターミナルをカスタマイズすると、より見た目が良く情報を提供する環境に変わります。

Linuxターミナルをアップグレードする際には、可能性は無限大です。クールなウェルカムメッセージでターミナルを飾ったり、追加の派手さのためにシェルプロンプトを微調整したりすることができます。

Linuxターミナルをパーソナライズするには、以下の手順に従ってください:

1. ~/.bashrcファイルの最後に次の行を追加します。この行は、ターミナルセッションを開始するたびに(挨拶の)メッセージを表示します。

echo "Welcome to your terminal, $USER!

2. 次に、PS1環境変数が存在する場合はその値を変更し、存在しない場合は次の行を~/.bashrcファイルに追加します。 PS1変数は、主要なプロンプト文字列を正確に制御します。これは、シェルがコマンドを受け付ける準備ができているときに表示されるメインのプロンプトです(例:user@linux:~#)。

PS1変数を変更すると、シェルプロンプトの外観が変わります。色、形式、表示情報などが変更できます。以下の式:

  • ユーザー名(\u)とホスト名(\h)を明るい緑色(32m)で表示させます。
  • 現在の作業ディレクトリ(\w)を明るい青色(34m)で表示させます。
  • プロンプトに続くテキストの色属性をデフォルトの色(通常は白)(\[\033[00m\])にリセットします。このリセットにより、端末テキストの残り部分が影響を受けないようにします。
PS1='\[\033[01;32m\]\u@\h:\[\033[01;34m\]\w\$ \[\033[00m\]'

3. その後、ファイルを保存して閉じ、sourceを使って~/.bashrcファイルを適用します。

source ~/.bashrc

以下のように、ウェルカムメッセージがソース化直後にすぐに表示され、定義した通りにシェルプロンプトの外観が変更されることに注意してください。

Applying the shell prompt changes

スクリプトの起動: パスがない? 問題ありません!

システムを強化して追加のディレクトリを認識し、実行可能なコマンドの追加ディレクトリを認識すると、ワークフローがスムーズになります。たとえば、スクリプトの実行の場合、長いパスで格闘する必要はありません。純粋な利便性です。

スクリプトを記憶せずに起動するには、以下の手順を完了します。

1. 以下のコマンドを実行して、スクリプトを保存するためのmkdirという名前のディレクトリ(任意)を作成します。~/scripts

mkdir -p ~/scripts

2. 次に、~/.bashrcファイルを開き、次の行を最後に追加して、システムのコマンド検索パスを変更します。 この行は、既存のPATH変数に~/scriptsディレクトリを先頭に追加します。

この動作により、シェルがシステムのPATH内の他の場所に同じ名前の実行可能ファイルよりもあなたのスクリプトを優先することが保証されます。

export PATH="$HOME/scripts:$PATH"

3. ファイルを保存して閉じ、次にターミナルを再起動せずに変更を適用するために、sourceコマンドを実行します。

source ~/.bashrc

4. その後、以下の各コマンドを実行して、~/scriptsディレクトリにtestscript(任意の名前)という名前のスクリプトを作成します。

これらのコマンドには出力がありませんが、このスクリプトは実行可能になり(chmod)、ターミナルにメッセージを表示します(echo)。

# ~/scriptsディレクトリに'testscript'という新しいBashスクリプトを作成
echo '#!/bin/bash' > ~/scripts/testscript

# 実行時に"Script is running!"を表示する'testscript'に行を追加
echo 'echo "Script is running!"' >> ~/scripts/testscript

# アクセス許可を変更して'testscript'を実行可能にする
chmod +x ~/scripts/testscript

5. 最後に、ターミナルでその名前を呼び出すことで、スクリプト(testscript)を実行します。

システムは、ターミナルの作業ディレクトリに関係なく、専用の~/scriptsディレクトリからスクリプトを実行します。

testscript

以下の出力は、スクリプトとシステムの変更されたコマンド検索パスが期待どおりに機能することを確認しています。

Executing the new script to confirm it’s functioning as expected

結論

~/.bashrc ファイルの世界では、その役割の基礎を通じて旅をし、コマンドのエイリアスや関数のカスタマイズがどのように機能するかを学びました。Linuxターミナルの外観を個人的にカスタマイズすることも可能になりました。

見た目だけでなく、PATH 環境変数を拡張することで、スクリプトを毎回完全なパスを指定せずに実行する便利さも手に入れました。これらの変更により、時間が節約され、ユーザーインターフェースが向上し、Linuxとのやり取りがより効率的で楽しいものになります。

~/.bashrc ファイルを閉じる際には、Linuxの真の本質は柔軟性と提供される制御であることを覚えておいてください。旅は続きますので、なぜZSHの拡張機能を探索して、カスタマイズされた体験を求めないのでしょうか?

ZSHや Oh My Zsh などのフレームワークが提供するテーマやプラグインの海に飛び込んでください。ターミナルがより生産的で視覚的に魅力的なワークスペースに変わるのを見てください!

Source:
https://adamtheautomator.com/bashrc/