[分享] Cygwin 入門 - BASH on Windows [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



[分享] Cygwin 入門 - BASH on Windows
會員四級
註冊日期:
2008/11/20 21:32
所屬群組:
已註冊使用者
等級: 20
HP : 0 / 487
MP : 163 / 12694
EXP: 48
離線
[分享] Cygwin 入門 - BASH on Windows

前言:

Q.什麼是 Cygwin?

A.
WIKI 對 Cygwin 的說明:
http://zh.wikipedia.org/wiki/Cygwin

簡單的說
它是讓 Windows 下可以執行 bash、dash、csh 的一個方法,
即在 Windows 下可以使用 Linux 終端機的指令。

是自由軟體,此計畫由 RedHat 維護,已有十幾年歷史,開發到現在算穩定還不錯用。

有時我們用 Windows 是迫不得已的
比如:玩遊戲、某些環境就只有 widnows 可用...等等。

但是我們又想要用 unix-like 的操作方式,想用那些 Linux 指令、腳本,那要怎麼辦呢,Cygwin 就是一個解決方案。


Q.在 Windows 跑 bash 有什麼好處?

A.
1.可以使用熟悉的 Linux 指令,比如:grep、sed、awk、wget....等等。讓用 windows 更有效率。

2.可以執行 shell script 腳本!

那麼就可以寫一些腳本程式,讓電腦自動化處理一些事情。

或者這也是 windows 下練習撰寫 shell script 腳本程式的一個平台。

Windows 後期雖有 Power Shell,但畢竟不是 100% 相容我們熟知的 shell script,且我們已經懂怎麼寫 shell script 了,幹麼還去學那個 Power Shell,學那種封閉的東西不是浪費時間嗎 XD


Q.那為何不乾脆 VirtualBox 模擬一個 Linux 就好了?

A.
1.
虛擬機器模擬的 Guest OS,無法控制 Host OS (這邊是 Windows)。
而用 Cygwin 的話,可以操作 Windows 底下檔案。

2.
Cygwin 不是模擬器,它是將 Linxu 的 API 從新寫成 win32 DLL 版的,裡面所有的 Linux 指令工具,其實可看做 windows 底下軟體,比如 vi 就是 vi.exe。

3.
虛擬機器吃記憶體,且容量大。

Cygwin 標準安裝僅 160MB 左右,它不是模擬器,不吃記憶體,當然執行指令工具會吃記憶體,不過吃很小幾乎可忽略。


------------------------------------------------------

安裝:

Q.Cygwin 如何安裝?

A.
Cygwin 官網:(點左邊 install)
http://cygwin.com/install.html

下一個叫做:setup.exe 的程式
執行它

Cygwin 沒有"離線安裝版"
因為它是由一大堆的小套件組成的,且這些套件一直在更新
所以官方只提供線上安裝方式



以下 手把手 STEP by STEP 安裝過程,請看圖說故事:

範例圖片所用版本是 2012年2月的
更新版的,畫面可能會不同,但大同小異















(上圖)這邊要說明一下:
如沒特殊需求,只安裝 "二進位執行檔" 就好了
"原始碼" 不用裝,除非想研究原始碼,下原始碼會吃掉很多硬碟空間






(上圖) 不建議全部安裝

這樣下載太浪費時間、又浪費硬碟間,且很多東西也用不到

建議可以先全部 Default 預設安裝,若有工具找不到,事後可以再"補裝"。

它有紀錄檔,會紀錄安裝,有點像 synaptic 新立得那樣子。"補裝"非常容易。

除非說完全的 Linux 新手,裡面套件名稱一個也不認識,那就可考慮全部安裝。

若有 gcc 編譯需求的話,
要裝 Devel、Libs、Math...等分類套件
(包含 gcc 編譯器和相關 lib 函式庫)










裝好後,點擊桌面的捷徑 Cygwin Terminal(終端機),就可以用了


-------------------------------------------------------

設定:

Q.終端機視窗,字好小哦,看到眼睛拖窗,怎麼改?

A:

如下圖:











Q.為什麼 ls 沒有顏色!?

A.
編輯 /etc/bash.bashrc

一開始裝好時,vi 可能有些問題,等一下會說明

建議先用 windwos 的文書編輯軟體
比如 MadEdit 或 Notepad++ 去編輯

如下圖:
可用編輯器直接去編輯檔案
比如:D:\Cygwin\etc\bash.bashrc
(這個路徑是範例,實際要看你安裝到哪裡而定)



在 /etc/bash.bashrc(bash 初始化設定檔)
檔案最末尾,加入以下內容:


# PS1 命令提示字串改好看
export PS1='\[\033[1;33m\]\u\[\033[1;37m\]@\[\033[1;32m\]\h\[\033[1;37m\]:\[\033[1;31m\]\w \[\033[1;36m\]\$ \[\033[0m\]'

alias ll='ls -lh'
alias la='ls -lha'

# 讓 ls 和 grep 顯示有顏色
alias ls='ls -F -N --color=auto'
alias grep='grep --color=auto'


修改後,要以下步驟才會生效:

1.
輸入指令:source /etc/bash.bashrc
重新讀取 /etc/bash.bashrc(所有使用者 bash 環境初始檔)

2.或者,關掉終端機視窗,重開




Q.為什麼 vi 方向鍵不能用?為什麼 vi 沒有顏色?

A.
因為它沒有 vi 環境設定檔,要自己手動加入

新增 ~/.vimrc(vi 環境設定檔)

~ 是家目錄
比如:D:\Cygwin\home\Admin(這是範例,實際看你安裝到哪裡)

windows 新增檔案,不允許檔名第一個字元是小數點 .
所以必須在終端機中新增檔案
指令: touch ~/.vimrc

然後就會在家目錄中看到 .vimrc 這個空檔案

註:
前面有小數點 . ,Linux 下是隱藏檔
終端機下要用 ls -la 才看的到,或直接 la(alias 別名的)

使用編輯器,比如 MadEdit 或 Notepad++ 去編輯 .vimrc
(注意文件格式必須為 UTF8 無 BOM,unix 斷行)

貼上以下內容:

註:此 vimrc 是 CentOS 直接抄來的,具體內容是什麼意思我不清楚,但確定可以用


if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set fileencodings=utf-8,latin1
endif

set nocompatible " Use Vim defaults (much better!)
set bs=indent,eol,start " allow backspacing over everything in insert mode
"set ai " always set autoindenting on
"set backup " keep a backup file
set viminfo='20,\"50 " read/write a .viminfo file, don't store more
" than 50 lines of registers
set history=50 " keep 50 lines of command line history
set ruler " show the cursor position all the time

" Only do this part when compiled with support for autocommands
if has("autocmd")
augroup redhat
" In text files, always limit the width of text to 78 characters
autocmd BufRead *.txt set tw=78
" When editing a file, always jump to the last cursor position
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
augroup END
endif

if has("cscope") && filereadable("/usr/bin/cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endif

" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif

if &term=="xterm"
set t_Co=8
set t_Sb=[4%dm
set t_Sf=[3%dm
endif




--------------------------------------------------------

一些演示 DEMO

Q.Cygwin 在 windows 底下有什麼特性?

A.這些是我測試發現的一些特性



(上圖)可以直接 cd c: d: e: f: ....等等磁碟槽

要 cd /cygdrive/磁碟編號 也行
但 cd 磁碟槽 比較快




(上圖)終端機可以執行 DOS 指令

比如:dir、ipconfig、net....等等那些,DOS 指令不多

但是如果顯示的結果有中文,會亂碼....
(只有 DOS 指令才會亂碼,Linux 指令比如 cat 可正常顯示中文)




(上圖)如果先 cmd 在套入 bash.exe,執行 DOS 指令不會亂碼

但有一個缺點:cmd 下無法像終端機下可以「滑鼠剪貼」

就是滑鼠框一段字串,即自動複製,可以到別的地方貼上
或者別的地方複製一段字串,終端機上滑鼠右鍵可貼上
總之就是 ssh 那個滑鼠剪貼啦

說明一下這是什麼東西:
Cygwin 安裝目錄底下,有一個 Cygwin.bat
它是以 CMD.exe 去啟動 bash.exe 這個軟體
雖然畫面比較好看,但是無法像 "Cygwin Terminal" 可以滑鼠剪貼
滑鼠剪貼也是 Linux 終端機一個很重要的功能
建議用 "Cygwin Terminal" (安裝完給的那個捷徑)比較好用





(如上圖)Linux 指令 和 DOS 指令,都可同時使用

但是不建議在寫 shell script 腳本時,用到 DOS 指令
因為這畢竟是 Cygwin 才能這樣用,Linux 下可不行




(上圖)確定可以運行 shell sciprt !


---------------------------------------------------------

其它 Q&A

Q.Cygwin 使用上有什麼注意事項嗎?

A.
不要用 chmod、chown 去改 NTFS 下的檔案權限

它有 chmod 指令,但是建議不要用
因為根本不相容,NTFS 有自己的權限系統

FAT/exFAT 的話,修改權限沒用,因為 FAT 沒有權限系統

另外,不需要給 shell script 加可執行的權限
不用加,就是可執行的
比如:./腳本名稱.sh 直接可執行



Q.找不到某些 Linux 工具或指令,怎麼辦?

A.
在跑一次 Cygwin 的 setup.exe

將想要的工具、指令,相關套件"補裝"進去


Q.但是假如 Cygwin 的 setup.exe 裡面,根本沒那個工具怎麼辦?

A.
Cygwin 是一個替代方案,不是萬能

若真沒有,那只有一個方法:去下工具軟體原始碼,自己編譯安裝

因為有 gcc 可以用,所以可以編譯原始碼



Q.裝好的 Cygwin 是綠色軟體嗎?能不能直接拷貝到別台電腦使用?

A.
我檢查過,它並沒有寫入 PATH 環境變數,理論上是綠色軟體

直接拷貝到別台電腦,應該也可以用,終端機的捷徑記得也要一起拷貝,才能啟動終端機。



Q.Cygwin 的 setup.exe 裡面,看到 apche、bind、squid,真的可以跑這些服務嗎?

A.
網路上我搜尋的結果,確實有人這樣用,且也可以用,不過貌似不太好用,因為只能手動啟動服務,無法一開機就載入。

這部份我沒測試,畢竟 winndows 下要跑 apche,用 XAMPP 就好了。bind 和 squod 好像也有 windwos 版。

先透過 Cygwin,再來跑 apache、bind、squid 等服務,看不出有什麼優點,反而缺點比較多...算是雞肋功能吧,食之無味,棄之可惜。



Q.Cygwin 好像還可以跑 X 視窗軟體?

A.
以前是不行,但目前新版的 Cygwin 可以,該計畫已經成功的讓 X 視窗軟體在 Windwos 底下執行。

想像一下,如果 windows 下可以跑 compiz funtion 那是多麼爽啊。

至於方法,因為我沒測試,所以不清楚。


關於這些部份,如果網友們有興趣進行測試,也不妨回文分享一下心得,大家為自由軟體推廣盡一份心力。XD

2012/2/27 14:56
應用擴展 工具箱
回覆: [分享] Cygwin 入門 - BASH on Windows
會員一級
註冊日期:
2011/8/18 14:17
所屬群組:
已註冊使用者
等級: 3
HP : 0 / 52
MP : 6 / 943
EXP: 9
離線
我以前(5年前)有用過cygwin當時是在淡江學 數質方法

有教到一個叫pgplot的套件(for fortran的),因為那個只能在Linux底下跑,我又不想用虛擬機器,所以用就找了這個來裝,因為不是純Linux所以makefile裡要改一些東西,台灣沒文章,我英文又爛,所以去查日文的(現在考過N2了)。

當時的xwin很陽春,只是多一個 白窗(白底黑字)

隔年在NCHC(新竹的國家高速電腦中心)那邊看到他們也有用(版本當然比我新),xwin畫面有變更好。


建議用ftp軟體把全部抓下來之後再裝 會比較快(我當時是這樣 2M的網路...)

2012/2/28 22:51
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.