Linux简介
# Linux简介
linux就是一个电脑系统。
它可以主要分为4部分,它们在Linux系统重各司其职。
- Linux内核
- GNU工具
- 图形化桌面环境
- 应用软件
# 内核
其中内核是操作系统的核心,负责管理硬件资源,如CPU、内存、磁盘和网络接口等。它提供系统服务,如进程管理、内存管理、文件系统管理和网络通信等,是操作系统中与硬件直接交互并执行底层任务的部分。总结一下就是,它主要负责以下四种功能:
- 系统内存管理
- 软件程序管理
- 硬件设备管理
- 文件系统管理
# GNU
除了由内核控制硬件设备外,操作系统还需要工具来执行一些标准功能,比如控制文件和程序,而这个任务就是由GNU来完成。
关于GNU的历史:
Linus在创建Linux系统内核时,并没有可用的系统工具。然而他很幸运,就在开发Linux内核的同时,有一群人正在互联网上共同努力,模仿Unix操作系统开发一系列标准的计算机系统工具。
GNU组织(GNU是GNU's Not Unix的缩写)开发了一套完整的Unix工具,但没有可以运行它们的内核系统。这些工具是在名为开源软件(open source software,OSS)的软件理念下开发的。
尽管通常将Linux内核和GNU工具的结合体称为Linux,但你也会在互联网上看到一些Linux纯粹主义者将其称为GNU/Linux系统,藉此向GNU组织所作的贡献致意。”
所以,GNU是一套用来执行计算机各种功能的工具集合。GNU是一个包含大量软件工具和库的项目,旨在提供一个自由且完整的操作系统环境。这些工具和库覆盖了从文本编辑器、编译器、调试器到各种系统管理工具和应用程序,比如GNU Emacs编辑器、GCC编译器套件、GDB调试器、Coreutils(包含ls、cp、mv等基础命令)、GNU C Library等。
# shell
到此,你可能会问,那我们经常说的shell是GNU中的一个工具吗?
对,但不全对。
实际上,Shell作为一个概念,并不是特指GNU项目中的某个工具,它是任何类UNIX操作系统中的一个基本组成部分,提供用户与操作系统内核交互的界面。然而,GNU确实开发了自己的Shell,即Bash
(Bourne Again SHell),它是GNU项目的一部分,并且是许多Linux发行版的默认Shell。
shell的定义与作用:
shell是一种特殊的交互式工具。它为用户提供了启动程序、管理文件系统中的文件以及运行在Linux系统上的进程的途径。shell的核心是命令行提示符。命令行提示符是shell负责交互的部分。它允许你输入文本命令,然后解释命令,并在内核中执行。
通俗易懂的讲,shell——它就是一个命令解释器,接收你输入的一些文本命令并解析,然后根据命令的内容执行相应的程序或系统调用。
我们使用Linux系统,通过命令行模式——输入一些命令,点击回车后,系统之所以能产生对应的变化,其实就是shell在帮我们。它解析这些命令(比如ls
, cd
, 或者mkdir
等),解析成功便执行相应的程序或系统调用。
我们也可以将多个shell命令放入文件中作为程序执行。而这些文件被称作shell脚本。
当我们在Linux终端中直接输入命令时,几乎无一例外都是Shell在帮我们解析并执行这些命令。Shell作为命令行解释器,它的核心职责就是接收用户输入,解析命令及其参数,然后根据命令类型采取相应行动,如执行外部命令、运行内置命令或进行一些内部处理。
不过,存在一些特殊情况或间接方式,用户输入或触发的“命令”可能不直接经过Shell解析执行,但这些情况相对较少见,且往往涉及到系统更深层次的交互或自动化流程。比如图形界面操作、后台服务、计划任务等。这些情况下,虽然最终执行的可能是Shell脚本或系统命令,但触发执行的机制并非用户直接在Shell提示符下输入命令。
至于直接在Shell之外,由用户输入但非Shell解析执行的“特殊命令”,严格意义上讲比较少见,因为即使是在编写脚本、编程代码或使用系统服务配置时,最终调用的逻辑往往还是会通过Shell来执行具体的系统命令。但是,当在程序内部直接调用系统调用(如通过C库函数)而不通过Shell时,可以视为不依赖于Shell的“命令执行”。例如,在C程序中使用fork()
和execve()
系统调用来启动新进程并执行指定程序,这一过程绕过了Shell,直接与操作系统内核交互。
最后,在Linux系统上,一般通常有好几种Linux shell可用。不同的shell有不同的特性,有些更利于创建脚本,有些则更利于管理进程。但,所有Linux发行版默认的shell都是bash shell。
Mac 中的zsh就是一种shell。
# 桌面环境
早期,Linux的操作界面只是一个命令行,我们使用也只能通过输入各种各样的命令。
但后来,随着Microsoft Windows的普及,电脑用户已经不再满足于对着老式的文本界面工作了。这推动了OSS社区的更多开发活动,Linux图形化桌面环境应运而生。
使用桌面环境时,有些操作,便不是由shell来帮我们执行。
更多关于图形化桌面的信息,这里便不展开介绍了,不过值得提醒大家的是,图形化桌面虽然提高了易用性,但它也要占用相当一部分的系统资源。
# 不同的发行版
在工作中,你可能会发现关于Linux有许多不同的版本,每个版本都有不同的叫法,那作为初学者我们该怎么选择呢?或者说它们各自的特性是什么?它们之间的关系只是单纯的新旧版本的关系吗?如果是这样,我们岂不是选较新的版本即可。
Linux之所以存在众多不同的版本(通常称为发行版),原因在于Linux是一个高度模块化和可定制的操作系统。其设计允许根据不同的用户需求、应用场景和技术偏好来调整和优化。
有很多不同的Linux发行版来满足可能存在的各种运算需求。大多数发行版是为某个特定用户群定制的,比如商业用户、多媒体爱好者、软件开发人员或者普通家庭用户。每个定制的发行版都包含了支持特定功能所需的各种软件包,比如为多媒体爱好者准备的音频和视频编辑软件,为软件开发人员准备的编译器和集成开发环境(IDE)。 不同的Linux发行版通常归类为3种:
- 完整的核心Linux发行版
- 特定用途的发行版
- LiveCD测试发行版
# 核心Linux发行版
核心Linux发行版含有内核、一个或多个图形化桌面环境以及预编译好的几乎所有能见到的Linux应用。它提供了一站式的完整Linux安装。下面是其中几种:
- Debian - 成立于1993年,是最早的Linux发行版之一,以其稳定性、社区驱动的开发模式和对自由软件的坚持而闻名(开源免费)。Debian提供了三个主要的分支:Stable(极度稳定,适合服务器)、Testing(较新的软件,适度稳定)和Unstable(最新的软件,适合开发和测试)。它是许多其他发行版(如Ubuntu)的基石。
- Red Hat Enterprise Linux (RHEL) - 虽然RHEL是一个商业发行版,但它对企业和服务器市场的影响巨大,是企业级Linux的代表。RHEL以其高度稳定、长期支持和全面的生态系统著称,广泛应用于数据中心和云环境。虽然本身不是开源的(需付费订阅获取支持),但它衍生出了开源社区版CentOS(现在是CentOS Stream)。
- Arch Linux - 一个面向进阶用户的滚动更新发行版,以其简洁的设计哲学、强大的包管理系统(pacman)和详尽的wiki文档而受到推崇。Arch强调让用户掌握系统配置的每一个方面,适合喜欢从零开始构建个性化系统的技术爱好者。
- Slackware - 最古老的现存Linux发行版之一,以极简主义和“只做必要的事情”的原则闻名。Slackware强调稳定性,不提供复杂的包依赖管理工具,用户需要手动配置和管理系统,这使得它成为学习Linux底层工作原理的好平台。
- SUSE Linux Enterprise - SUSE是一个历史悠久的企业级Linux发行版,特别是在欧洲市场有着深厚的根基。它提供了稳定、安全和全面支持的服务器操作系统,以及一个活跃的开源社区版本OpenSUSE,后者分为Leap(稳定)和Tumbleweed(滚动更新)两个分支。
# 特定用途的Linux发行版
而特定用途的发行版,它们通常基于某个主流发行版,但仅包含主流发行版中一小部分用于某种特定用途的应用程序。
除了提供特定软件外(比如仅为商业用户提供的办公应用),定制化发行版还尝试通过自动检测和自动配置常见硬件来帮助新手安装Linux。这使得Linux的安装过程轻松愉悦了许多。以下是其中几种简单的介绍:
- Kali Linux - 专为网络安全和渗透测试设计的发行版,集成了大量的网络安全工具和漏洞检测软件,是安全研究人员和白帽黑客的首选工具箱。
- Tails (The Amnesic Incognito Live System) - 强调隐私保护和匿名浏览的发行版,旨在提供一个高度安全的上网环境,所有互联网连接都通过Tor网络进行,适合记者、活动家和需要保护通信隐私的用户。
- Parted Magic - 专注于硬盘分区和数据恢复的发行版,提供了GParted等分区工具,以及数据克隆、备份、擦除等功能,适合系统管理员和IT专业人士进行硬盘管理和维护。
- SystemRescueCD - 一个用于系统救援和硬盘管理的工具,可以在系统无法启动时用于修复引导装载程序、恢复丢失的数据、调整分区等,是系统管理员的重要工具。
- Ubuntu Studio - 针对多媒体内容创作者的发行版,预装了大量的音频、视频、图像编辑软件和创意工具,优化了实时音频处理能力,适合音乐制作人、视频编辑师和图形设计师。
- ClearOS - 为企业和中小企业设计的网络和服务器操作系统,集成了防火墙、邮件服务器、文件共享、打印服务等多种网络服务,易于管理和配置,是一个“次世代”的小型企业服务器平台。
# LiveCD测试发行版
LiveCD是一种特殊的Linux发行版形式,它设计成可以直接从光盘(CD、DVD)、USB驱动器或者其他可移动存储设备启动并运行完整的操作系统,而不需要安装到计算机的硬盘上。LiveCD的概念极大地便利了用户在不改动现有系统配置或数据的情况下尝试、演示或修复操作系统。
它的特点如下:
- 免安装体验:用户可以立即体验操作系统,包括桌面环境、预装的应用程序和系统工具,无需永久安装,这对于测试新发行版或演示Linux系统非常有用。
- 便携性:LiveCD作为一个独立的系统,可以在任何兼容的计算机上运行,提供了极大的便携性。
- 定制化:许多LiveCD发行版还允许用户自定义,添加或移除软件包,创建特定功能的LiveCD,如安全审计、系统救援或专用工具集。
尽管十分便捷,但相应的它也有一个明显的不足之处,那就是在应用程序运行上比其他需要安装在本地的发行版会慢很多,因为几乎所有数据都要从CD上访问。
具体的例子这里就不展开了。
# 扩展
CentOS(Community ENTerprise Operating System)是一个基于Red Hat Enterprise Linux(RHEL)源代码的免费企业级Linux发行版。CentOS项目始于2004年,由Gregory Kurtzer创建,旨在提供一个与RHEL二进制兼容的操作系统,但不包含RHEL的商业支持和品牌元素,从而为用户提供一个稳定、可靠且经济高效的服务器操作系统选项。
尽管CentOS在设计时考虑了广泛的企业需求,但它并没有限定于某一特定用途,而是通过其灵活性和强大的社区支持,能够适应多种应用场景。
然而,用户可以根据需要将CentOS定制为服务于特定目的,例如,通过安装特定的软件包集合或配置,将其转变为一个高效的数据分析平台、容器主机或者安全监控系统等。
所以,它也可以归为特定用途一类中。
Ubuntu 是一个基于 Debian 的开源、免费、用户友好的 Linux 操作系统,由南非企业家马克·沙特尔沃思(Mark Shuttleworth)创立的 Canonical 公司负责开发和支持。
Ubuntu 的主要特点包括:
- 用户友好:Ubuntu 设计初衷是让 Linux 更加易于使用,即使是之前没有接触过 Linux 的用户也能快速上手。它提供了直观的图形界面和大量预装的软件,包括办公套件、浏览器、多媒体播放器等。
- 免费和开源:Ubuntu 坚持自由软件的理念,所有软件都是免费提供的,并且鼓励用户修改和分发。其源代码公开,任何人都可以查看、学习和贡献。
- 社区支持:Ubuntu 拥有庞大的全球社区,用户可以在遇到问题时迅速得到帮助。社区不仅提供了技术支持,还积极参与软件开发、翻译和文档编写等工作。
- 软件中心和 APT 包管理系统:Ubuntu 提供了一个集中的软件中心,用户可以通过它轻松安装数以千计的应用程序。同时,使用 Advanced Package Tool (APT) 系统,可以高效地管理软件的安装、更新和卸载。
- 频繁的更新和长期支持版本:Ubuntu 每六个月发布一次新版本,提供最新的软件和技术。同时,每两年会发布一个长期支持 (LTS) 版本,提供长达5年的安全更新和维护,适合企业部署和寻求长期稳定的用户。
- 多样性:Ubuntu 不仅仅是一个桌面操作系统,还提供了服务器版本、云版本以及针对物联网 (IoT) 的版本,广泛应用于个人电脑、服务器、云基础设施、智能设备等多个领域。
- 桌面环境:Ubuntu 曾经使用过多个桌面环境,包括 GNOME、Unity 和 KDE(通过其衍生版 Kubuntu)。从 Ubuntu 18.04 LTS 版本开始,GNOME 成为了默认的桌面环境,并对用户体验进行了优化,包括 Yaru 主题和系统范围内的深色模式支持。
Ubuntu 的目标是创造一个既适合日常用户又适合开发者和企业的操作系统,它的普及促进了 Linux 在个人计算和企业应用领域的广泛采用。
Fedora 是一个基于自由和开源软件的流行Linux发行版,由Fedora项目社区支持,该项目由Red Hat公司赞助。Fedora以其创新性、前瞻性的技术和对开源社区的强烈承诺而著称,经常被看作是Linux技术发展的试验田。