【AWS】プロンプトのホスト名を変更して実用性の高いプロンプトにしてみる

5 min

こんにちは。ナミレリです。AWSのEC2インスタンスを管理、運用している場合、複数のターミナルで複数のEC2インスタンスにログインしているという方もいると思います。

ApacheのconfigをEC2の複数インスタンスで同じ設定にしたり、そういった時に間違わないようにプロンプトにホスト名などを表示してわかりやすくしたいと思います。

この記事はこんな人にオススメ

  • EC2インスタンスを立ち上げたけどまだまだ初心者の方
  • 複数のEC2インスタンスを管理されている方
  • 複数のEC2インスタンスにそれぞれのユーザーでログインし運用されている方
  • プロンプトのホスト名変更したい方

ちなみに下記はデフォルトのEC2インスタンス(Amazon Linux)のデフォルトのプロンプトは下のような感じでユーザ名(ec2-user)の後に長いホスト名が表示されます。


cat /etc/hostname
ip-xx-xx-x-x.ap-northeast-1.compute.internal
hostnamectl
   Static hostname: ip-xx-xx-x-x.ap-northeast-1.compute.internal
  (略)

この記事でわかること

  • EC2インスタンス(Amazon Linux)でのホスト名の変更方法
  • zsh(.zshrc)の設定方法
  • PROMPTとRPROMPTの設定書式

下のスクリーンショットはこの記事で実現するプロンプトです。プロンプトの右がポイントでユーザ名とホスト名(aws_ec2としています)を表示しています。プロンプトの左はユーザ名とカレントディレクトリを表示しました。

この記事で完成するプロンプト

EC2(Amazon Linux)のホスト名を変更する

hostnamectlコマンドの使い方

EC2(Amazon Linux)のホスト名の変更方法はいくつかありますが、今回はhostnamectlコマンドを使って変更します。hostnamectlコマンドの使い方を下記に記載します。

sudo hostnamectl set-hostname [ホスト名]

上記のようにhostnamectlの後にset-hostnameでその後に設定したいホスト名を入力します。

変更の確認は下のようにhostnamectlで情報を表示します。

hostnamectl

ホスト名の事前確認

現在の設定の確認として、/etc/hostnameの内容とhostnamectlコマンドの結果を確認しましょう。どちらも現在のホスト名である「ip-xx-xx-x-x.ap-northeast-1.compute.internal」が表示されます。


cat /etc/hostname
ip-xx-xx-x-x.ap-northeast-1.compute.internal
hostnamectl
   Static hostname: ip-xx-xx-x-x.ap-northeast-1.compute.internal
  (略)

実際にホスト名を変更する

では実際にホスト名を変更します。今回は「aws_ec2」というホスト名にします。


sudo hostnamectl set-hostname aws_ec2

ホスト名の設定後の確認

設定後の確認として、/etc/hostnameの内容とhostnamectlコマンドの結果を確認しましょう。先程設定した「aws_ec2」になっています。


cat /etc/hostname
aws_ec2
hostnamectl
   Static hostname: aws_ec2
  (略)

この時点で一度ログアウトし再ログインするとプロンプトのホスト名部分が変わっています。

この後はzshをインストールして細かく設定していきます。

zshのインストールと設定

zshをインストールされていない場合は下記のコマンドでインストールします。


sudo yum update
sudo yum install zsh

chshが使えるようにyumutil-linux-userをインストールします。


sudo yum install util-linux-user

自分のアカウントのログインシェルをzshにします。chshコマンドでログインシェルを変更します。


sudo chsh [アカウント名]
[アカウント名] のシェルを変更します。
新しいシェル [/bin/bash]: /usr/bin/zsh
シェルを変更しました。

一旦ログアウトして再ログインします。再度ログインすると以下のようなメッセージが表示されます。0を入力すると空の.zshrcが作成されます。


You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.
--- Type one of the keys in parentheses --- 0

上記を要約すると

qを入力:何もせずに終了。次回再度メッセージが表示される。

0を入力:空の.zshrcを作成する

1を入力:対話形式で.zshrcを設定する

今回は0を入力し、.zshrcをカスタマイズしていきます。

オススメ書籍:Linux+コマンド入門 ——シェルとコマンドライン、基本の力

プロンプトの設定

~/.zshrcでプロンプトを設定します。zshの細かい設定は奥が深いのでこの記事では触れませんが、今回の目的であるプロンプトにホスト名などを表示してわかりやすくしていきます。

すでにプロンプトは先程設定したホスト名が適用されて、[ユーザー名@aws_ec2]になっています。

現在のシェルとzshのバージョン確認

echo $SHELLzsh --versionでzshになっていることを確認するとともに、zshのバージョンも確認しておきます。


echo $SHELL
/usr/bin/zsh
zsh --version
zsh 5.8.1 (x86_64-koji-linux-gnu)

.zshrcの設定

vi~/.zshrcを編集し、下記の2行を追加してみましょう。編集後、source ~/.zshrcで再読込します。


vi ~/.zshrc
PROMPT='%F{green}%m:%~ %B%F{1}❯%F{3}❯%F{2}❯%f%b '
RPROMPT='[%F{green}%n%F{blue}@%F{red}%m%f]'
source ~/.zshrc

下記のようなプロンプトになります。それでは設定内容を細かく見ていきます。

設定後のプロンプト
設定後のプロンプト

設定の詳細

それでは先程設定した詳細を見ていきます。一見わかりにくい書式ですがこれがまた魅力のひとつですね。

PROMPT='%F{green}%m:%~ %B%F{1}❯%F{3}❯%F{2}❯%f%b '
RPROMPT='[%F{green}%n%F{blue}@%F{red}%m%f]'

左プロンプトと右プロンプト

PROMPTRPROMPTの2行を定義しました。PROMPTは左プロンプト、RPROMPTは右プロンプトです。(下の青色マーカー部分)

PROMPT='%F{green}%m:%~ %B%F{1}❯%F{3}❯%F{2}❯%f%b '
RPROMPT='[%F{green}%n%F{blue}@%F{red}%m%f]'

色の指定

%F%fで囲んだ部分に色を指定することができます(下の赤色マーカー部分)。指定できる色は8色で、数字または色の名前で指定します。色の指定は{}で囲みます。

PROMPT='%F{green}%m:%~ %B%F{1}❯%F{3}❯%F{2}❯%f%b '
RPROMPT='[%F{green}%n%F{blue}@%F{red}%m%f]'
色の名前数字
black0
red1
green2
yellow3
blue4
magenta5
cyan6
white7
zshで指摘する色の名前とその数字

%で始まる特殊な文字(Prompt Expansion)

%mはホスト名、%nはユーザ名など%で始まる便利な特殊な文字があります(下の黄色マーカー部分)。代表的なものを紹介していきます。

PROMPT='%F{green}%m:%~ %B%F{1}❯%F{3}❯%F{2}❯%f%b '
RPROMPT='[%F{green}%n%F{blue}@%F{red}%m%f]'

これまで紹介した色の指定やこれから紹介する%で始まる特殊な文字は、print -Pで確認することができます。どんな色になるのか、どんな情報が表示されるかを事前にprint -Pで確認できます。例えば下記のコマンドで確認できます。


print -P'%F{green}%m:%~ %B%F{1}❯%F{3}❯%F{2}❯%f%b '
print -P '%l'
print -P '%M'

特殊な文字説明表示例
%#一般ユーザーの場合は%を表示
スーパーユーザーの場合は#を表示
%
#
%mホスト名(短い)を表示hostname.exsample.com
%Mホスト名(長い)を表示hostname
%~現在いるカレントディレクトリのPATHを表示~/.ssh
%/
%d
現在いるカレントディレクトリのPATHを表示/home/user/.ssh
%C現在いるカレントディレクトリの
最後のディレクトリを表示
.ssh
%B%b太文字にするhostname
%U%u下線に引くhostname
%S%s強調表示にするhostname
代表的な%で始まる特殊な文字

オススメ書籍:Linux+コマンド入門 ——シェルとコマンドライン、基本の力

print -P '%C'などでどのように表示されるか確認できます。

最後に

最後まで読んでいただきありがとうございます。【AWS】プロンプトのホスト名を変更するはいかがでしたでしょうか。ApacheのconfigをEC2の複数インスタンスで同じ設定にしたり、そういった時に間違わないようにプロンプトにホスト名などを表示してわかりやすくできたと思います。

何より、プロンプトがかっこいいでモチベーションがありますね。

Udemyのサーバー管理コース

サーバー管理を学びたい方におすすめ!

講座買い切り型で、視聴期限なし。自分のペースで学べる。

現場で活躍されているプロが教えるコースを選べます。

「シェル芸」でピンっときたらこの本です。

1日1問、半年以内に習得 シェル・ワンライナー160本ノック

定番おすすめ記事

カテゴリー:
関連記事