Linux 是一种自由和开放源码的、独立开发的类 Unix 操作系统。Linus 编写了内核,而 GNU 计划提供了绝大多数基础软件和命令工具。
哲学:“一切皆文件”,Linux 没有 C/D/E 盘的概念,所有文件和设备都统一由根目录 / 开始管理。
发行版
狭义的Linux(内核)负责控制硬件,但普通用户没办法使用,许多公司和社区把 Linux 内核 加上 图形界面、软件管理器、常用应用 打包在一起,做成了完整的操作系统,这些被称为 Linux 发行版。
国产系发行版
- 统信UOS,基于深度(Deepin)社区,面向普通用户的桌面系统,注重易用性和低学习成本。
- 麒麟 (Kylin),高安全关键领域,强调最高等级的安全与可信。
- 麒麟软件有限公司,由中国电子集团整合而成
- 银河麒麟,旗舰品牌,面向党政、金融、能源、交通等关键行业的核心业务场景。
- 中标麒麟,存量市场与过渡品牌,主要面向原有中标麒麟系统的用户和项目。
- 星光麒麟,万物智联 (IoT) 品牌,面向物联网、边缘计算、嵌入式设备等新兴智能终端。
- 开放麒麟 (openKylin),开源桌面社区,由麒麟软件等发起,旨在打造一个开源、开放的桌面操作系统根社区。
- 湖南麒麟信安,科创独立上市公司。
- 麒麟信安操作系统,基于Linux开源技术,目前主力是基于openEuler的商业发行版。麒麟信安-电力外部知识库。
- 麒麟软件有限公司,由中国电子集团整合而成
- 欧拉 (openEuler),华为发起,开源基金会托管。
- 龙蜥 (OpenAnolis),阿里云牵头,CentOS的平滑替代,针对云原生优化。
- 深度 (Deepin),一个拥有全球用户的独立社区发行版,以其美观的界面和易用性闻名,是统信UOS的社区版本上游。
图形界面
Linux 的系统内核和图形界面是完全分离的。这意味着你可以根据自己的喜好、电脑的配置,像换衣服一样自由更换甚至定制你的桌面。
- GNOME、KDE Plasma、XFCE、Cinnamon、MATE、Deepin DE(DDE)、Pantheon
包管理工具
包管理器(Package Manager) 就像是智能手机上的“应用商店”。它负责软件的安装、更新、卸载,以及最让人头疼的依赖关系处理。
| 发行版 | 包管理工具 | 软件包格式 | 简介 |
|---|---|---|---|
| Debian/Ubuntu | apt,底层工具dpkg | .deb | 核心命令apt,稳定,软件丰富 |
| Fedora/RHEL/Centos | dnf,底层工具rpm | .rpm | 核心命令dnf/yum,依赖解析高效 |
| Arch | pacman | .pkg.tar.zst | 核心命令pacman,简洁快速,AUR社区仓库强大 |
| 跨发行版的“通用”包管理器:Flatpak、Snap、AppImage。 |
Linux内核
Linux 内核是操作系统的核心。它像一个全能的“大管家”,一端连接着计算机的物理硬件,另一端服务于各种运行的程序(软件)。
系统内存管理
- 虚拟内存(Virtual Memory): 内核给每个程序制造了一个“我独占了巨大内存”的假象(虚拟地址)。这样程序之间互不干扰,极大地提高了系统的安全性。
- 内存保护: 严格隔离不同程序的内存区域。程序 A 绝对无法偷看或修改程序 B 的内存数据,这也是 Linux 极难崩溃和中病毒的原因之一。
- 交换空间(Swap): 当物理内存快不够用时,内核会聪明地把暂时不用的数据挪到硬盘的特定区域(Swap 分区),等需要时再挪回来。
软件程序管理
- 时间片轮转: 内核把 CPU 的时间切成极小的微秒级碎片。上一微秒给微信,下一微秒给浏览器,因为切换极快,给用户的感觉就是所有程序在“同时运行”。
- 优先级调度: 内核会给不同的进程划分优先级。比如,保障系统运行的底层服务拥有高优先级,而你挂在后台下载文件的进程优先级较低。
- 进程间通信(IPC): 内核为不同的程序提供“打电话”的机制,让它们能够安全地交换数据。
硬件设备管理
- 驱动程序(Drivers): 内核中包含了大量的硬件驱动,或者支持动态加载驱动。驱动就像是翻译官,把内核的通用指令翻译成特定硬件能听懂的“方言”。
- 中断处理(Interrupts): 当你敲击键盘或移动鼠标时,硬件会向内核发送一个“中断”信号。内核会立刻停下手里不重要的活,优先处理你的输入。
- 设备即文件: 再次呼应 Linux 的终极哲学——内核把所有的硬件设备都抽象成 /dev 目录下的一个“文件”(例如:第一块硬盘叫 /dev/sda),让软件可以像读写普通文件一样去操作硬件。
Linux硬件设备分类
- 块设备(Block Device)—— 文件标识:b1。
- 数据以固定的“块”(Block,如 512 字节或 4KB)为单位进行读写。它最大的特点是支持随机访问。
- 典型代表:如硬盘、SSD、U盘。
- 字符设备(Character Device)—— 文件标识:c
- 数据像水流一样,以“字节/字符”为单位按顺序进行读写。它不支持随机访问,数据必须先进先出。
- 典型代表:键盘、鼠标、声卡、打印机。
- 网络设备(Network Device),网络设备在 Linux 中地位非常特殊,它是唯一不遵循一切皆文件哲学的硬件设备。
- 它负责在网络上收发数据包。为了追求极致的传输效率,Linux 内核没有为它在 /dev/ 下创建对应的设备文件,程序无法通过普通的 open、read 命令去操作它。
- 典型代表:网卡。
- 虚拟设备 / 伪设备(Virtual Device),这类设备没有对应的物理硬件,纯粹是由 Linux 内核或软件通过代码模拟出来的“工具人”设备。为了让软件能像调用硬件一样调用它们,它们通常会伪装成字符设备或块设备。
- 典型代表
- /dev/random 与 /dev/urandom: 内核的随机数生成器(伪装成字符设备),程序需要加密密钥时就会从这里读取数据。
- /dev/null: 传说中的“无底洞/黑洞”。任何丢给它的数据都会直接消失,常用于在终端中屏蔽报错信息(如 cmd > /dev/null 2>&1)。
- /dev/zero: 零值生成器。读取它会得到无穷无尽的 0,常用于初始化一个全零的大文件。
- /dev/loop0(回环设备): 伪装成块设备。它可以把一个普通的 .iso 镜像文件挂载起来,让系统以为这是一个真正的光盘或硬盘。
- 典型代表
关于设备命名,因为 Linux 追求自由,Linux 内核官方从未、也永远不会规定一套强制的设备命名策略,这个权力交给了用户空间(如 systemd 和发行版)。由一个叫 udev(设备管理器)的守护进程在后台根据一系列规则文件动态生成的。不过,业界有一些公认的、标准的参考来源和命名规律。
Linux 内核官方设备清单 ArchWiki 的 udev 规则指南 Red Hat 官方关于“可预测网络设备命名”的文档
设备驱动管理
Linux驱动的两种存在形式
- 内核模块(Kernel Module)
- 定义: 动态加载到内核的驱动(类似插件)。
- 文件格式: 以 .ko(Kernel Object)为后缀。
- 存储路径: /lib/modules/$(uname -r)/kernel/。
- 优点: 按需加载,不占用多余内存,升级驱动不需要重新编译整个内核。
- 内置驱动(Built-in Driver)
- 内置驱动(Built-in Driver)
- 定义: 在编译内核时,直接静态编译进内核二进制文件(vmlinuz)中的驱动。
- 优点: 系统启动时立即可用。
- 缺点: 无法动态卸载。
驱动管理命令
文件系统管理
- VFS(虚拟文件系统): 这是 Linux 的一大神器。不管你的硬盘格式是 ext4、XFS、还是 Windows 的 NTFS,内核在最上层提供了一套完全统一的接口。你拷文件时,根本不需要关心底层是什么格式。
- 日志式文件系统(Journaling): 现代 Linux 文件系统(如 ext4)都有日志功能。如果电脑突然断电,内核可以通过读取日志快速修复文件,防止数据损坏。
- 权限控制: 配合 Linux 的多用户机制,内核严格把关谁能“读”、谁能“写”、谁能“执行”某一个文件。
Footnotes
-
终端输入ls -l,每行最左边第一个字符输出为文件标识。 ↩
