(搬运自我在SegmentFault的博客)

Cygwin 是一个用于 Windows 的类 UNIX shell 环境。 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性;以及 Bash shell 的改写版本和许多 UNIX 实用程序,它们提供大家熟悉的 UNIX 命令行界面。前一个组件是一个 Windows 动态链接库 (DLL)。后一个组件是一组基于 Cygwin DLL 的程序,其中许多是用未经修改的 UNIX 源代码编译的。它们合在一起提供大家熟悉的 UNIX 环境。

与此同时,MinGW这个项目也在做类似的事情。MinGW是Minimalistic GNU for Windows的缩写。MinGW有一个叫MSYS(Minimal SYStem)的子项目,主要是提供了一个模拟Linux的Shell和一些基本的Linux工具。

这篇文章指出了二者的区别,学习一下:

首先MinGW和Cygwin都不能让Linux下的程序直接运行在Windows上,必需通过源代码重新编译。

现代操作系统包括Windows和Linux的基本设计概念像进程线程地址空间虚拟内存这些都是大同小异的,之所以二者上的程序不能兼容,主要是它们对这些功能具体实现上的差异,首先是可执行文件的格式,Window使用PE的格式,并且要求以.EXE为后缀名。Linux则使用Elf。其次操作系统的API也不一样,如Windows用CreateProcess()创建进程,而Linux使用fork()。

所以要移植程序必然要在这些地方进行改变,MinGW有专门的W32api头文件,来把代码中Linux方式的系统调用替换为对应的Windows方式。而Cygwin则通过cygwin1.dll这个文件来实现这种API的转换,并模拟一个Linux系统调用接口给程序,程序依然以Linux的方式调用系统API,只不过这个API在cygwin1.dll上,cygwin1.dll再调用Windows对应的实现,来把结果返回给程序。

可以用查看他们编译好的程序的导入表来验证这点。二者生成的程序都是能在Windows上运行的EXE文件,显然都是PE格式,用一个PE格式查看工具检查一下就能发现,Cygwin生成的程序依然有fork()这样的Linux系统调用,但目标库是cygwin1。而MingW生成的程序,则全部使用从KERNEL32导出的标准Windows系统API。

要在Cygwin环境中管理软件包,可以使用自带的setup.exe。此外,Cygwin中还有类似于apt-get的包管理器,叫做apt-cyg。这篇文章介绍了apt-cyg的安装和使用。

Cygwin默认的界面如下:

很丑,默认不能复制粘贴,需要开启快速编辑模式或者点击左上角,选择编辑。Cygwin官网建议使用MinTTY作为终端工具。MinTTY已经自带,输入mintty进入。

可以看到,比cmdPowerShell强多了。但怎样将其设置为Cygwin的默认终端?

参考了这篇文章。在Cygwin目录下打开Cygwin.bat,注释掉bash --login -i,加入下面这句:

start mintty bash --login -i

(如果你没有将Cygwin目录加到path中,这里要指明路径)如下图。

关于Cygwin——包管理、替换默认终端、同MSYS的比较的更多相关文章

  1. (转)cygwin包管理器apt-cyg

    通过终端安装apt-cyg之前选要安装以下软件包 wget tar gawk bzip2 Cygwin终端安装 wget http://apt-cyg.googlecode.com/svn/trunk ...

  2. [转]Cygwin的包管理器:apt-cyg

    [转]Cygwin的包管理器:apt-cyg http://zengrong.net/post/1792.htm Cygwin的包管理工具setup.exe实在是难用的让人蛋碎.于是就有了这样一个ap ...

  3. Cygwin的包管理器:apt-cyg

    参考<Cygwin的包管理器:apt-cyg> cygwin下安装每次需要启动set_up,比较蛋疼,还是debian的apt方便,在网上看到应该cygwin 下的apt,觉得不错. 从h ...

  4. 【转】Cygwin的包管理器:apt-cyg

    原文网址:http://zengrong.net/post/1792.htm Cygwin的包管理工具setup.exe实在是难用的让人蛋碎.于是就有了这样一个apt-cyg,可以提供类似于 apt- ...

  5. Windows下安装Cygwin及包管理器apt-cyg(转)

    本文为转载文章: http://www.2cto.com/os/201212/176551.html Cygwin可以在Windows下使用unix环境Bash和各种功能强大的工具,对于Linux管理 ...

  6. 容器编排系统K8s之包管理器Helm基础使用

    前文我们了解了k8s上的hpa资源的使用,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14293237.html:今天我们来聊一下k8s包管理器helm的相 ...

  7. pip;python包管理工具

    刚开始学习Python时,在看文档和别人的blog介绍安装包有的用easy_install, setuptools, 有的使用pip,distribute,那麽这几个工具有什么关系呢,看一下下面这个图 ...

  8. Python黑帽编程1.3 Python运行时与包管理工具

    Python黑帽编程1.3  Python运行时与包管理工具 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...

  9. pycharm快捷键、常用设置、包管理

    pycharm快捷键.常用设置.包管理 在PyCharm安装目录 /opt/pycharm-3.4.1/help目录下可以找到ReferenceCard.pdf快捷键英文版说明 or 打开pychar ...

随机推荐

  1. jquery实现跨域提交(原创)

    jquery实现跨域提交(原创)   我们在运营一个产品的时候往往会遇到这样那样的表单提交,如客户数据收集.申请加盟.意见反馈等,由此我们开发了这样一个产品,可以理解为万能型数据收集平台,不难想到,我 ...

  2. [ CodeVS冲杯之路 ] P1053

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1053/ 直接扫一遍串,把字母对应的 ascii 码直接做数组下标,交给数组统计 最后查询一遍数组的 'a'-'z' , ...

  3. html5标签css3的常用样式

    <meta name=''> name:有如下6个值:application-name:文档名或者应用名,整个文档只能包含一个值.author:文档作者description:文档描述ge ...

  4. Orchard官方文档翻译(一) 总览

    原文地址:http://docs.orchardproject.net/ 最近想要学习了解orchard,但却没有找到相关的中文文档,只有英文文档.于是决定自行翻译,以便日后方便翻阅. 转载请注明原作 ...

  5. ubuntu server unable to resolve host

    cat /etc/resolv.conf (查看resolv.conf中的内容: nameserver 是动态添加的……) #通过添加/etc/resolvconf/resolv.conf.d/bas ...

  6. 使用Code First 创建数据库

    这是一个控制台程序,作用是通过Code First创建数据库. 1.添加EntityFrameWork的引用. 2.添加类 CodeFirstTest1.cs using System; using ...

  7. Leetcode005 Longest Palindromic Substring

    o(n)算法地址:http://blog.163.com/zhaohai_1988/blog/static/2095100852012716105847112/ /* pivot varies whe ...

  8. No valid host was found. There are not enough hosts available

  9. 使用python脚本实现基于指定字符串的文本排序

    朋友用ansible导出了一个文件,文件中包含上千台机器的磁盘信息,他想要知道哪些机器最需要赶紧扩磁盘.思路是,按剩余磁盘空间百分数,从小到大对文本内容重新排序.下面是具体实现. 源文件ip.txt的 ...

  10. linux设备分类

    网络设备:常见的有以太网卡.CAN总线.WIFI.蓝牙 重要的结构体: net_device:用于描述网络设备的属性,为上层提供一个统一的操作接口.网络设备的驱动实际上就是填充此结构体,实现其中的各种 ...