-
Notifications
You must be signed in to change notification settings - Fork 0
MinLinux 719
主版本号:次版本号:修正号,次修正号 核心:/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
. /etc/rc.d/init.d/functions
#prog="basename $0"
prog=tserver
lockfile=/var/lock/subsys/$prog
start(){
#echo "start $prog...."
touch
stop(){
#echo "stop $prog....."
rm -f
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
测试一下试试, 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#* } 从左向右
vi /etc/rc.d/init.d/function
#!/bin/bash
screen=stty -F /dev/console size 2> /dev/null
columns=${screen#* }
[ -z
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
用户认证: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 保留文件的链接 。。。
复制三个文件:
单用户模式: 修改/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
###############################################