Linux相关知识积累
Linux系统启动流程
Linux 系统的启动流程是一个复杂且有序的过程,
涉及:
1、硬件初始化;
2、Bootloader 引导程序加载、
3、内核启动、
4、用户空间初始化等多个阶段。
关键组件总结
阶段 | 核心组件/工具 | 作用 |
固件启动 |
BIOS/UEFI |
硬件自检,定位引导设备 |
引导加载 |
GRUB2/LILO |
加载内核和 initramfs,提供启动菜单 |
内核初始化 |
vmlinuz + initramfs |
检测硬件、加载驱动、挂载根文件系统 |
init 进程 |
systemd/upstart/init |
启动用户空间服务,管理系统目标和依赖 |
服务管理 |
systemd 单元文件 |
定义服务启动顺序、依赖关系和资源限制 |
登录环境 |
getty/GDM/LightDM |
提供登录界面,初始化用户会话 |
Linux文件系统
Linux 根目录核心目录分类表
Linux 根目录(/
)下主要目录的分类表格,按功能划分并标注核心用途和注意事项:
类别 | 目录名称 | 路径 | 主要用途 | 注意事项 |
系统核心(必需) |
/bin |
/bin |
存放所有用户可用的基本命令(二进制可执行文件),如 ls 、cp 、sh 等。 |
系统启动必需,即使根目录只读也可访问;所有用户可读可执行。 |
|
/sbin |
/sbin |
存放系统管理命令(如 reboot 、shutdown ),通常仅 root 用户可用。 |
与 /bin 类似,供系统维护使用,非日常用户命令。 |
|
/etc |
/etc |
存储系统和程序的配置文件(文本文件),如用户信息、网络配置、服务启动脚本等。 |
非运行时文件,修改后需重启服务生效;建议定期备份。 |
|
/boot |
/boot |
存放系统启动文件(内核、引导程序、初始化文件),如 vmlinuz 、grub/ 。 |
通常单独分区,避免根目录空间不足导致无法启动;权限严格(仅 root 可写)。 |
|
/dev |
/dev |
存储设备文件(块设备、字符设备、特殊文件),如 /dev/sda 、/dev/null 。 |
内核动态生成,内容随硬件变化;通过文件访问硬件设备(“一切皆文件”)。 |
用户与程序数据 |
/home |
/home |
普通用户的主目录(每个用户一个子目录,如 /home/user ),存储个人数据和配置。 |
通常单独分区,用户数据与系统分离;权限为用户私有(700 )。 |
|
/root |
/root |
管理员(root 用户)的主目录,存储其配置文件和脚本。 |
与普通用户 home 分离,权限更严格(仅 root 可访问)。 |
|
/usr |
/usr |
存放用户共享的只读数据(程序、库、文档),类似 “Program Files”。 |
子目录 /usr/bin (普通命令)、/usr/lib (库文件)、/usr/share (资源文件);只读,系统升级时可整体替换。 |
|
/opt |
/opt |
第三方软件安装目录(如 nginx 、tomcat ),通常以厂商命名。 |
非系统必需,用户自定义安装路径;权限需 root 控制。 |
运行时数据 |
/tmp |
/tmp |
临时文件目录,所有用户可读写,系统重启后清空(部分文件保留短时间)。 |
权限 1777 (防删除);不建议存储重要数据。 |
|
/var |
/var |
存放运行时可变数据(日志、缓存、队列),如 /var/log (日志)、/var/lib (程序数据)。 |
子目录功能细分(如日志、数据库);通常单独分区,避免占用根目录空间。 |
|
/run |
/run |
存储系统运行时临时数据(进程 PID、套接字文件),等效于 /var/run 的符号链接。 |
系统启动后创建,关机后清空;比 /var 更“临时”。 |
文件系统与设备 |
/mnt |
/mnt |
手动挂载点(临时挂载 U 盘、NFS 共享等),如 mount /dev/sdb1 /mnt/usb 。 |
传统用法,现代系统多使用 /media (自动挂载);需 root 权限操作。 |
|
/media |
/media |
自动挂载点(系统或桌面环境自动挂载可拆卸设备,如 U 盘、CD-ROM)。 |
插入设备后自动创建,权限随设备类型变化。 |
|
/proc |
/proc |
虚拟文件系统,映射内核运行时信息(进程、硬件状态),如 /proc/cpuinfo 。 |
非真实磁盘文件,内容由内核动态生成;用于监控和调试(如查看进程状态)。 |
|
/sys |
/sys |
虚拟文件系统,提供内核设备驱动和系统配置接口(比 /proc 更结构化)。 |
支持动态修改内核参数(如设备属性);需 root 权限操作敏感文件。 |
|
/srv |
/srv |
存放服务器提供的服务数据(如 Web 网页、FTP 文件),如 /srv/www 。 |
由服务自身管理,非系统必需;权限根据服务配置调整。 |
特殊目录 |
/lost+found |
/lost+found |
文件系统检查(fsck )时恢复的损坏文件存放目录。 |
每个分区独立存在,如根分区和 /home 分区各有一个;手动恢复文件需谨慎。 |
|
/selinux |
/selinux |
存储 SELinux 安全策略和配置文件(仅当启用 SELinux 时存在)。 |
Linux 安全增强模块,控制进程对文件的访问权限;需单独配置策略。 |
|
/bin/sh |
/bin/sh |
指向默认 shell 的符号链接(通常指向 /usr/bin/bash 或 /bin/dash )。 |
|
Linux查看系统资源相关命令及意义
cat /proc/meminfo
![在这里插入图片描述]()
top命令
![在这里插入图片描述]()
htop
与 top 命令类似, 但 htop 还展示了其他的各种信息, 而且支持彩色显示
![在这里插入图片描述]()
![在这里插入图片描述]()
free
![在这里插入图片描述]()
vmstat
![在这里插入图片描述]()
进程间通信
底层实现的核心差异
IPC方式 | 数据中转位置 | 跨进程访问机制 | 同步控制实现 |
管道 |
内核环形缓冲区 |
文件描述符共享(无名)/路径打开(FIFO) |
内核等待队列(自动阻塞) |
消息队列 |
内核消息链表 |
队列ID(System V)或路径(POSIX) |
内核队列容量检查 |
共享内存 |
物理内存(共享映射) |
虚拟地址映射(修改页表) |
用户态同步机制(信号量等) |
信号量 |
内核计数器 |
信号量ID(System V)或命名(POSIX) |
内核原子操作+等待队列 |
信号 |
无(仅事件通知) |
进程PID标识 |
内核信号掩码+处理函数表 |
套接字 |
内核套接字缓冲区 |
网络地址/本地路径 |
协议栈状态机(网络)/缓冲区锁(本地) |
内核信息排查命令dmseg
dmesg
命令用于显示 Linux 内核环形缓冲区(Ring Buffer)中的日志信息,主要包含内核启动、运行时状态、硬件交互、驱动行为及错误警告等关键内容。以下是其输出的主要信息分类及说明:
一、系统启动与初始化信息
信息类型 | 具体内容 |
内核版本与编译信息 |
内核版本号、编译时间、架构(如 Linux version 6.2.0-34-generic )、编译选项等。 |
硬件检测日志 |
CPU 型号、核心数、缓存信息;内存容量、控制器;主板、固件(BIOS/UEFI)版本等。 |
设备初始化日志 |
存储设备(硬盘、SSD)、网络设备(网卡)、USB 设备、显卡、声卡等的探测与驱动加载过程。 |
文件系统与进程初始化 |
根文件系统挂载(如 VFS: Mounted root (ext4 filesystem) readonly on device ... )、init 进程启动等。 |
二、运行时内核事件
信息类型 | 具体内容 |
模块加载与卸载 |
内核模块(如驱动、文件系统)的加载/卸载状态(如 usbcore: registered new interface driver usb-storage )。 |
资源管理事件 |
内存分配/释放(如 OOM Killer 触发时的日志:Out of memory: Killed process ... )、CPU 调度事件等。 |
设备状态变更 |
设备热插拔(如 USB 设备插入/拔出)、网络连接状态变化(如 e1000: eth0: Link is up )。 |
文件系统操作 |
磁盘分区挂载/卸载、文件系统错误(如 EXT4-fs error (device sda1): ... )。 |
三、错误与警告信息
信息类型 | 具体内容 |
严重错误(致命问题) |
内核崩溃(Oops/Panic)、硬件致命故障(如内存校验错误、CPU 异常)。 |
非致命错误 |
驱动初始化失败(如 Failed to initialize device )、设备通信超时(如 scsi host0: Timeout sending cmd )。 |
警告与异常 |
资源不足(如 Possible missing firmware for ... )、配置异常(如 Module was built with kernel version ... which is different from current kernel version )。 |
四、调试与详细信息
信息类型 | 具体内容 |
驱动调试日志 |
内核开发者通过 printk 添加的调试信息(需内核开启调试选项,如 CONFIG_DEBUG_KERNEL )。 |
子系统状态 |
内核子系统(如调度器、内存管理、网络协议栈)的详细运行状态(如 TCP: Hash tables configured )。 |
固件交互日志 |
与 BIOS/UEFI、ACPI、设备固件的交互细节(如 ACPI: Interpreter enabled )。 |
五、日志格式与关键字段
dmesg
输出的每条日志通常包含以下字段(以示例说明):
[ 0.000000] Linux version 6.2.0-34-generic (builduser@buildhost) (x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #34-Ubuntu SMP PREEMPT_DYNAMIC Thu Mar 21 12:54:29 UTC 2024
- 时间戳:
[0.000000]
表示系统启动后的秒数(可通过 dmesg --time-format iso
显示绝对时间)。
- 模块/子系统名:如
usbcore
、EXT4-fs
,标识日志来源。
- 日志内容:具体事件描述,包含状态、错误码、设备名称等关键信息。
六、日志级别与过滤
dmesg
会显示内核定义的 7 级日志级别(数值越小优先级越高,详见下表),可通过 grep
或日志级别参数过滤特定信息:
日志级别 | 宏定义 | 数值 | 典型场景 |
紧急 |
KERN_EMERG |
0 |
内核崩溃、硬件致命错误(如 PANIC) |
严重错误 |
KERN_CRIT |
2 |
OOM Killer 触发、磁盘 I/O 错误 |
错误 |
KERN_ERR |
3 |
驱动初始化失败、网络连接超时 |
警告 |
KERN_WARNING |
4 |
资源不足、固件缺失警告 |
信息 |
KERN_INFO |
6 |
设备正常识别、模块加载成功 |
调试 |
KERN_DEBUG |
7 |
内核调试信息(需手动开启) |