首页 > 其他 > 详细

学习笔记6

时间:2019-09-01 13:16:40      阅读:54      评论:0      收藏:0      [点我收藏+]
一 系统启动和内核管理 1.linux组成 Linux: kernel+rootfs kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能 rootfs:程序和glibc 库:函数集合, function, 调用接口(头文件负责描述) 程序:二进制执行文件 2.centos6启动流程 1.加载BIOS的硬件信息,获取第一个启动设备 2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息 3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备 4.核心执行init程序,并获取默认的运行信息 5.init程序执行/etc/rc.d/rc.sysinit文件 6.启动核心的外挂模块 7.init执行运行的各个批处理文件(scripts) 8.init执行/etc/rc.d/rc.local 9.执行/bin/login程序,等待用户登录 10.登录之后开始以Shell控制主机 3.内核 Linux内核特点: 支持模块化:.ko(内核对象) 支持内核模块的动态装载和卸载 内核组成部分: 核心文件 /boot/vmlinuz-VERSION-release ramdisk:辅助的伪根系统 CentOS 5 /boot/initrd-VERSION-release.img CentOS 6,7 /boot/initramfs-VERSION-release.img 模块文件:/lib/modules/VERSION-release 4.运行级别 运行级别:为系统运行或维护等目的而设定0-6:7个级别 0:关机 1:单用户模式(root自动登录), single, 维护模式 2: 多用户模式,有网络功能,但不会启动NFS;维护模式 3:多用户模式,正常模式;文本界面 4:预留级别;可同3级别 5:多用户模式,正常模式;图形界面 6:重启 默认级别:3, 5 切换级别:init # 查看级别:runlevel ; who -r 5.grub grub legacy: stage1: mbr stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在 的分区上的文件系统 stage2:磁盘分区(/boot/grub 6.自制linux系统 分区并创建文件系统 fdisk /dev/sdb 分两个必要的分区 /dev/sdb1对应/boot /dev/sdb2对应根 / mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdb2 挂载boot mkdir /mnt/boot 子目录必须为boot mount /dev/sdb1 /mnt/boot 安装grub grub-install --root-directory=mnt /dev/sdb 恢复内核和initramfs文件 cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/ cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot 建立grub.conf vim /mnt/boot/grub/grub.conf title wanglinux root (hd0,0) kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash initrd /initramfs-2.6.32-642.el6.x86_64.img chroot /mnt/sysroot 创建一级目录 mkdir /mnt/sysroot mount /dev/sdb2 /mnt/sysroot mkdir –pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot, dev,mnt,media} 复制bash和相关库文件 复制相关命令及相关库文件 如:ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid等 7.内核编译 安装开发包组 下载源码文件 .config:准备文本配置文件 make menuconfig:配置内核选项 make [-j #] make modules_install:安装模块 make install : 安装内核相关文件 安装bzImage为/boot/vmlinuz-VERSION-RELEASE 生成initramfs文件 编辑grub的配置文件 示例 tar xf linux-4.20.2.tar.xz -C /usr/src cd /usr/src ln -sv linux-4.20.2 linux cd /usr/src/linux cp /boot/config-$(uname -r) ./.config make help make menuconfig make -j 2 make modules_install make install reboot 8.编译busybox yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel glibc-static ncurses-devel wget https://busybox.net/downloads/busybox-1.30.1.tar.bz2 tar xvf busybox-1.30.1.tar.bz2 cd busybox-1.30.1/ make menuconfig 按下面选择,把busybox编译也静态二进制、不用共享库 Busybox Settings -->Build Options -->[*] Build BusyBox as a static binary (no shared libs) make && make install 如果出错,执行make clean后,重新执行上面命令 mkdir /mnt/sysroot/ cp -a _install 二awk 1.介绍 awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 有多种版本:New awk(nawk),GNU awk( gawk) gawk:模式扫描和处理语言 基本用法: awk [options] ‘program‘ var=value file… awk [options] -f programfile var=value file… awk [options] ‘BEGIN{action;… }pattern{action;… }END{action;… }‘ file ... awk 程序可由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句 块,共3部分组成 program 通常是被放在单引号中 选项: -F “分隔符” 指明输入时用到的字段分隔符 -v var=value 变量赋值 基本格式:awk [options] ‘program‘ file… Program:pattern{action statements;..} pattern和action pattern部分决定动作语句何时触发及触发事件 BEGIN,END action statements对数据进行处理,放在{}内指明 print, printf 分割符、域和记录 awk执行时,由分隔符分隔的字段(域)标记$1,$2...$n称为域标识。$0 为所有域,注意:此时和shell中变量$符含义不同 文件的每一行称为记录 省略action,则默认执行 print $0 的操作 2.工作原理 第一步:执行BEGIN{action;… }语句块中的语句 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块, 它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。 第三步:当读至输入流末尾时,执行END{action;…}语句块 BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块, 比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中 END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的 分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块 pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供 pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每 一行都会执行该语句块 3.print格式:print item1, item2, ... 要点 (1) 逗号分隔符 (2) 输出item可以字符串,也可是数值;当前记录的字段、变量或awk的表达式 (3) 如省略item,相当于print $0 示例: awk ‘{print "hello,awk"}‘ awk –F: ‘{print}‘ /etc/passwd awk –F: ‘{print “wang”}’ /etc/passwd awk –F: ‘{print $1}’ /etc/passwd awk –F: ‘{print $0}’ /etc/passwd awk –F: ‘{print $1”\t”$3}’ /etc/passwd grep “^UUID”/etc/fstab | awk ‘{print $2,$4}’ 4.awk变量 内置变量 FS:输入字段分隔符,默认为空白字符 awk -v FS=‘:‘ ‘{print $1,FS,$3}’ /etc/passwd awk –F: ‘{print $1,$3,$7}’ /etc/passwd OFS:输出字段分隔符,默认为空白字符 awk -v FS=‘:’ RS:输入记录分隔符,指定输入时的换行符 awk -v RS=‘ ‘ ‘{print }’ /etc/passwd ORS:输出记录分隔符,输出时用指定符号代替换行符 awk -v RS=‘ ‘ -v NF:字段数量 awk -F:‘{print NF}’ /etc/fstab 引用变量时,变量前不需加$ NR:记录号 awk ‘{print NR}’ /etc/fstab ; awk END‘{print NR}’ /etc/fstab FNR:各文件分别计数,记录号 awk ‘{print FNR}‘ /etc/fstab /etc/inittab FILENAME:当前文件名 awk ‘{print FILENAME}’ /etc/fstab ARGC:命令行参数的个数 awk ‘{print ARGC}’ /etc/fstab /etc/inittab awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab ARGV:数组,保存的是命令行所给定的各参数 awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/inittab awk ‘BEGIN {print ARGV[1]}’ /etc/fstab /etc/inittab 自定义变量(区分字符大小写) (1) -v var=value (2) 在program中直接定义 示例: awk -v test=‘hello gawk‘ ‘{print test}‘ /etc/fstab awk -v test=‘hello gawk‘ ‘BEGIN{print test}‘ awk ‘BEGIN{test="hello,gawk";print test}‘ awk -F:‘{sex=“male”;print $1,sex,age;age=18}’ /etc/passwd cat awkscript {print script,$1,$2} awk -F: -f awkscript script=“awk” /etc/passwd 5.printf命令 格式化输出:printf “FORMAT”, item1, item2, ... (1) 必须指定FORMAT (2) 不会自动换行,需要显式给出换行控制符,\n (3) FORMAT中需要分别为后面每个item指定格式符 格式符:与item一一对应 %c:显示字符的ASCII码 %d, %i:显示十进制整数 %e, %E:显示科学计数法数值 %f:显示为浮点数 %g, %G:以科学计数法或浮点形式显示数值 %s:显示字符串 %u:无符号整数 %%:显示%自身 修饰符 #[.#] 第一个数字控制显示的宽度;第二个#表示小数点后精度,%3.1f - 左对齐(默认右对齐) %-15s - + 显示数值的正负符号 %+d 6.操作符 算术操作符: x+y, x-y, x*y, x/y, x^y, x%y - x:转换为负数 +x:将字符串转换为数值 字符串操作符:没有符号的操作符,字符串连接 赋值操作符: =, +=, -=, *=,/=, %=, ^=,++, -- 比较操作符: ==, !=, >, >=, <, <= 模式匹配符: ~:左边是否和右边匹配,包含 !~:是否不匹配 逻辑操作符:与&&,或||,非! 条件表达式(三目表达式) selector?if-true-expression:if-false-expression ? 示例: awk -F: ‘{$3>=1000?usertype="Common User":usertype=" SysUser";printf "%15s:%-s\n",$1,usertype}‘ /etc/passwd 7.PATTERN PATTERN:根据pattern条件,过滤匹配的行,再做处理 (1)如果未指定:空模式,匹配每一行 (2) /regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来 awk /^UUID/{print $1} /etc/fstab awk ‘!/^UUID/{print $1}‘ /etc/fstab (3) relational expression: 关系表达式,结果为“真”才会被处理 真:结果为非0值,非空字符串 假:结果为空字符串或0值 (4) line ranges:行范围 startline,endline:/pat1/,/pat2/ 不支持直接给出数字格式 awk -F: ‘/^root\>/,/^nobody\>/{print $1}‘ /etc/passwd awk -F: ‘(NR>=10&&NR<=20){print NR,$1}‘ /etc/passwd (5) BEGIN/END模式 BEGIN{}:仅在开始处理文件中的文本之前执行一次 END{}:仅在文本处理完成之后执行一次 示例: awk -F: ‘i=1;j=1{print i,j}‘ /etc/passwd awk ‘!0’ /etc/passwd ; awk ‘!1’ /etc/passwd awk -F: ‘$3>=1000{print $1,$3}‘ /etc/passwd awk -F: ‘$3<1000{print $1,$3}‘ /etc/passwd awk -F: ‘$NF=="/bin/bash"{print $1,$NF}‘ /etc/passwd awk -F: ‘$NF ~ /bash$/{print $1,$NF}‘ /etc/passwd 8.awk控制语句 if-else语法 if(condition){statement;…}[else statement] if(condition1){statement1}else if(condition2){statement2}else{statement3} 使用场景:对awk取得的整行或某个字段做条件判断 while循环 语法:while(condition){statement;…} 条件“真”,进入循环;条件“假”,退出循环 使用场景: 对一行内的多个字段逐一类似处理时使用 对数组中的各元素逐一处理时使用 for循环 语法:for(expr1;expr2;expr3) {statement;…} 常见用法: for(variable assignment;condition;iteration process) 特殊用法:能够遍历数组中的元素 语法:for(var in array) {for-body} 9.awk数组 关联数组:array[index-expression] index-expression: (1) 可使用任意字符串;字符串要使用双引号括起来 (2) 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值 初始化为“空串” (3) 若要判断数组中是否存在某元素,要使用“index in array”格式进行遍历 10.awk函数 自定义函数格式: function name ( parameter, parameter, ... ) { statements return expression } 11.awk调用shell命令 system命令 空格是awk中的字符串连接符,如果system中需要使用awk中的变量可以使用 空格分隔,或者说除了awk的变量外其他一律用""引用起来 awk BEGIN{system("hostname") }‘ awk‘BEGIN{score=100; system("echo your score is " score) } 12.awk脚本 将awk程序写成脚本,直接调用或执行 示例: cat f1.awk {if($3>=1000)print $1,$3} awk -F: -f f1.awk /etc/passwd cat f2.awk #!/bin/awk –f #this is a awk script {if($3>=1000)print $1,$3} chmod +x f2.awk f2.awk –F: /etc/passwd 13.向awk脚本传递参数 格式: awkfile var=value var2=value2... Inputfile 注意:在BEGIN过程中不可用。直到首行输入完成以后,变量才可用。可以通 过-v 参数,让awk在执行BEGIN之前得到变量的值。命令行中每一个指定的变 量都需要一个-v参数 示例: cat test.awk #!/bin/awk –f {if($3 >=min && $3<=max)print $1,$3} chmod +x test.awk test.awk -F: min=100 max=200 /etc/passwd

学习笔记6

原文:https://blog.51cto.com/14451156/2434488

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!