Linux 是一种自由和开放源码的、独立开发的类 Unix 操作系统。Linus 编写了内核,而 GNU 计划提供了绝大多数基础软件和命令工具。 哲学:“一切皆文件”,Linux 没有 C/D/E 盘的概念,所有文件和设备都统一由根目录 / 开始管理。

百科 维基百科 百度百科

Linux系统的组成

发行版

狭义的Linux(内核)负责控制硬件,但普通用户没办法使用,许多公司和社区把 Linux 内核 加上 图形界面、软件管理器、常用应用 打包在一起,做成了完整的操作系统,这些被称为 Linux 发行版

国产系发行版

  • 统信UOS,基于深度(Deepin)社区,面向普通用户的桌面系统,注重易用性和低学习成本。
  • 麒麟 (Kylin),高安全关键领域,强调最高等级的安全与可信。
    • 麒麟软件有限公司,由中国电子集团整合而成
      • 银河麒麟,旗舰品牌,面向党政、金融、能源、交通等关键行业的核心业务场景。
      • 中标麒麟,存量市场与过渡品牌,主要面向原有中标麒麟系统的用户和项目。
      • 星光麒麟,万物智联 (IoT) 品牌,面向物联网、边缘计算、嵌入式设备等新兴智能终端。
      • 开放麒麟 (openKylin),开源桌面社区,由麒麟软件等发起,旨在打造一个开源、开放的桌面操作系统根社区。
    • 湖南麒麟信安,科创独立上市公司。
  • 欧拉 (openEuler),华为发起,开源基金会托管。
  • 龙蜥 (OpenAnolis),阿里云牵头,CentOS的平滑替代,针对云原生优化。
  • 深度 (Deepin),一个拥有全球用户的独立社区发行版,以其美观的界面和易用性闻名,是统信UOS的社区版本上游。

图形界面

Linux 的系统内核和图形界面是完全分离的。这意味着你可以根据自己的喜好、电脑的配置,像换衣服一样自由更换甚至定制你的桌面。

  • GNOME、KDE Plasma、XFCE、Cinnamon、MATE、Deepin DE(DDE)、Pantheon

包管理工具

包管理器(Package Manager) 就像是智能手机上的“应用商店”。它负责软件的安装、更新、卸载,以及最让人头疼的依赖关系处理。

发行版包管理工具软件包格式简介
Debian/Ubuntuapt,底层工具dpkg.deb核心命令apt,稳定,软件丰富
Fedora/RHEL/Centosdnf,底层工具rpm.rpm核心命令dnf/yum,依赖解析高效
Archpacman.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硬件设备分类

  1. 块设备(Block Device)—— 文件标识:b1
    • 数据以固定的“块”(Block,如 512 字节或 4KB)为单位进行读写。它最大的特点是支持随机访问。
    • 典型代表:如硬盘、SSD、U盘。
  2. 字符设备(Character Device)—— 文件标识:c
    • 数据像水流一样,以“字节/字符”为单位按顺序进行读写。它不支持随机访问,数据必须先进先出。
    • 典型代表:键盘、鼠标、声卡、打印机。
  3. 网络设备(Network Device),网络设备在 Linux 中地位非常特殊,它是唯一不遵循一切皆文件哲学的硬件设备。
    • 它负责在网络上收发数据包。为了追求极致的传输效率,Linux 内核没有为它在 /dev/ 下创建对应的设备文件,程序无法通过普通的 open、read 命令去操作它。
    • 典型代表:网卡。
  4. 虚拟设备 / 伪设备(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驱动的两种存在形式

  1. 内核模块(Kernel Module)
    • 定义: 动态加载到内核的驱动(类似插件)。
    • 文件格式: 以 .ko(Kernel Object)为后缀。
    • 存储路径: /lib/modules/$(uname -r)/kernel/。
    • 优点: 按需加载,不占用多余内存,升级驱动不需要重新编译整个内核。
  2. 内置驱动(Built-in Driver)
    • 内置驱动(Built-in Driver)
    • 定义: 在编译内核时,直接静态编译进内核二进制文件(vmlinuz)中的驱动。
    • 优点: 系统启动时立即可用。
    • 缺点: 无法动态卸载。

驱动管理命令

文件系统管理

  • VFS(虚拟文件系统): 这是 Linux 的一大神器。不管你的硬盘格式是 ext4、XFS、还是 Windows 的 NTFS,内核在最上层提供了一套完全统一的接口。你拷文件时,根本不需要关心底层是什么格式。
  • 日志式文件系统(Journaling): 现代 Linux 文件系统(如 ext4)都有日志功能。如果电脑突然断电,内核可以通过读取日志快速修复文件,防止数据损坏。
  • 权限控制: 配合 Linux 的多用户机制,内核严格把关谁能“读”、谁能“写”、谁能“执行”某一个文件。

Footnotes

  1. 终端输入ls -l,每行最左边第一个字符输出为文件标识。