内核编译及系统裁剪
内核组成部分:
核心:/boot/vimlinuz-version
内核模块(ko):/lib/modules/version
内核设计模式:
单内核:linux内核是使用微内核的设计思想的单内核设计模式,模块化设计
微内核:
装载内核模块命令:
insmod
modprobe
内核发行网址:
用户空间访问、监控内核的方式:通过修改“/proc”,"/sys"目录下文件;
/proc,/sys是伪文件系统
/proc/sys:此目录中的文件很多是可读写的
/sys/:某些文件可写
设定内核参数值的方法:
在/proc/sys/目录下:
echo VALUE > /proc/sys/TO/SOMEFILE #能立即生效,但无法永久有效
例1:[root@www sys]# free -m
total used free shared buffers cached
Mem: 502 431 71 0 30 277
-/+ buffers/cache: 123 378
Swap: 996 0 996
[root@www sys]# echo 1 > /proc/sys/vm/drop_caches
[root@www sys]# free -m
total used free shared buffers cached
Mem: 502 145 357 0 0 22
-/+ buffers/cache: 123 379
Swap: 996 0 996
例2:[root@www sys]# hostname
[root@www sys]# echo mylab.magedu.com > /proc/sys/kernel/hostname
[root@www sys]# hostname
mylab.magedu.com
sysctl -w 上一级目录.SOMEFILE="修改的内容" #能立即生效,但无法永久有效
例3:[root@www sys]# sysctl -w kernel.hostname=""
kernel.hostname =
[root@www sys]# hostname
编辑/etc/sysctl.conf文件 #永久有效,但不能立即生效
sysctl -p : 修改文件完成后,执行该命令可立即生效;
sysctl -a:显示所有内核参数及其值
例4:[root@www sys]# cat /proc/sys/net/ipv4/ip_forward #查看网卡参数
0 #0表示不启用,1表示启用
[root@www sys]# vim /etc/sysctl.conf #编辑/etc/sysctl.conf文件
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 1 #参数改为1
[root@www sys]# sysctl -p #通知内核重读内核参数
[root@www sys]# cat /proc/sys/net/ipv4/ip_forward
1
内核模块管理:
lsmod:查看
modprobe MOD_NAME:装载某个内核模块
modprobe -r MOD_NAME:卸载某个内核模块
例5:[root@www ~]# lsmod | grep floppy #查看软驱模块
floppy 57125 0
[root@www ~]# modprobe -r floppy #卸载软驱模块
[root@www ~]# lsmod | grep floppy #查看软驱模块
[root@www ~]# modprobe floppy #装载软驱模块
[root@www ~]# lsmod | grep floppy
floppy 57125 0
modinfo MOD_NAME:查看某个内核模块信息
insmod /PATH/TO/MODULE_FILE:装载内核模块
rmmod MOD_NAME:卸载某个内核模块
depmod /PATH/TO/MODULES_DIR:生成模块间的依赖关系
内核中的功能模块除了核心功能外,在编译时,大多功能都有三种选择:
1、不使用此功能;
2、编译成内核模块;
3、编译进内核;
如何手动编译内核:
1、查看本系统内核版本:
[root@www ~]# uname -r
2.6.18-308.el5
2、安装Development Libraries 和 Development Tools 编译程序;
3、内核特性选择工具:
make gconfig: Gnome桌面环境使用,需要安装图形软件开发库组(GNOME Software Development)
make kconfig: KDE桌面环境使用,需要安装图形软件开发库组(KDE Software Development)
make menuconfig:打开图形管理界面,选择需要安装的特性
4、make
5、make modules_install
6、make install
注:screen命令:
[root@www linux]# yum install screen #安装screen软件包
screen -ls:显示已经建立的屏幕
screen:直接打开一个新的屏幕
Ctrl+a键, d键:拆除屏幕
screen -r ID:还原回某屏幕
exit:退出
二次编译时清理(清理前,如果有需要,请备份配置文件.config):
make clean
make mrproper
内核工作方式:
grub->kernel->initrd->ROOTFS(/sbin/init,/bin/bash)
mkinitrd initrd文件路径 内核版本号
如:mkinitrd /boot/initrd-`uname -r` `uname -r`
bash截取功能用法:
${parameter#word}
${parameter##word}
例1:[root@localhost ~]# echo ${FILE#*/}
usr/local/src
例2:[root@localhost ~]# echo ${FILE##*/}
src
${parameter%word}
${parameter%%word}
例1:[root@localhost ~]# echo ${FILE%/*}
/usr/local
例2:[root@localhost ~]# echo ${FILE%%/*}
#截取值为空
例3:编写一个脚本,实现截取
[root@localhost ~]# vim bincopy.sh
#!/bin/bash
#
DEST=/mnt/sysroot
libcp() {
LIBPATH=${1%/*}
[ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
[ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
}
bincp() {
CMDPATH=${1%/*}
[ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
[ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
for LIB in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
libcp $LIB
done
}
read -p "Your command: " CMD
until [ $CMD == 'q' ]; do
! which $CMD && echo "Wrong command" && read -p "Input againe" CMD && continue
COMMAND=`which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
bincp $COMMAND
echo "copy $COMMAND finished."
read -p "Continue: " CMD
done
阅读(1030) | 评论(0) | 转发(0) |