ブログ

Armadillo 400/800: シェルプロンプトを変更する方法

at_shigehisa.y…
2019年9月1日 11時37分

■ シェルについて

Linuxで最も一般的なシェルは、bash(Bourne-Again Shell)です。 Debian GNU/Linuxでも、標準のシェルとして採用されています。
Armadillo 400/800(Atmark Distを使用した場合)は、bashの代わりにBusyBoxのashが使われます。
ashは、bashと良く似ていますが一部の機能が省かれており、軽量ですので組み込みシステムに向いています。

現在使われているシェルは、以下のコマンドで分かります。

[root@armadillo440-0 (ttymxc1) ~]# echo $SHELL
/bin/ash
[root@armadillo440-0 (ttymxc1) ~]#

■ シェルプロンプトの環境変数

シェルプロンプトは、PS1環境変数で設定されています。

[root@armadillo440-0 (ttymxc1) ~]# echo "$PS1"
[\u@\h (ttymxc1) \w]\$
[root@armadillo440-0 (ttymxc1) ~]#

PS1環境変数は、/etc/profile中に記載されています。

[root@armadillo440-0 (ttymxc1) ~]# cat /etc/profile
# /etc/profile

alias ll="ls -lF"
alias ls="ls -F"
alias rm="rm -i"

TZ=JST-9

PATH="/bin:/usr/bin:/sbin:/usr/sbin"
PS1="[\u@\h (`tty | cut -b6-`) \w]\\$ "

ulimit -c 0
if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
        umask 002
else
        umask 022
fi

USER=`id -un`
LOGNAME=$USER

HOSTNAME=`/bin/hostname`
HISTSIZE=1000

EDITOR=vi
VISUAL=vi

export TZ PATH PS1 USER LOGNAME HOSTNAME HISTSIZE EDITOR VISUAL

for i in /etc/profile.d/*.sh ; do
        if [ -x $i ]; then
                . $i
        fi
done

unset i
[root@armadillo440-0 (ttymxc1) ~]#

■ PS1="[\u@\h (`tty | cut -b6-`) \w]\\$ "の意味

" "  "で囲まれた部分が、シェルプロンプトとして表示されます。
[ ] 見易くするための文字列です。特に意味はありません。
\u ユーザ名を表示します。
@ ユーザ名とホスト名を区切るために表示している文字列です。特に意味はありません。
\h ホスト名を表示します。
tty 標準入力になっている端末のデバイスファイル名(使用しているポート名)を表示します。
cut -b6- デバイスファイル名の6バイト目以降を出力します。ここではデバイスファイル名/dev/ttymxc1の/dev/をカットしています。
\w ホームディレクトリを基準にカレントディレクトリを表示します。
\\$ \$: rootユーザの場合は#、それ以外のユーザの場合$を表示します。

■ ホスト名の変更

シェルプロンプトを変更する例として、ここではホスト名を変更してみます。
現在のホスト名は、以下のコマンドで確認できます。

[root@armadillo440-0 (ttymxc1) ~]# hostname
armadillo440-0

ここでは現在のホスト名がarmadillo440-0であることが分かります。
ホスト名は/etc/HOSTNAME (/etc/config/HOSTNAMEにシンボリックリンク)に記述されています。

[root@armadillo440-0 (ttymxc1) ~]# cat /etc/HOSTNAME
armadillo440-0
[root@armadillo440-0 (ttymxc1) ~]#

また、ドメイン名は/etc/hosts(/etc/config/hostsにシンボリックリンク)に記述されています。

[root@armadillo440-0 (ttymxc1) ~]# cat /etc/hosts
127.0.0.1       localhost
127.0.0.1       armadillo440-0

::1     localhost.v6
[root@armadillo440-0 (ttymxc1) ~]#

ホスト名を変更する場合は、/etc/HOSTNAMEと/etc/hostsの両方を変更します。
ホスト名をarmadillo440-0からarmadillo440-1に変更した場合の例を以下に示します。

[root@armadillo440-0 (ttymxc1) ~]# cat /etc/HOSTNAME
armadillo440-1
[root@armadillo440-0 (ttymxc1) ~]#
[root@armadillo440-0 (ttymxc1) ~]# cat /etc/hosts
127.0.0.1       localhost
127.0.0.1       armadillo440-1

::1     localhost.v6
[root@armadillo440-0 (ttymxc1) ~]#

変更したホスト名を(一時的に)有効にするために、以下のコマンドを実行します。

[root@armadillo440-0 (ttymxc1) ~]# hostname -F /etc/HOSTNAME
[root@armadillo440-1 (ttymxc1) ~]# hostname -f
armadillo440-1

ホスト名がarmadillo440-0からarmadillo440-1に変更されていることが確認できます。

■ 変更したホスト名の保存

ArmadilloはRAMDISKという仕組みでRAMの一部をHDDのように使い、そこにルートファイルシステムを置いています。
前記したhostname -F /etc/HOSTNAMEを実行しても、ホスト名の変更内容はルートファイルシステムへの変更のため、電源を切ると全て失われてしまいます。
ただし例外として/etc/configディレクトリ以下のファイルだけは、保存できるようになっています。
/etc/HOSTNAME(/etc/config/HOSTNAMEにシンボリックリンク)と/etc/hosts(/etc/config/hostsにシンボリックリンク)を保存するためには、以下のコマンドを実行して下さい。

[root@armadillo440-1 (ttymxc1) ~]# flatfsd -s
flatfs[1573]: using storage at /dev/flash/config
flatfs[1573]: saving fs to partition 1, tstamp=19
flatfs[1573]: Wrote 666 bytes to flash in 3 seconds
Flash filesystem is valid

Armadilloを再起動すると、ホスト名が変更されていることが確認できます。

■ 参考情報1

/etc/defaultには、ATDEで設定した内容が保存されています。
上記で変更した内容をデフォルト設定に戻したい(初期化したい)場合は、以下のコマンドを実行して下さい。

[root@armadillo440-1 (ttymxc1) ~]# flatfsd -w
flatfsd[1576]: Nonexistent or bad flatfs (0), creating new one...
flatfsd[1576]: Created 8 configuration files (699 bytes)
flatfs[1577]: using storage at /dev/flash/config
flatfs[1577]: saving fs to partition 0, tstamp=20
flatfs[1577]: Wrote 636 bytes to flash in 2 seconds
Flash filesystem is valid
[root@armadillo440-1 (ttymxc1) ~]# cat /etc/HOSTNAME
armadillo440-0
[root@armadillo440-1 (ttymxc1) ~]# cat /etc/hosts
127.0.0.1       localhost
127.0.0.1       armadillo440-0

::1     localhost.v6
[root@armadillo440-1 (ttymxc1) ~]#

上記コマンドを実行すると、/etc/configの下にあるファイルが削除され、/etc/defaultの内容が/etc/configの下にコピーされます。 そして、この内容がフラッシュメモリのconfig領域に保存されます。 Armadilloを再起動すると、デフォルト設定でArmadilloが動作します。

■ 参考情報2

クロスコンパイル時にホスト名等を指定する場合は、ATDEを起動してromfs/etc/default下の以下のファイルを変更して下さい。

atmark@atde5:~/atmark-dist/romfs/etc/default$ cat HOSTNAME 
armadillo440-0
atmark@atde5:~/atmark-dist/romfs/etc/default$ cat hosts
127.0.0.1    localhost
127.0.0.1    armadillo440-0

::1    localhost.v6
atmark@atde5:~/atmark-dist/romfs/etc/default$