Linux基础(59)之内核管理相关命令及/proc、/sys目录

Linux基础(59)之内核管理相关命令及/proc、/sys目录

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

命令

uname

uname 可用来显示系统相关信息。

uname [option]...
    -a:显示所有信息;
    -s:显示系统名称;
    -r:显示内核版本号;
    -n:显示当前主机名称;
    -v:显示内核的制作版本信息;
    -m:显示当前硬件平台;
    -p:显示处理器类型;
    -i:显示硬件平台架构,主要取决于 CPU 和主板;
    -o:显示操作系统全名称;

lsmod

lsmod 可用来查看内核已装载的内核模块。

image.png

lsmod 其实是显示 /proc/modules 中的内容,只是将该内容做了格式化后显示。

modinfo

modinfo 可用来查看指定模块的详细信息。

modinfo [option]... <module_name>
    option:
        -k:指定内核;
        -n:显示指定模块的文件路径;
        -a:显示指定模块的作者;
        -d:显示描述信息;
        -p:显示模块参数;
        -l:查看模块的许可证;
    module_name:模块名称;

image.png

要注意的是该命令是可以用来查看未装载的模块信息,前提是模块文件存在于对应目录且已被索引。

modprobe

modprobe 可用来装载或卸载内核模块。

modprobe [oprion]... [module_name]
    option:
        -r:卸载指定模块;
        -q:静默模式;
        -C:指定模块配置的配置文件,默认读取的是 /etc/modprobe.conf 、/etc/modprobe.d/*.conf 文件;
        -n:测试;
    module_name:模块名称;   

例 1 :拆除 ip_tables

modprobe -r ip_tables

例 2:装载 ip_tables

modprobe ip_tables

insmod&rmmod

insmod 可用来装载模块,rmmod 可用来卸载模块,与 modprobe 不同的是,insmod 只会装载我们指定的文件,而 modprobe 在装载模块时会自动帮我们解决依赖关系。

insmod <module_path>
    module_path:模块文件路径,可通过 modinfo 命令查看其文件路径及依赖的模块;
lsmod <module_name>
    module_name:模块名称;

例 1:装载 ip_tables

insmod `modinfo -n ip_tables`

例 2:卸载 ip_tables

rmmod ip_tables

/proc目录

内核把自己的运行状态信息以及统计信息、可配置参数通过 proc 伪文件系统输出,以目录的形式展示出来。
以下面目录或文件为例:

  • /proc/mounts :已挂载的文件系统信息;
  • /proc/module:已装载的模块信息;
  • /proc/<pid>:每个进程号为 pid 的进程的状态信息;
  • /proc/scsi:SCSI 接口设备相关;
  • /proc/fs:文件系统相关;
  • /proc/bus:总线相关;
  • /proc/driver:驱动相关;

所以我们能够像操作文件一样来操作这里数据,但能修改的只是可配置参数,这些可配置参数可用来设置内核的某功能或特性。

sysctl

/proc/sys 目录是一个可配置目录,该目录下的参数可以使用 sysctl 命令来控制。
sysctl 的设置参数的格式如下:

sysctl [option]... <parameter>=<value>
    option:
        -a:查看所有可设定的参数;
        -w:设置参数;
        -p <config_file>:通过配置文件设置参数,省略 config_file 参数时默认读取 /etc/sysctl.conf;
    parameter:指的是相对 `/proc/sys` 指定的一个路径下的一个文件名;
    value:值;

echo 命令通过重定向的方式也可以修改大多数参数的值。

echo <value> > <parameter>
    parameter:指的是相对 `/proc/sys` 指定的一个路径下的一个文件名;
    value:值;

如果希望让配置的参数永久有效,可直接修改 sysctl 的配置文件内容,对应文件为 /etc/sysctl.conf,修改完毕后使用 sysctl -p 使其立即生效。

例:

例 1:修改主机名。
主机名对应的文件为 /proc/sys/kernel/hostname
使用 sysctl 设置:

sysctl -w kernel/hostname=hahah

使用 echo 设置:

echo 'hahah' > /proc/sys/kernel/hostname

例 2:开启或关闭核心转发功能。
核心转发功能对应的参数文件为 /proc/sys/net/ipv4/ip_forward
使用 sysctl 开启:

sysctl -w net/ipv4/ip_forward=1

使用 echo 关闭:

echo 0 > /proc/sys/net/ipv4/ip_forward

例 3:回收当前占用的 buffer 和 cache 空间。
/proc/sys/vm/drop_caches 命令可以用来控制立即回收 buffer 和 cache,只需要给它设定一个 1 即可,例:

sysctl -w vm/drop_caches=1

/sys目录

/sys 目录其实也是内核用来输出信息的,不同的地方在于:

  • /proc 目录是用 proc 伪文件系统输出内核自己的运行状态信息以及统计信息、可配置参数;
  • /sys 目录是用 sysfs 伪文件系统输出硬件设备的相关属性信息,也有内核对硬件特性的设定信息,有些参数是可以修改的,用户调整硬件的工作特性;

udev 通过此路径下的输出信息动态为各设备创建所需要的设备文件。
udev 是运行在用户空间的程序,它借助 udevadmin、hotplug 等插件来完成配置。
udev 创建设备文件时,会读取事先定义好的规则文件,一般在 /etc/udev/rules.d/usr/lib/udev/rules.d 目录下。

ramdisk文件的制作

ramdisk 文件是系统安装过程到最后一步时,通过当前系统所在硬件的相关信息按需创建的。
如果要手动制作 ramdisk 文件,可使用 mkinitrddracut 来完成,使用格式如下:

mkinitrd [OPTION...] [<initrd-image>] <kernel-version>
dracut [OPTION...] [<initrd-image>] <kernel-version>
    initrd-image:要创建的文件;
    kernel-version:针对的内核版本;

例:为当前系统创建 ramdisk 文件:

mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/linux-base-59.html

Buy me a cup of coffee ☕.