Cygwin の使い方

概要

このページでは授業で用いる Cygwin の使い方を説明します。

多くの場合、戸惑うかと思います。しかし、これを使いこなせるようになれば学科の学びにおいて多くの局面でアドヴァンテージとなります。

前提

以下のレベルに達している学生を前提としています。

Cygwin がそもそも何をするソフトウェアなのか

Cygwin の公式ページには次のように書かれています。

Cygwin is:

すなわち、Cygwin とは Linux っぽい環境と見た目を Windows 上において使えるようにするツールです。また、Linux の各種機能を DLL を使って簡単に導入できます。

もう少しわかりやすく言えば、Cygwin はコマンドによる操作を通じて Windows を操作するソフトウェアです。従来のマウスを用いた操作に比較して煩雑な印象を最初はおそらく持つかと思います。しかし、慣れてしまえばその利点や魅力が見えてくるかと思います。

凡例

ユーザが入力するコマンド

以下のように先頭にドルマークを伴う記述はユーザが入力するコマンドを意味します。

$ [コマンド]

Cygwin の応答

以下のように先頭にドルマークを伴わない記述は Cygwin の応答を意味します。

[内容]

具体的な例

以下の例は一行目がユーザの入力、二行目が Cygwin の応答です。

$ dir
cPro  rubygems-1.8.24  svn

はじめての Cygwin

早速 Cygwin を起動してみましょう。起動方法はインストールマニュアルを御覧ください。起動したら以下の様な画面が表示されるはずです。
授業用  on Twitpic

この状態では Cygwin は [Cygwin をインストールしたフォルダ/home/あなたのユーザ名] を指しています。多くの場合は C:\cygwin\home\あなたのユーザ名でしょう。

今後、計算機実習1の授業で Cygwin を用いる際はこのフォルダに関係するファイルを入れていく事をおすすめします。何らかの事情でそれ以外のフォルダに格納したい場合は後の .bashrc の設定 を御覧ください。

とりあえず C 言語で書いたコードをコンパイルする

ソースを書いて保存する

テキストエディタを開いて以下の内容をコピーアンドペーストして保存してください。保存場所は前章で説明した場所、拡張子は .c としてください。適当なテキストエディタが無い場合はテキストエディタ紹介の記事を参考に導入してください。

#include <stdio.h>

int main(void){
	printf("Hello Cygwin!\n");
	return 0;
}

上記のソースをコピペする際は最後に空行を入れることを忘れないでください。この空行にはスペースやタブも含まれてはいけません。仮にファイル名を hello.c とします。

本当に保存が出来たのか否かを確認します。 Cygwin を起動し、下記のコマンド dir を入力・実行してください。結果として hello.c が出力に含まれていれば成功です。

$ dir
hello.c

この dir は現在見ているフォルダに存在するファイルとフォルダの一覧を表示するコマンドです。

コンパイルする

上で作った hello.c をコンパイルして実行します。コンパイルして実行、の意味については次の節を御覧ください。

まず、コンパイルを実施します。これはコンパイルしたいソースファイルと同じフォルダで実行する必要があります。

$ gcc hello.c

gcc は .c のファイルをコンパイルするコマンドです。結果として a.exe というファイルがアウトプットされているはずです。 dir で確認してください。

$ dir
a.exe hello.c

されなかった場合は何らかのエラーがソースコードにあることになります。その対処については後で説明します。

実行

以下のコマンドで実行ができます。

$ ./a
Hello Cygwin!

楽なコマンド実行

直前に使ったコマンド

直前に使ったコマンドを再度実行したい時は打ちなおしてもかまわないのですが、長いコマンドになると面倒です。その場合はカーソルキー上を押せば直前に使ったコマンドを出せます。更に上を押せば更に遡れますし、下を押せば戻れます。

ファイル・フォルダ名の省略入力

$ gcc hello.c の hello.c を省略入力できます。 h まで打って Tab キーを押してみてください。自動で残りを入力してくれます。ただし、同じフォルダに height.c があった場合、共通部分の he までしか入力されません。hel まで入れた上で Tab を使えば残りも自動補完されます。

違うフォルダを利用する

cd コマンド

週ごとにフォルダ分けしたいということもあるかと思います。その場合、フォルダを移動する必要があります。

cd がフォルダ移動のコマンドです。 Change Directory と覚えると良いでしょう。また、ファイル・フォルダ名の省略入力が可能です。

移動例

以下のようなフォルダ構造だったとします。ここでは [Cygwin をインストールしたフォルダ/home/] を home と記述し、あなたのユーザ名を user と記述します。

home
┗user
  ┣F10
  ┃┣F11
  ┃┗F12
  ┗F20
    ┗F21

起動した時点で dir すると次のようになります。また、現在位置を確認する pwd (Print Working Directory) も便利なコマンドです。あわせて覚えてしまいましょう。

$ dir
F10 F20
$ pwd
/home/user

/home/user 直下の F10 に移動します。cd F10 で移動できます。直後に dir と pwd をして確認してみましょう。

$ cd F10
$ dir
F11 F12
$ pwd
/home/user/F10

/home/user に戻ります。すなわち一つ上のフォルダに戻ります。そのためには cd ../ とします。

$ cd ../
$ dir
F10 F20
$ pwd
/home/user

/home/user に移動するときのみ cd のみでも可能です。一つ上に戻るには常に cd ../ としてください。後者は F11 から F10 に移動するときなどにも使えます。

F21 にアクセスしてまた戻ります。

$ cd F20/F21
$ pwd
/home/user/F20/F21
$ cd ../../
$ pwd
/home/user

初期フォルダ以外のファイルアクセス

例えば D ドライブにアクセスしたい場合があるかもしれません。その場合は /cygdrive/d を使います。

$ cd /cygdrive/d
$ pwd
/cygdrive/d

これを利用すれば Cygwin のフォルダ外でも作業が可能となります。しかし、毎回移動するのは面倒でしょう。 Cygwin 外でしか作業しないとわかっていれば .bashrc の設定を使うと良いでしょう。

gcc におけるエラーメッセージ

gcc した際に問題があった場合はエラーメッセージが表示されます。これは多くの種類があるので一概には言えませんが対処の基本は圧倒的な数が出ても気にせずに上の行にあるエラーから潰していくことです。

いかに具体例を示します。

$ gcc 09C2.c
09C2.c: In function ‘getline1’:
09C2.c:9:5: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘if’
09C2.c:9:11: error: ‘buffer’ undeclared (first use in this function)
09C2.c:9:11: note: each undeclared identifier is reported only once for each function it appears in
09C2.c:14:5: error: expected ‘;’ before ‘return’

出力二行目に 09C2.c:9:5: とあります。これは 09C2.c というファイルの 9 行目の 5 文字目に問題があるという意味になります。これを見たら指定された箇所とその周囲を見て問題を探せば良いのです。その後の expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘if’ も参考になります。

時にたくさんのエラーが出ますが、ひとつの記述ミスから 3, 4 つのエラーが出ることやその記述ミスで後の問題ない部分に影響してエラーとして出るケースも多々あります。たくさんのエラーが出てもそれほど慌てる必要はありません。

ちょっと難しい話

.bashrc

.bashrc は Cygwin が起動した直後に実行されるファイルです。この末尾にコマンドを書き加えておけば起動直後に実行されます。適当なテキストエディタを開いて編集してみるとよいでしょう。

ただし、現状では使い道は最初に閲覧するフォルダを d ドライブに変更する等といったことしかありません。その場合は.bashrc の末尾に以下のように記述します

cd /cygdrive/d

コンパイラの意味

プログラミングの流れを下の図に書きました。
プログラミングの流れ。コードを書いてコンパイルして実行
先に出した例で言えば「Hello Cygwin! と表示したい」と思った上でそれをプログラミングします。結果としてプログラム言語で書かれた hello.c が作られました。しかし、hello.c はこのままでは実行できません。これをパソコンにとって実行できる (理解できる) exe ファイルに翻訳する必要があります。その翻訳をコンパイルと呼びます。

また、プログラム言語のままで動かすことの可能なスクリプト言語というものも存在します。この授業を担当なさっている Martin 先生は Ruby というスクリプト言語を推してます。Cygwin のインストール時に導入が可能なので興味があれば是非導入し、試してみてください。

その他のコマンド

k-tanaka.net 内の UNIX コマンド等といった資料が役に立つでしょう。特に便利なコマンドを以下に列挙します。

コマンドとは異なりますがリダイレクトも便利です。プログラムへの入力・プログラムへの出力をファイルなどから実施できます。下の例では a.exe への入力を input.txt から行い出力を output.txt に保存しています。

$ ./a < input.txt > output.txt