Skip to content
lnf0701 edited this page Sep 20, 2015 · 10 revisions

主版本号:次版本号:修正号,次修正号 核心:/boot/vmlinuz-version 内核模块:/lib/modules/version /proc/sys,/sys echo val > /proc/sys/内核文件 sysctl -W kenerl.hostname='mail.zxhost.com'---(以/proc/sys为目录) 可以修改/etc/sysctl.conf ----永久有效,不可直接生效。如果立即生效执行sysctl -p, 注意:sysctl -a --显示所有内核参数。

查看系统装载的模块:lsmod 装载模块:modprobe 模块名 卸载模块:modprobe -r 模块名 查看模块信息:modinfo 模块名(查看依赖关系)

装载模块:insmod /xx/xxx/xx(用modinfo查看路径) 移除模块:rmmod 模块名

tar -xf linux.xxx.gz -c /usr/src ln -sv linux-xxxx linux make menuconfig

可以采用系统的原有模板编译 cp /boot/config.xxx.el5 /usr/src/linux/.config

make make modules_install make install

二次编译:make clean, make mrproper 1,grub-install --root-directory=/mnt /dev/hda 2,cp /boot/vmlinuz-xxx.el5 /mnt/boot/vmlinuz 3,mkinitrd /boot/initrd-uname -r.img uname -r 需要修改这个文件 mv initrd-xxx.img initrd-xxx.img.gz gzip -d initrd-xxx.img.gz file initrd.xxx.img.gz mkdir test;cd test cpio -id < ../initrd.xxx.img 一个命令搞定:zcat /boot/initrd.xxx.img | cpio -id -----展开img文件,修改vi init;

find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz

vim /mnt/boot/grub/grub.conf default=0 timeout=5 title Unix root (hd0,0) kenerl /vmlinuz initrd /initrd.gz

创建系统需要的目录。 mdir etc/{rc.d/init.d} bin sbin proc sys dev lib root mnt media var/{log,run,lock/subsys} usr/{bin,sbin,local} tmp home opt boot -pv

cp /sbin/init /mnt/sysroot/sbin cp /bin/bash /mnt/sysroot/bin/bash ldd /sbin/init:复制对应的库文件到对应的目录。 ldd /bin/bash :同上。

vim /etc/inittab id:3:initdefault: si::sysinit:/etc/rc.d/rc.sysinit

vi /etc/rc.d/rc.sysinit #!/bin/bash

echo -e "\t welcome to \033[31mzxhostmcom\033[0m linux" /bin/bash chmod +x rc.sysinit

脚本:

/etc/inittab: 设定默认运行级别 初始化系统文件

/etc/rc.d/rc.sysinit: 检测并以读写的方式重新挂载根文件系统; 设定主机名; 检测并挂载/etc/fatab中的其他文件系统 启动swap分区, 初始化外围硬件设备的驱动。 根据/etc/sysctl.conf设定内核参数; 激活udev和selinux 激活LVM和RAID设备 清理过期的锁和pid文件 装载键映射。

任务:完成一个真正的linux系统。必行谢谢 关机和重启,运行对应服务脚本,启动终端,运行用户,定义单用户模式, 装载网卡驱动,启动网络功能,提供一个web server

mount -n 挂载时不更新/etc/fstab文件。 cat /proc/mount mount -n -o remount,rw / exec:替换父进程,而不是当子进程执行, 当执行halt的时候,会切换到级别0,所以要配置对应级别的脚本, ''' 创建脚本:vim /etc/rc.d/rc.sysdown #!/bin/bash

sync sleep 2 sync exec /sbin/halt -p 创建脚本:vim /etc/rc.d/rc.reboot #!/bin/bash

sync,sleep 2,sync exec /sbin/reboot chmod +x {/sbin/rc.reboot,/sbin/rc.sysdown} 修改/etc/inittab 10:0:wait:/etc/rc.d/rc.sysdone
16:6:wait:/etc/rc.d/rc.reboot '''

vim /etc/rc.d/init.d/halt #!/bin/bash

case $0 in *reboot) command="/sbin/halt -p";; *halt) command="/sbin/reboot" ;; *) echo "ondy call this script by *reboot or *halt" ;; esac

case $1 in start) ;; stop) ;; *) echo "useage: basename $0{start|stop}" ;; esac

exec $command

chmod +x /etc/rc.d/init.d/halt

cd /etc/rc.d/init.d/ mkdir rc0.d rc6.d cd rc0.d ln -sv ../init.d/halt S99halt cd rc6.d ln -sv ../init.d/halt S99reboot

创建脚本:vi /etc/rc.d/rc #!/bin/bash

runlevel=$1 for i in /etc/rc.d/rc$runlevel.d/K*;do $i stop done

for i in /etc/rc.d/rc$runlevel.d/S*;do $i start done

修改/etc/inittab 10:0:wait:/etc/rc.d/rc 0 16:6:wait:/etc/rc.d/rc 6 13:3:wait:/etc/rc.d/rc 3 测试脚本: vi /etc/rc.d/init.d/tserver #!/bin/bash

chkconfig:35 66 33

description: test service script

. /etc/rc.d/init.d/functions #prog="basename $0" prog=tserver lockfile=/var/lock/subsys/$prog start(){ #echo "start $prog...." touch $lockfile [ $? -eq 0 ] && success "start $prog" || failure "starting $prog" }

stop(){ #echo "stop $prog....." rm -f $lockfile [ $? -eq 0 ] && success "stopping $prog" || failure "stopping $prog" }

status(){ if [ -f $lockfile ]; then echo "running...." else echo "stoped....." fi }

usage(){ echo "usage:$prog {start|stop|status|restart}" }

case $1 in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) usage exit 1 ;; esac chmod +x init.d/tserver ############################################################################# cp /lib/modules/2.6.18-92.el5/kernel/drivers/net/mii.ko /mnt/sysroot/lib/modules cp /lib/modules/2.6.18-92.el5/kernel/drivers/net/pcnet32.ko /mnt/sysroot/lib/modules

vi rc.sysinit insmod /lib/modules/mii.ko imsmod /lib/modules/pcnet32.ko ifconfig eth0 192.168.1.163/24 ifconfig lo 127.0.0.1/8 这样就可以启动网卡了。 ###################################################################################

测试一下试试, mkdir /etc/rc.d/rc3.d cd rc3.d ln -sv ../init.d/tserver S66tserver cd rc6.d ln -sv ../init.d/tserver K33tserver cd rc0.d ln -sv ../init.d/tserver K33tserver

修改/etc/inittab.添加 --------启动两个终端 1:2345:respawn:/sbin/mingetty --loginprog=/bin/bash tty1 2:2345:respawn:/sbin/mingetty --loginprog=/bin/bash tty2 修改为: 1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1 2:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2 当启动mingetty的时候,会再次启动login 另外一个终端:stty stty -F /dev/console size stty -F /dev/console speed
修改/etc/rc.d/rc.sysinit 删除/sbin/bash

以读写方式挂载根文件系统。 vim /etc/fstab /dev/hda2 / ext3 defaults 0 0 /dev/hda1 /boot ext3 defaults 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0

修改/etc/rc.d/rc.sysinit echo "remount rootfs...." mount -n -o remount,rw / echo "set the hostname...." [ -f /etc/syscofnig/network ] && . /etc/sysconfig/network [ -z $HOSTNAME -o "$HOSTNAME"=='(none)' ] && HOSTNAME=localhost /bin/hostname $HOSTNAME 主机名: vi /etc/sysconfig/network HOATNAME="mail.zxhost.com"

如果在配置的时候文件系统坏了,方法就是打包文件系统,格式化后在解压文件到目录。 但是在解压前需要卸载,方法是:umount /dev/hda2 如果文件系统被占用:fuser -km /dev/hda2 再卸载:umount /dev/hda2 mke2fs -j /dev/hda2 zcat /root/xxx.gz | cpio -id

cat /etc/rc.d/init.d/functions 脚本编程知识:查看变量字符长度echo ${#A} stty -F /dev/console size | cut -d '' -f2 stty -F /dev/console size | awk '{print $2}' A = stty -F /dev/console size echo ${A#* } 从左向右

FILE=/usr/local/src ${FILE#/}: usr/local/src 从左往右,第一个/ ${FILE##/}: src 从左往右,最后一个/

${FILE%/}: /usr/local 从右往左,第一个/,往左都移除 ${FILE%%/}: 从右往左,最后一个/ ,往左都移除。

脚本: #!/bin/bash

DEST=/mnt/sysroot libcp(){ #!/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

vi /etc/rc.d/init.d/function

#!/bin/bash

screen=stty -F /dev/console size 2> /dev/null columns=${screen#* } [ -z $columns ] &amp;&amp; columns=80 spa_col=$[$columns-14] ---这个数值是OK和failure占位字符数目。

red="\033[31m" green="\033[32m" normal="\033[0m" success(){ string=$1 rt_spa=$[$spa_col-${#string}] echo -n "$string" for i in seq 1 $rt_spa; do echo -n " " done echo -e "[ \033[32mOK\033[0m ]" }

failure(){ string=$1 rt_spa=$[$spa_col-${#string}] echo -n "$string" for i in seq 1 $rt_spa; do echo -n " " done echo -e "[ \033[31mFAILER\033[0m ]" } sucess "starint tserer....." success "string hello world ..." failure "stoping tserver....."

启动网络功能: echo “initializing network device.....” /sbin/insmod /lib/modules/mii.ko /sbin/insmod /lib/modules/pcnet32.ko

vi /etc/rc.d/init.d/network prog=network . /etc/rc.d/init.d/functions conf=/etc/sysconfig/network-scripts/ifcfg-eth0 . $conf

start() {
     ifconfig eth0 $ipaddr/$netmask up
     [ -z $GATEWAY ] && route add default gw $gateway

}

stop() {
    ifconfig eth0 down

}

status() {
    ifconfig eth0

}

usage() {
     echo $prog:{start|stop|restart|status}

}

case $1 in start) start success "config network eth0" ;; stop) stop success "stop network card eth0" ;; restart) stop start success "restart network card eth0" ;; status) status ;; *) usage exit 1 ;; csac mkdir /etc/sysconfig/network-scripts/ifcfg-eth0 device=eth0 bootproto=static ipaddr=192.168.1.2 netmask=255.255.255.0 gateway=192.168.1.1 onboot=yes

ln -sv ../init.d/network K90network ln -sv ../init.d/network S10network

1,开机提示信息:vi /mnt/sysroot/etc/issue 终端提示信息。。。

2,挂载/etc/fstab额外的文件系统。 设备 挂载点 ** ** grep -v -E "<swap|proc|sysfs>" /etc/fstab | awk '{print $1}' | while read line; do awk '{print $1}' /proc/mounts | grep "^$line$"; done

mount -n -o remount,rw /
[ $? -eq 0 ] && success "remount rootfs" || failure "remount rootfs" 
mount -a 
[ $? -eq 0 ] && success "mount other rootfs" || failure "mount rootfs" 

3,如何设定内核参数: vi etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p &> /dev/null [ $? -eq 0 ] && success "kernel arging" || failure "kernel arging"

4,支持用户账号: 系统本身是pam(可插入认证模块:/etc/pam.d/*) 绕过pam,实现用户认证。/bin/login nsswitch:Network Service Switch 库:libnss_file.so ,libnss_nis.so, libnss_ladp.so 配置文件:/etc/nsswitch 网络服务转换。 配置文件:/etc/nsswitch.conf

用户认证:pam:可插入式的认证模块。 /etc/pam.d/* 认证机制文件,pluggable authentication moudles

绕过pam用户登录系统。 nsswitch:Network service switch. 库文件: libnss_file.so ,libnss_nis.so, libnss_ladp.so 配置文件:/etc/nsswitch 网络服务转换。 位置:/lib/libnss*

cp -d 保留文件的链接 。。。

复制三个文件: cp -d /lib/libnss_file* /mnt/sysroot/lib/ cp -d /usr/lib/libnss3.so /usr/lib/libnssckbi.so /usr/lib/libnssutil3.so /mnt/sysroot/usr/lib/

修改配置文件: 需要核心四行就可以了。 passwd: files shadow: files group: files hosts: files dns

修改关于用户的配置文件, 修改登录inittab是mingetty,,,

login复制到/mnt/sysroot/bin/login

单用户模式: 修改/etc/inittab 11:1:wait:/etc/rc.d/rc 1 级别中Kill相应的进程 man init 中的S cat /etc/init.d/single #!/bin/bash

case $1 in start) ;; *) echo "";; esac

exec init -t1 S

查看机器硬件信息 cat /proc/cpuinfo lsusb lspci hal-device:硬件抽象层

如何编译busybox busybox1.20.2 tar xf busybox.xxxx

######################################################### 全局变量作用域是整个bash进程 局部(local)作用于为当前代码段,函数中的local范围,只在函数中有效。 #!/bin/bash

a=1 cc(){ a=$[3+5] local a=$[3+2] } cc

for i in seq $a 20; do echo $i done

###############################################

Clone this wiki locally