それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

 いますぐコマンドプロンプトを捨てて、Cygwinを使うべき10+の理由

Mac大流行なのでCygwinに需要ないかもしれないけど。一年間のCygwin体験をまとめてみた。今年1年で一番使ったツールで感謝してる。


CygwinはWindows環境にそのままLinuxCUIツールを導入できる。もう「コマンドプロンプト」に拘る必要は薄くなりました。

僕は今年1年の一番の収穫はCygwinを使ったこと。

Cygwinを使うことでターミナルを使いこなせるようになった。そしてMacに移行してもターミナルさえあるから困らないと思えるようになりました。

コマンドプロンプトを捨てるべき理由

SSHコマンドでリモートサーバにアクセスしても文字化けする。
・色・フォントがダサくて使い物にならない。
・コマンドが少ない。grep したい。findしたい

cmd.exeをすててMinttyを使おう。

Cygwinを使うと、minttyというPuttyベースの素晴らしい。ターミナルがついてきます。

CygwinはWindowsにLinuxのコマンド群を移植したものです。

Cygwin+Minttyにすると

  1. ターミナルが綺麗。
  2. 文字化け知らず
  3. Linuxのコマンドはほぼ使える。
  4. SSHが便利
  5. Rsyncが便利
  6. レジストリ読むのが便利。
  7. 簡単にコマンドが入る。
  8. javacなくても大丈夫。
  9. Vimとか便利になる。
  10. ddコマンドあるよ。
  11. SambaのNASも簡単よ。
  12. パス名は適当でいい
  13. iso作れるよ。
  14. passwdも変更できる
  15. 任意のマウントできるよ。
  16. windowsにもSSHログイン出来るようになる。

書いてたらきりがない。とにかく使ってみて。

一年間のCygwinで楽しんだまとめです。そしてCygwinのお陰でMacターミナルで困らなくなってCygwinには感謝してる。

1つずつ振り返っていく。


とその前に、まずコレだけは知っておくべき。

昔のCygwinはとても面倒臭いイメージがあり敬遠していました。ところが

1.7は、新しいCygwin

Cygwin1.5のイメージでいまのCygwinを語るべきではない

レジストリ使わない。
UTF-8になって最強。

詳しくはこっちを参照

・マウントポイントの情報をレジストリに格納しないようにした。代わりに /etc/fstab と /etc/fstab.d/$USER を使う。(ry

・ファイル名が現在の文字集合で表現できないならば、その文字は Ctrl-N + UTF-8 表現に変換される。これにより、現在の文字集合 (codepage) では正しく表現できないファイルにさえアクセスできるようになる。常に UTF-8 を使った正しい文字列を持つためには、環境変数 $LANG, $LC_ALL または $LC_CTYPE に正しい POSIX の値をセットすれば良い。

誰も知らなかった Cygwin 1.7 - BOOLEANLABEL

Cygwinの便利さを主張していく

一年間のCygwinの感動や便利さを振り返りながら、Cygwinの魅力を主張したい。

ターミナルが綺麗。

・半透明Windowが綺麗。Operaは背景。

半透明の設定の細やかさが素敵

・フォントが綺麗。
コマンドプロンプト画面の汚いMSゴシックにバイバイ

写真はM2+ipaフォント


WindowsVista/7のGlassデザインにもできる


文字化け知らず

bashに書くだけでUTF-8が使える。CygwinSjisのイメージでしたがいまや、UTF-8です。


・ファイルがUTF−8
・コマンドの全部の入出力をUTF-8にできる。
・cmd.exeでsjisi使ってた頃には考えられない便利さ。

Cygwinをインストールしたらまず、utf-8を有効にする。
echo "export LANG=ja_JP.utf8" >>  ~/.bashrc
source ~/.bashrc

これでWindowsのファイル”名”がUTF-8で扱える。

でも、pingが化けるので対策。
Cygwin(msys)のUTF-8環境便利にするコマンドラッパー - ブックマクロ開発に

/usr/local/bin/ping
#!/usr/bin/env ruby
KCODE='u'
require "kconv"
cmd = File.basename(__FILE__) +".exe " + $*.join('  ')
IO.foreach("| #{cmd} 2>&1 "){|line|puts line.kconv(Kconv::UTF8,Kconv::SJIS)}

それでも困る場合はnkfが使える。cygwinにNKFが無い。 - ブックマクロ開発に
これだけあればもう困らない。

Linuxのコマンドはほぼ使える。

linuxで便利なコマンドは大抵あります。ls / grep / find / xargs /bash / awk / csplit /split /cat /・・・とにかくほとんど使える。足りないものは諦めるしかないけど。基本的なものは全てある。

環境依存で使えなさそうなものも、実は使える

passwdでWindowsパスワードと連携するらしいぞ(使ったこと無いけど)


SSHが便利

シェル環境と、文字コードが整ったら、つぎはSSH。これがとてつもなく武器になりました。

  • sshがそのまま使えます。
  • scpでファイル転送が可能になりました。
  • rsyncでファイルも転送できます。

もうPutty・Teraterm/Poderosa要りません。

rsyncでファイル転送できるようになるので、殆どの作業がターミナルで完結するようになった。


レジストリ読むのが便利。

レジストリを読み出すだけにとても便利。ちょっとあれどうなってたっけ。って値をREADするだけなのに、regeditだとUAC求められて困る。
でもCygwinなら簡単。読み出し可エントリを順々に読むだけならとても便利。

レジストリファイルシステムにマウントされてるように扱える。

読み込みは普通のディレクトリをたどるだけ。

Cygwinだとレジストリたどるのがものすごく楽 - ブックマクロ開発に

takuya@letsnote:~$ ls /proc/registry/
HKEY_CLASSES_ROOT    HKEY_CURRENT_USER   HKEY_PERFORMANCE_DATA
HKEY_CURRENT_CONFIG  HKEY_LOCAL_MACHINE  HKEY_USERS

ls できるんですよねー

レジストリの書き込みは、

regtoolなどのツールを使う。

GNUコマンドなど便利コマンドが簡単に入る。

setup.exe面倒なんですよね。ってときには、apt-cygでCygwinでもApt/yumっぽくインストールができるようになる。。 - ブックマクロ開発に

apt-cygで:検索→インストール
入れたいパッケージを検索して、インストールします。
apt-cyg find パッケージ名
apt-cyg install パッケージ名

ターミナルで完結します。

たとえば、git /hg などもこれをベースにしてどんどん入っちゃう。楽です。
しかも git / hg がUTF-8なので文字化け知らず。嬉しい。


javacなくても大丈夫。

各種コンパイラが付いているのでシンタックスチェックくらいならすぐ出来る。
たとえば、Javaのために大量にインストール面倒くさいし、シンタックスチェックくらいならGCJでできる。

授業の課題程度なら軽快でいい

takuya@letsnote:~$ gcj-3.exe -C Test.java

http://d.hatena.ne.jp/takuya_1st/20110613/1307994985

結構使える。

Vimとか便利になる。

ここまでで
SSH経由でファイルが取得できるようになる。
・ファイル名が化けない。
文字コードも安心。
コンパイラやシンタックスチェックが出来る

ここまでとなると、Vimも動かしてgVimがわりに使いたくなる。。コーディング作業しても大丈夫ですよね。
コマンドプロンプトVimよりは相当綺麗で見やすいです。

Mintty+Vimだけで相当使い込めるVim環境が出来上がる

vimdiff やら vim256 カラーも使えるようになる。色が綺麗とは素晴らしい。

vimはttymouseなどをつけることで、gvimと変わらない性能がWindowsローカル出せるようになる。

ファイルパスの扱いも困らない。

それでもよく聞くのが、ファイルパスの扱い。

「バックスラッシュがねぇbashのエスケープじゃん?」

と言われた。でもそれ実はあまり気にしなくていい。


WindowはC:/Users/takuyaでもC:¥Users¥takuyaでも同じ。

だから困らない。

どうしても必要なときは変換すれば良い。専用のパス変換コマンドも付いている。

cygpathコマンドでWin<->cygのパス変換できる。

takuya@letsnote:~$ cygpath -w /home/takuya
C:\Users\takuya

同じってのを更に詳しく。

そもそもwindowsってシステムディスクのパス名は省略できるので、これらがが同じ

c:\users\takuya
c:/Users/takuya
/users/takuya

も同じなんですよね。Windowsは最初から、パスは柔軟でいいんです。

CygwinRubyなら、どれでも好きな様に使える。

cygwinrubyからファイルを開く時は、次のどれでもすべて同じ事になる。

open "/Users/takuya/test.dat"
open "~/test.dat"
open "C:/Users/takuya/test.dat"
open "/cydrive/c/users/takuay/test.dat"
open "C:\\users\\takuay\\test.dat"

これらは、全部 * 同じ * です。

/cygdrive が気持ち悪いなら見ないでいい。便利ですね


くわしくは、
cygpath の便利なオプション - ブックマクロ開発に

SambaのNASも簡単よ。

パスの扱いがとても綺麗なのは、ローカルファイルに限ったわけでなくSambaパスも同じ。

cd //192.168.2.10/share/takuya

すごいねー。

結論、パス名は適当でいいのです。コマンドプロンプトより使いやすいよ。

これを最初に覚えれば捗る→" cygpath -ua "です。



Windowsディレクトリ任意のマウントできるよ。

Linuxのマウントと、Windowsフォルダの関連付けは、べつにデフォルト/cygdrive にこだわらなくてもいい。
LinuxほHomeがいいって僕みたいな、変人は
Cygwinを使ってWindowsのHomeとLinuxっぽくHomeを共有する - ブックマクロ開発に
fstab書いてこんなコトした。

  5 C:/Users/ /home/ ntfs  override,binary,auto 0 0
  6 C:/Users/takuya /home/takuya ntfs  override,binary,auto 0 0

これをかけば

/home        ====> C:\Users\
/home/takuya ====> C:\Users\takuya

になる。Linuxシェル環境と同じなのでシェルスクリプト使いまわせた

半角スペースのフォルダ名にも悩まされない

fstabでマウントしちゃえば、解決。

僕はmklinkで, c:\Program files ← C:\programfilesにシンボリック・リンクしている。

これで安心ね。

sudo のあつかい

sudoも欲しくなる。最初の頃は sudo.jsとかUACダイアログを出す、コマンドラッパ書いてたんだけど、メンテがめんどくさなったので。
http://www.howtogeek.com/howto/windows-vista/sudo-for-windows-vista/

これを使って

sudo cmd.exe 

実行してUAC制御下でCygwinしてる。

sudo "cmd.exe  -k mklink"

をやって、mklinkとか使う。
シンボリック・リンクはwindows提供のものを使うべき、Gnuのlnとは別物なので、困ります。でもmklinkでシンボリック・リンクつくれる
http://d.hatena.ne.jp/takuya_1st/20110830/1314683020
http://d.hatena.ne.jp/takuya_1st/20110705/1309896867

fdiskあるよ。

fdiskコマンドもあります。ダミーファイル作って遊べます。ddと組み合わせて遊べる。

MacのOpenコマンドに負けない

cygstartコマンドがMacのOpenに相当します。

cygstart . #エクスプローラー起動
cygstart test.txt # エディタ起動

alias open=cygstart で超便利。

cygwinでサーバー起動できる

cygwinでWindowsにSSHサーバーを立てたらはかどった。
reboot コマンド呼んだり、何かと便利。

まとめ

Cygwinで生活が楽になった。

もうcygwinのないWindowsは考えられない。コマンドやGnu bashや、 mingwよりCygwin一本で完成された環境が手に入るので便利だ。


Opera / EmEditor / Cygwin / LDAP とマイナーなものを愛する私。Cygwinは手になじむツールになりました。

ただし

コンパイルしちゃいけない。なれないうちはCygwinでコンパイルは辞めたほうがいい。もしやるならCorei7マシンを用意しておくこと。Core2でもかなり時間を無駄にするので絶対にオススメしない。