Linux环境搭建

Linux 背景介绍

发展史

在学习 Linux 系统编程的过程中,你可能会对 Linux 的起源和发展历程感到好奇。让我们简要回顾一下 Linux 的发展历史。提到 Linux,我们不得不先谈谈 UNIX。

UNIX 发展的历史

1969年至1970年间,AT&T的贝尔实验室研究人员 Ken Thompson 和 Dennis Ritchie,基于 Multics 系统的许多特点,开发了 UNIX 系统。它最初在小型机上运行,满足了科研环境的需求。从诞生之初,UNIX 就是一个有价值的、高效的、多用户和多任务的操作系统

UNIX 从满足个人设计需求开始,逐步发展成为由许多不同开发商支持的标准软件产品。

首个 UNIX 版本免费提供给许多知名大学的计算机系使用。

1972年,贝尔实验室开始发放商业版本,并授权给不同的用户使用,其中之一是加州大学伯克莱分校的计算机系。伯克莱为系统添加了许多新功能,这些功能后来成为了标准。

1975年,伯克莱通过其下属部门 BSD 发布了自己的 UNIX 版本。UNIX 的 BSD 版本成为 AT&T 贝尔实验室版本的主要竞争者,同时其他独立开发的 UNIX 版本也开始出现。

1980年,微软公司开发了名为 Xenix 的 UNIX PC 版本。AT&T 发布了第一个商业版本,称为 System III,后来被对商用软件产品支持良好的 System V 所替代。

与此同时,UNIX 的 BSD 版本不断发展。在70年代末期,BSD UNIX 成为了国防部高科技研究机构科研项目的基础。结果,伯克莱发布了一个名为 BSD Release 4.2 的有效版本。

BSD Release 4.2 包括了高级的文件管理器和基于 TCP/IP 网络协议的网络功能。现在 TCP/IP 被 Internet 广泛使用。BSD Release 4.2 被许多厂商采用,例如 SUN Microsystem。

UNIX 不同版本的出现导致了对 UNIX 标准的需求,软件开发商不知道他们的程序在哪些版本上运行最合适。

到80年代中期,出现了两个竞争的标准,一个基于 AT&T 的 UNIX 版本,另一个是 BSD 版本。在今天的书店里,你可以找到分别适用于这两个版本的不同 UNIX 书籍,一些是 System V,另一些集中在 BSD UNIX。

AT&T 建立了一个名为 UNIX 系统实验室的新组织,其作用是综合 UNIX 的不同版本,集中开发一个标准系统。

1991年,UNIX 综合实验室综合了 System V Release 3、SUN OS 和 Xenix 的所有特点,发布了 System V Release 4。为了与 System V Release 4 竞争,一些其他公司,如 IBM 和惠普的 Open Software Foundation (OSF),开始开发自己的 UNIX 标准版本,继而出现了两个标准商业版本:OSF 版本和 System Release 4。

AI建筑知识问答 AI建筑知识问答

用人工智能ChatGPT帮你解答所有建筑问题

AI建筑知识问答 22 查看详情 AI建筑知识问答

1993年,AT&T 将其 UNIX 转卖给 Novell 公司。UNIX 系统实验室成为了 Novell 的 UNIX 系统小组的一部分。

Novell 发布了基于 System V Release 4 的自己的 UNIX 版本 UNIXWare,它可以与 Novell 公司的 Netware 系统相连。SUN 公司已经将 System V Release 4 融入其 SUN OS,并发布了 Solaris。两个相互竞争的 UNIX 使用的图形用户界面(一个叫 Motif,另一个叫 Openlook)已经合并为一个新的工作平台标准,称为通用平台环境 (CDE)。

Linux 发展历史

Linus Torvalds 于 1991 年 10 月 5 日发布的 Linux 版本被称为 0.02 版,它能够运行 GNU Bourne Again Shell (bash) 和 GNU 的 C 编译程序 (gcc),以及少量其他语言。Torvalds 绝对没有想到他设想的一种针对高级业余爱好者和黑客的操作系统已经诞生,这就是人们所称的 Linux。

Linux 发布时的版本是 0.02,后来又有 0.03 版,然后跳到 0.10 版。由于世界各地越来越多的程序员开始开发 Linux,它已经达到 0.95 版。这意味着正式公布 1.0 版本的时间已经为期不远了。正式的 1.0 版本于 1994 年公布。

Linux环境搭建

开源 开源和闭源的区别官网企业应用现状发行版本

Linux环境搭建

搭建 Linux 环境

主要有三种方法:

直接安装在物理机上。然而,由于 Linux 桌面使用起来非常不友好,不推荐这种方法。使用虚拟机软件,将 Linux 搭建在虚拟机上。然而,由于当前的虚拟机软件(如 VMWare 等)存在一些 bug,会导致环境上出现各种莫名其妙的问题,比较折腾。使用云服务器,可以直接在 PHP中文网、阿里云或华为云等服务器厂商处购买一个云服务器。使用 XShell 远程登陆到 Linux

关于 Linux 桌面,许多同学的 Linux 启动进入图形化的桌面。这个东西大家以后就可以忘记了。以后的工作中,没有机会使用图形界面。

思考:为什么不使用图形界面?

下载安装 XShell

XShell 是一个远程终端软件。下载官网 https://www.php.cn/link/31f0b956cab7d9c07abd3155a56843f6 “home/school” 则为免费版本。

以上就是Linux环境搭建的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/487299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 13:54:02
下一篇 2025年11月8日 13:56:40

相关推荐

  • Golang构建RSS阅读器 网络Feed解析

    答案是使用Go的net/http库获取Feed并结合gofeed解析,通过设置超时、重试机制和SQLite存储实现高效RSS阅读器。 构建一个Golang的RSS阅读器,核心在于有效地从网络获取并解析不同格式的Feed数据。这通常涉及HTTP请求、XML/Atom解析库的选择与使用,以及如何处理网络…

    2025年12月15日
    000
  • Golang测试优化技巧 并行执行与缓存

    Go测试优化需并行执行与缓存协同。首先,通过t.Parallel()实现测试并行,要求测试完全独立,避免共享状态,可结合t.Run创建子测试并隔离资源如数据库或文件系统,使用t.TempDir()确保文件隔离。其次,Go内置测试缓存基于内容哈希判断是否复用结果,提升重复执行效率,适用于本地开发与CI…

    2025年12月15日
    000
  • Golang如何分析模块大小 检测依赖膨胀

    要分析Go模块大小并检测依赖膨胀,需结合依赖图谱可视化、vendor目录量化分析及二进制符号审查。首先用go mod graph | dot -Tsvg > graph.svg生成直观依赖关系图,识别深层冗余依赖;再通过go mod vendor后执行du -sh vendor/*定位体积过大…

    2025年12月15日
    000
  • Golang实现文件复制 io.Copy高效用法

    答案是使用io.Copy进行流式处理,避免内存溢出,结合defer确保资源释放,通过错误处理保障复制可靠性。 在Go语言里,实现文件复制最推荐且高效的方式,就是利用 io.Copy 这个函数。它能以流式处理的方式,将源文件内容高效地传输到目标文件,避免了将整个文件一次性载入内存,非常适合处理大文件。…

    2025年12月15日
    000
  • Golang状态模式管理 接口实现状态转换

    状态模式通过接口定义状态行为,结构体实现具体状态,上下文委托调用,实现订单等对象的状态流转控制,提升可维护性与扩展性。 在Go语言中,状态模式是一种行为设计模式,适用于对象的行为随着其状态改变而改变的场景。通过接口实现状态转换,可以让状态变更更加清晰、可维护,尤其适合管理复杂的业务状态流转,比如订单…

    2025年12月15日
    000
  • Golang测试子测试使用 t.Run嵌套测试技巧

    t.Run可创建嵌套子测试提升Go测试的组织性与可维护性,通过独立的*testing.T实例实现层级化测试结构,使输出清晰且便于定位问题。 Go语言中, t.Run 提供了一种极为优雅且强大的方式来组织和管理测试。它允许我们将大型测试函数拆分为更小、更独立的子测试,形成清晰的层级结构,这不仅让测试输…

    2025年12月15日
    000
  • Go语言数据库操作:深入理解database/sql包与生态系统

    本文旨在全面解析Go语言中SQL数据库的连接与管理机制。我们将重点探讨标准库database/sql包如何提供一个统一、高效的数据库操作接口,以及第三方驱动如何在此框架下实现对各类SQL数据库的支持。通过理解其设计哲学、核心功能及使用示例,读者将能够自信地在Go项目中集成和管理关系型数据库,打消对官…

    2025年12月15日
    000
  • Golang测试超时控制 限制单测执行时间

    Golang测试超时控制通过设置时间限制防止测试无限运行。使用context.WithTimeout、time.After或Go 1.21+的testing.T.Deadline方法实现,结合select监听超时信号,及时终止测试并释放资源,避免阻塞构建流程。 Golang测试超时控制是指在运行Go…

    2025年12月15日
    000
  • Golang测试数据驱动 从文件加载测试数据

    答案:Golang测试数据驱动通过将测试数据从代码分离到文件实现,支持JSON、YAML、CSV等格式,JSON适用于结构简单场景,YAML适合复杂结构,CSV用于表格数据;通过定义结构体映射数据字段,利用标准库解析文件并驱动测试,同时建议按模块或场景组织数据文件,保持清晰命名与目录结构,提升可维护…

    2025年12月15日
    000
  • 如何检测Golang指针逃逸 使用-gcflags参数分析

    使用 -gcflags=”-m” 可查看Go中变量逃逸情况,如变量被取地址并返回导致逃逸,闭包捕获或赋值给逃逸的接口等,通过分析优化内存分配提升性能。 在Go语言中,指针逃逸指的是原本应在栈上分配的局部变量由于被外部引用,不得不改为在堆上分配。理解逃逸分析有助于写出更高效的代…

    2025年12月15日
    000
  • Golang如何集成C库依赖 cgo使用注意事项

    使用cgo需先安装C编译器,在Go文件中通过import “C”引入C代码,并在注释中配置#cgo CFLAGS和LDFLAGS指定头文件与库路径,调用C函数时注意数据类型转换及内存管理,编译时确保路径正确并处理依赖,运行时若使用动态库需设置LD_LIBRARY_PATH,性…

    2025年12月15日
    000
  • 如何通过反射实现深度拷贝 递归处理各种类型的复制

    答案:通过反射递归复制对象字段可实现深度拷贝,适用于复杂嵌套结构。核心步骤包括处理值类型、创建新实例、遍历字段并递归复制,同时用字典避免循环引用,支持集合与数组,但性能较低需注意优化。 在 C# 中,通过反射实现深度拷贝的关键在于递归遍历对象的所有字段,并为引用类型创建新的实例,同时复制其内部字段。…

    2025年12月15日
    000
  • Golang中值类型和指针类型在函数调用时的区别 解析Golang函数调用时的类型处理

    在go语言中,函数调用时值类型传递副本,不影响原数据;指针类型传递地址,可直接修改原始数据。值类型作为参数传入函数时,操作的是原始数据的拷贝,对原数据无影响,如modifyvalue函数中修改a不影响外部x;指针类型传参时,函数通过解引用操作可改变原数据,如modifypointer通过传入x的地址…

    2025年12月15日 好文分享
    000
  • Golang错误处理终极指南 综合各种场景的最佳实践

    Go语言错误处理的核心在于显式处理和合理包装。通过error接口及fmt.Errorf添加上下文,优先使用errors.Is和errors.As进行错误判断与类型提取,避免重复包装。自定义错误需实现Error()和Unwrap()方法以支持错误链。函数应将error作为最后一个返回值,公开API需定…

    2025年12月15日
    000
  • Golang中如何实现错误分类统计 按类型分组的错误聚合方案

    结论:在golang中实现错误分类统计的核心是定义合理的错误类型并使用map聚合计数。具体步骤包括:1. 定义清晰的错误类型,如通过枚举或自定义error类型;2. 在错误发生时将其归类到相应类型;3. 使用map[errortype]int进行统计;4. 处理第三方库错误时使用errors.is和…

    2025年12月15日 好文分享
    000
  • Go 语言中 “cannot make type” 错误解析及解决方案

    本文旨在解决 Go 语言中常见的 “cannot make type” 错误,该错误通常在使用 make() 函数创建切片、映射或通道时,由于类型声明不正确而引发。本文将详细解释该错误的原因,并提供正确的 make() 函数使用方法,帮助开发者避免此类问题。 在 Go 语言中,make() 函数是用…

    2025年12月15日
    000
  • 使用 make 创建切片时出现 “cannot make type” 错误

    本文旨在解决 Go 语言中使用 make 函数创建切片时遇到 “cannot make type” 错误的问题。我们将深入探讨 make 函数的正确用法,并通过示例代码演示如何创建各种类型的切片,帮助开发者避免类似错误,提升 Go 语言编程技能。 理解 make 函数 mak…

    2025年12月15日
    000
  • Golang “cannot make type” 错误解析与解决方案

    本文旨在解决Golang中常见的 “cannot make type” 错误,该错误通常在使用 make() 函数创建切片、map或channel时出现。通过深入理解 make() 函数的正确用法,并结合示例代码,帮助开发者避免和解决此类问题,提升代码的健壮性。 在Golan…

    2025年12月15日
    000
  • Golang “cannot make type” 错误解析及解决方案

    本文旨在解决Golang中常见的 “cannot make type” 错误,该错误通常在使用 make() 函数创建切片时出现。通过本文,你将了解 make() 函数的正确用法,避免此类错误,并提升你的Golang编程技能。 在Golang中,make() 函数用于创建切片…

    2025年12月15日
    000
  • 使用Python实现多队列选择(Multiplexing)的替代方案

    在Python中,queue.Queue模块提供了线程安全的消息队列,用于在多个线程之间传递数据。然而,与Go语言的select语句不同,Python的queue.Queue本身并不支持同时监听多个队列,并在其中任何一个队列有数据时立即做出响应。Go语言的select语句允许程序同时等待多个chan…

    2025年12月15日
    000

发表回复

登录后才能评论
关注微信