1、描述centos6系统开机启动流程;
请访问我的个人博客地址:http://whangh.com/?p=83
2、描述/etc/rc.d/sysinit脚本功能;
(1)设置主机名
(2)设置欢迎信息
(3)激活udev和SELinux
(4)挂载/etc/fstab文件中定义的文件系统
(5)检测根文件系统,并以读写方式重新挂载文件系统
(6)设置系统时钟
(7)激活swap设备
(8)根据/etc/sysctl.conf文件设置内核参数
(9)激活LVM及software raid设备
(10)加载额外设备的驱动程序
(11)清理操作
3、总结文本处理工具sed及awk的用法;
3.1 sed
sed是一个“非交互式”的字符流编辑器,对文件进行逐行处理,把当前处理的行存储在临时缓冲区中,被称为“模式空间”,接着用sed命令选项处理缓冲区中的内容,处理完成后,默认把缓冲区中的内容打印到屏幕。
常用选项:
-n 不输出模式中的内容至屏幕
-e 多点编辑
-f /PATH/TO/SCRIPT_FILE 从指定文件中读取编辑脚本
-r 支持使用扩展正则表达式
编辑命令
d 删除
p 显示模式空间中的内容
a \text 在行后面追加文本,支持使用\n实现多行追加
i \text 在行前面插入文本,支持使用\n实现多行插入
c \text 替换行为单行或多行文本
w /path/to/somefile 保存模式空间中匹配到的内容至指定文件中
r /path/from/somefile 读取指定文件的文本流至模式空间中匹配到的行的行后
= 为模式空间中的行打印行号
! 取反
s/// 支持使用其他分隔符,s@@@,s###
替换标记
g 行内全局替换
p 只显示替换成功的行
w /pat/to/somefile 将替换成功的结果保存至指定文件中
高级编辑命令
h 把模式空间中的内容覆盖至保持空间中
H 把模式空间中的内容追加至保存空间中
g 从保持空间中取出数据覆盖至模式空间
G 从保持空间中取出数据追加至模式空间
x 把模式空间中的内容与保持空间中的内容进行交换
n 读取匹配的行的下一行至模式空间
N 追加匹配的行的下一行至模式空间
d 删除模式空间中的行
D 删除多行模式空间中的所有行
地址界定
(1)不给地址,对全文进行处理
(2)单地址
(a)# 指定的行
(b)/pattern/ 被此处模式所能够匹配到的每一行
(3)地址范围
(a)#,# 范围#至#
(b)#,+#
(c)/pat1/,/pat2/
(d)#,/pat1/
常见简单使用场景实例
以下面脚本为例:
[root@ct6svr1 ltest]# cat exemple1 hello world my linux welcome to my web server my
(1)替换文本中所有行第一次(可加g编辑命令为替换文中出现的所有次数)出现的”my”为”your”
[root@ct6svr1 ltest]# sed 's/my/your/' exemple1 hello world your linux welcome to your web server your
(2)替换第五行至结尾第一次(可加g编辑命令为替换文中出现的所有次数)出现的”my”为”your”
[root@ct6svr1 ltest]# sed '5,$s/my/your/' exemple1
(3)删除所有的空行
[root@ct6svr1 ltest]# sed '/^$/d' exemple1
(4)向第一至第五行开头添加”#”符号
[root@ct6svr1 ltest]# sed '1,5s/^/#/' exemple1 #hello #world #my #linux #welcome to my web server my
(5)向出现”server”字段的内容后缩进首字段添加以下内容
listen 80; server_name baidu.com; root html/baidu; [root@ct6svr1 ltest]# sed '/server/a\\tlisten 80;\n\tserrver_name baidu.com;\n\troot html/baidu;' exemple1 hello world my linux welcome to my web server listen 80; serrver_name baidu.com; root html/baidu; my
3.2 awk
awk是一种用于处理文本的编程语言工具。awk将文件作文记录序列处理,在一般情况下,文件内容的每一行都是一个记录。每行内容都会被分割成一系列的域(块),awk会判断它是否符合程序中出现的各个模式,并执行符合的模式所对应的动作。
常用选项
-F 指明输入时用到的字段分隔符
-v var=value 自定义变量
打印输出
printf
格式化输出
格式符
%c 显示字符的ASCII码
%d,%i 显示十进制整数
%e,%E 科学计数法数值显示
%f 显示为浮点数
%g,%G 以科学计数法或浮点形式显示数值
%s 显示字符串
%u 无符号整数
%% 显示"%"符号
修饰符
#[.#] 第一个数字控制显示的宽度,第二个#表示小数点后的精度
- 左对齐
+ 显示数值符号
操作符
算术操作符
x+y,x-y,x*y,x/y,x^y,x%y
-x
+x
字符串操作符:没有符号的操作符,字符串连接
赋值操作符
=,+=,-=,*=,/=,%=,^=,==,--
比较操作符
>,>=,<,<=,!=,==
模式匹配符
~ 是否匹配
!~ 是否不匹配
逻辑操作符
&&
||
!
变量
内建变量
FS 输入字段分隔符,默认为空白字符
OFS 输出字段分隔符,默认为空白字符
RS 输入时的换行符
ORS 输出时的换行符
NF 字段数量
NR 行数
FNR 各个文件分别计数的行数
FILENAME 当前文件名
ARGC 命令行参数
ARGV 属组,保存的是命令行所给定的各参数
自定义变量
(1)-v var=value
变量名区分字符大小写
(2)在程序中直接定义
常见用法示例:
以以下文件内容为例
[root@bg learntest]# cat passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync
(1)取以冒号分隔第一块区域、第三块区域和第六块区域并定义输出分隔符
[root@bg learntest]# awk -F':' -v OFS="--" '{print $1,$3,$6}' passwd root--0--/root bin--1--/bin daemon--2--/sbin adm--3--/var/adm lp--4--/var/spool/lpd sync--5--/sbin
(2)取以冒号分隔第一块区域和第三块区域并格式美化输出
[root@bg learntest]# awk -F':' '{printf "username: %-10s || uid: %s\n",$1,$3}' passwd username: root || uid: 0 username: bin || uid: 1 username: daemon || uid: 2 username: adm || uid: 3 username: lp || uid: 4 username: sync || uid: 5
(3)如果冒号分隔第三块区域数字大于3的则显示第一块区域和第三块区域,否则只显示第一块区域
[root@bg learntest]# awk -F':' '{if($3>3)print "True : "$1,$3 ;else print "False : "$1}' passwd False : root False : bin False : daemon False : adm True : lp 4 True : sync 5
4、写一个脚本,生成10个随机数,并按从小到大进行排序(要求至少使用2中方法);
4.1 使用while循环控制实现内置变量$RANDOM随机数循环生成和sort进行排序
[root@ct6svr1 ltest]# sh random.sh 2265 11041 14606 15308 17158 17259 18011 21191 21750 25127 28306 [root@ct6svr1 ltest]# cat random.sh #!/bin/bash # i=0 tmpfile=`mktemp /tmp/sort.XXXXXX` while [ $i -le 10 ] ;do echo $RANDOM >>$tmpfile let i++ done sort -n $tmpfile rm -f $tmpfile exit
4.2 使用for循环往数组内添加元素,循环完成之后调用数组进行二次处理和排序
[root@ct6svr1 ltest]# sh random2.sh 5193 10199 10480 13703 15276 19969 21494 22454 24607 28711 [root@ct6svr1 ltest]# cat random2.sh #!/bin/bash # for i in {1..10} ;do rand[$i]=$RANDOM done echo ${rand[@]} |sed 's@ @\n@g' |sort -n
5、在每周二的凌晨1点5分执行脚本/data/get_username.sh,并将脚本的输出至/tmp/get_username.log日志文件中;
[root@ct6svr1 ~]# echo "5 1 * * 2 root /data/get_username.sh &>>/tmp/get_username.log" >>/etc/crontab && tail -1 /etc/crontab 5 1 * * 2 root /data/get_username.sh &>>/tmp/get_username.log
6、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;
#!/bin/bash # if [ -z "$1" ]; then echo "Usage : Please enter a parameter." exit 1 else if [ -d "$1" ] ;then echo "$1 exist,Type: Dirctory." ls $1 else echo "$1 inexistence,Creating..." mkdir $1 && [ $? -eq 0 ] && echo "Create Done" && stat $1 fi fi
7、写一个脚本,打印9X9乘法表;
[root@bg learntest]# sh mult.sh 1x1=1 2x1=22x2=4 3x1=33x2=63x3=9 4x1=44x2=84x3=124x4=16 5x1=55x2=105x3=155x4=205x5=25 6x1=66x2=126x3=186x4=246x5=306x6=36 7x1=77x2=147x3=217x4=287x5=357x6=427x7=49 8x1=88x2=168x3=248x4=328x5=408x6=488x7=568x8=64 9x1=99x2=189x3=279x4=369x5=459x6=549x7=639x8=729x9=81 [root@bg learntest]# cat mult.sh #!/bin/bash # for ((i=1;i<10;i++)); do for ((j=1;j<=i;j++)); do echo -e -n "${i}x${j}=$[$i*$j]\t" done echo done
8、描述dns的工作流程,以及完整搭建一套dns主从服务器,相关域名和ip可自行设定。
To be continued...!!!
本文出自 “Whang” 博客,谢绝转载!