linux运维实战练习案例-2016年2月3日(第二次)

一、实战案例(练习)内容

1、描述centos6系统开机启动流程;

第一步:POST(加电自检)

POST:Power On Self Test 加电自检。指计算机系统接通电源,是BIOS功能的一个主要部分,包括对CPU、系统主板、基本内存、扩展内存、系统ROM BIOS等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。

第二步:启动BOIS,加载BIOS中的BootSequence(设备加载次序)

启动BIOS的设置界面,然后根据按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备

第三步:根据BootSequence找到第一个具有Bootloader(MBR)的设备

找到操作系统所在的磁盘分区,把内核从操作系统所在的磁盘分区中加载到内存中。内核加载完成后,还可以把控制权转交给内核。

第四步:加载kernel(ramdisk)

探测可识别到的所有硬件设备;加载硬件驱动程序;以只读方式挂载根文件系统;运行用户空间的第一个应用程序:/sbin/init

第五步:装载rootfs(只读)

装载根文件系统

第六步:启动init程序

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的用法;(必须附带示例)

sed用法:

sed [option]...  ‘script‘  inputfile...

script:

‘地址命令‘

常用选项:

-n:不输出模式空间中的内容至屏幕;

-e: 多点编辑;

-f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本;

-r: 支持使用扩展正则表达式;

-i: 原处编辑;(将文件修改后,将修改后的内容保存到文件中。谨慎使用!!!)

地址定界:

(1) 不给地址:对全文中的每一行都进行处理;

(2) 单地址:

#: 指定第#行;

/pattern/:被此处模式所能够匹配到的每一行;

(3) 地址范围:

#,#:开始行,结束行

#,+#:开始行,追加的行数

/pat1/,/pat2/

#,/pat1/

(4) ~:步进

1~2

2~2

编辑命令:

d: 删除

p: 显示模式空间中的内容

a \text:在行后面追加文本;支持使用\n实现多行追加;

i \text:在行前面插入文本;支持使用\n实现多行插入;

c \text:替换行为单行或多行文本;

w /path/to/somefile: 保存模式空间匹配到的行至指定文件中;

r /path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后;

=: 为模式空间中的行打印行号;

!: 取反条件;

&:后向引用

s///:支持使用其它分隔符, [email protected]@@ ,s###;  #s/要查找的内容/替换后的内容/

替换标记:

g: 行内全局替换;

p: 显示替换成功的行;

w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;

注意:g,p,w放置在 s///的最后面,如: s///g

1.[[email protected] ~]#sed ‘1,8d‘ /etc/fstab

#删除fstab中的第一行到第8行

2.[[email protected] ~]# sed ‘/^UUID/a \abcdef \n123456‘  /etc/fstab

#在匹配到的行后面追加两行内容 abcdef 和 123456

3.[[email protected] ~]# sed ‘/^UUID/i \abcdef \n123456‘  /etc/fstab

#在匹配到的行前面添加两行内容 abcdef 和 123456

4.[[email protected] ~]# sed ‘/^UUID/c \abcdef \n123456‘  /etc/fstab

#将匹配到的替换为指定的两行内容 abcdef 和 123456

5.[[email protected] ~]# sed ‘/^UUID/w /etc/fstab-test.txt‘  /etc/fstab

#将从/etc/fstab中匹配到的行存入到 /etc/fstab-test.txt中

6.[[email protected] ~]# sed ‘/^UUID/=‘  /etc/fstab

#为匹配到的行打印出行号

7.[[email protected] ~]# sed ‘6r /etc/crontab‘ /etc/fstab

#读取/etc/issue文件中的内容插入到 /etc/fstab(模式空间中)中的第6行后面(不改变原文件)

8.[[email protected] ~]# sed ‘/^UUID/!d‘  /etc/fstab

#删除/etc/fstab文件中没有被UUID匹配到的行

9.[[email protected] ~]# sed ‘s/^UUID/uuid/‘  /etc/fstab

#将/etc/fstab中行首为UUID的字符串更改为uuid

awk用法:

awk是报告生成器,用来格式化文本输出。

基本用法:gawk [options] ‘program‘ FILE ...

program: PATTERN{ACTION STATEMENTS}

语句之间用分号分隔

子命令:print,printf

选项:

-F:指明输入时用到的字段分隔符;(缺省时,以空白作为分隔符)

-v var=value: 自定义变量;

1、print

print item1, item2, ...

要点:

(1) 逗号分隔符;

(2) 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式;

(3) 如省略item,相当于print $0;

示例:

2、变量

2.1 内建变量

FS:input field seperator(输入时的字段分隔符),默认为空白字符;

OFS:output field seperator(输出时的字段分隔符),默认为空白字符;

RS:input record seperator,输入时进行分割的换行符;

ORS:output record seperator,输出时分割显示的换行符;

NF:number of field,字段数量(统计每行的字段数)

{print NF}, {print $NF}

NR:number of record, 行数; 文件的总行数,也可以显示单个文件的行号

FNR:各文件分别计数;行数;

FILENAME:当前文件名;

ARGC:命令行中参数的个数;

ARGV:是数组,保存的是命令行所给定的各参数;

示例:以冒号为分隔符对字符串进行分割,并显示第一字段

3、printf命令

格式化输出:printf FORMAT, item1, item2, ...

(1) FORMAT必须给出;

(2) 不会自动换行,需要显式给出换行控制符,\n  (newline)

(3) FORMAT中需要分别为后面的每个item指定一个格式化符号;

格式符:

%c: 显示字符的ASCII码;

%d, %i: 显示十进制整数;

%e, %E: 科学计数法数值显示;

%f:显示为浮点数;

%g, %G:以科学计数法或浮点形式显示数值;

%s:显示字符串;

%u:无符号整数;

%%: 显示%自身;

修饰符:(用来修饰格式符)

#[.#]:第一个数字控制字符串显示的长度;第二个#表示小数点后的精度;

%3.1f  (右对齐)

-: 左对齐

+:显示数值的符号

示例:

示例:

4、操作符

算术操作符:

x+y, x-y, x*y, x/y, x^y, x%y

-x:转化为负数

+x: 转换为数值;

字符串操作符:没有符号的操作符,字符串连接

赋值操作符:

=, +=, -=, *=, /=, %=, ^=

++, --

比较操作符:

>, >=, <, <=, !=, ==

模式匹配符:

~:是否匹配

!~:是否不匹配

逻辑操作符:

&&

||

!

函数调用:

function_name(argu1, argu2, ...)

条件表达式:

selector?if-true-expression:if-false-expression

示例:

5、PATTERN

(1) empty:空模式,匹配每一行;

(2) /regular expression/:仅处理能够被此处的模式匹配到的行;

(3) relational expression: 关系表达式;结果有“真”有“假”;结果为“真”才会被处理;

真:结果为非0值,非空字符串;

(4) line ranges:行范围,

startline,endline:/pat1/,/pat2/

注意: 不支持直接给出数字的格式

~]# awk -F: ‘(NR>=2&&NR<=10){print $1}‘ /etc/passwd

(5) BEGIN/END模式

BEGIN{}: 仅在开始处理文件中的文本之前执行一次;(可以用来打印表头信息等)

END{}:仅在文本处理完成之后执行一次;

示例:

6、常用的action

(1) Expressions

(2) Control statements:if, while等;

(3) Compound statements:组合语句;

(4) input statements

(5) output statements

7、控制语句

if(condition) {statments}

if(condition) {statments} else {statements}

while(conditon) {statments}

do {statements} while(condition)

for(expr1;expr2;expr3) {statements}

break

continue

delete array[index]

delete array

exit

{ statements }

7.1 if-else

语法:if(condition) statement [else statement]

示例:

示例:以冒号为分隔符,打印出行尾最后一个字段为/bin/bash的行

示例:以默认的空白符作为分隔符,打印出字段数为6的行

示例:打印出文件系统使用率大于等于20% 的文件系统的名称和使用比例

7.2 while循环

语法:while(condition) statement

条件“真”,进入循环;条件“假”,退出循环;

使用场景:对一行内的多个字段逐一类似处理时使用;对数组中的各元素逐一处理时使用;

示例:

7.3 do-while循环

语法:do statement while(condition)

意义:至少执行一次循环体

7.4 for循环

语法:for(expr1;expr2;expr3) statement

for(variable assignment;condition;iteration process) {for-body}

示例:

特殊用法:

能够遍历数组中的元素;

语法:for(var in array) {for-body}

7.5 switch语句

语法:switch(expression) {case VALUE1 or /REGEXP/: statement; case VALUE2 or /REGEXP2/: statement; ...; default: statement}

7.6 break和continue

break [n]

continue

7.7 next

提前结束对本行的处理而直接进入下一行;(用于awk的内生循环)

~]# awk -F: ‘{if($3%2!=0) next; print $1,$3}‘ /etc/passwd

#打印出用户uid为偶数的用户的用户名和uid

8、array

关联数组:array[index-expression]

index-expression:

(1) 可使用任意字符串;字符串要使用双引号;

(2) 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为“空串”;如果将空元素以数值的形式打印出,则值为0;

若要判断数组中是否存在某元素,要使用"index in array"格式进行;

weekdays[mon]="Monday"

若要遍历数组中的每个元素,要使用for循环;

for(var in array) {for-body}

示例:#遍历输出weekdays数组中的所有值

[[email protected] ~]#  awk ‘BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";for(i in weekdays) {print weekdays[i]}}‘

Tuesday

Monday

注意:var会遍历array的每个索引;

state["LISTEN"]++

state["ESTABLISHED"]++

示例:

[[email protected] ~]# netstat -tan | awk ‘/^tcp\>/{state[$NF]++}END{for(i in state) { print i,state[i]}}‘

LISTEN 3

示例:统计/etc/fstab文件中每个文件系统类型出现的次数;

[[email protected] ~]# awk ‘/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}‘ /etc/fstab

xfs 1

示例:统计指定文件中每个单词出现的次数;

[[email protected] ~]# awk ‘{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count) {print i,count[i]}}‘ /etc/fstab

20:19:48 1

Dec 1

man 1

and/or 1

maintained 1

xfs 3

/dev/mapper/centos-root 1

Accessible 1

# 7

……………………

9、函数

9.1 内置函数

数值处理:

rand():返回0和1之间一个随机数;

示例:# awk ‘BEGIN{print rand()}‘

0.237788

字符串处理:

length([s]):返回指定字符串的长度;

sub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其第一次出现替换为s所表示的内容;

gsub(r,s,[t]):以r表示的模式来查找t所表示的字符中的匹配的内容,并将其所有出现均替换为s所表示的内容;

split(s,a,r):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中;

示例:

[[email protected] ~]#  netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}‘

0.0.0.0 3

4、写一个脚本,生成10个随机数,并按从小到大进行排序(要求至少使用2种方法);

#!/bin/bash

for((i=0;i<10;i++)){

array[$i]=$RANDOM

}

#自己定义一个数组

temp=

for((i=0;i<10;i++))

{

for((j=i;j<10;j++))

{

x=${array[$i]}

if test $x -ge ${array[$j]}

then

temp=${array[$i]}

array[$i]=${array[$j]}

array[$j]=$temp

fi

}

}

echo ${array[@]}

5、在每周二的凌晨1点5分执行脚本/data/get_usern

ame.sh,并将脚本的输出至/tmp/get_username.log日志

文件中;

6、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;

#!/bin/bash

echo -n "Enter a path:"

read path

echo "Input path is:$path"

if [ -z $path ];then

echo "Please enter a path"

exit 0

fi

if [ -e $path  ];then

filetype=$(file -b $path)

echo "the file type  is:${filetype}"

Else

echo "${path} is  not exists"

mkdir -pv $path;

fi

exit 0;

示例:

7、写一个脚本,打印9X9乘法表;

#!/bin/bash

for j in {1..9};do

for i in $(seq 1 $j);do

echo -e -n "${i}X${j}=$[$j*$i]\t"

done

echo

done

8、描述dns的工作流程,以及完整搭建一套dns主从服务器,相关域名和ip可自行设定。

一.配置从服务器

1.配置为缓存名称服务器
listen-on port 53 {192.168.1.110; 127.0.0.1; };

allow-query     { any; };
//listen-on-v6 port 53 { ::1; };

//关闭dnssec(建议)
recursion yes;

//dnssec-enable yes;

//dnssec-validation yes;

//bindkeys-file "/etc/named.iscdlv.key";

//managed-keys-directory "/var/named/dynamic";

2.配置主DNS服务器

在缓存名称服务器的基础上,在/etc/named.rfc1912.zones中添加zones,即配置成为了主DNS服务器。

[[email protected] ~]# vim /etc/named.rfc1912.zones

添加域 taogsau.com

zone "taogsau.com" IN {

type master; //DNS服务器类型

file "taogsau.com.zone"; //区域解析库文件名称

};

然后在/var/named/下建立taogsau.com.zone区域解析库文件。并写入内容:

$TTL 86400

@       IN      SOA     ns1.taogsau.com.        admin.taogsau.com(

20160219

1H

5M

7D

1D

)

IN      NS      ns1.taogsau.com.

IN      NS      ns2.taogsau.com.

IN      MX 10   mx1

IN      MX 20   mx2

ns1     IN      A       192.168.1.11

ns2     IN      A       192.168.1.12

mx1     IN      A       192.168.1.13

mx2     IN      A       192.168.1.14

www    IN       A       192.168.1.11

更改区域解析库/var/named/taogsau.com.zone权限[[email protected] ~]# chmod 640 /var/named/taogsau.com.zone

更改属组:

[[email protected] ~]# chown :named /var/named/taogsau.com.zone

3.重启named进程

[[email protected] ~]# service named restart

停止 named:.                                         [确定]

启动 named:                                          [确定]

============主DNS服务器配置完成==========

二.配置从服务器

1.首先将服务器配置为缓存名称服务器

[[email protected] ~]# vim /etc/named.conf

listen-on port 53 {192.168.1.111; 127.0.0.1; };

allow-query     { any; };
//listen-on-v6 port 53 { ::1; };

//关闭dnssec(建议)
recursion yes;

//dnssec-enable yes;

//dnssec-validation yes;

//bindkeys-file "/etc/named.iscdlv.key";

//managed-keys-directory "/var/named/dynamic";

2.编辑[[email protected] ~]# vim /etc/named.rfc1912.zones 加入:

zone "taogsau.com" IN {

type slave; //DNS服务器类型

masters  { 192.168.1.110; };

file "slaves/taogsau.com.zone"; //从名称服务器的区域解析库文件名称及路径

==============从服务器配置完成============

时间: 2024-10-20 07:48:43

linux运维实战练习案例-2016年2月3日(第二次)的相关文章

linux运维实战练习案例-2015年12月20日-12月31日 (第一次)

一.实战案例(练习)内容 假如你学习完Linux,想找一份儿Linux相关的运维工作,某天你接到一家公司给出的邀请,你来到该公司面试,面试前,运维主管给你出了一些简单的笔试题,题目如下: 1.创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录: 操作步骤: (1).使用fdisk工具创建一个10G的分区 [[email protected] ~]# fdisk /dev/sda 欢迎使用 fdisk (util-linux 2.23.2). 更改将停留在内存中,

linux运维实战练习案例-2015年12月20日-12月31日(第一次)

1.创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录: (1)新建立一个分区 [[email protected] wuzhibin]# fdisk /dev/sda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (comm

linux运维实战练习案例-2015年12月20日-12月31日

1.创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录: fdisk /dev/sda mkfs –t /dev/sda4 添加  /dev/sda3  /data ext4 default  0 0至最后一行 2.显示`netstat -tan`命令结果中以'LISTEN'后跟0个.1个或者多个空白字符结尾的行: Netstat –tan | grep "LISTEN[ ]*$" 3.添加用户nginx.zabbix.tomcat.nologin以及

【Mage作业】linux运维实战练习案例-2015年12月20日-12月31日(第一次)

1.创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录: #选择文件系统分区所处的磁盘 #检查磁盘中是否有足够大的空间用于创建10G的文件系统分区 fdisk -l; #创建分区 fdisk /dev/sdb N 1 +10G W #格式化并获取UUID mkfs.ext4 /dev/sdb1 blkid /dev/sdb1 #创建挂载目录 /data # 写入/etc/fstab 用于开机自动挂载   mkdir /data echo"UUID=010146a

马哥linux运维实战练习案例(一)

1.创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录: 第一步:首先使用df -h 命令,查看本机磁盘分区使用情况: [[email protected] ~]# df -h 文件系统        容量  已用  可用 已用% 挂载点 /dev/sda3        18G 4.3G   14G   25% / devtmpfs        482M    0  482M    0% /dev tmpfs           490M   80K 490

Linux运维实战练习案例

1.创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录: 分析:1).为服务器添加一块硬盘 2).创建挂载点 3).分区格式化(指定文件系统类型) 4).配置fstab文件开机自动挂载 配置实现:     [[email protected] ~]# mkdir /data     创建挂载点     [[email protected] ~]# fdisk -l /dev/sd[a-z]  查看     Disk /dev/sda: 128.8 GB, 128

Linux运维实战练习案例20151220~20151231

Operating system:CentOS 7.0 1.创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录: 1)创建挂载点目录: # mkdir /data 2)在VMware虚拟机设置出添加一块硬盘,重启centos7系统: # fdisk -l/dev/sd[a-z]     发现新添加的硬盘/dev/sdb,大小为20G # fdisk /dev/sdb         对/dev/sdb进行分区操作,设置为主分区大小10G # fdisk -l/d

linux运维实战练习-正则表达式

一.linux运维实战练习题及解答 1.显示/etc/passwd文件中以bash结尾的行 2.显示/etc/passwd文件中的两位数或三位数 3.显示`netstat -tan`命令结果中以'LISTEN'后跟0个.1个或者多个空白字符结尾的行 4.添加用户bash.testbash.basher以及nologin用户(nologin用户的shell为/sbin/nologin):而后找出/etc/passwd文件中用户名与其shell名相同的行 5.显示当前系统上root.centos或者

linux运维实战练习-2015年9月01日课程作业(练习)

linux运维实战练习-2015年9月01日课程作业(练习)安排 一.作业(练习)内容: 1.复习本次课程所讲的内容 2.总结整理磁盘管理及文件系统管理中设计的各种命令的使用,并附注一定的示例: 在Linux中,一块磁盘能被使用(可以被访问.被写入.被存储)要有以下三个步骤: (1)进行磁盘分区,及创建分区 (2)创建文件系统 (3)挂载文件系统 (1)磁盘分区 创建分区的命令: fdisk, parted, sfdisk fdisk:最多支持在一块硬盘上的15个分区:fdisk提供了一个交互式