Windowsの「コマンドプロンプト」にMacの「ターミナル」、これらはどちらも「端末エミュレータ(ターミナルエミュレータ、ターミナル)」と呼ばれるソフトウェアです。プログラミングをする際、これら端末エミュレータとつきあうことがあります…
でもそうは言っても、どうつきあったらよいかわかりませんよね?ここでは、WindowsでもMacでもLinuxでも使える「これだけ覚えれば最低限使える!」という端末エミュレータ操作の基本をまとめました。
目次
(1) 端末エミュレータとシェル、カーネル
一言で言うと、端末エミュレータは「コマンド(命令)を入力してOSを操作するためのソフトウェア」です。
実際の動作は、図のように3層に分かれています。再外層が端末エミュレータで、文字の入出力を担当します。ユーザはここでコマンドを入力します。2層目が「シェル」と呼ばれ、入力を解釈してOSに伝え、出力を成形して端末エミュレータに戻す仲介者の役割を果たします。一番内側が実際のOSの様々なサービスで(ファイルシステムの管理、ネットワークへの接続など)、この部分を「カーネル」と呼びます。
これらの用語は、パソコンがなかった時代に作られたものです。当時は、メインフレームと呼ばれる高性能コンピュータをたくさんのユーザが共有して同時に使用していました。ちょうどコンピュータ本体にディスプレイとキーボードがたくさんつながっているイメージです。
各ユーザ向けのディスプレイ・キーボードの部分は「端末(terminal:ターミナル)」と呼ばれ、ユーザはここにコマンドを打ち込むことでメインフレームとやりとりしました。といってもOSサービスそのものに直接アクセスするのではなく、メインフレームではそのコマンドを受け取り、コマンド入力をOSサービス呼び出しに変換するプログラムが走っていました。ちょうどOSサービスを覆い隠し、内側と外側のやりとりを仲立ちするように見えたことから、この仲介プログラムを「シェル(shell:殻)」、OSの中核部分を「カーネル(kernel:核)」と呼んだのです。
現代の「PC」においてはコンピュータ本体とディスプレイ・キーボードがつながっていることがほとんどなので「端末」と呼べるものは存在しません。ただカーネル(OS)に直接アクセスする環境はそれでも必要ということで、過去の端末をエミュレートする「端末エミュレータ」が搭載されているのです。
(2) 端末エミュレータを開く
能書きはこのくらいにして、実際に端末エミュレータを開いてみましょう。まずは端末エミュレータの場所を突き止めるところからです:
- Windows XP/7:スタートメニューから「すべてのソフトウェア」→「アクセサリ」と辿っていき、そこにある「コマンドプロンプト」をクリックします。
- Windows 8以降:スタート画面を表示して、下の方の矢印(↓)ボタンをクリックすると「アプリ」画面が表示されます。そこから「コマンドプロンプト」を探してクリックします。
- Mac OS X:「アプリケーション」フォルダの中から「ユーティリティ」フォルダを探し出し、その中で「ターミナル」を見つけて開きます。
- Linux:ディストリビューションによって場所が違うかもしれません。アプリケーションメニューの検索窓に「terminal」あるいは「端末」と入れてみて、ヒットしたアプリケーションを開いてください。
ちなみにWindowsでAnacondaを使っていて、Anaconda環境の端末エミュレータを開きたい場合は、設定によってはAnacondaから「Anaconda プロンプト」を探して開く必要があります(必要ない場合もあります)。
端末エミュレータを開くと、概ね以下のような画面になると思います:
最初のほうに出てきている文字列(「gwappa@VM-Mint ~ $」あるいは「C:\WINDOWS>」)は「シェルが入力待ちである」ということを示していて、これを「プロンプト(prompt:促すもの、と言う意味;コマンドプロンプトとも)」と呼びます。プロンプトに出てくる内容は、OSやユーザによって違ってきます(LinuxやMacの場合、ユーザがカスタマイズすることも可能です)。
その右側に出ているのは(■あるいは_の印)「カーソル(cursor:もともとはラテン語で「走者」の意味)」と呼ばれますが、これはテキストエディタのカーソルと同じで、入力された文字が挿入される部位を表します。
(3) 端末エミュレータを動かす
では、入力してみましょう。まずは一番無害なものから。
- Windowsコマンドプロンプトの場合は、半角英小文字で「cd」と入力してEnterを押してください。
- Mac/Linuxターミナルの場合は、半角英小文字で「pwd」と入力してEnterを押してください。
どうでしょう?下の行に、何か表示されたのではありませんか?そして、おそらくそれはホームフォルダの場所だと思います。そのさらに下の行には再度プロンプトが表示され、カーソルが今度はそちらに移動しているのが分かると思います。ちなみにこのとき、最初に入力したcdあるいはpwdとその結果はもはや「過去のログ」になっていて、変更ができなくなっていることに注意しましょう。
このcdあるいはpwdという文字列は「コマンド」と呼ばれ、シェルに何かの操作を指示するためのものです。そしてその操作の出力は(何か出力があれば)、その下の行にずらずらと表示されていきます。このように、端末エミュレータを用いた操作では「コマンドを入力→シェルからの出力が下の行に表示される」というサイクルで、次の行、またその次の行、という形で物事が進んで行きます。
カレントディレクトリ
このcd/pwdで表示されたものは、「カレントディレクトリ」のパス(一番外側のディレクトリから順に階層を辿ったもの)です。cdやpwdはカレントディレクトリを出力するためのコマンドで、「current directory」あるいは「print working directory」の略です。
カレントディレクトリは、ちょうどWebブラウザのウィンドウやタブに表示されているURLのようなものです。端末エミュレータの場合、GUIの画面のように「いろんなディレクトリの画面を同時に表示させる」ということができません。表示・操作できるディレクトリは原則として常にひとつで、表示するディレクトリを移動していくことで複数箇所の操作を実現します。このとき、現在操作(走査)中のディレクトリのことを「カレントディレクトリ」と呼んでいます。
パス(path)の表記法
cd/pwdで表示されたパスも、少ししか馴染みがないかもしれません。構造としてはWebブラウザのURLと同じで、ディレクトリやファイルの位置を表します。たとえば
- ファイルシステムの最上位(例えばDドライブ、ハードディスクなど)
- Usersディレクトリ
- gwappaディレクトリ
- Usersディレクトリ
というようなディレクトリ構造をもつgwappaというディレクトリに対しては、その位置は
- Windows: D:\Users\gwappa (Dドライブの場合)
- Mac, Linux: /Users/gwappa
というように表されます。ちなみに階層を区切るときに、Windowsではバックスラッシュ(\)を使うのに対してMacやLinuxではスラッシュ(/)を使うことに注意してください。
ファイルシステムの最上位ディレクトリは、上の例ではWindowsの”D:\”、Linux/Macでは”/”と表されます。これらは「ルート(root)ディレクトリ」とも呼ばれます。付け加えると、Windowsの場合はドライブ/パーティションの数だけC:\、D:\、E:…というルートディレクトリ(ファイルシステム)を作っているのに対して、LinuxやMacの場合は常にルートディレクトリは”/”のひとつだけで、ドライブやパーティションは”/”配下のディレクトリとしてその都度付け加えられるのです(「マウント」と呼ばれます)。
(4) 端末エミュレータでディレクトリを渡り歩く
カレントディレクトリの内容を見る (ls/dir)
“dir”あるいは”ls”コマンドを使います。
- Windowsの場合、”dir”(”directory”の短縮)と入力してEnterを打ちます(dirコマンドの実行)。
- MacやLinuxの場合、”ls”(LSの小文字; “list”の短縮)と入力してEnterを打ちます(lsコマンドの実行)。
カレントディレクトリを移動する (cd)
どの環境でも”cd”コマンド(change/current directoryの省略形)を使います。
- Windows, Mac, Linux:”cd xxx”(cdのあとにスペースを入れて、xxxの部分に移動したい場所を入力)を実行
※ディレクトリの名前自体にスペースが入っている場合は、以下の「スペースの取り扱い」も参照してください!
たとえばWindowsで、C:\Users\gwappaからC:\Users\gwappa\Documents\newmoniaに移動したい場合は、
> cd Documents\newmonia
と入力します。LinuxやMacの場合なら、/Users/gwappaから /Users/gwappa/Documents/newmoniaに移動するには
$ cd Documents/newmonia
と入力すればよいです(スラッシュの向きに注意してください)。
ところでほとんどの端末エミュレータには自動補完機能がついているので、上の例でいちいち全部”Documents”と入力しなくても、”Doc”と入力してtabキーを押せば、エミュレータが自動的に”Documents”に補完してくれます(もし途中までしか補完されない場合は補完候補が複数ありますので、tabキーをもう何回か押してみてください)。
そしてcdは”Change Directory”なので、移動先にファイルを指定してもうまくいきません。ファイルを開くには、開くための別のコマンド(テキストエディットのコマンドや、Macの場合は汎用のopenコマンド)が必要です。ただ今回は「これだけできれば」ということですので、ここでは説明を割愛します。
スペースの取り扱い
cdコマンドを使う際の注意点は、スペースの取り扱いです。ディレクトリ名に”Documents and Settings”のようにスペースがあった場合、
$ cd Documents and Settings
と入力すると、端末エミュレータはこれを「Documents」「and」「Settings」という3つの別々の名前として解釈してしまいます。多くの場合cdの2つ目以降の名前は無視されるので、「cd Documents」と解釈されてしまいます。Documentsディレクトリが存在しない場合、
bash: cd: Documents: No such file or directory
というエラーが出てきてしまいます。
スペースの問題の環境に依存しない対処法として、「ダブルクォートでくくる」という方法があります。
$ cd "Documents and Settings"
こうすれば、いくらスペースを入れても問題なく認識されます。
絶対パスと相対パス
前節で「パス」の説明をしましたが、上のcdの紹介の際にはパスを一部しか入力しませんでした(本来/Users/gwappa/Documents/newmoniaと入れるべきところをDocuments/newmoniaとだけ入れた)。この表記法は「相対パス」と呼ばれ、カレントディレクトリからの部分パスで目的のパスを表す方法です。上の例の場合は/Users/gwappaがカレントディレクトリだったので、そこからのディレクトリ階層だけを入力すればよかったのです。これに対してルートディレクトリからのすべての階層を入力する方式は「絶対パス」と呼ばれます。
ただ相対パスの場合ふつうに入力すると、カレントディレクトリの子ディレクトリ、孫ディレクトリには移動していけますが、親ディレクトリには移動できません。もちろん端末エミュレータには、この欠点に対する解決策があります。具体的には端末エミュレータには、「親ディレクトリ」を参照する特別な相対パス”..”(ピリオドふたつ)があります。試しに端末エミュレータで以下を入力してみてください。
> cd ..
もちろん”..”のあとに、その配下のパスを続けることもできます。
ひとつだけ注意すべきは、端末エミュレータがどうやって絶対パス・相対パスを判別しているかです。方法は結構単純で、じつはパスがルートディレクトリ(”/”あるいは”\”)で始まるかどうかだけを見ています。ですので、相対パスのつもりでも最初に”/”(Windowsなら”\”)で始めてしまうと絶対パスとして解釈されてしまうので注意しましょう。
特別な「ホームディレクトリ」
「ホームディレクトリ」の考え方は、コンピュータがたくさんの端末・ユーザによって共有されていた時代の産物です。一般に、コンピュータのシステムが不特定多数のユーザにいじられてしまうと、勝手に変なソフトをどんどんインストールしてOSがそのソフトに壊されてしまったり、ユーザの操作で間違ってシステムに重要なファイルを消してしまったり…というリスクが生じます。そこで考え出されたのが「ユーザによって使うことができるシステムの範囲を分ける」というアイディアです。具体的には、ファイルシステムを以下のように分けます:
- おおもとのシステム環境
- ユーザ1の環境
- ユーザ2の環境
- …
一般のユーザがコンピュータにアクセスするとき、自由にできるのは個別のユーザ環境だけで、おおもとのシステム環境からは読み込みはできても書き込みはできません。もちろんそれだけではおおもとの環境をメンテナンスすることができなくなるので、一部のユーザにだけ「管理者ユーザ(スーパーユーザ)になれる権利」を与えて、メンテナンスの際に限って管理者としての権利が使えるようにします。こうすることによって各ユーザの自由を最大限確保しつつ、システム自体の環境が不用意に変更されないようにしているのです。
前置きが長くなりましたが、システム環境のルートディレクトリは”\”あるいは”/”ですが、ユーザ環境における「ルートディレクトリ」がホームディレクトリと呼ばれるディレクトリです。言わばこのディレクトリが、「ユーザが好きにしてよい範囲のおおもと」になるのです。このようにホームディレクトリには特別な意味があるので、すぐにホームに戻れるようにディレクトリに略称が存在します。それが”~”(tilde、チルダー)です。全角の〜ではないので注意してください。
実際、cdでどれだけ深いところに戻っても、”cd ~”でホームフォルダに戻ってくることができます:
newmonia:ABBA gwappa$ pwd /Users/gwappa/Music/iTunes/iTunes Music/ABBA newmonia:ABBA gwappa$ cd ~ newmonia:~ gwappa$ pwd /Users/gwappa
特定のディレクトリで端末エミュレータを開く
上記のように、ふつうにターミナルを開いた場合、最初のカレントディレクトリはホームディレクトリになります。毎回ホームディレクトリからターミナル経由でどこかに移動するのは面倒ですよね。できたらFinderやエクスプローラを使ってウィンドウやアイコンを使ってブラウズしたい、と思いませんか?そんなあなた(私もです)のために、少し楽な方法があります。
- Windowsの場合:目的のディレクトリを開き、ファイルとファイルの間の背景をShift + 右クリックすると「ここでコマンドプロンプトを開く…」が表示されますので、それを選択します。
- Mac OS X:目的のフォルダを「ターミナル」のアイコンにドラッグ&ドロップします。
- Linux:ディストリビューションによりますが…Windows同様、ディレクトリの中で右クリックして「ここで端末を開く」を選択できるようにできます(できないようなら、Ubuntu系ならnautilus-open-terminalというパッケージがあるようなので検索してみてください)。
(5) コマンドについて調べる
コマンドが存在するか確かめる (where/which)
たとえばJavaやPythonを自分でインストールしたとき、それがきちんと使えるようになっているかチェックするのは有益です。
最も単純な方法は、端末エミュレータで「java」あるいは「python」と入力してみて反応を見る、という方法です。ただしそこでエラーが出た場合、そもそもインストールに失敗しているのか、それともインストールには成功したけれど端末エミュレータがそれを見つけられていないのか、はたまた端末エミュレータがそれを起動しようとしてエラーが出ているのか、わからないことがあります。
このような場合だけでなく、端末エミュレータが特定のコマンドをどこで見つけているのかを知るのが有用なことがあります。それを実現するのがwhichあるいはwhereと呼ばれるコマンドです。
- Windows, Mac(Snow Leopard以前)の場合:”where <コマンド名>”で、<コマンド名>に調べたいコマンドの名前を入力
- Linux, Mac(Lion以降)の場合:”which <コマンド名>”で、<コマンド名>に調べたいコマンドの名前を入力
Windowsのwhereの場合、そのコマンド名が見つかった場所を列挙してくれます。実際にコマンドを実行する場合は、列挙されたコマンドのうち一番上のものが実行されます。
LinuxおよびMacの場合、whichあるいはwhereで出てくるのはひとつだけで、実際にコマンドを実行する際に呼び出されるプログラムの置き場所が出力されます。
もしインストールしたはずのプログラムが端末エミュレータから見つからない、というときはどうすればよいのでしょうか?申し訳ありませんが、それについてはまたの機会に紹介したいと思います…すみません…
コマンドの使い方を調べる(Windows編)
Windowsコマンドプロンプトの場合、コマンドの後に「/?」(スラッシュとクエスチョンマーク)を入力することで、詳細な使い方を知ることができます。このときのスラッシュはパスを区切るときの\(バックスラッシュ)とは逆向きですので注意してください。
たとえばdirコマンドについて調べたい場合は、以下のようなコマンドを実行すればよいです。
> dir /?
コマンドの使い方を調べる(Linux、Mac編)
LinuxやMacの端末エミュレータでは、各プログラム共通の調べ方と特定のプログラムだけの調べ方があります。
- 共通の調べ方はman(manualの短縮)を使う方法です。適用範囲が広いですが汎用的なプログラムしか対応していない可能性があります。例として、lsについて調べる場合は以下のようにします。
$ man ls
- プログラムによっては、コマンドの後に”-h”あるいは”–help”をつけると、ヘルプが出力される場合があります。たとえばpythonの場合、–helpでヘルプが表示されます。
$ python --help
よく使われるプログラムの場合は、上のいずれかに必ず対応しているはずです。
ちなみにmanコマンドで開いたマニュアルページは、lessと呼ばれるドキュメント表示プログラムで表示されます。Webページのように矢印キーで上下にスクロールできるほか、スペースキーで1ページ分移動することもできます。マニュアルページを終了したい場合はキーボードのqを押します。
おわりに
いかがでしたでしょうか?「これだけできれば」と言いながら、分量が多いですね!とくに最初から全部覚える必要はありませんので、必要なときにこのページなどを見ながら少しずつ慣れていけばよいと思います。
端末エミュレータは、ウィンドウやアイコンを操作するタイプのインターフェース(Graphical User Interface、GUIと呼びます)と違ってテキストの入出力だけでできているので、使用するプログラムもシンプルで完成度の高いものが使えますし、自分で書くのもGUIに比べて簡単です。ぜひこの機会に慣れて、毎日の作業に活用できるようになってください!
“端末エミュレータ これだけできれば(Windows, Mac, Linux)” への 2 件のフィードバック