Linux 系统简介
Linux 系统介绍
Linux 是一套免费、开源、类 Unix 操作系统,广泛应用于多用户、多任务、多线程和多 CPU 的环境。它兼容主流的 Unix 工具、应用程序及网络协议,具有高稳定性和良好的性能。Linux 支持 32 位及 64 位硬件,适用于从个人电脑到工业控制系统等各种设备。
作为一个网络操作系统,Linux 继承了 Unix 的核心设计思想,以 TCP/IP 和 UDP 协议为基础,特别适合用于网络环境下的高效管理和资源共享。尽管 Linux 内核本身是操作系统的核心,但'Linux'这一术语通常被用来指代整个操作系统环境,包括由 GNU 工程提供的各种工具和数据库,以及 Linux 内核本身。
值得注意的是,Linux 存在许多不同的版本或发行版,这些版本由不同的厂商或开发团队制作,但它们共享相同的 Linux 内核。各个版本在工具和软件包上有所不同,用户可以根据需求选择最合适的发行版。
Linux 组成结构
Linux 操作系统由三大核心部分组成:Uboot 引导程序、Kernel 内核、和文件系统 (rootfs)。每个部分在系统启动、运行及文件管理中扮演着重要角色,同时它们之间相互配合,共同完成操作系统的核心功能。

Uboot 引导程序
Uboot 是 Linux 系统的引导程序,它运行在操作系统启动的初期阶段,负责硬件的初始化与系统的启动。Uboot 的功能是确保硬件准备就绪,并加载 Linux 内核到内存中,最后将控制权交给 Linux 内核。
- 主要功能:
- 初始化硬件,如 CPU、内存、外设等。
- 加载内核镜像并传递必要的启动参数。
- 提供一个基本的命令行接口,方便开发者进行系统调试和配置。
Kernel 内核
Kernel 内核 是 Linux 操作系统的核心,负责管理硬件资源、调度任务、控制文件操作及提供应用程序与硬件交互的接口。内核为系统提供了高效、稳定的资源管理机制,并确保应用程序能够在多任务环境下并行执行。
- 内核功能:
- 硬件抽象:通过设备驱动将硬件资源抽象成操作系统可管理的资源,应用程序无需直接操控硬件。
- 任务调度:负责管理多个进程的执行,确保操作系统在多任务环境下稳定运行。
- 内存管理:包括内存分配、回收、虚拟内存管理等,保证系统稳定性和性能。
- 文件系统支持:内核提供对文件系统的管理,支持对磁盘上的数据进行创建、删除、读取和修改操作。
- 驱动程序:Linux 内核中的驱动程序负责控制硬件设备(如网络卡、硬盘、显示器等),它们与硬件的交互通过内核进行,应用程序通过系统调用与内核进行通信,而不直接操作硬件。
- Shell 与内核的关系:
- Shell 是内核之上的一个命令行解释器,充当了用户与操作系统之间的接口。它提供了一个命令行环境,允许用户直接输入命令并执行各种操作。Shell 不仅支持基础的命令执行,还能运行脚本和批处理命令,帮助用户自动化常见操作。
- Shell 的功能:
- 命令执行:用户输入的命令(如
ls、mkdir等)通过 Shell 传递给内核,内核执行相应的操作并返回结果。 - 脚本支持:Shell 允许用户编写脚本,实现自动化任务,如系统配置、安装程序、测试等。
- 交互式界面:提供一个直观的命令行界面,支持用户与系统进行交互。
- 命令执行:用户输入的命令(如
文件系统 (rootfs)
文件系统 是 Linux 系统中用于管理存储资源的重要组件。它为文件的存储和访问提供了统一的管理机制,使得系统能够高效、安全地存储和读取数据。
- 功能:
- 文件管理:创建、删除、读取和写入文件。
- 目录管理:组织文件,提供多层次的目录结构,如
/home、/bin、/etc等。 - 权限控制:确保文件和目录的访问安全,通过权限管理防止未授权的访问。
- 支持多种文件系统格式:如 ext4、XFS、Btrfs 等,提供不同的性能和安全保障。
对比:单片机 STM32 系统的开发模式
在单片机 STM32 系统的开发中,应用程序和硬件驱动代码是紧密结合的。开发者编写的应用程序通常直接操作硬件寄存器来控制硬件功能,如控制 LED 灯的亮灭、设置 GPIO 端口、配置串口通信等。
- 应用与驱动结合:
- 单片机开发中,应用程序和驱动代码是紧密耦合的。例如,在控制一个 LED 时,应用程序可能会直接编写 GPIO 初始化代码和控制 LED 亮灭的逻辑。
- 这种模式下,应用程序与硬件间的界限不明确,硬件操作通常是在应用程序代码中直接体现的。
- 硬件直接操作:
- STM32 等单片机应用程序直接通过硬件寄存器操作来进行硬件控制,代码需要为特定硬件配置,如 GPIO_Init、UART_Init 等。这使得开发过程简洁,但当硬件发生变化时,应用程序也需要修改。
与此相比,Linux 系统的内核与驱动程序是完全分离的。在 Linux 中,硬件的控制由内核中的驱动程序负责,应用程序并不直接访问硬件。应用程序通过系统调用与内核进行交互,内核通过驱动程序与硬件通信。
- 内核与驱动分离:
- Linux 内核负责硬件抽象,驱动程序在内核中运行,应用程序通过系统调用与内核交互,而不直接控制硬件。
- 这种设计使得应用程序的开发更加灵活,应用与硬件解耦,驱动程序和硬件的更改不需要修改应用程序代码。
重点:STM32 硬件发生变化时,应用程序需修改;而 Linux 通过内核驱动抽象硬件,应用程序无需修改。
Linux 的主要特征
Linux 作为一个开源操作系统,具有多个显著的特征,使其在多个领域中得到广泛应用。以下是 Linux 系统的主要特征:
'一切皆文件'(Everything is a file)
在 Linux 系统中,几乎所有的资源(无论是硬件设备、目录、文件、甚至进程等)都可以看作是文件。这一特性源自 Unix 系统,强调了文件操作的统一性和简洁性。无论是读取硬盘中的文件,还是控制硬件设备,Linux 都通过统一的文件接口来实现。
- 文件操作方式:操作文件的基本方式包括:
- 打开文件:使用系统调用(如
open())打开文件。 - 读写文件:通过
read()、write()等系统调用进行文件的读取和写入。 - 文件移位:可以使用
lseek()调用调整文件指针位置。 - 关闭文件:使用
close()系统调用关闭文件描述符。
- 打开文件:使用系统调用(如
- 设备文件:在 Linux 中,硬件设备如磁盘、串口、网络接口等,都会被映射为文件,位于
/dev目录下。例如,硬盘驱动器sda和串口设备ttyS0都是设备文件。通过文件的方式,应用程序能够以统一的接口操作硬件。
开源免费
- 开源:Linux 操作系统遵循 GPL(GNU General Public License)开源协议,意味着任何人都可以查看、修改和分发 Linux 的源代码。由于这一开放性,开发者可以自由地对 Linux 进行定制和优化,满足不同的需求。
- 免费:Linux 操作系统本身是免费的,用户可以无需支付许可费用就能使用、修改、甚至商用 Linux 系统。这一点与一些商业操作系统(如 Windows、macOS)形成了鲜明对比。
- 社区驱动:Linux 的开发是由全球开发者社区共同推动的。开源和免费的特性使得 Linux 系统得以快速发展和创新,得到了大量开发者的支持与贡献。
跨平台支持
Linux 的另一个重要特征是其跨平台支持,即 Linux 能够运行在多种硬件平台上。这使得 Linux 成为一个非常灵活的操作系统,可以在从个人计算机、嵌入式设备、服务器到超级计算机等各种设备上运行。
- 支持范围广泛:
- 桌面平台:Linux 支持传统的 x86、x86-64 架构的 PC 和笔记本电脑。
- 嵌入式平台:Linux 还支持 ARM、MIPS、PowerPC 等嵌入式平台,广泛应用于手机、路由器、物联网设备等领域。
- 服务器平台:Linux 在数据中心中应用广泛,支持各种服务器架构,包括 x86、SPARC、IBM Power 系列等。
- 移动平台:Linux 是 Android 操作系统的核心,广泛应用于智能手机、平板电脑等设备。
- 平台兼容性:Linux 内核的设计考虑到硬件的多样性,支持的硬件平台类型包括各种处理器架构(如 Intel、AMD、ARM 等)、外设以及文件系统等,使得 Linux 能够适配多种设备
可裁剪与可移植性
Linux 的架构和设计使其具备了高度的可裁剪性和可移植性,即用户或开发者可以根据实际需求定制和裁剪 Linux 系统,以适应不同的硬件平台或应用场景。
- 可裁剪性:Linux 内核是模块化设计的,开发者可以选择性地加载和卸载内核模块。例如,开发者可以根据硬件平台的不同,只选择支持特定硬件的驱动程序和功能模块。这使得 Linux 能够在资源有限的设备(如嵌入式系统)上高效运行。
- 可移植性:由于 Linux 内核的代码结构清晰,且与硬件平台相对独立,Linux 系统可以被移植到各种不同的硬件架构上。开发者只需根据目标平台的需求,进行必要的移植工作,而不需要大规模修改操作系统的核心代码。
- 搭积木的过程:Linux 的组件和模块化结构就像搭积木一样,用户可以自由选择所需的功能模块并将其组合在一起,构建一个符合需求的定制系统。例如,在嵌入式设备中,开发者可能只需要最小化的文件系统和特定的驱动程序,而在桌面系统中,则需要更多的功能模块。
- 互不干扰:由于 Linux 采用了模块化设计,不同的功能模块和组件在运行时相互独立,这意味着裁剪或移除某一模块不会影响系统的其他部分。开发者可以自由定制 Linux 系统,去除不必要的功能,提高系统的性能和安全性。
Linux 与 Windows 的区别
文件的区别
Windows 文件管理
在 Windows 操作系统中,文件类型的区分主要依赖于文件的扩展名。文件扩展名是文件名的一部分,通常在'.'之后跟着一串字符,例如 .exe、.txt、.jpg 等。Windows 根据这些扩展名来识别文件类型,决定如何打开该文件。
- 常见的扩展名:
.exe:可执行文件(应用程序).txt:文本文件.jpeg、.jpg:图片文件.mp3:音频文件.wmv:视频文件.doc:文档文件
Windows 通过扩展名来判断文件类型,并根据文件的扩展名来决定使用哪个程序打开该文件。如果文件没有扩展名或扩展名不明,Windows 可能无法正确识别文件类型。
Linux 文件管理
与 Windows 不同,Linux 并不通过文件扩展名来区分文件类型。Linux 使用文件的创建方式(文件的'模式')来区分文件类型。Linux 的文件系统基于文件的权限与属性来识别文件,而不是扩展名。
- Linux 的文件类型有 7 种:
- 普通文件 (
-):这类文件是最常见的文件类型,如文本文件、图片、程序等。绝大多数文件都是普通文件。 - 块设备文件 (
b):代表块设备,如硬盘、U 盘等,用于大规模的数据存储。 - 字符设备文件 (
c):代表字符设备,如串口设备、键盘、鼠标等,数据按字符流的方式进行处理。 - 目录文件 (
d):代表目录,目录文件包含其他文件。 - 符号链接文件 (
l):又叫软链接文件,它是指向另一个文件的引用或快捷方式。 - 套接字文件 (
s):用于进程间通信,通常用于网络通信。 - 管道文件 (
p):用于进程间的通信,特别是在管道和 FIFO(先进先出队列)中使用。
- 普通文件 (
在 Linux 中,通过命令 ls -l 来查看文件的详细信息,文件的第一列显示了文件的类型。例如:

除了文件的类型,Linux 还通过颜色来帮助用户快速区分文件的种类。不同的颜色代表不同类型的文件,具体的颜色显示通常由 LS_COLORS 变量控制。
- 白色:表示普通文件(没有特殊标记的常规文件)。
- 蓝色:表示目录文件。
- 绿色:表示可执行文件(例如程序、脚本等)。
- 红色:表示压缩文件(例如
.tar、.gz、.zip等压缩格式)。 - 灰色:表示其他类型的文件(如设备文件或特殊文件)。
目录区别
在 Windows 和 Linux 操作系统中,目录结构和路径表示存在明显的差异。
Windows 目录结构
在Windows 操作系统中,目录路径使用反斜杠(\)来表示目录层级。例如:
- 根目录:
C:\ - 子目录:
C:\Users\Documents\
在 Windows 中,文件和目录路径通常使用反斜杠(\)分隔,这代表目录的层级结构。
- 文件路径:
C:\Program Files\example.exe - 当前目录:Windows 下的当前目录可以通过
.来表示。例如,dir .列出当前目录的文件。
Linux 目录结构
在Linux 操作系统中,目录路径使用斜杠(/)来分隔目录层级。以下是 Linux 中常见的目录结构表示方法:
- 根目录(
/):- 在 Linux 中,根目录是系统文件的顶层目录,用来存放操作系统的核心文件和子目录。
- 例如,
/表示根目录,/home表示用户的家目录,/bin表示二进制执行文件。
- 当前目录(
.):- 在 Linux 中,
.表示当前目录,它的作用与 Windows 中的.类似,用来表示当前所在的目录。
- 在 Linux 中,
- 上一层目录(
..):..表示当前目录的上一层(父目录)。通过..可以访问当前目录的上一级目录。- 例如,
cd ..会让你进入上一级目录。
Linux 根目录下的文件夹

Linux 的根目录 / 下包含多个子目录,每个目录都有特定的功能和用途。以下是根目录中常见的文件夹及其作用:
/bin:- 存放系统必需的二进制执行文件。这些文件通常是操作系统正常运行所必需的程序,如
ls、cp、mv等常用命令都在该目录下。 - 这些命令可用于系统修复和管理,无论系统是否处于多用户模式。
- 存放系统必需的二进制执行文件。这些文件通常是操作系统正常运行所必需的程序,如
/boot:- 存放与Linux 系统启动相关的文件。这些文件包括启动时使用的引导加载程序(如 GRUB),以及内核映像文件(如
vmlinuz)和初始内存盘(initrd)。 - 系统启动时,会加载
/boot中的文件来引导操作系统。
- 存放与Linux 系统启动相关的文件。这些文件包括启动时使用的引导加载程序(如 GRUB),以及内核映像文件(如
/dev:- 存放与设备相关的文件,在 Linux 中,硬件设备(如硬盘、串口、打印机等)在
/dev目录下有对应的设备文件。 - 例如,
/dev/sda表示第一个硬盘,/dev/ttyS0表示串口设备。
- 存放与设备相关的文件,在 Linux 中,硬件设备(如硬盘、串口、打印机等)在
/home:- 存放普通用户的文件。每个用户在系统中通常都有一个对应的子目录,目录名与用户名相同。用户的数据、配置文件等存储在这里。
- 例如,用户
user1的目录通常是/home/user1,其中存放该用户的文档、图片、配置文件等。
/mnt:- 存放挂载的文件系统。这是一个临时目录,系统管理员通常会在这里挂载外部设备(如 U 盘、网络共享目录等)。
- 例如,共享文件夹通常挂载在
/mnt/hgfs下。
/root:- 存放根用户(root)的文件。这是超级用户(root)专用的家目录。
- 注意:
/root目录与普通用户的/home目录不同,作为超级用户,操作/root目录时要小心,避免误操作导致系统问题。
/lib:- 存放系统和应用程序运行时所需的共享库文件。这些文件对于操作系统和软件的正常运行至关重要。
- 例如,
/lib/x86_64-linux-gnu存放着许多系统级的共享库文件。
/etc:- 存放系统的配置文件。所有系统级配置文件,如网络配置、用户账户信息、软件配置文件等,都位于此目录下。
- 例如,
/etc/passwd存储系统用户信息,/etc/network/interfaces存储网络接口配置。
/usr:- 存放与用户相关的应用程序和文件。它包含大多数非系统级程序和库文件。
- 例如,
/usr/bin存放应用程序的二进制文件,/usr/share存放共享文件和资源。
命令识别区别
在Windows和Linux操作系统中,命令识别存在显著的差异。尤其是在命令的大小写敏感性、空格的使用以及参数匹配上,Windows 和 Linux 表现出不同的规则。
Windows 命令识别
- 不区分大小写:
- 在Windows操作系统中,命令和文件路径对大小写不敏感。这意味着,无论你输入命令或路径时使用大写字母还是小写字母,操作系统都会理解它们是相同的。
- 示例:
dir与DIR是相同的命令,都会列出当前目录中的文件。C:\Windows和c:\windows都指向同一个目录,Windows 会忽略字母的大小写。
- 命令格式:
- 在 Windows 中,命令参数与选项之间常常可以不严格要求空格,系统会根据需要自动处理。例如,输入
dir /w和dir/w都能正确执行,并列出文件。 - 示例:
dir /w与dir/w都可以执行列出目录的命令。
- 在 Windows 中,命令参数与选项之间常常可以不严格要求空格,系统会根据需要自动处理。例如,输入
Linux 命令识别
- 严格区分大小写:
- Linux操作系统对命令和文件路径是严格区分大小写的。这意味着,大小写不同的命令或路径会被视为不同的命令或文件。
- 示例:
ls和LS是两个不同的命令。ls用于列出目录内容,而LS可能会提示'命令未找到'。- 文件名'
file.txt'与'File.txt'被视为两个完全不同的文件。
- 命令和参数的空格要求:
- 在 Linux 中,命令和参数之间的空格是非常重要的。如果你不正确地使用空格,Linux 命令可能无法正确执行或会报错。
- 示例:
ls -l(列出当前目录的详细信息)与ls-l(可能会提示错误或不执行任何操作),因为没有空格,Linux 会认为-l是一个不可识别的文件名。- 在命令中,每个参数和选项之间必须有空格,否则系统无法正确识别。例如,
ls -l正确,而ls-l错误。
- 参数匹配的严格性:
- 在 Linux 中,命令参数也需要严格匹配。如果输入错误或拼写不正确,系统将不会执行命令,或者会返回一个'命令未找到'错误。
- 示例:
ls -l正确,显示详细目录列表。ls -L是错误的,因为-L选项并不是ls命令的有效选项。正确的是-l,是小写字母 L。


