第15回 Raspbian補足

今回でRaspbianの説明は終わりです。Raspbianについてもう少し理解を深めます。

今回の説明

今回は必須知識ではありませんが、Raspbianの理解を深めるために、今までずっと気になっていたことを確認していきます。

 

コマンドプロンプトの色

今までずっと触れなかったのですが、ターミナルに表示されているこの文字列、

pi@raspberrypi ~ $ 

この色って見づらくないですか? 特に「~ $」の部分とか。この色を変更したいと思います。なんか色変えるの楽しそう、って思いますが、これがなかなか大変なんです。途中で「やっぱり、色なんか変えようなんて思わなきゃよかった」ってちょっとだけ後悔してしまうかもしれませんが、これからずっと付き合っていくコマンドプロンプトです。この際、大変なのは覚悟の上、頑張って色を変えましょう。

ということで、これからかなり遠回りの説明になります。ごめんなさい。

それではこれからターミナルソフトで表示される「pi@raspberrypi ~ $」という文字列は、誰がどうやって制御しているのか探っていこうと思います。それが解明できればRaspbian (Linux)の理解がもう少し深まります。

以前の記事でLinuxの概要を以下のように説明しました。

Linux構成

「Linuxはカーネルを土台にして多くのモジュールから構成されている。Linuxカーネルは基本的な機能しか持っていないので、ユーザとやりとりすることさえできない。そのためGUIモジュールとかが必要」って説明です。

「ユーザとやりとりすることすらできない」っていうのに、今までずっとコマンドプロンプト経由でいろいろなセットアップをしてきましたよね。このコマンドプロンプトって何者なんでしょうか。

実は、このターミナルソフトのコマンドプロンプトでいろいろ処理できるのは「シェル」というソフトウエアが動いているためなんです。コマンドプロンプトを表示したり、ユーザが入力したコマンドを処理したり、というようにシェルはいろいろな役割を担っています。

Linux構成シェル

シェルって「殻」とか「貝殻」などの意味がありますが、なぜ殻かというと、以下のようなイメージもあるからです。

Linuxシェルのイメージ

Linuxカーネルを貝殻のように取り囲んで、外部とのやりとりをするって感じから、シェルって呼ばれています。

このシェルですが、「シェル」という種類がひとつだけ存在するのではなく、いくつか種類があります。また、ログインユーザごとに変更することもできます。Raspbianは、デフォルトでは「bash」(Bourne Again Shell)というシェルが動作しています。他にどのようなシェルが使用できるかは、/etc/shellsというファイルに記載されています。

Raspbian Stretchでは以下のような結果になりした。

pi@raspberrypi ~ $ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

これまで、Raspberry Piでコマンドプロンプトでいろいろと作業してきましたが、実は「/bin/bash」というシェルモジュールが動作していて、このシェルを通していろいろな作業していたわけです。

ところで、シェルに対していろいろなカスタマイズをすることも可能になっています。例えば今回の記事のテーマにしているコマンドプロンプトを表示するのはシェルの仕事ですが、このコマンドプロンプトの表示形式をカスタマイズすることができます。

ではこのカスタマイズはどのように行うのでしょうか。これは「環境変数」という変数を設定することによって行います。環境変数は「$」で始まる大文字の文字列で、設定可能な環境変数はあらかじめ決められています。今回カスタマイズ設定するコマンドプロンプトの表示形式の設定は、「$PS1」という環境変数に設定されています。

早速ですが、コマンドプロンプトの表示形式が設定されている「$PS1」の設定値を見てみましょう。この変数の内容を表示するコマンドは echo コマンドです。以下のように入力して$PS1の設定内容を確認してみます。

pi@raspberrypi ~ $ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\]

これがコマンドプロンプトの表示形式設定です…….

って、なんだか見なければよかった、っていう感じですよね。シェル(bash)はコマンドプロンプトを表示するときに、この表示形式に従っているわけです。この文字列はシェルにとっては機械的に処理するので問題ないでしょうが、人間が読むにはちょっと辛い設定内容です。でも色の設定を変えたいんです。頑張りましょう。

この設定を変更すると、コマンドプロンプトの表示形式を変更できるのですが、どのように設定変更すればよいか、というのが次の課題です。

ユーザがログインすると、シェルモジュールが起動するわけですが、その時、bashはbash用の設定ファイルを探し、そのファイルの設定を読み込みます。このファイル名は「.bashrc」と決められています。

つまり今までの話をまとめると、シェル(bash)が起動する時に「.bashrc」を読み込んでコマンドプロンプト表示形式を含むいろいろなカスタマイズ設定している、ということになります。

では、この「.bashrc」というファイルはどこにあるかというのがさらに次の課題です。

この .bashrc は実はホームディレクトリ(ホームフォルダ)にあります。でも今までホームディレクトリをlsしても、このファイルはリストされませんでしたよね。

実は、「.」(ピリオド)から始まるファイルは普通にlsした場合は表示されないようになっています。普段見る必要のない設定ファイルなどは「.」から始まるファイル名にしておき、普段は目に触れないようにしているわけです(隠しファイル、不可視ファイル、などと呼ばれています)。

それでは、ホームフォルダのすべてのファイルを確認してみましょう。「.」から始まる名前のファイルを確認するには、lsコマンドのパラメータに-a(allの意味)をつけます。「ls」と「-a」の間はスペースを入力します。

pi@raspberrypi ~ $ ls -a
.            .anthy         .bashrc.bak  .gconf           .themes               Documents  Scratch
..           .asoundrc      .cache       .gstreamer-0.10  .vnc                  Downloads  Templates
.DS_Store    .bash_history  .config      .local           .xsession-errors      Music      Videos
.Xauthority  .bash_logout   .dbus        .profile         .xsession-errors.old  Pictures   dev
._.DS_Store  .bashrc        .emacs.d     .scratch         Desktop               Public     python_games

表示内容は異なると思います。それにしてもずいぶんいろいろな隠しファイルがあったんですね。ちょっと探しづらいですが、「.bashrc」ってありますよね。

それでは、.bashrcに書いてある$PS1を書き変えましょう! といきたいところですが、$PS1のどこをどう変更すればいいのかを確認しておく必要があります。それでは、$PS1の設定内容を解読しましょう。(ここが一番げんなりします)

デフォルトの$PS1の設定値は2つのブロックに分かれています。

Ps1 1

最初のブロックはターミナルソフトに対する制御コードで、例えばMacのターミナルアプリがこのコードを受け取ると、ウインドウタイトルにその値を表示するようになっています。これは編集しないでもいいでしょう。次のブロックがコマンドプロンプトの表示形式設定です。

それではこのコマンドプロンプトの表示形式設定を詳しく見ていきます。

Ps1 2

この図のように、文字色を設定する部分と、文字列を表示する部分に分かれています。この緑色と青色(今まで紫だと思っていました)の部分の設定値を変更すれば文字色が変更できます!

Ps1 3

文字色の指定は、上の数字の部分です。「01;32」とか書かれている部分です。この部分の設定ですが、

Ps1 4

のように指定します。指定は以下の数字になります。

修飾コード:

修飾 コード
通常 00
ボールド(太字) 01
暗くする 02
下線 04
点滅 05

色コード:

コード
30
31
32
33
34
35
シアン 36
37

例えば、太字の紫は「01;35」という指定になります。ということで変えたい色を決めたら、.bashrcを編集しましょう。編集箇所は以下の部分です。

Ps1 5

なお、機器構成により操作が異なりますので、デスクトップタイプとリモート接続タイプそれぞれの手順を説明します。

 

デスクトップタイプ機器構成の場合

.bashrcの編集は、失敗しても問題ないように最初にバックアップを取ってから編集します。以下の手順で「.bashrc」ファイルを別名でコピーしたあと、編集するようにします。

デスクトップ画面左上にあるファイルブラウザを起動します。

Raspbianファイルブラウザ

ホームフォルダを見ると、デフォルト状態では.bashrcファイルは見えません。

.bashrc編集

まずは.bashrcファイルを見えるように設定しましょう。不可視ファイルを表示するには、以下のように「表示」メニューから「隠しファイルを表示する」を選択します。

.bashrc編集(1)

選択すると以下のように.bashrcが見えるようになります。

.bashrc編集(2)

次に.bashrcファイルをコピーします。.bashrcファイルを右クリックするとメニューが表示されますので、「コピー」を選択します。

.bashrc編集(3)

次に同じフォルダにペーストします。ファイルブラウザの空いている領域で右クリックするとメニューが表示されますので、「貼り付け」を選択します。

.bashrc編集(4)

別ファイル名でコピーしますので、ファイル名欄にコピーファイル名を入力して、「別の名前で」ボタンをクリックします。なんだかよく見るとこのダイアログの日本語、ちょっとカタコトって感じもしますね。ちょっと親近感が湧きます。

.bashrc編集(5)

これで.bashrcがバックアップできました。

.bashrc編集(6)

それではいよいよ.bashrcを編集しましょう。.bashrcファイルを右クリックするとメニューが表示されますので、geditの「テキストエディター」を選択します。

.bashrc編集(7)

エディタ(gedit)が起動しますので、好きな色に変更します。

.bashrc編集(8)

編集できたら保存してテキストエディターアプリを閉じます。あとは変更できたか確認しましょう。ターミナルアプリを開いて、コマンドプロンプトが変更されたか確認します。

.bashrc編集(9)

これで変更完了です。

 

リモート接続タイプ機器構成の場合

.bashrcの編集は、失敗しても問題ないように最初にバックアップを取ってから編集します。以下の手順で「.bashrc」ファイルを別名でコピーしたあと、編集するようにします。

最初にAtomエディタからRaspberry Piに接続します。手順を簡単にまとめると、Atomエディタ起動 → Packagesメニュー → Ftp-Remoteメニュ → Toggleを選択します。選択するとパスワード入力になりますので、設定したパスワードを入力すれば、右側に登録したRaspberry Piが表示されます。詳しい手順を忘れてしまったら第13回の記事を確認してみてください。

次に、ホームフォルダを開きます。Ftp-Remoteはデフォルトで不可視ファイルも見えるようになっているようです。

リモート接続タイプbashrc編集(1)

これからこの.bashrcファイルを編集しますが、編集に失敗しても元に戻せるようにコピーを取っておきましょう。.bashrcファイルを右クリックするとメニューが表示されますので、「Duplicate」を選択します。

リモート接続タイプbashrc編集(2)

コピーファイル名を聞かれますので、適当な名前を入力します。ここでは「.bashrc_back」と入力しました。

リモート接続タイプbashrc編集(3)

ファイル名を入力後、リターンキーを押すと、指定したファイル名でコピーが作成されますが、Atomエディタで自動的に開かれてしまいます。こちらはバックアップですので編集せずに閉じます。閉じるボタンはマウスカーソルをファイル名の右側あたりに持っていくと出てきます。

リモート接続タイプbashrc編集(4)

次に、.bashrcファイルをダブルクリックして開き、編集して色を変更します。

リモート接続タイプbashrc編集(5)

編集後、ファイルを保存して閉じます。あとはターミナルからRaspberry Piにリモート接続すれば変更が確認できます。設定通りに代わっていればOKです。

リモート接続タイプbashrc編集(6)

 

嫌な予感がするけど、lsで表示される色

さて、コマンドプロンプトの色を変更できました。思いのほか大変でしたよね。

ところで、lsすると相変わらず見づらいので、こちらもついでに変更しておきましょう! コマンドプロンプトの変更はちょっとややこしかったですが、もう変更のやり方もわかりましたので楽勝、といったところでしょうか。

ってことで、lsで表示される色もこの調子で変更しましょう。lsの色は環境変数「$LS_COLORS」設定されています。早速見てみましょう!!

pi@raspberrypi ~ $ echo $LS_COLORS
rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:
bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:
ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:
*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:
*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:
*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:
*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:
*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:
*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:
*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:
*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:
*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:
*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:
*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:
*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:
*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:
*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:
*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:
*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:
*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:
*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:
*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:
*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:
*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:
*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:
*.xspf=00;36:

えっ、、、、、、、、なんかくじけそうになりました。

でも、よく見てみると、ファイルタイプ別に色を指定しているんです。これ、全部直すの大変ですよね。

そこで今回は違う作戦でいきます。色は付かなくなりますが、見やすくはなると思います。

この色設定自体を有効/無効にすることができます。有効にするにはlsに以下のオプションをつけます。

pi@raspberrypi ~ $ ls --color=auto

無効にするには以下のオプションです。

pi@raspberrypi ~ $ ls --color=never

でもlsをするときにこのオプションを指定してないのに色がついてますよね。実はこれも設定されているんです。先ほどは環境設定の変数で設定していましたが、これは「エイリアス」という機能を使っています。ということで、ちょっとエイリアスの説明をします。

lsコマンドを入力するとき、例えばいつもロング形式で表示したい場合、「ls -l」と入力すればいいですが、毎回毎回オプションをつけるの面倒ですよね。この場合は、「ls」とだけ入力しても「ls -l」を実行するように定義することができます。定義するにはaliasコマンドを使用します。使い方は以下です。

alias 新コマンド名=実行するコマンド

例えば、「ls」と入力して「ls -l」で実行したい場合、

alias ls='ls -l'

とします。「実行するコマンド」は必ず ‘ で囲むようにしてください。スペースが入るとスペースの前までが定義とみなされるためです。それでは、今のlsは何に設定されているのでしょうか。今のエイリアス設定を確認するには、コマンドプロンプトでaliasと入力すると確認できます。

pi@raspberrypi ~ $ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias ls='ls --color=auto'

やっぱり。lsが「ls –color=auto」に設定されていました。ところで、–color=neverにすると、ファイルもフォルダも文字列の表示になってしまいますが、せめてファイルとディレクトリの区別はしたいですよね。lsでファイルかフォルダなど、タイプを区別して表示するには「-F」オプションをつけます。

pi@raspberrypi ~ $ ls -F
Desktop/  Documents/  Downloads/  Music/  Pictures/  Public/  Scratch/  Templates/  Videos/  dev/  python_games/

ディレクトリの場合は最後に「/」が付加されます。ということで、lsを「ls -F –color=never」に変更したいと思います。

これも.bashrcにありますので、以下の部分を

Ls color auto

alias ls='ls -F --color=never'

に書き換えます。書き換えたら保存、終了してsourceコマンドで有効にします。有効になったかlsをして確認してみてください。

 

Macでssh接続するときの面倒を解消する

このセクションで最後です。このセクションはMacユーザのみです。

これも今まで触れなかったんですが、、、

Macでターミナルからssh pi@raspberrypi.localって入力して、パスワードを入力するの面倒ではないですか? パスワードぐらい記憶してくれればいいのにって思いますが、そうはなっていません。そこで、もうちょっと簡単に接続できるようにしたいと思います。

と、本来でしたら記事を書くところですが、以前にこの記事を書いていますので、以下のリンクのページをご参照いただければと思います。

Raspberry Piに公開鍵認証を使ってssh接続する

 

更新履歴

日付 内容
2015.11.2 新規投稿
2019.4.28 Raspbian Stretchの内容に変更
リモート接続タイプの編集方法をAtomエディタに変更