Linux相关知识积累
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 | 内核调试信息(需手动开启) |
浙公网安备 33010602011771号