第15回 Raspbian補足

今回でRaspbianの細かい説明は終わりです。最後に補足説明をいたします。

今回の説明

今回は必須知識ではありませんが、今までいろいろと気になっていたことを確認していきます。

 

コマンドプロンプトの色

今までずっと触れなかったのですが、、、

pi@raspberrypi ~ $ 

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

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

それではこれから、このような表示にしているのは誰がどうやっているのか、探っていこうと思います。それが解明できれば色を変えることができるって信じて。。。

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

Linux structure

「Linuxカーネルがあるけど、Linuxカーネルは基本的な機能しか持っていないので、例えばユーザとやりとりすることさえできない、そのためGUIモジュールとかが必要」って説明です。ユーザとやりとりすることすらできない、っていうのに、今までずっとコマンドプロンプト経由でいろいろなセットアップをしてきましたよね。このコマンドプロンプトって何者なんでしょうか。

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

Linux shell

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

Linux shell circle

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

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

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

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

今までずっと「/bin/bash」が動作していて、このbashっていうシェルで作業していたわけです。設定すれば、他のシェルも使うことができますが、書籍やネットで情報が多いシェルはbashですので、この入門記事では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)はコマンドプロンプトを表示するときに、この表示形式に従っているわけです。シェルにとってはプログラムで処理するので問題ないでしょうが、人間が読むにはちょっと辛い設定内容ですよね。でも色を変えたいんです。頑張りましょう。

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

ユーザがログインすると、指定されているシェルが立ち上がります。シェルが立ち上がる時、初期設定を行うためにいくつかの設定ファイルを見に行きます。すべての設定ファイルの説明は省略しますが、このコマンドプロンプトの設定などの環境変数の設定は、設定ファイルの一つである「.bashrc」というファイルに書かれています。シェル(bash)が立ち上がるときに「.bashrc」を読んでいろいろな設定を行っています(実際にはスクリプトになっているため .bashrc を実行することにより設定が行われます)。

つまり今までの話をまとめると、誰がどうやってこのコマンドプロンプトの表示形式を設定しているかというと、シェル(bash)が立ち上がる時に.bashrcを読み込んで設定している、ということになります。

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

この .bashrc は実はホームディレクトリにあります。でも今までホームディレクトリをlsしても、このファイルはリストされませんでしたよね。実は、「.」(ピリオド)から始まるファイルは普通にlsした場合は表示されないようになっています。普段見る必要のない細かい設定ファイルなどは「.」から始まるファイル名にしておき、普段は目に触れないようにしているわけです。

それでは、ホームフォルダのすべてのファイルを確認してみましょう。確認するには、lsコマンドのパラメータに-a(allの意味)をつけます。

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の設定内容を解読しましょう。(ここが一番げんなりします)

この解読の仕方ですが、非常によくまとまっているサイトがありますので、まずはそのサイトをご紹介します。

プロンプトの確認や設定 – Pocketstudio.jp Linux Wiki

えーっと、、、、、、、

わかりましたでしょうか。なかなか解読するの難しいですよね。ただ、色を変えるだけでしたら簡単です。最初にRaspbianの$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

なお、それぞれの環境での注意点です。

ローカル環境の場合

「Text Editor」や「gedit」の開くメニューからファイルが見えませんので、LXTerminalをオープンして以下のコマンドでファイルを開きます。

TextEditorの場合:

pi@raspberrypi ~ $ leafpad .bashrc

geditの場合:

pi@raspberrypi ~ $ gedit .bashrc

Macからリモートで接続する場合

ターミナルアプリからnanoエディタで編集する場合は「nano .bashrc」でOKですが、他の方法ではそれぞれ以下の注意点があります。

まず、CyberDuckの場合は、一度CyberDuckを立ち上げ、CyberDuckメニュー → 環境設定の「ブラウザ」で「’.’で始まるファイルを表示」にチェックをつけます。

Mac cd

チェックをつけたらアプリを再起動します。これで.bashrcが選択できるようになります。

次に、エディタから直接ファイルを開く場合です。ファイルサーバでアクセスする場合はFinderからファイルが見えませんので、エディタのファイルオープンメニューからアクセスします。例えばText Wranglerの場合は、ファイルを選択するダイアログで以下のように設定します。(他のエディタでも同様にメニューがありますので探してみてください。たまにない場合がありますが…)

Mac tw

Windowsからリモートで接続する場合

TeraTermからnanoエディタで編集する場合は「nano .bashrc」でOKですが、他の方法ではそれぞれ以下の注意点があります。

まず、CyberDuckの場合は、一度CyberDuckを立ち上げ、編集メニュー → 環境設定の「ブラウザ」で「’.’で始まるファイルを表示」にチェックをつけます。

Win cd

またRaspberry Piをファイルサーバにして直接ファイルを開く場合、エクスプローラからファイルが見えませんので、エクスプローラの設定を変更します。エクスプローラの表示メニューを開いて、「隠しファイル」チェックボックスにチェックをつけます。

Win ex

編集が終わったら、保存終了します。これを有効にするにはログインしなおせばいいですが、その場で変更することもできます。sourceコマンドを使用すると.bashrcが有効になります。

pi@raspberrypi ~ $ source .bashrc

この後のコマンドプロンプトから表示が変わります。もし失敗してしまったら、もう一度.bashrcを開いて見直すか、保存したバックアップからもう一度編集し直します。

これでコマンドプロンプトの編集ができました。今回は色を変更しただけですが、表示内容も変更することができますので、試してみてください。

 

嫌な予感がするけど、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接続する

« »