Linux系统基础

文章目录

    • Linux系统结构
    • [v1 硬件层](#v1 硬件层)
      • [v1.1 是什么?](#v1.1 是什么?)
      • [v1.2 在 Linux 眼里,它们只是"文件"](#v1.2 在 Linux 眼里,它们只是“文件”)
    • [v2内核层 ------ Linux 的"大脑和心脏"](#v2内核层 —— Linux 的“大脑和心脏”)
      • [v2.1 内核是什么?](#v2.1 内核是什么?)
      • [v2.2 内核的五大核心功能(分模块说明)](#v2.2 内核的五大核心功能(分模块说明))
        • [① 进程管理部(CPU 管家)](#① 进程管理部(CPU 管家))
        • [② 内存管理部(空间管家)](#② 内存管理部(空间管家))
        • [③ 文件系统部(文档管家)](#③ 文件系统部(文档管家))
        • [④ 设备驱动部(硬件翻译官)](#④ 设备驱动部(硬件翻译官))
        • [⑤ 网络协议栈(通信部长)](#⑤ 网络协议栈(通信部长))
      • [v2.3 内核的形态](#v2.3 内核的形态)
    • [v3 系统调用接口 ------ 内核的"服务窗口"](#v3 系统调用接口 —— 内核的“服务窗口”)
      • [v3.1 是什么?](#v3.1 是什么?)
      • [v3.2 调用过程](#v3.2 调用过程)
    • [v3-2 系统库 ------ 程序员的好帮手](#v3-2 系统库 —— 程序员的好帮手)
      • [v3-2.1 为什么需要库?](#v3-2.1 为什么需要库?)
      • [v3-2.2 动态库和静态库](#v3-2.2 动态库和静态库)
    • [v4 用户层---Shell](#v4 用户层—Shell)
      • [v4.1 Shell 是什么?](#v4.1 Shell 是什么?)
      • [v4.2 常见 Shell](#v4.2 常见 Shell)
      • [v4.3 Shell 能做什么?](#v4.3 Shell 能做什么?)
      • [v4.4 图形界面下的终端模拟器](#v4.4 图形界面下的终端模拟器)
    • [v4-2 用户与权限体系](#v4-2 用户与权限体系)
      • [v4-2.1 用户和组](#v4-2.1 用户和组)
      • [v4-2.2 文件权限](#v4-2.2 文件权限)
      • [v4-2.3 sudo 机制](#v4-2.3 sudo 机制)
    • [v4-3 进程与作业管理](#v4-3 进程与作业管理)
    • [v4-4 图形界面](#v4-4 图形界面)
      • [v4-4.1 显示服务器(X Window System / Wayland)](#v4-4.1 显示服务器(X Window System / Wayland))
      • [v4-4.2 桌面环境(DE)](#v4-4.2 桌面环境(DE))
      • [v4-4.3 应用程序](#v4-4.3 应用程序)
    • [v5 系统启动过程](#v5 系统启动过程)
    • [v6 Linux 体系图示(小白视角)](#v6 Linux 体系图示(小白视角))
    • [v7 常见问题速答](#v7 常见问题速答)
    • [v8 文件系统层次结构标准(FHS)速查](#v8 文件系统层次结构标准(FHS)速查)

Linux系统结构

由下往上大致分为四层:

层次 名称 功能一句话
v1 硬件层 提供真实的物理设备:CPU、内存、硬盘、网卡等
v2 内核层 管理硬件资源,为程序提供统一的服务
v3 系统调用 & 库层 让程序通过固定方式让内核干活
v4 用户层(Shell、应用、图形界面) 你直接打交道的各种工具和软件

v1 硬件层

v1.1 是什么?

指服务器的物理组件或虚拟机的虚拟硬件,包括:

  • CPU:执行指令的大脑
  • 内存(RAM):临时存放正在运行的程序和数据
  • 硬盘/SSD:永久保存文件
  • 网卡:上网用的接口
  • 其他设备:显卡、键盘、鼠标等

v1.2 在 Linux 眼里,它们只是"文件"

Linux 信奉"一切皆文件"。对内核来说,这些硬件都会被抽象成设备文件 ,通常放在 /dev 目录下。比如:

  • /dev/sda 表示第一块硬盘
  • /dev/tty 表示终端

注:操作系统将真实的硬件"封装"成一个个可以读写的东西,这样程序就不用知道硬件具体长什么样了。


v2内核层 ------ Linux 的"大脑和心脏"

v2.1 内核是什么?

内核(Kernel) 是操作系统的核心,它直接"趴"在硬件上,掌管一切。我们常说的"Linux",严格来说就是指这个内核。你用的 Ubuntu、CentOS 等发行版,都是"内核 + 一堆工具"的组合。

v2.2 内核的五大核心功能(分模块说明)

内核内部像一个高效的公司,有五个核心部门:

① 进程管理部(CPU 管家)
  • 任务:决定哪个程序在什么时候使用 CPU,让大家感觉都在同时运行。
  • 名词:进程 = 运行中的程序;线程 = 进程里的"小分身"。
  • 调度:Linux 内核像一位非常快速的"交警",通过调度器(CFS 等)分配时间片。
  • 小白视角:你同时听歌、写文档、后台下载,其实是 CPU 快速来回切换任务。
② 内存管理部(空间管家)
  • 任务:分配内存给程序,用完后回收;保护每个进程的空间互不干扰。
  • 虚拟内存:每个程序都以为自己拥有全部内存,实际上是内核通过页表把虚拟地址映射到物理内存。
  • 交换空间(Swap):当物理内存不够时,内核会把暂时不用的数据移到硬盘上的 swap 分区,腾出内存给活跃程序。
  • 记忆技巧:内存部门像图书馆管理员,负责发放和回收"书架",还能把不常用的书暂存到仓库(磁盘)。
③ 文件系统部(文档管家)
  • 任务:管理磁盘上的文件、目录,提供读写接口。
  • Linux 支持的文件系统:ext4、XFS、Btrfs 等。
  • 虚拟文件系统(VFS):内核提供统一的抽象层,无论底层是 ext4 还是 NFS 网络文件系统,上层的操作看起来都一样。
  • 设备即文件 :连硬件也挂载在这个统一的文件树下,根目录 / 是所有文件的祖先。
  • 目录结构标准(FHS)
    • /bin -- 基本命令
    • /etc -- 配置文件
    • /home -- 用户家目录
    • /var -- 可变数据(日志等)
    • /tmp -- 临时文件
    • 详见附录 FHS 速查表。
④ 设备驱动部(硬件翻译官)
  • 任务:每种硬件需要专门的驱动程序,才能和内核沟通。
  • 驱动在内核里 :Linux 把大部分驱动直接编入内核或作为可加载模块(.ko 文件)。
  • 模块管理 :用 lsmod 查看已加载模块,modprobe 加载新模块。
  • 效果:插上一个 USB 设备,内核自动识别并加载对应驱动,创建设备文件,应用程序就可以访问了。
⑤ 网络协议栈(通信部长)
  • 任务:实现 TCP/IP 等网络协议,处理网络数据包的收发。
  • 位置:位于内核,应用程序通过 socket 接口使用网络。
  • 关键组件:路由表、iptables/netfilter 防火墙、网卡驱动。
  • 小白理解:内核里内置了一个"邮局",负责所有网络通信,应用程序只需要用 socket 寄信即可。

v2.3 内核的形态

  • 单片内核 :Linux 所有核心功能都在一个大的内核镜像文件中(vmlinuz),但模块化设计让它也能动态加载驱动。
  • 内核空间 vs 用户空间:内核运行在高特权级别(内核态),可以直接访问硬件;普通程序运行在用户态,想用硬件必须通过"系统调用"。

v3 系统调用接口 ------ 内核的"服务窗口"

v3.1 是什么?

当普通程序(用户空间)想做任何"大事",比如读文件、创建进程、连接网络,都必须向内核发起请求。这个请求入口就叫系统调用(syscall)

常用系统调用举例:

  • open(), read(), write(), close() -- 文件操作
  • fork(), exec() -- 创建新进程
  • socket(), connect() -- 网络通信
  • mmap() -- 内存映射

v3.2 调用过程

应用程序 → C 库(如 glibc)封装 → 陷入内核 → 内核服务 → 返回结果。

小白记法:程序不能直接伸手拿硬件,必须通过"系统调用"这个柜台向内核说:"请帮我打开 file.txt"。


v3-2 系统库 ------ 程序员的好帮手

v3-2.1 为什么需要库?

直接写系统调用很繁琐,而且不同系统可能不一样。C 库(libc) 把系统调用包装成方便的函数,还提供了大量的标准功能(字符串处理、数学计算等)。

  • GNU C 库(glibc):绝大多数 Linux 系统使用的标准 C 库。
  • 其他库:图形库(GTK、Qt)、加密库(OpenSSL)、线程库(pthread)等。

v3-2.2 动态库和静态库

  • 动态库(.so):程序运行时才加载,节省内存,可以共享。就像一个小区的住户共用同一个健身房。
  • 静态库(.a):编译时直接打包进程序,程序变大,但移植性更好。

小白记住:库就是封装好的"工具包",让你的程序不用自己造轮子。


v4 用户层---Shell

v4.1 Shell 是什么?

Shell 是一个命令行解释器,你输入命令,它负责解释并让内核执行。它本身就是用户空间的程序。

v4.2 常见 Shell

  • Bash:最流行,大多数发行版默认。
  • Zsh:功能强大,插件多。
  • Fish:对用户更友好,自动补全惊艳。

v4.3 Shell 能做什么?

  • 执行命令:ls -l /home
  • 管道和重定向:cat file.txt | grep "error" > result.log
  • 脚本编程:自动化处理重复任务
  • 管理作业:前后台切换,&fgjobs

v4.4 图形界面下的终端模拟器

像 GNOME Terminal、Konsole 这样的程序,打开后里面跑着一个 Shell,你看到的黑窗口就是它。


v4-2 用户与权限体系

v4-2.1 用户和组

Linux 是多用户系统。

  • root 用户:超级管理员,拥有最高权限(UID 0)。
  • 普通用户:日常使用,权限受限。
  • :一组用户的集合,方便统一授权。

v4-2.2 文件权限

每个文件都有三个权限位:读®、写(w)、执行(x),分别对拥有者、同组用户、其他人 设置。

ls -l 查看,例如:-rw-r--r--

v4-2.3 sudo 机制

普通用户通过 sudo 临时获得管理员权限,前提是在 /etc/sudoers 中被授权。

安全原则:尽量少用 root,日常操作使用普通账户。


v4-3 进程与作业管理

  • 进程的创建 :通过 fork() 复制自身,然后用 exec() 变身成新程序。
  • 进程状态:运行(R)、睡眠(S)、停止(T)、僵尸(Z)等。
  • 守护进程(daemon):后台运行的服务,通常在系统启动时由 systemd 或 init 拉起。
  • 信号 :传递简单通知,如 kill -9 发送 SIGKILL 强制结束进程。

v4-4 图形界面

很多人以为图形界面就是 Linux 的一部分,其实它也是上层的应用软件集合。

v4-4.1 显示服务器(X Window System / Wayland)

  • X.Org(X11):传统显示服务器,负责在屏幕上绘制窗口、处理鼠标键盘事件。基于客户端-服务器模型。
  • Wayland:更现代、更简洁的替代品,逐步取代 X11。
  • 作用:为图形程序提供画图、输入的基础支持。

v4-4.2 桌面环境(DE)

在显示服务器之上,提供完整的桌面体验,包括:

  • 窗口管理器(控制窗口边框、布局、虚拟桌面)
  • 面板、菜单、系统托盘
  • 文件管理器、终端、文本编辑器等全套应用

主流桌面环境

  • GNOME:现代、简洁,使用 GTK 工具包,大发行版如 Ubuntu 默认。
  • KDE Plasma:华丽、可定制性强,使用 Qt 工具包。
  • Xfce:轻量、快速,适合旧电脑。
  • LXQt:更轻量。

v4-4.3 应用程序

一切你日常使用的软件:浏览器(Firefox、Chrome)、办公套件(LibreOffice)、图像处理(GIMP)、开发工具(VSCode)等。

小白视角:图形环境就像手机上的启动器+桌面主题+预装应用,它依赖内核和底层库,但不是 Linux 本身,你可以完全不用图形界面,只用命令行。


v5 系统启动过程

  1. BIOS/UEFI:硬件自检,找到启动设备。
  2. 引导加载程序(GRUB2):加载内核到内存。
  3. 内核初始化:挂载根文件系统,启动 init 进程(systemd 等)。
  4. init/systemd:作为 1 号进程,启动所有系统服务,进入目标运行级别(图形界面或命令行)。
  5. 登录提示:显示登录界面,等待用户。

v6 Linux 体系图示(小白视角)

复制代码
硬件层
  ├─ CPU、内存、硬盘、网卡 ...
  └─ 设备文件 (/dev)

内核层 (Linux Kernel)
  ├─ 进程管理 (调度器、多任务)
  ├─ 内存管理 (虚拟内存、Swap)
  ├─ 文件系统 (VFS, ext4/XFS)
  ├─ 设备驱动 (模块)
  └─ 网络协议栈 (TCP/IP, netfilter)

系统调用接口 (syscalls)

库层 (glibc 等动态/静态库)

用户层
  ├─ Shell (bash/zsh) + 终端模拟器
  ├─ 图形服务器 (X11/Wayland) + 桌面环境 (GNOME/KDE)
  ├─ 应用程序 (浏览器、编辑器、数据库)
  └─ 管理工具 (systemctl, apt/yum)

v7 常见问题速答

Q1:Linux 和 Ubuntu 是什么关系?

Ubuntu 是 Linux 的一个"发行版",等于 Linux 内核 + GNU 工具 + 包管理器 + 桌面环境 + 社区的完整操作系统。其他发行版还有 Debian、Fedora、Arch 等。

Q2:内核可以替换吗?

可以,你可以自己编译新内核或安装更新,但通常由包管理器升级。

Q3:我如何知道我的内核版本?

打开终端,输入 uname -r


v8 文件系统层次结构标准(FHS)速查

目录 全称/含义 存放内容
/ 根目录 一切文件的起点
/bin binaries 基础用户命令(ls, cp, cat)
/boot boot loader files 内核、引导文件
/dev devices 设备文件
/etc etcetera 系统配置文件
/home home directories 各用户的个人文件夹
/lib libraries 基本共享库和内核模块
/media / /mnt mount points 临时挂载点(U盘等)
/opt optional 第三方大型软件包
/proc process info 虚拟文件系统,展示进程和系统信息
/root root home root 用户的家目录
/run runtime data 自系统启动以来的运行时数据
/sbin system binaries 系统管理命令
/srv service data 服务提供的数据
/sys system 内核和设备信息(类似 /proc)
/tmp temporary 临时文件,重启可能清空
/usr Unix System Resources 大部分用户程序和数据,如 /usr/bin, /usr/lib
/var variable 可变数据:日志、邮件、打印队列等
相关推荐
modelmd1 小时前
Linux chroot命令
linux
l1t2 小时前
在WSL的ubuntu 26.04容器中用deb安装包安装使用redrock-4.1-1
linux·运维·ubuntu·postgresql
jieyucx2 小时前
Go语言通透教程:结构体定义与方法
服务器·数据库·golang·结构体
renren-1002 小时前
centos7.9 升级openssl11 导致的系统命令瘫痪
linux·运维·服务器
金玉满堂@bj2 小时前
Pytest 完整使用教程
运维·服务器·pytest
SWAGGY..2 小时前
Linux系统编程:(六)编译器gcc/g++
linux·运维·服务器
蜡笔婧萱2 小时前
Linux——Web服务器网址建立(http和https的分离)
linux·运维·服务器
.小小陈.3 小时前
Linux 多线程进阶:线程互斥、同步、线程池、死锁与线程安全、读写锁、自旋锁
linux·开发语言·c++
Hello_wshuo3 小时前
v3s镜像从零开始构建
linux·嵌入式