命令拷屏之系统信息,linux调节和维护内核

linux调节和维护内核

系统

内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe

 

查看发行版本与内核版本,uname -a或者uname -r
查看发行版(及其版本)则没有统一命令
一般写在/etc/issue或者/etc/release(release可能有前缀或后缀),可以用ls
/etc/*release*看看
[root@rac01 网赌十大信誉的平台,~]# lsb_release -a            不一定有这个命令
[root@rac01 ~]# uname -a          
 显示系统体系结构,以下参数分别代表各字段信息
Linux rac01 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64
x86_64 x86_64 GNU/Linux
-s      -n      -r                   -v              
                                     -m        -p         -i        
-o
[root@Firewall ~]# head -n 1 /etc/issue        查看发行版本
CentOS release 5.5 (Final)
Red Hat Enterprise Linux Server release 5.8 (Tikanga)

  首先,我们得知道内核与内核模块放在哪里。

作为用户程序和系统硬件之间的接口,内核在确保Red Hat Enterprise Linux
应用到广泛到物理和虚拟硬件环境中发挥来重要作用。  www.2cto.com  

内核

内核:/boot/vmlinuz或/boot/vmlinuz-version;

 

lsmod,modinfo ip_vs,modprobe,depmod
[root@rac01 ~]#
lsmod    
yum update kernel kernel-devel -y
kernel kernel-devel 两个版本一致
如果安装过后  需要重启 重启后还是不行的话 需要卸载再重新安装
dmesg 查看内核日志 显示一些打印信息 警告信息 出错 
对应的文件在/var/log/dmesg
kernel会将开机信息存储在ring
buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里
[root@coreserv ~]# cd /sys/module/    此目录下是更详细的模块信息
[root@coreserv ~]# lsmod    lsmod
以美观的方式列出/proc/modules的内容。
Module(模块名)    Size(模块大小)   Used by(被…使用)
[root@coreserv ~]# less /proc/modules
insmod是一个向内核插入模块的小程序:若文件名是一个连字符’-‘,模块从标准输入输入。大多数用户使用modprobe,因为它比较智能化。
rmmod是一个可以从内核中删除模块的小程序,大多数用户使用modprobe
-r去删除模块。
modinfo列出Linux内核中命令行指定的模块的信息。若模块名不是一个文件名,则会在/lib/modules/version
目录中搜索,就像modprobe一样。
modinfo默认情况下,为了便于阅读,以下面的格式列出模块的每个属性:fieldname
: value。
[root@coreserv ~]# modinfo nfs_acl
modprobe可智能地添加和删除Linux内核模块(为简便起见,模块名中’_’和’-‘是一样的)。modprobe会查看模块
目录/lib/modules/’uname -r’里面的所有模块和文件,除了可选
的/etc/modprobe.conf配置文件和/etc/modprobe.d目录外。
modprobe需要一个最新的modules.dep文件,可以用depmod来生成。该文件列出了每一个模块需要的其他模块,modprobe使用这个去自动添加或删除模块的依赖。
depmod分析可加载模块的依赖性,生成modules.dep文件和映射文件。
Linux内核模块可以为其它模块提供提供服务(在代码中使用EXPORT_SYMBOL),这种服务被称作”symbols”。若第二个模块使用了这个symbol,则该模块很明显依赖于第一个模块。这些依赖关系是非常繁杂的。depmod读取在/lib/modules/’uname
-r’
目录下的所有模块,并检查每个模块导出的symbol和需要的symbol,然后创建一个依赖关系列表。默认地,该列表写入到/lib/moudules
/’uname
-r’目录下的modules.dep文件中。若命令中的filename有指定的话,则仅检查这些指定的模块(不是很有用)。若命令中提供了version参数,则会使用version所指定的目录生成依赖,而不是当前内核的版本(uname
-r 返回的)。

内核解压缩所需RAMDisk:/boot/initrd(/boot/initrd-version);

识别运行内核:

 

内核模块:/lib/modules/version/kernel或/lib/modules/$(uname -r)/kernel;

 

[root@localhost modules]# rpm -qa|grep module
module-init-tools-3.9-21.el6_4.x86_64
[root@localhost modules]# rpm -ql module-init-tools
/etc/depmod.d
/etc/depmod.d/dist.conf
/etc/modprobe.d
/etc/modprobe.d/dist-alsa.conf
/etc/modprobe.d/dist-oss.conf
/etc/modprobe.d/dist.conf
/etc/modprobe.d/local.conf
/sbin/depmod
/sbin/insmod
/sbin/insmod.static
/sbin/lsmod
/sbin/modinfo
/sbin/modprobe
/sbin/rmmod
/sbin/weak-modules

所有的内核模块,全部以.ko结尾
[root@localhost kernel]# pwd
/lib/modules/2.6.32-431.el6.x86_64/kernel
[root@localhost kernel]# ls
arch  crypto  drivers  fs  kernel  lib  mm  net  sound

当前已经编译的模块
[root@localhost modules]# modprobe -l|wc -l
2002
当前已载入的模块
[root@localhost modules]# lsmod|wc -l
47

需要什么功能就去加载相应的模块
从下面开始明白了解了加载模块的含义与用法
[root@localhost ~]# lsmod |grep netconsole
[root@localhost ~]# modprobe netconsole netconsole=@/eth0,12345@10.0.0.1/00:E0:81:2B:0C:C1
[root@localhost ~]# lsmod |grep brid
[root@localhost ~]# modprobe bridge
[root@localhost ~]# lsmod |grep brid
bridge                 83177  0
stp                     2218  1 bridge
llc                     5546  2 bridge,stp
[root@localhost ~]# lsmod |grep kvm
[root@localhost ~]# modprobe kvm
[root@localhost ~]# lsmod |grep kvm
kvm                   333172  0

没有内核模块软件是通过守护进程来实现的

内核源码:/usr/src/linux 或 /usr/src/kernels;

  1. cat /etc/redhat-release 安装的Red Hat Enterprise Linux 版本

  2. uname -r 当前运行的内核版本

  3. yum list installed kernel\* 安装的内核版本

  4. uname -m 或arch 当前运行所在处理器体系结构

 

  如果内核顺利被加载了,会有以下几个信息记录:

 

 

内核版本:/proc/version

5.uname -a 查看内核信息

用户及权限
[root@Firewall ~]# w                查看活动用户信息
[root@Firewall ~]# who -a            与uname -a类似
[root@Firewall ~]# who –rH            显示当前运行级别
[root@Firewall ~]# id                查看指定用户信息
[root@Firewall ~]# last                查看用户登录日志
[root@Firewall ~]# lastlog
[root@Firewall ~]# cut -d: -f1 /etc/passwd    查看系统所有用户
[root@Firewall ~]# cut -d: -f1 /etc/group    查看系统所有组
[root@Firewall ~]# crontab -l            查看当前用户的计划任务

系统内核功能:/proc/sys/kernel

 

进程

  假如我有个新硬件,偏偏我的系统不支持,要这样做:

有时,内核会发出日志消息。这些消息记录在/var/log/messages文件中,标记为kernel服务。

[root@test1 ~]# ps U oracle
[root@test1 ~]# ps -He -H显示进程层次,通常与其它连用,如-a,-e等
[root@test1 ~]# ps -e e -ww e 命令之后显示环境(如:ps -d e; ps -a
e),-ww避免详细参数被截断

重新编译内核,并加入最新的硬件驱动程序源码;

 

有十几种控制进程的方法,有fg,bg,jobs,at,crontab,pstree,top,nice,renice,sleep,nohup,pgrep等

将该硬件的驱动程序编译成为模块,在启动时加载该模块。

内核模块:

下面是一些常用的方法:
SIGKILL 和 SIGSTOP
信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。所以这是你的终极武器。

 

 

[root@localhost ~]#kill -KILL [pid]
[root@localhost ~]#kill -STOP [pid]
renice +4 ‘pgrep squid‘
ps -fp $(pgrep -d, -x xterm)

  下面我们着重讲一下内核模块

模块加载和卸载

服务
[root@Firewall ~]# chkconfig –list
[root@Firewall ~]# service kudzu status 用硬件检测程序kuduz探测新硬件

一、内核模块与依赖性

● 在引导时加载的核心内核映像位于/boot/vmlinuz-VERSION.

  基本上,内核模块放置处是在 /lib/modules/$(uname
-r)/kernel当中,里面的几个目录主要为:


虽然可以安装多个内核,但是只有一个是当前运行的内核。若要更改内核,必须重新引导系统。

arch 与硬件平台有关的选项


每个内核都包含一组动态加载的模块,这些模块与该内核兼容,保留在/lib/modules/VERSION/
中。

crypto 内核所支持的加密的技术

● 通常,根据需要加载和卸载模块,无需用户(或管理员)交互。

drivers 一些硬件的驱动程序

● 可以使用 lsmod 列出当前加载的模块。

fs 内核所支持的文件系统

● 有时,可能需要使用modprobe MODULENAME 手动加载模块。

lib 一些函数库

● 可以使用modprobe -r MODULENAME 删除不再使用的模块。

net
与网络有关的各项协议数据,还有防火墙模块等

 

sound 与音效有关的各项模块

可以在   /lib/modules/2.6.32-71.el6.x86_64/kernel  
目录下查看内核模块信息

  还有文件/lib/modules/$(uname -r)/modules.dep
,记录了内核支持的模块的依赖性。那么如何创建该文件呢?如下:

 

#depmod [-Ane]

modprobe -l   列出所加载的模块

 
-A:不加任何参数时,depmod会主动去分析目前内核的模块,并且重新写入/lib/modules/$(uname
-r)/

 

modules.dep当中。如果加-A参数,则会查找比modules.dep内还要新的模块,如果真找到,才会更新。

示例:

  -n:不写入modules.dep,而是将结果输出到屏幕上。

 

  -e:显示出目前已加载的不可执行的模块名称。

# modprobe -l | grep nf_conntrack_ftp

 

# modprobe nf_conntrack_ftp

 
例子:我做好一个网卡驱动程序a.ko(内核模块名以.ko结尾),该如何更新内核的依赖性?

# lsmod | grep nf_conntrack_ftp

#cp a.ko /lib/modules/$(uname
-r)/kernel/drivers/net

# modprobe -r nf_conntrack_ftp

#depmod

 

 

内核更新:

 

 

二、内核模块的查看

下载新内核rpm包

  查看目前模块加载了多少的模块。

 

#lsmod

理论上应使用rpm -Uvh kernel-name.rpm  
但是如果使用U的话会使当前运行的系统挂掉,

网赌十大信誉的平台 1

 

模块名称     模块的大小
 此模块是否被其他模块使用

所以用 rpm -ivh kernel-name.rpm     全新安装内核

 

 

查阅每个模块信息

在 /boot 中会出现一个新的内核

#modinfo [-adln]
[module_name|filename]

 

  -a:仅列出作者名

在 /boot/grub/grub.conf 中 default=0
表示使用新内核,此时需重启才能使用到新内核。

  -d:仅列出该modules的说明

 

  -l:仅列出授权

作为用户程序和系统硬件之间的接口,内核在确保Red Hat Enterprise Linux
应用到广泛到物理和虚拟硬件环境中发挥来重要作…

  -n:仅列出该模块的详细路径

 

  例子:#modinfo mii

网赌十大信誉的平台 2

 

 

三、内核模块的加载与删除

 
最好使用modprobe这个命令加载模块,因为modprobe会主动查找modules.dep的内容,解决了依赖性后,才决定需要加载的模块有哪些。

 
insmod则完全由用户自行加载一个完整文件名的模块,并不会主动分析模块依赖性。

#insmod [/full/path/module_name]
[parameters]

 

  例子:尝试载入cifs.ko这个文件系统模块

#insmod /lib/modules/$(uname
-r)/kernel/fs/cifs/cifs.ko

  记住,一定要是完整的文件名。

 

#rmmod [-fw] module_name

  -f:强制将该模块删除掉,不论是否正在被使用

  -w:若该模块正在被使用,则等待该模块被使用完毕后再删除

 

 
insmod与rmmod的问题时,你必须自行找到模块的完整文件名才行。所以,我们一般使用modprobe.

#modprobe [-lcfr] module_name

  -c:列出目前系统上面所有的模块

  -l:列出目前在/lib/modules/`uname -r`/kernel当中的所有模块完整文件名

  -f:强制加载该模块

  -r:删除某个模块

 

  例子:加载cifs模块

   #modprobe cifs

 
很方便,因为我们根本不用知道完整的模块文件名

 

内核模块的额外参数配置:/etc/modprobe.conf

  如果你想修改某些模块的额外参数设置,就在这个文件内。

  #vi /etc/modprobe.conf

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注