2018/07/13

【04.基礎1】Linuxコマンドとnanoの使い方

どうも、ディープなクラゲです。
ゼロから学ぶディープラーニング推論」シリーズの4回目記事です。
このシリーズでは、Neural Compute StickとRaspberryPiの使い方をゼロから徹底的に学び、成果としてディープラーニングの推論アプリケーションが作れるようになることを目指しています。

第4回目は、RaspberryPiで良く使うコマンドとテキストエディタnanoの使い方を徹底的に説明します。
実は皆さん、インストールする過程で既に使っています。改めてじっくり見てゆくこととしましょう!

【 目次 】


GUIとCUI

PCの操作方法(インターフェース)には大きく分けて2通りあります。

GUIは Graphical User Interfaceの略で、Windowsなどで通常使われている操作方法です。
今回使用するRaspberryPiにはRaspbianというOSをインストールしており、Windowsと同様にマウスを使って操作することが可能です。

一方のCUIは Character User Interfaceの略で、前回のインストールで何度も打ち込んだキーボード入力によるコマンド操作です。

GUIがあるのになぜ、わざわざCUIを使って操作するのか?
クラゲは2つの理由があると考えています。

理由1:SSHで操作することがあるため

SSHとはSecure Shell(セキュアシェル)の略で、主に無線を使ってラズパイをPCからCUI操作する手順のことを言います。
PCアプリソフトのTeraTermなどはこのSSHを使った通信に良く使われます。
前回のインストールではVNCを使ってラズパイの画面まるごとGUI操作できましたが、SSHの場合はターミナルのみでのやりとりになります。
非常に軽く簡単に扱えるため、SSHは良く使われます。

理由2:キーボードによるコマンドで入力した方が効率が良い操作があるため

フォルダの中のファイル一覧を見たり、フォルダの深い階層へ移動するなどは、キーボードでコマンド打ち込むよりマウスを使った方が断然早く分かりやすいと思います。
一方で、Pythonプログラムを実行したり、特定のURLからファイルをダウンロードしたり、同じ動作を繰り返したり、様々な操作をコピペするにはCUIの方が圧倒的に早いです。

では、良く使うLinuxコマンドを見てゆきましょう

ls

lsは "list" の略で、ファイルやディレクトリ(フォルダ)の情報表示を行います。
実際に以下のコマンドを実行してみてください。

ls

現在のディレクトリの全ファイル・フォルダの名前が表示されると思います
ちなみに現在のディレクトリがどこなのかはターミナルの最終行の文字列を見れば分かります

pi@raspberrypi:~/workspace/ncsdk/examples $

上記の場合であれば、"~/workspace/ncsdk/examples"という意味になります。
"~" は "チルダ"というマークで、ユーザーのホームディレクトリです。
新たにターミナルを開くと位置を示す文字列が "~" だけになっていると思います。

pi@raspberrypi:~ $

つまり、新たにターミナルを開いた場合は常にホームディレクトリから始まるということです。

"/" は ディレクトリの区切りを表しています
つまり、"~/workspace/ncsdk/examples" は ホームディレクトリの下の"workspace"の下の"ncsdk"の下の"examples"という意味になります。

cd

cdは "change directory" の略で、ディレクトリを移動する際に使います
lsコマンドを行った際に紫色になっているものがディレクトリです。
例えば、"caffe"というフォルダに移動したい場合は以下のように入力します

cd caffe

逆に移動前のディレクトリに戻りたい場合は以下のように入力します

cd ..

以下のコマンドを打つと、ホームディレクトリに一発で移動できます

cd ~

最後にexamplesフォルダに移動しましょう

cd ~/workspace/ncsdk/examples

mkdir

mkdirは "make directory" の略でフォルダを新規作成する場合に使います
例えば"kurage"というフォルダを作成したい場合は以下のように入力します

mkdir kurage

mv

mvは "move"の略で、ファイルやフォルダを移動することができますが、それより良く使われるのは、ファイル名やフォルダ名の変更です。
例えば、"kurage" というフォルダ名を "jellyfish"というフォルダ名に変更したい場合は、以下のように入力します

mv kurage jellyfish

cp

cpは "copy"の略で、ファイルやフォルダをコピーするときに使います

"examples"にてlsをしてみると "README.md" というファイルがあるので、これを "test.txt" というファイル名でコピーします

cp README.md test.txt

lsを実行すると、実際に作られているのが分かると思います
また、GUIでファイルマネージャーから辿っていって、test.txtをダブルクリックしてみると実際に中身もちゃんとコピーできていることが確かめられます。

ちなみに、フォルダをコピーするときはオプションで -r が必要となります

cp -r jellyfish jellyfish2

rm

rmは "remove"の略で、ファイルやフォルダを削除するときに使います

ファイル "text.txt" を削除する場合は

rm test.txt

フォルダ "jellyfish2" を削除する場合はcpと同様 -r オプションが必要です

rm -r jellyfish2

python

pythonプログラムを実行するには、pythonコマンドを使います。
ここで厄介なのが、pythonには2通りのバージョンが存在することです。
現状pythonはバージョン2系とバージョン3系があり、互換性がありません。
ただし、どちらのバージョンでも動く場合もあります。
そこで明示的にpython3系で実行させたい場合は、以下のようにpython3を使います

python3 run.py

"python"、"python3"コマンドがそれぞれPythonのバージョンいくつに割り当てられているか知るには、以下のコマンドを実行してください

python -V
python3 -V

↑ ↓

ここから3つはコマンドというより、ショートカットキーになります。
ターミナルにて、キーボードのカーソルキーの ↑ ↓ を押下してみて下さい

↑ ↓ は、過去のコマンドを呼び出す ショートカットキーです
何度も同じコマンドを打ち込まなければいけないときなど、非常に便利ですので活用しましょう!

Tab

Tabはコマンドを補完します。
長いコマンドを打つ場合、途中まで打ち込んでからTabキーを押すことで自動補完できる場合があります。

実際にやってみましょう
まずexamplesフォルダに移動しましょう

cd ~/workspace/ncsdk/examples

lsを実行すると分かりますが、"tensorflow"というフォルダがあります
ここに cd を使って移動しますが、全部打ち込まず t でストップしてください

cd t

この状態で Tab キーを打ってみて下さい
そうすると、"cd tensorflow/" と自動的に補完されたと思います。
特に長いフォルダへの移動やファイルの実行などには使えますので、ぜひ活用しましょう

Ctrl + C

Ctrlキーを押しながらCキーを押すと、そのターミナルで実行中のプログラムを強制終了させることができます
例えば以下のコマンドを打ち込んで、計算機アプリを実行させます

galculator

ターミナルに戻って、Ctrlキーを押しながらCキーを押してみてください。
強制終了できたと思います。

その他

インストール時に使ったコマンドなど、Linuxコマンドは他にもたくさんあります。
今回、Pythonを使ってディープラーニングの推論を行う上では、今まで学んだコマンドで十分だと思います。
その他のコマンドを知りたい方はこちらを参照してください
http://jellyware.jp/kurage/raspi/linux_command.html

nano

最後にテキストエディタnanoの使い方です。
インストール時にnanoはすでに使っているため、復習+αという形になります

起動

コマンドはnanoだけでも起動できますが、"nano ファイル名" で起動することをお勧めします。
もし、ディレクトリにそのファイル名がない場合は新規作成になり、ファイルが存在する場合は編集になります。

nano test.txt

間違って開いてしまった場合は、 編集する前に Ctrl + X を入力すれば終了できます。
新規作成の場合は保存されることなく終了しますし、編集の場合は変更なしで終了します。

編集

nanoはCUIで操作するテキストエディタであり、マウスはほとんど使えません。
マウスによる位置移動は出来ず、↑ ↓ ← → のキーボードを使って移動します。
その他の文字入力は一般的なテキストエディタと同じです。

コピーと貼り付け

唯一、マウスを使う操作がコピーと貼り付けです。

文字列の選択はマウスで直接コピーしたい文字列をドラッグして選択することにより可能です。
コピーする場合は、右クリックしてから"コピー"を選択します。
貼り付ける場合は、貼り付けたい位置にカーソルを移動後、右クリックしてから"貼り付け"を選択します。

以下のよく間違えがちな操作にご注意ください

1行削除 Ctrl + K

これはたまに使います。
nanoでは、マウスで文字列を選択して一括削除ということが出来ません。
BackSpaceやDelキーでちまちま消してゆくのが面倒な場合に1行削除は非常に便利です。
消したい行のところでCtrl + Kを押すだけです。
間違って消してしまった場合は、Ctrl + U を押すと復帰します。ただし、最後に消した行だけですのでご注意下さい。

保存して終了

編集が終わったら、保存して終了しますが、それもマウスではなくキーボードで行います。
以下の通りにキーボードを入力します。例えば "Ctrl + O"とは "Ctrl"キーを押しながら"O"キーを押すという意味です。
※ 0(ゼロ)ではなくO(オー)ですので注意してください

Ctrl + O
Enter
Ctrl + X

このコマンドは3点セットで覚えてしまうと楽になります。

保存せずに終了

Ctrl + X を入力します
その際に"変更されたバッファを保存しますか?"と聞かれるため、Nキーを入力します

備考

比較的短いプログラムを書く場合はnanoで十分だと思います。一方で長いプログラムを書く場合は、nanoだと大変なので、PC側にテキストエディタをインストールして、PCで作ったファイルをラズパイ側へ転送させるやり方が良いかと思います。


今回は何気なく使っていたLinuxコマンドとnanoの使い方についてじっくり学びました。次回はプログラミング言語Pythonについて学びましょう!
以上、Linuxコマンドとnanoの使い方でした。