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 存放所有用户可用的基本命令(二进制可执行文件),如 lscpsh 等。 系统启动必需,即使根目录只读也可访问;所有用户可读可执行。
  /sbin /sbin 存放系统管理命令(如 rebootshutdown),通常仅 root 用户可用。 /bin 类似,供系统维护使用,非日常用户命令。
  /etc /etc 存储系统和程序的配置文件(文本文件),如用户信息、网络配置、服务启动脚本等。 非运行时文件,修改后需重启服务生效;建议定期备份。
  /boot /boot 存放系统启动文件(内核、引导程序、初始化文件),如 vmlinuzgrub/ 通常单独分区,避免根目录空间不足导致无法启动;权限严格(仅 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 第三方软件安装目录(如 nginxtomcat),通常以厂商命名。 非系统必需,用户自定义安装路径;权限需 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 显示绝对时间)。
  • 模块/子系统名:如 usbcoreEXT4-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 内核调试信息(需手动开启)
posted @ 2025-05-03 02:04  哈哈浩丶  阅读(2)  评论(0)    收藏  举报  来源