内核管理: { 内核的功能 { 进程: Task_Struct (任务结构定义) Scheduler (任务调度) 内存: 分配 回收 碎片整理 I/O: 中断及处理(读写) 文件系统: 管理文件系统内容与内存交互 驱动程序: 硬件运行交互 } 内核设计流派 { 单内核: 单一体系结构 linux 采用模块化设计(动态装卸) 微内核: 内核子系统 win fork(): init 负责管理用户空间的进程 /sbin/init } linux启动初始化 { 1. post阶段 固化在ROM中 2. BIOS自检启动 (boot sequence) 3. MBR(bootloader) 装机时写入第一个盘符 4. MBR引导内核启动 initrd,initramfs 5. init进程启动 (upstat) pre /etc/init/rcS.conf /etc/rc.d/rc.sysinit post /etc/inittab == /etc/init/rc.conf # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. 系统初始化脚本/etc/rc.d/rc.sysinit 设置主机名 打印文本欢迎信息 激活SELinux和udev 激活swap 挂载/etc/fstab定义的本地文件系统 检测根文件系统并对其以读写方式重新挂载 设置系统时钟 装载键盘映射 根据/etc/sysctl.conf设置内核参数 激活RAID和LVM设备 清理操作 } MBR,GPT { 引导加载程序 (早期 LILO) GRUB 分为3个阶段 1st,1.5st,2st stage 1st 为了引导2st 1.5st 识别文件系统 2st 位于boot分区中,grub引导 grub 可选择启动的系统 可交互 可密码保护 grub conf /boot/grub/grub.conf default: 是否默认启动 timeout: 默认启动延时 splashimage: /path 启动图片 hiddenmenu: 隐藏菜单 password: 密码保护 title "" 可自定义启动标题 root(hd0,0) kernel /path ro root=/path/to/device quiet 内核boot目录 init=/path 路径 selinux=0 initrd /cpio归档文件 grub损坏维护 grub配置损坏 启动阶段 -e 编辑 kernel /path ro root=/path/to/device quiet init=/bin/bash 进入bash模式修正grub.conf文件 grub彻底损坏 进入救援模式 chroot /mnt/sysimage grub-install --root-directory=/ /dev/sda exit } 内核模块 { 单内核,支持模块动态加载与装卸 /lib/moduals/版本/kernel/ 查看信息 lspci 查看pci信息 lsblk 查看所有磁盘信息 lsmod 加载的驱动信息 lscpu cpu信息 lsusb 所有usb信息 modinfo [模块名称] (查询模块所有信息) 关注 depends license filename modprobe [-r 模块名称] 卸载模块(自动探索) modprobe [模块名称] 装载模块(自动探索) rmmod [-f 模块名称] 强制卸载模块 insmod [path] 装载模块指定路径 } 编译源码 { rpmsrc: 1. 创建mockbuild用户 2. 安装src.rpm包 3. rpmbuild -> source 4. rpmbuild -bb rpmbuild/specs/nginx.spec 内核编译: (初次编译选择默认配置) 1. cp /boot/config-2.6.32-431.el6.x86_64 /usr/src/linux/.config 2. make menuconfig(调整编译选项 * 编译到内核中 M 模块形式存在) 3. make -j 4 多线程编译 或 make bzImage 仅编译内核 4. 为新磁盘安装MBR make clean 删除编译生成文件.o,不删除配置文件 make mrproper 完全删除 make disclean 重置代码树 编译部分目录 make /path/to/dir 编译部分模块 make -M /path/to/modual 编译单一模块 make /path/to/modual/*.ko -o /path/to/output 交叉编译 make ARCH=arm screen的使用 screen 新建一个命令窗口 Ctrl+A , D 隐藏新建窗口 screen [-ls] 查看所有的窗口 screen [-r 编号] 恢复窗口 内核调优: /proc/sys kernel net vm fs 都是伪文件系统 所有 echo "value" > /path/to/file sysctl [-a] 所有内核参数 sysctl [-w 参数名称] = value 配置文件 /etc/sysctl.conf 设备文件: udev 基于系统自动探查 tmpfs /dev/shm tmpfs defaults 0 0 mknod -m 660 /dev/testdev b 100 0 手动创建设备文件 } }
sed初步: { sed 是一个行编辑器,每次读取一行到内存中来进行处理并输出 sed [options] ‘script‘ file -n 静默模式 -r 拓展的正则表达式 -f 加载文件脚本 -e 可连续执行script -i 可直接读写文件 COMAND d 删除 p 打印(默认) i/a \text 匹配的前后添加内容 r /path/to/file 插入文件内容 w /path/to/file 保存到 = 匹配内容的行号 <a>s/<b>/<c>/[g/i] 查找替换模式 a: 可定界 b: 查找内容 c: 替换内容 \1 引用替换 g: 全局模式 i: 忽略大小写 例: sed ‘/^\/\//d‘ /etc/named.conf 删除named.conf中所有的以//开头的行 }
awk初步: { awk 是一个报告生成器,可以将选中内容的每行每列进行格式化 awk [options] ‘script‘ file awk [options] ‘/pattern/{action}‘ file -f 脚本文件 -F 分割符 定界模式: 默认全部文件 /part1/,/part2/ /pattern/ 表达式 > >= < <= == != ~ BEGIN/END: 执行前/后操作 awk -F: ‘{print $1}‘ /etc/passwd }
Linux系统的安装: (自动化){ 安装方式可分为三种 1. 光盘MBR bootloader 2. 网络设备 基于PXE或者Cobbler 3. 可移动设备 1. 光盘制作过程 a) 以当前最微系统的安装过程为蓝本 cp ~/anaconda-ks.cfg ~/ks.cfg b) 修正 ks 参数 , 以及安装需要的所有工具 详细参见 Red_Hat_Enterprise_Linux-5-Installation_Guide-en-US.pdf # Kickstart file automatically generated by anaconda. #version=DEVEL text install cdrom lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted $6$pcYzFDFOq/kCTHmk$r/4JaQm8qav2X1OfAh5S/uTH.V0JIxFZoef5FhU10Ox53TBsH1IXeelSc5xIM/0gfWYD7OWDdGjttFOlBvy400 firewall --service=ssh authconfig --enableshadow --passalgo=sha512 selinux --enforcing timezone --utc America/New_York bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" zerombr clearpart --all volgroup VolGroup --pesize=4096 pv.008002 logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200 logvol swap --name=lv_swap --vgname=VolGroup --grow --size=992 --maxsize=992 part /boot --fstype=ext4 --size=500 part pv.008002 --grow --size=1 repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 %packages --nobase @core %end c) 制作光盘 #!/bin/bash # [ -e "/root/myiso/packages" ] || mkdir -p /root/myiso/packages [ -e "/root/myiso/linuxiso" ] || mkdir -p /root/myiso/linuxiso cd /root/myiso/packages #yum list | grep "^[^[:space:]].*@" | awk ‘{print "172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/Packages/"$1".rpm"}‘ | xargs wget -q cat /root/install.log | grep "^Installing" | awk ‘{print "172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/Packages/"$2".rpm"}‘ | xargs wget cd /root/myiso/linuxiso echo "mirror" | lftp "http://172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/isolinux" cp /root/iso.cfg /root/myiso/ sed -i "s/\(^[[:space:]]\{2\}append.*img$\)/\\1 ks=cdrom:\/iso.cfg/" /root/myiso/linuxiso/isolinux.cfg cd /root/myiso mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.5 x86_64 boot" -b linuxiso/isolinux.bin -c linuxiso/boot.cat -o /root/centos6.4.iso ~/myiso 2. 网络设备 PXE 基于DHCP 与 TFTP + Web服务器 a) 建立 dhcp 引导网络中的设备 etc/dhcp/dhcpd.conf subnet 172.16.43.0 netmark 255.255.255.0 { range 172.16.43.1 172.16.43.50; } b) 在动态为客户端分配IP后 指向 nextserver为 tftp isolinux所在路径 /var/lib/tftpboot/下的pxelinux.0 subnet 172.16.43.0 netmark 255.255.255.0 { range 172.16.43.1 172.16.43.50; next-server 10.0.0.100 filename "pxelinux.0" } c) 安装启动 xinetd tftp-server tftp 并chkconfig服务 d) 安装httpd 将安装树绑定到httpd的目录下 先挂载在绑定 mount --bind /media /var/www/html/centos6 e) 安装syslinux f) 拷贝如下文件 // boot.msg init文件初始化文件系统 dhcp引导安装文件 引导配置文件 背景图 vesamenu.c32 内核 // boot.msg initrd.img pxelinux.0 pxelinux.cfg splash.jpg vesamenu.c32 vmlinuz # cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ # cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/ # cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ # mkdir /var/lib/tftpboot/pxelinux.cfg # cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default g) 网络引导 pxelinux.cfg中加入 ks=http://HTTP_SERVER_IP/ks.cfg 日志?? }
本文出自 “Apprentice” 博客,请务必保留此出处http://apprentice.blog.51cto.com/2214645/1376168