天天看點

在windows上模拟linux環境,MSYS2——Windows平台下模拟linux環境的搭建-Go語言中文社群...

最近從MSYS1.0遷移到了MSYS2.0,簡單講,MSYS2.0功能更強大,其環境模拟更加符合linux。雖然本身來自cygwin,但其內建了pacman軟體管理工具,很有linux範,并且可以直接手動添加Mingw原生編譯工具集。當下git代碼托管最為紅火,其在win平台所使用的linux模拟環境就是msys2.0,從此角度,msys2.0将取代msys1.0成為主流。

1)下載下傳MSYS2.0并安裝

MSYS2的官網為http://msys2.github.io/,但是其下載下傳速度太慢,推薦使用國内的源進行下載下傳,例如使用中科院源http://mirrors.ustc.edu.cn/msys2。根據電腦系統,可以選擇32位(i686版)以及64位(x86_64)。其中32位版本可以運作在32和64位windows中,但64位版msys2隻能運作在64位windows中,我選擇的是32位版本(i686),電腦系統是win7x64(注意,使用32版本msys2仍然可以編譯64位的程式,隻需要mingw編譯工具支援64即可)。對于使用鏡像源的朋友,可以進入/msys2/distrib/下載下傳最新版本。可以選擇安裝包,也可以選擇壓縮包。

安裝完後的目錄清單如下:

總用量 24029

-rw-r--r-- 1 Domain Users 68 三月 30 2016 autorebase.bat

drwxr-xr-x 1 Domain Users 0 十二 28 18:55 bin

-rw-r--r-- 1 Domain Users 915 十二 27 21:39 components.xml

drwxr-xr-x 1 Domain Users 0 十二 27 21:38 dev

drwxr-xr-x 1 Domain Users 0 十二 27 22:52 etc

drwxr-xr-x 1 Domain Users 0 一月 4 11:08 home

-rw-r--r-- 1 Domain Users 6965 十二 27 21:39 InstallationLog.txt

-rw-r--r-- 1 Domain Users 2070564 十二 27 21:39 maintenancetool.dat

-rwxr-xr-x 1 Domain Users 22021168 十二 27 21:39 maintenancetool.exe

-rw-r--r-- 1 Domain Users 4200 十二 27 21:39 maintenancetool.ini

drwxr-xr-x 1 Domain Users 0 十二 28 10:29 mingw32

-rwxr-xr-x 1 Domain Users 50822 九月 8 02:37 mingw32.exe

-rw-r--r-- 1 Domain Users 154 九月 8 02:37 mingw32.ini

drwxr-xr-x 1 Domain Users 0 十二 28 10:30 mingw64

-rwxr-xr-x 1 Domain Users 50822 九月 8 02:37 mingw64.exe

-rw-r--r-- 1 Domain Users 154 九月 8 02:37 mingw64.ini

-rwxr-xr-x 1 Domain Users 50822 九月 8 02:37 msys2.exe

-rw-r--r-- 1 Domain Users 25758 七月 19 13:05 msys2.ico

-rw-r--r-- 1 Domain Users 151 九月 8 02:37 msys2.ini

-rw-r--r-- 1 Domain Users 5307 七月 19 13:05 msys2_shell.cmd

-rw-r--r-- 1 Domain Users 362 十二 27 21:39 network.xml

dr-xr-xr-x 9 Domain Users 0 一月 4 18:50 proc

drwxr-xr-x 1 Domain Users 0 一月 4 18:50 tmp

drwxr-xr-x 1 Domain Users 0 十二 27 22:46 usr

drwxr-xr-x 1 Domain Users 0 十二 27 21:37 var

其中mingw32和mingw64為空檔案夾,可以直接拷貝任意版本的mingw編譯工具集。執行mingw32.exe會預設将mingw32挂在/mingw下,即使用mingw32進行編譯;反之亦然。執行msys2.exe則進入原版msys2的環境,如需要mingw,則需要使用pacman進行安裝。推薦使用mingw32/64。(下面msys2環境均指從Mingw32/64.exe中啟動的環境,并非原始msys2.exe的啟動環境)

2)配置msys2環境

首次進入,會自動在/home/中添加目前電腦使用者的使用者名作為模拟環境的使用者,并建立預設的配置檔案,以“.”開頭:

-rw-r--r-- 1 Domain Users 77 十二 28 11:48 .bash_logout

-rw-r--r-- 1 Domain Users 1255 七月 19 13:05 .bash_profile

-rw-r--r-- 1 Domain Users 6523 十二 30 14:17 .bashrc

-rw-r--r-- 1 Domain Users 3272 七月 19 13:05 .inputrc

-rw-r--r-- 1 Domain Users 148 十二 30 16:29 .minttyrc

-rw-r--r-- 1 Domain Users 1574 七月 19 13:05 .profile

msys2使用mintty作為終端模拟,該軟體比windows自帶的cmd界面更加優秀,并且支援多種編碼方式,可以随時調節視窗大小,設定字型等。該軟體配置檔案為.minttyrc,下面是我的配置:

$ cat .minttyrc

BoldAsFont=-1

CursorColour=0,255,64

CursorType=block

Font=Consolas

FontHeight=12

Locale=zh_CN

Charset=UTF-8

Columns=120

Rows=30

Term=xterm-256color

因為msys2下面絕大多數軟體均使用utf-8編碼,是以建議使用utf-8字元編碼。這樣就會造成使用windows自帶的軟體(如ping,ipconfig等)會顯示亂碼。不用擔心,使用iconv進行實時轉換編碼,例如:

ping www.cnblogs.com | iconv -f gbk -t utf-8

即可正常顯示中文字元,為了友善使用,可以定義一個别名:“alias win='iconv -f gbk -t utf-8'”,以後當使用win的程式時,隻需要在指令後面加入“|win”即可正常顯示。

由于linux預設将.開頭的檔案視為隐藏,但是win則不然,這樣就會在~目錄下面建立各種以點開頭的檔案和檔案夾,為了隐藏次檔案,可以使用win自帶的attrib指令進行隐藏。具體為:

attrib +h +s /S /D /home/user/.*

由于運作環境的問題,如果在msys2下運作則會失敗,請在輸入windows下的正确路徑名。也可以添加到.bashrc中,具體為:

attrib.exe "c:msys2x86homeyourname.*" +h +s //S //D

其中“//”為轉義/,在每次啟動後,自動隐藏.*檔案和檔案夾。

3)安裝必要軟體

msys2最大的優點就是內建pacman軟體管理器,可以友善的對軟體進行安裝與解除安裝。與ArchLinux一樣,pacman會自動安裝依賴包,pacman的基本指令如下:

pacman -S package_name#安裝軟體包

pacman -R package_name#删除軟體包

pacman -Rs package_name#順便删除軟體包相關依賴

pacman -Syu #更新系統中的所有包

pacman -Ss package#查詢軟體包

pacman -Qs package#查詢已安裝的包

pacman -Qi package#顯示查找的包的資訊

pacman -Ql package#顯示你要找的包的檔案都安裝的位置

pacman -Sw package#下載下傳但不安裝包

pacman -U /path/package.pkg.tar.gz #安裝本地包

pacman -Scc#清理包緩存,下載下傳的包會在/var/cache 這個目錄

pacman -Sf pacman#重新安裝包

由于預設msys2使用國外的軟體源,速度很慢,經常下載下傳一半就失敗了,可以更換成國内源,以中科院的為例,在/etc/pacman.d/中有三個mirrorlist檔案,分别為mingw32,mingw64以及msys的源,具體配置如下:

##

## MSYS2 repository mirrorlist

##

## Primary

## msys2.org

## 中國科學技術大學開源軟體鏡像

Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MSYS2/$arch

Server = http://repo.msys2.org/msys/$arch

Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch

Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/

##

## 32-bit Mingw-w64 repository mirrorlist

##

## Primary

## msys2.org

## 中國科學技術大學開源軟體鏡像

Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/i686

Server = http://repo.msys2.org/mingw/i686

Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686

Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/

##

## 64-bit Mingw-w64 repository mirrorlist

##

## Primary

## msys2.org

## 中國科學技術大學開源軟體鏡像

Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/x86_64

Server = http://repo.msys2.org/mingw/x86_64

Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64

Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/

若使用其他源,請根據源說明添加。

下面是我安裝的軟體供參考:

autoconf

autogen

automake

colordiff

cscope

ctags

git

mercurial

nasm

openssh

openssl

p7zip

subversion

tar

xz

yasm

zip

unzip

注意:請不要安裝gcc或mingw的軟體,建議使用其他版本的mingw,pacman軟體倉庫中的是gcc5,推薦使用http://xhmikosr.1f0.de/tools/msys的版本,我使用的是MSYS_MinGW-w64_GCC_483_x86-x64,下載下傳解壓後,直接将mingw提取出,覆寫到Msys2/mingw32即可。

4)定制個性标題和指令前導符

經常使用git的使用者,必定對于此界面很熟悉:

在windows上模拟linux環境,MSYS2——Windows平台下模拟linux環境的搭建-Go語言中文社群...

如何在标題動态的顯示目前git的branch和更改狀态呢?很簡單,從git源碼中提提取出git-completion.sh以及git-prompt.sh,放在~下面,并将其重命名為點開頭,以進行隐藏,然後在.bashrc中增加如下代碼:

# Git Completion which extract from git source/contrib/completion

source ~/.git-completion.sh

source ~/.git-prompt.sh

export GIT_PS1_SHOWDIRTYSTATE=1

export GIT_PS1_SHOWSTASHSTATE=1

export GIT_PS1_SHOWUNTRACKEDFILES=1

export GIT_PS1_SHOWUPSTREAM="verbose git svn"

export PS1='[ 33]0;$MSYSTEM:w $(__git_ps1 "(%s)") 07

33[32m][email protected] [ 33[33m]w 33[36m]$(__git_ps1 "(%s)") 33[0m]

$ '

重新啟動msys2(實際上為mingw32.exe)則可以實作如上圖示。如果進入普通檔案夾,則不會出現git的狀态。