Linux实战案例操作2

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  自定义变量

print

打印输出

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” 博客,谢绝转载!

你可能感兴趣的:(linux,awk,sed,Boot)