目录
[1 linux简介](#1 linux简介)
[1.1 Linux系统介绍](#1.1 Linux系统介绍)
[1.2 Linux 组成结构](#1.2 Linux 组成结构)
[1.2.1 Uboot引导程序](#1.2.1 Uboot引导程序)
[1.2.2 Kernel内核](#1.2.2 Kernel内核)
[1.2.3 文件系统 (rootfs)](#1.2.3 文件系统 (rootfs))
[1.2.4 对比:单片机STM32系统的开发模式](#1.2.4 对比:单片机STM32系统的开发模式)
[1.3 Linux的主要特征](#1.3 Linux的主要特征)
[1.3.1 "一切皆文件"(Everything is a file)](#1.3.1 “一切皆文件”(Everything is a file))
[1.3.2 开源免费、](#1.3.2 开源免费、)
[1.3.3 跨平台支持](#1.3.3 跨平台支持)
[1.3.4 可裁剪与可移植性](#1.3.4 可裁剪与可移植性)
[2 Linux与Windows的区别](#2 Linux与Windows的区别)
[2.1 文件的区别](#2.1 文件的区别)
[2.1.1 Windows文件管理](#2.1.1 Windows文件管理)
[2.1.2 Linux文件管理](#2.1.2 Linux文件管理)
[2.2 目录区别](#2.2 目录区别)
[2.2.1 Windows目录结构](#2.2.1 Windows目录结构)
[2.2.2 Linux目录结构](#2.2.2 Linux目录结构)
[2.2.3 Linux根目录下的文件夹](#2.2.3 Linux根目录下的文件夹)
[2.3 命令识别区别](#2.3 命令识别区别)
[2.3.1 Windows命令识别](#2.3.1 Windows命令识别)
[2.3.2 Linux命令识别](#2.3.2 Linux命令识别)
1 linux简介
1.1 Linux系统介绍
Linux 是一套免费、开源、类Unix操作系统,广泛应用于多用户、多任务、多线程和多CPU的环境。它兼容主流的Unix工具、应用程序及网络协议,具有高稳定性和良好的性能。Linux支持32位及64位硬件,适用于从个人电脑到工业控制系统等各种设备。
作为一个网络操作系统,Linux继承了Unix的核心设计思想,以TCP/IP和UDP协议为基础,特别适合用于网络环境下的高效管理和资源共享。尽管 Linux 内核本身是操作系统的核心,但"Linux"这一术语通常被用来指代整个操作系统环境,包括由 GNU 工程提供的各种工具和数据库,以及 Linux 内核本身。
值得注意的是,Linux 存在许多不同的版本或发行版,这些版本由不同的厂商或开发团队制作,但它们共享相同的 Linux 内核。各个版本在工具和软件包上有所不同,用户可以根据需求选择最合适的发行版。
1.2 Linux 组成结构
Linux操作系统由三大核心部分组成:Uboot引导程序 、Kernel内核 、和文件系统(rootfs)。每个部分在系统启动、运行及文件管理中扮演着重要角色,同时它们之间相互配合,共同完成操作系统的核心功能。

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