Cygwin一个在 Windows 操作系统上提供类似于Unix、Linux 环境的兼容层项目

news2024/11/28 18:36:48
一、简介

Cygwin 是一个在 Windows 操作系统上提供类似于 Unix/Linux 环境的兼容层的开源项目。它为 Windows 用户提供了一种在 Windows 平台上运行类 Unix 程序的方式。
Cygwin 提供了一组工具和库,包括一个动态链接库(cygwin1.dll)和一个用于安装和管理软件包的包管理器。通过安装 Cygwin,用户可以在 Windows 上使用许多常见的开源软件,如 Bash shell、GCC 编译器、Emacs 文本编辑器等。
Cygwin 通过将 Windows API 转换为类 Unix API 的方式实现了对 Unix/Linux 兼容性的支持。这意味着用户可以在 Cygwin 环境中运行许多原本为 Unix/Linux 设计的程序,而无需进行大量的修改。
Cygwin 提供了一个终端仿真器,可以在其中运行命令行程序。用户可以通过命令行界面使用 Cygwin 提供的工具和命令,也可以编写和运行自己的脚本。
总之,Cygwin 提供了一种在 Windows 上获得类 Unix/Linux 环境的方式,使用户能够在 Windows 平台上使用许多常见的开源工具和软件。
官网:https://www.cygwin.com/
Cygwin的优点:

  1. 广泛的软件包支持:Cygwin提供了广泛的软件包支持,几乎可以找到大部分常见的开发工具和库。
  2. 更好的Windows集成性:Cygwin提供了更好的Windows集成性,可以直接访问Windows文件系统和系统资源。
  3. 更高的兼容性:Cygwin提供了更高的兼容性,可以运行更多的Unix/Linux软件。
    Cygwin的缺点:
  4. 安装和配置复杂:Cygwin的安装和配置相对复杂,需要选择和安装大量的软件包。
  5. 较大的系统开销:Cygwin需要较多的系统资源,并且在运行时可能会有一定的性能开销。
二、安装
  1. 访问官网下载安装包:https://www.cygwin.com/,下载后双击.exe文件,开始安装
    在这里插入图片描述
  2. 选择安装方式
    在这里插入图片描述
  3. 选择安装目录
    在这里插入图片描述
  4. 选择软件包保存位置
    在这里插入图片描述
  5. 选择连接的方式
    在这里插入图片描述
  6. 选择下载站点,不同的镜像存放了不同的包,为了获得最快的下载速度,阿里云镜像:http://mirrors.aliyun.com/cygwin/,网易开源镜像:http://mirrors.163.com/cygwin/ 。
    在这里插入图片描述
  7. 选择需要下载安装的组件包:binutil、gcc-core、gcc-g++、gdb、make、cmake、mingw63-i686-gcc-core、mingw63-i686-gcc-g++、libgccpp1、procps-ng、tcl、pkg-config
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  8. 点击下一步,等待安装完成
    在这里插入图片描述
    在这里插入图片描述
  9. 安装完成,创建开始菜单
    在这里插入图片描述
  10. 运行桌面程序,输入一下命令,验证是否安装成功
    cygcheck -c cygwin
    gcc --version
    g++ --version
    gdb --version
    make --version
    
三、Cygwin命令
  1. cygcheck -c 是检查所有安装的软件的版本号
  2. cygcheck -c cygwin 就是当前Cygwin的版本号。
  3. gcc --version 查看gcc版本
  4. gdb -version 查看gdb版本
  5. g++ --version 查看g++ 版本
  6. pwd 显示当前的路径
  7. cygpath -dm “pwd” 显示当前的完整路径(即windows格式的路径)
  8. cd 改变当前路径,无参数时进入对应用户的home目录
  9. ls 列出当前目录下的文件。此命令有N多参数,比如ls -al
  10. ps 列出当前系统进程
  11. kill 杀死某个进程
  12. mkdir 建立目录
  13. rmdir 删除目录
  14. rm 删除文件
  15. mv 文件改名或目录改名
  16. man 联机帮助
  17. less 显示文件的最末几行
  18. ls 以默认方式显示当前目录文件列表
  19. ls –a 显示所有文件包括隐藏文件
  20. ls –l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行
  21. ls –color=never *.so > obj 不显示文字颜色,将所有so文件记录到obj文件中
  22. cd dir 切换到当前目录下的dir目录
  23. cd … 切换到到上一级目录
  24. cd …/… 切换到上二级目录
  25. cd ~ 切换到用户目录,比如是root用户,则切换到/root下
  26. rm file 删除某一个文件
  27. rm -fr dir 删除当前目录下叫dir的整个目录
  28. cp source target 将文件source 复制为 target
  29. cp /root/source . 将/root下的文件source复制到当前目录
  30. cp –av soure_dir target_dir 将整个目录复制,两目录完全一样
  31. cp –fr source_dir target_dir 将整个目录复制,并且是以非链接方式复制,当source目录带有符号链接时,两个目录不相同
  32. kill 杀死某个进程
  33. mkdir 建立目录
  34. rmdir 删除目录
四、Cygwin之find命令说明
  1. find命令形式:find pathname -options [-print -exec -ok …]
    '''find命令的参数'''
    pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
    -print:find命令将匹配的文件输出到标准输出。
    -exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } ";,注意{   }和";之间的空格。
    -ok:和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
    '''find命令选项'''
    -name:按照文件名查找文件。
    -perm:按照文件权限来查找文件。
    -prune:使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
    -user:按照文件属主来查找文件。
    -group:按照文件所属的组来查找文件。
    -mtime -n +n:按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
    -nogroup:查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
    -nouser:查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
    -newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件。
    -size n:[c]:查找文件长度为n块的文件,带有c时表示文件长度以字节计。
    -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
    -fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
    -mount:在查找文件时不跨越文件系统mount点。
    -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
    -cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
    -amin n:查找系统中最后N分钟访问的文件
    -atime n:查找系统中最后n*24小时访问的文件
    -cmin n:查找系统中最后N分钟被改变文件状态的文件
    -ctime n:查找系统中最后n*24小时被改变文件状态的文件
    -mmin n:查找系统中最后N分钟被改变文件数据的文件
    
五、gcc命令

gcc 是 GNU Compiler Collection(GNU 编译器集合)的缩写,是一个常用的开源编译器。它支持多种编程语言,包括 C、C++、Objective-C、Fortran、Ada 等。gcc 命令用于将源代码文件编译成可执行文件或目标文件。它可以处理多个源文件,并根据文件的扩展名自动选择适当的编译器进行编译,版本不同命令可能有所区别,可查看官网:
1.编译选项

  • -c:只编译源文件,生成目标文件而不进行链接。
  • -o :指定输出文件名。
  • -I :添加头文件搜索路径。
  • -D:定义宏。
  • -S:生成汇编代码文件
  • -Wall:显示所有警告信息。
  • -Werror:将警告视为错误。
  • -std=:指定所使用的 C 或 C++ 标准。
    gcc file.c            // 编译 C 源文件为可执行文件,默认输出为 a.out
    gcc file.c -o output  // 指定输出文件名为 output
    gcc file.cpp          // 编译 C++ 源文件为可执行文件,默认输出为 a.out
    gcc -c file.c         // 编译源文件为目标文件,不进行链接
    gcc -S file.c         // 生成汇编代码文件
    gcc file1.o file2.o   // 将目标文件链接为可执行文件,默认输出为 a.out
    gcc file1.o file2.o -o output  // 指定输出文件名为 output
    
  1. 预处理选项
  • -E:只进行预处理,生成预处理后的源代码。
  • -D:定义宏。
  • -I :添加头文件搜索路径。
    gcc -E file.c         // 只进行预处理,生成预处理后的源文件
    
  1. 链接选项
  • -l:链接使用的库。
  • -L :添加库文件搜索路径。
  • -static:静态链接所有库。
    gcc -l library        // 链接指定的库文件
    gcc -L path           // 指定库文件搜索路径
    
  1. 调试选项
  • -g:生成调试信息。
  • -O0:禁用优化。
  • -ggdb:生成 GDB 调试信息。
    gcc -g file.c         // 生成可供调试的可执行文件
    
  1. 优化选项
  • -O1, -O2, -O3:不同级别的优化。
  • -Os:针对代码大小进行优化。
  • -Ofast:启用所有的优化选项,包括非标准的优化。
    gcc -O2 file.c        // 使用优化级别 2 进行编译
    
  1. 其他选项
  • -Wl,:将 传递给链接器。
  • -M:生成目标文件和依赖关系的规则。
  • -pthread:链接 POSIX 线程库。
    gcc -Wall             // 开启所有警告信息
    gcc -std=c99          // 指定 C 语言标准为 C99
    gcc -std=c++11        // 指定 C++ 语言标准为 C++11
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1172402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图解系列--防火墙

05.01 防火墙是怎样的网络硬件 构建安全网络体系而需要遵循的 CIA 基本理念。CIA 是机密性 (Confidentiality) 、 完整性(Integrity) 、 可用性(Availability)。 防火墙硬件作为防范装置能够同时实现CIA 中3个条目的相应对策。在20世纪90年代中期,普通企业一般都…

Kibana使用Timelion根据时间序列展示数据

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【服务器】Java连接redis及使用Java操作redis、使用场景

一、Java连接redis-No-SQL 1、导入依赖 在你的项目里面导入redis的pom依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency> 2、连接redis 连接redis //…

【MongoDB】MongoExport如何过滤数据导出

问题 使用MongoDB处理导出数据时&#xff0c;想增加数据过滤操作。 例如&#xff1a;导出所有isGirl为true的所有数据。 分析 在mongoexport说明文档中找到了query字段和queryFile字段&#xff0c;用来进行数据查询匹配导出。 query字段 后面直接跟 json格式数据。 queryF…

【C++语法讲解】 | 运算符重构 | 三种运算符的重构方式 |代码演示

文章目录 1&#xff0c;简述2&#xff0c;结构体的定义1&#xff0c;结构体的声明2&#xff0c;结构体的申请 3.1 &#xff0c;在结构体中重构3.2 在结构体外进行重构 1&#xff0c;简述 通常情况下&#xff0c;我们会创建一些简单的数据结构以应对日常的算法使用&#xff0c;…

layui form 中input输入框长度的统一设置

Layui.form中使用class"layui-input-inline"就可轻松将元素都放到一行&#xff0c;但如果元素过多&#xff0c;就会自动换行。那就需要手动设置input框的长度。 像这种情况&#xff1a; 其实只需要添加css样式就可修改了 .layui-form-item .layui-input-inline {wid…

海康Visionmaster通讯管理:通讯管理的心跳管理功能 的使用方法

当外部设备与视觉保持连接过程中&#xff0c;由于各种不可控的原因&#xff08;例如网线被意外拔 出&#xff0c;网口松动&#xff0c;视觉程序意外退出&#xff09;&#xff0c;如何让外部设备的程序可以知道&#xff1a;与视觉的通讯已 经中断。 可以通过通讯管理模块中的心跳…

802.11AX基础---走进HE WLAN

1、WiFi 6 是什么&#xff1f; WiFi 6是IEEE802.11ax的简称&#xff0c;也就是第六代WiFi的标准&#xff1b;它在继承前几代WiFi技术的前提下&#xff0c;不仅对速率进行优化&#xff0c;更着重于对 效率 的提升。 2、WiFi 6 为什么快&#xff1f; WiFi 6 理论速率计算公式&a…

webgoat靶场攻关

A&#xff08;5&#xff09; Broken Access Control Insecure Direct Object References 直接对象引用 直接对象引用是指应用程序使用客户端提供的输入来访问数据和对象。 例子 使用 GET 方法的直接对象引用示例可能如下所示 https://some.company.tld/dor?id12345 https…

css进阶知识点速览

0前言 零基础部分的博客 1选择器进阶 1.1后代选择器 作用&#xff1a;根据html标签的嵌套关系&#xff0c;选择父元素后代中满足条件的元素 选择器语法&#xff1a;选择器1 选择器2 {css} 结果&#xff1a; 在选择器1所找到标签的后代中 注意&#xff1a; 后代包括&#xf…

论文浅尝 | ChatKBQA:基于微调大语言模型的知识图谱问答框架

第一作者&#xff1a;罗浩然&#xff0c;北京邮电大学博士研究生&#xff0c;研究方向为知识图谱与大语言模型协同推理 OpenKG地址&#xff1a;http://openkg.cn/tool/bupt-chatkbqa GitHub地址&#xff1a;https://github.com/LHRLAB/ChatKBQA 论文链接&#xff1a;https://ar…

【std | C++】使用C++返回当前时间的年月日时分秒格式

#include <chrono> #include <ctime> #include <iomanip> #include <iostream> #include <thread>std::string getCurrentDataTimeString() {auto now = std::chrono::system_clock

go语言 | grpc原理介绍(三)

了解 gRPC 通信模式中的消息流 gRPC 支持四种通信模式&#xff0c;分别是简单 RPC、服务端流式 RPC、客户端流式 RPC 和双向流式 RPC。 简单 RPC 在gRPC中&#xff0c;一个简单的RPC调用遵循请求-响应模型&#xff0c;通常涉及以下几个关键步骤和组件&#xff1a; 请求头&a…

【QT】QFileInfo文件信息读取

基于上节&#xff1a;【QT】文件读写-CSDN博客 //文件信息类QFileInfo info(filePath);qDebug() << "后缀名:" << info.suffix() << "大小:"<< info.size()<< "文件名:" << info.fileName() << "…

消息中间件-RabbitMQ介绍

一、基础知识 1. 什么是RabbitMQ RabbitMQ是2007年发布&#xff0c;是一个在AMQP(高级消息队列协议)基础上完成的&#xff0c;简称MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法&#xff0c;由Erlang&#xff08;专门针对于大…

Git 内容学习

一、Git 的理解 Git是一个分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称 DVCS&#xff09;&#xff0c;用于对项目源代码进行管理和跟踪变更。分为两种类型的仓库&#xff1a;本地仓库和远程仓库。 二、Git 的工作流程 详解如下&#x…

【大学英语视听说上】压头韵收集 + 自然环境口语问答 + 口语考试练习

压头韵&#xff1a; 自然环境口语问答 Q1: Do you like wildlife? Why? Yes, I like wildlife because it represents the rich biodiversity of our planet. Wildlife plays crucial roles in ecosystem health and resilience, providing essential services like pollina…

【LeetCode刷题-栈与队列】--232.用栈实现队列

232.用栈实现队列 class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack new ArrayDeque<Integer>();outStack new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}public int pop() {if(…

Python基础入门例程36-NP36 谁的数字大(运算符)

最近的博文&#xff1a; Python基础入门例程35-NP35 朋友的年龄是否相等&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程34-NP34 除法与取模运算&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程33-NP33 乘法与幂运算&#xff08;运算符&#xff0…

【软考中级】软件设计师-下午题

下午题 试题一 黑洞&#xff1a;加工有输入无输出 白洞(奇迹)&#xff1a;加工有输出无输入 灰洞&#xff1a;数据流输入的加工不足以产生输出 结构化语言&#xff1a; IF *** THEN ELSE IF *** THEN ******* END IF END IF 数据流的父子图平衡&#xff0c;如果父子图平衡就不…