Cygwin FAQ

最近、Cygwin ユーザーが増えてきてうれしいですが、 同じような質問がしょっちゅう出てくるので、まとめてみました。 質問などをする前に確認してみてください。 また、載せたらいい FAQ や説明が分かりにくいなどもありましたら教えてください。
また、本家の FAQ や りうさんが翻訳されたドキュメント (トップ, FAQ) なども併せて読んでください。

Q.0: 質問する前に。
A.0: 少しは自分で調べてみてから質問しましょう。
Google などの 検索エンジンでキーワード検索してみるとか。 たとえページが英語だったとしても頑張って読んでみましょう。 また、新しいバージョンが出ていないかもチェックしましょう。
A.0:返事をもらいやすい質問の仕方。
「動きません」「分かりません」だけは質問の仕方にかなり問題があります。 質問する上で、以下のことは少なくとも示しましょう。
  • Windows や Cygwin 、アプリケーションのバージョン番号、環境変数など (Cygwin のバージョンは "uname -a" 、 インストールされているアプリケーション一覧は "cygcheck -c")。
  • 「何をしたいのか」「何をやったのか」「どういうエラーがでたのか」。 特にエラーメッセージは重要。
A.0:質問に答えてもらったら、解決したら。
答えてもらったら、形式的にでもお礼を言う方がいいでしょう。 それよりも重要なのは、自分の質問や問題点とそれに対する解決策をまとめることです。 まとめることで、同じ問題を抱える人が同じ質問する必要がなくなりますし、 自分も何が分からなかったのかが確認できて、スキルアップにもつながります。

Q.1: make / gcc / as / ld がインストールされてません。
Q.1: " xx : command not found" (xx = make, gcc, as, ld, ...) と言われます。
Q.1: gcc でコンパイルしようとすると "gcc: installation problem, cannot exec `as': No such file or directory " と言われます。
A.1:
あなたの欲しいもの(make/gcc/as/ld...) がインストールされていません。 デフォルトでは gcc などの開発ツールはインストールされません。
make なら make を、gcc なら gcc を、as/ld なら binutils をインストールしてください。gcc を使う場合は、gcc が内部で as や ld を呼び出すので、binutils もインストールする必要があります。
インストールの方法は setup.exe を実行して、インストールしたいものが「skip」に なっているはずなので、そこをクリックしてバージョン番号が出るようにしてください。
インストール済みなのに見当たらない場合は、reinstall を選んで再インストールしてみてください。



Q.2: シェルスクリプト(.bashrc など)を実行すると " : Command not found" と 言われる
A.2:
ファイルの改行コードが DOS/Windows (CR+LF) になっている可能性が高いです。 改行コードを Unix (LF) に直して保存しましょう。
変更の仕方は、Meadow なら メニューバー → Mule → Set Coding System → Current Buffer で shift_jis-unix や euc-japan-unix などを選ぶとか、 nkf(オプション -Lu) を使う方法などがあります。メモ帳ではできません。 Meadow でデフォルトの改行コードを Unix (LF) にしたい場合は、 .emacs に
(set-language-environment-coding-systems "Japanese" 'unix)
と書いておくといいでしょう(未確認、嘘だったらごめんなさい)。



Q.3: less / vim で日本語がでません、入力できません
A.3:
Cygwin 付属の less は日本語が出ません。自分で日本語パッチを当てて コンパイルする必要があります(バイナリが僕のページに置いてあります)。 さらに DOS窓(などの SJIS ターミナル)で動かすなら、環境変数
JLESSCHARSET=japanese-sjis
と設定する必要があります。
Cygwin 付属の vim で日本語の表示/入力ができます。最低限 ~/.vimrc に
set enc=japan
と書いておく必要があります。 もっと頑張った設定は樋口さんのページで配られている .vimrc を見てください。 ちなみに DOS 窓で漢字入力モードに出入りするには ALT+半角/全角 です。
DOS 窓で日本語を入力したい場合は ~/.inputrc に
set convert-meta off
set meta-flag on
set output-meta on
set kanji-code sjis
と書いておく必要があります。 Windows95,98,Me系では、これをやってもダメらしいです。



Q.4: プロンプトが気に入りません。
Q.4: プロンプトが「既定@OEMCOMPUTER $ 」となります。
A.4:
PS1 を設定しましょう。bash を使う場合は ~/.bashrc か /etc/profile に
PS1="\h:\w$ "
と書いておくと、プロンプトが hostname:username $ となります。 お好みでどうぞ。
Windows のユーザを日本語にするのはお勧めしません。 が、いまさら変えるのが嫌な人は /etc/passwd の自分のエントリの名前を 適当な英字にしましょう。 コンピュータ名はマイコンピュータのプロパティで変更しましょう。 インストール済みのWindows を使っていると「既定@OEMCOMPUTER $ 」 となることが多いです。



Q.5: .bashrc が読み込まれていないようです。
Q.5: ex) .bashrc で alias を設定しても有効になりません。
A.5:
/etc/profile の最後か、~/.bash_login に
test -f ~/.bashrc && . ~/.bashrc
と書いておきましょう。



Q.6: Windows の X ドライブにアクセスしたい (X = A,B,C,...)
A.6:
デフォルトでは /cygdrive/X (X はドライブ名) でアクセスできます。
ls /cygdrive/c
cygdrive と入れるのが長くて嫌だという人は、
mount --change-cygdrive-prefix /drv 
として、すべての Cygwin アプリケーション(サービスも含む)を終了させてから、
ls /drv/c
とアクセスできるようになります。今、どうやってアクセスできるか(= cygdrive prefix)は
mount -p
で、確認できます。



Q.7: /dev/null /dev/zero /dev/tty /dev/random... はないんですか?
A.7:
あります。/dev ディレクトリ内は Cygwin が内部でうまく扱ってくれます。
/dev/null, /dev/zero,/dev/tty, /dev/ttyX,/dev/ptmx, /dev/comX, /dev/fdX
/dev/random, /dev/urandom, /dev/dsp, /dev/windows, /dev/clipboard 
などがあります。 なお、
ls /dev
としても見えません。



Q.8: ビープ(beep)音を消したい。
A.8:
~/.inputrc に
set bell-style none
~/.vimrc に
set visualbell
NT、2000、XP だと、デバイスマネージャのメニューから表示で、 「非表示デバイスの表示」をチェック。デバイス一覧で 「プラグアンドプレイではないドライバ」の中から 「Beep」のプロパティの「ドライバ」タブを見る。 現在の状態が「開始」であれば「停止」を押す。 スタートアップを「無効」にする。 こうすると Beep が一切ならなくなるはず。 (以上の手順は XP のとき。NT、2000 だとちょっと違うかも)



Q.9: ls としても日本語のファイル名が表示されません。
A.9:
ls --show-control-chars
としてみてください。毎回打つのが面倒な人は alias を設定しておきましょう。 .bashrc の中などで
alias ls="ls --show-control-chars"
ただし、SJIS を表示できるターミナルに限ります。 また、これでも表示できない文字もあります。 確か \ が入った文字がいけなかったはずです。 これに対処するには Cygwin に適当なパッチ(場所失念)を当てて、 コンパイルしなおす必要があります。



Q.10: 環境変数 CYGWIN を設定しても反映されてないようなんですが。
A.10:
Cygwin 内部(bash 中など)で設定しても反映されません。 WindowsNT/2000/XP なら Windows の環境変数として設定しておきましょう。 マイコンピュータ→プロパティ→詳細設定→環境変数(XPの場合)で設定できます。 ちなみに、環境変数にはユーザとシステムの2種類があります。 自分が使うのであればユーザの環境変数に、サービス(inetd や sshd)に 設定するのであればシステムの環境変数で設定しましょう。



Q.11: umount できません。
A.11:
umount したいエントリが system または user でマウントされてませんか?
mount
と打って、type system と出てきたら、 umount のオプションに -s をつけてみましょう。例えば、
umount -s /mnt/c
逆に、type user と出てきたら、 umount のオプションに -u をつけてみましょう。例えば、
umount -u /mnt/c
最近は、すべて system としてマウントされます。



Q.12: シェルスクリプトが実行できません。
A.12:
Cygwin以前の問題
  • カレントディレクトリをパスに通してない状態で「./hoge.sh」を「hoge.sh」と打ち込んでいる。
  • シェルスクリプトの先頭に使用するシェルを指定していない。「#!/bin/sh」とか。
Cygwin特有の問題
  • ntsecを使っている場合にファイルの実行権限が付加されていない。



Q.13: vi がありません。
Q.13: bash: vi:command not found と言われます。
A.13:
vi はありませんが、vim はあります。vim のインストールが成功していれば、 vim へのシンボリックリンクが張られるので vi と打てば OK なはず。 vi もなくて、vim もない場合は、vim がインストールされていない or インストールが失敗した可能性が高いので、vim を再インストールしましょう。



Q.14: コンソールで emacs を終了できません。
Q.14: DOS窓の emacs が C-x C-c で 終了しません。
A.14:
CYGWIN 環境変数に tty を追加しましょう。 tty を追加せずに起動してしまったら、 M-x save-buffers-kill-emacs で終わらせましょう。

Thanks