第一章 linux内核简介及命令使用

本文介绍了Linux内核的基础知识,包括内核的作用、内存管理、进程管理和设备驱动。详细阐述了内核模块的概念,如uname、lsmod、modinfo命令的使用,以及insmod和rmmod命令在加载和卸载内核模块时的角色。
摘要由CSDN通过智能技术生成


前言

Linux 内核是一种开源的类 Unix 操作系统宏内核。

Linux 内核是 Linux 操作系统的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。之所以称为内核,是因为它在操作系统中就像果实硬壳中的种子一样,并且控制着硬件的所有主要功能。内核的用途主要有以下 4 项工作:

  1. 内存管理:追踪记录有多少内存存储了什么以及存储在哪里
  2. 进程管理:确定哪些进程可以使用中央处理器、何时使用以及持续多长时间
  3. 设备驱动程序:充当硬件与进程之间的调解程序/解释程序
  4. 系统调用和安全防护:从流程接受服务请求

在正确实施的情况下,内核对于用户是不可见的,它在自己的小世界(称为内核空间)中工作,并从中分配内存和跟踪所有内容的存储位置。用户所看到的内容则被称为用户空间。这些应用通过系统调用接口(SCI)与内核进行交互。

Linux系统内核概述

1、内核简介

单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。

Linux 内核的重要组成部分,主要有以下几部分:

  1. kernel内核核心,一般为 bzImage通常在 /boot 目录下,名称为 vmlinuz-VERSION-RELEASE
  2. kernel object内核对象,一般放置于 /lib/modules/VERSION-RELEASE/[ ] ==> N ==>
    不编译进内核[M] ==> M ==> 编译为模块文件[*] ==> Y ==> 编译进内核
  3. 辅助文件(ramdisk)initrdinitramfs

2、内核模块

2.1 uname 命令

使用格式

uname [OPTION]…

参数解释

-n 显示节点名称
-r 显示VERSION-RELEASE
-s 内核名称
-v 内核版本
-n 节点名
-m 硬件名称
-i 硬件平台
-p 处理器类型
-o 操作系统

# uname -m
x86_64

# uname -r
6.2.0-36-generic

# uname -a
Linux baicells-virtual-machine 6.2.0-36-generic #37~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct  9 15:34:04 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

2.2 lsmod 命令

显示由核心已经装载的内核模块

命令定义

  1. 显示的内容来自于: /proc/modules 文件。
  2. 使用 lsmod 命令时,常会采用类似 lsmod | grep -i ext4 这样的命令来查询系统是否加载了某些模块。
# cat /proc/modules
tls 147456 0 - Live 0xffffffffc0add000
isofs 57344 1 - Live 0xffffffffc0ace000
sctp 491520 18 - Live 0xffffffffc0a55000
ip6_udp_tunnel 16384 1 sctp, Live 0xffffffffc0a2c000
udp_tunnel 28672 1 sctp, Live 0xffffffffc0a48000
xt_MASQUERADE 20480 1 - Live 0xffffffffc0a31000
nft_compat 20480 1 - Live 0xffffffffc0a26000
nft_chain_nat 16384 1 - Live 0xffffffffc0a50000
nf_nat 61440 2 xt_MASQUERADE,nft_chain_nat, Live 0xffffffffc0a38000
nf_conntrack 204800 2 xt_MASQUERADE,nf_nat, Live 0xffffffffc09f3000
nf_defrag_ipv6 24576 1 nf_conntrack, Live 0xffffffffc09ec000
nf_defrag_ipv4 16384 1 nf_conntrack, Live 0xffffffffc09e7000
nf_tables 352256 5 nft_compat,nft_chain_nat, Live 0xffffffffc0990000
libcrc32c 16384 4 sctp,nf_nat,nf_conntrack,nf_tables, Live 0xffffffffc098b000
nfnetlink 24576 2 nft_compat,nf_tables, Live 0xffffffffc0848000
vsock_loopback 16384 0 - Live 0xffffffffc086b000
vmw_vsock_virtio_transport_common 57344 1 vsock_loopback, Live 0xffffffffc085c000
vmw_vsock_vmci_transport 45056 2 - Live 0xffffffffc0850000
# lsmod | grep sctp
sctp                  491520  18
ip6_udp_tunnel         16384  1 sctp
udp_tunnel             28672  1 sctp
libcrc32c              16384  4 nf_conntrack,nf_nat,nf_tables,sctp

字段含义

  1. 第 1 列:表示模块的名称
  2. 第 2 列:表示模块的大小
  3. 第 3 列:表示依赖模块的个数
  4. 第 4 列:表示依赖模块的内容
# lsmod
Module                  Size  Used by
iptable_filter          2173  0
ip_tables               9567  1 iptable_filter
ext3                  203718  1
jbd                    65315  1 ext3
xenfs                   4360  1
ipv6                  271097  14
xen_netfront           15871  0
ext4                  339812  2
jbd2                   75927  1 ext4
mbcache                 6017  2 ext3,ext4
xen_blkfront           19209  5
dm_mirror              11969  0
dm_region_hash          9644  1 dm_mirror
dm_log                  8322  2 dm_mirror,dm_region_hash
dm_mod                 84711  11 dm_mirror,dm_log

2.3 modinfo 命令

显示模块的详细描述信息

命令定义

  1. modinfo 列出 Linux 内核中命令行指定的模块的信息。
  2. modinfo 能够查询系统中未安装的模块信息。
  3. 若模块名不是一个文件名,则会在 /lib/modules/version 目录中搜索,就像 modprobe 一样。
  4. modinfo 默认情况下,为了便于阅读,以下面的格式列出模块的每个属性:fieldname : value。 语法

modinfo [选项] [ modulename|filename… ]

选项

  1. -n 只显示模块文件路径
  2. -p 显示模块参数
  3. -a author
  4. -d description
  5. -l license
  6. -0 使用’\0’字符分隔 field 值,而不是一个新行,对脚本比较有用

实战演示

#modinfo sctp.ko
filename:       /lib/modules/6.2.0-36-generic/kernel/net/sctp/sctp.ko
license:        GPL
description:    Support for the SCTP protocol (RFC2960)
author:         Linux Kernel SCTP developers <linux-sctp@vger.kernel.org>
alias:          net-pf-10-proto-132
alias:          net-pf-2-proto-132
srcversion:     572D947D76002729787C9AE
depends:        udp_tunnel,ip6_udp_tunnel,libcrc32c
retpoline:      Y
intree:         Y
name:           sctp
vermagic:       6.2.0-36-generic SMP preempt mod_unload modversions

2.4 insmod 和 rmmod 命令

装载或卸载内核模块

不解决依赖关系,需要自己手动卸载

insmod命令

  1. 向 Linux 内核中插入一个模块
  2. insmod 是一个向内核插入模块的小程序
  3. 大多数用户使用 modprobe 因为它比较智能化
  4. insmod [ filename ] [ module options… ]

rmmod命令

  1. 命令解析删除内核中的一模块rmmod 是一个可以从内核中删除模块的小程序,大多数用户使用modprobe -r去删除模块
  2. 语法格式rmmod [ modulename ]
  3. 参数选项-f除非编译内核时 CONFIG_MODULE_FORCE_UNLOAD被设置该命令才有效果,否则没效果用该选项可以删除正在被使用的模块,设计为不能删除的模块,或者标记为 unsafe 的模块-wrmmod拒绝删除正在被使用的模块使用该选项后,指定的模块会被孤立起来,直到不被使用-s将错误信息写入syslog,而不是标准错误(stderr)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flowHEHE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值