Linux运维面试题及解答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维面试题及解答相关的知识,希望对你有一定的参考价值。

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

1.1加载Bios的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备;

1.2读取并执行第一个启动设备内MBR的boot Loader(即是grub,spfdisk等程序);

1.3依据bootloader的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序;

1.4在硬件驱动成功后,Kernel会主动调用init进程,而init会取得run-level信息;

1.5init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络,时区等);

1.6init执行run-level的各个服务的启动(script方式);  

1.7init执行/etc/rc.d/rc.local文件;

1.8init执行终端机模拟程序mingetty来启动login进程,最后就等待用户登录。

2、描述/etc/rc.d/sysinit脚本功能;

2.1  取得网络环境与主机类型:

读取网络配置文件/etc/sysconfig/network ,取得主机名与默认网关(gateway) 等网络环境。

2.2测试与挂载内存装置 /proc 及 USB 装置 /sys:

除挂载内存装置 /proc之外,还会主动侦测系统上是否具有 usb 的装置, 若有则会主动加载 usb 的驱劢程序,并且尝试挂载 usb 的文件系统。

2.3决定是否启动SELinux :

并且检测是否需要帮所有的档案重新编写标准的 SELinux 类型 (auto relabel)。

2.4启动系统的随机数生成器

随机数生成器可以帮劣系统迚行一些密码加密演算的功能,在此需要启动两次随机数生成器。

2.5设定终端机 (console) 字形:

2.6设定显示于开机过程中的欢迎画面 (textbanner);

2.7.设定系统时间(clock) 与时区设定:需读入 /etc/sysconfig/clock 设定值

2.8.接口设备的侦测Plug and Play (PnP) 参数的测试:

根据核心在开机时侦测的结果 (/proc/sys/kernel/modprobe ) 开始进行 ide /scsi / 网络 / 音效 等接口设备的侦测,以及利用以加载的核心模块进行 PnP 装置的参数测试。

2.9.用户自定义模块的加载

使用者可以在 /etc/sysconfig/modules/*.modules 加入自定义的模块,则此时会被加载到系统当中

2.10.加载核心的相关设定:

 系统会主动去读取 /etc/sysctl.conf 这个档案的设定值,使核心功能成为我们想要的样子。

2.11.设定主机名与初始化电源管理模块 (ACPI)

2.12.初始化软件磁盘阵列:

主要是透过 /etc/mdadm.conf 来设定好的。

2.13.初始化 LVM 的文件系统功能

2.14.以 fsck 检验磁盘文件系统:会迚行 filesystem check

2.15.进行磁盘配额 quota 的转换 (非必要):

2.16.重新以可擦写模式挂载系统磁盘:

2.17.启动 quota 功能:所以我们不需要自定义 quotaon 的动作

2.18.启动系统虚拟随机数生成器(pseudo-random):

2.19.清除开机过程当中的临时文件:

2.20.将开机相关信息加载/var/log/dmesg 档案中。

 

3、总结文本处理工具sed及awk的用法;(必须附带示例)

3.1 sed是一个以行为单位的文本处理工具,sed可做的编辑动作包括删除,查找替换,字符转换,插入,从其他文件中读入数据。

3.1.1 删除      

使用d命令可删除指定的行,示例如下:

#将file的第一行删除后输出到屏幕

技术分享

#由于sed默认不个改原文件,如果希望保存修改后的文件则需要用重定向

技术分享

#如果想直接修改文件,使用-i参数

技术分享

#删除指定范围的行(删除第1行到第3行)

技术分享

#删除指定范围的行(删除第1行最后一行),全部删除了,没有显示

技术分享

#删除最后一行

技术分享

#删除指定范围以外的行(只保留第5行)

技术分享

#删除所有包含Empty的行

技术分享

#删除空行

技术分享

3.1.2 查找替换

使用s命令可将查找到的匹配文本内容替换为新的文本。

#s命令用于替换文本,本例中使用LINE替换line,默认情况下只替换第一次匹配到的内容

技术分享

#要想第行最多匹配2个line,并改为LINE,可用如下方式

技术分享

#s命令利用g选项,可以完成所有匹配值的替换

技术分享

#只替换开头的this为that

技术分享

3.1.3 字符转换

使用y命令可进行字符转换

#转换字符和被转换字符的长度要相等,否则sed无法执行

#将1转换为A,2转换为B,4转换为C,5转换为D

技术分享

3.1.4 插入文件

使用i或a命令插入文本,其中i代表在匹配行之前插入,a代表在匹配之后插入。

#使用i在第二行前插入文本

技术分享

#使用a在第二行后插入文本

技术分享

#在匹配行的上一行插入文本

技术分享

3.1.5 读入文本

使用r命令可从其他文件中读取文本,并插入匹配行之后

#将/root/scripts/sh01.sh中的内容读出放到 Sed.txt空行之后

技术分享

3.2 awk是一个基于列的文本处理工具,下面是主要的用法。

3.2.1 打印指定域

#只打印姓名和电话号码

技术分享

#打印全部内容

技术分享

3.2.2 指定打印分隔符

#指定“.”作为分隔符,这样每一行的$1就是“.”之前的字符,$2就是”.”之后的字符

技术分享

3.2.3 内部变量NF

#使用默认分隔符

技术分享

#指定分隔符

技术分享

3.2.4 打印固定域

#打印最后一列

技术分享

#用$(NF-1)打印倒数第二列

技术分享

3.2.5 截取字符串

使用substr函数截取指定字符串

#截取第一个域的字符,第6个字符开始,长度为2

技术分享

3.2.6 确定字符串的长度

技术分享

3.2.7 使用awk求列和

#求年龄的和

技术分享

#求平均年龄

技术分享

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

脚本一:

#!/bin/bash

#Program:

#       RANDOM 10 integer and sort from min tomax ,then print them!

#History:

#       2016/01/25 Tryrus First release

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH

 

declare-i min

declare-i max

declare-i i

declare-a arrayRAN

i=1

 echo "The 10 Random integer are: "

arrayRAN[i]=$RANDOM

min=${arrayRAN[i]}

max=${arrayRAN[i]}

while[ $i -le 10 ]

do   

       echo ${arrayRAN[i]}

         if[ ${arrayRAN[i]} -lt $min ];then

                 min=${arrayRAN[i]}

        elif [ ${arrayRAN[i]} -gt $max ];then

                 max=${arrayRAN[i]}

        fi

       i=i+1

       arrayRAN[i]=$RANDOM

done

echo"The Min Random integer is:" $min

echo"The Max Random integer is:" $max

运行结果一:

技术分享

脚本二:

#!/bin/bash

#Program:

#       RANDOM 10 integer and sort from min tomax ,then print them!

#History:

#       2016/01/27 Tryrus First release

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH

 

declare-i min

declare-i max

declare-i i

declare-i m

echo"The 10 Random integer are: "

m=$RANDOM

min=$m

max=$m

echo$m

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

do

        m=$RANDOM

        echo $m

        if [ $m -lt $min ];then

                 min=$m

        elif [ $m -gt $max ];then

                 max=$m

        fi

done

echo"The Min Random integer is:" $min

echo"The Max Random integer is:" $max

运行结果二:

技术分享

5、在每周二的凌晨1点5分执行脚本/data/get_username.sh,并将脚本的输出至/tmp/get_username.log日志文件中;

5.1启用周期服务crond

技术分享

5.2测试脚本

技术分享

5.3  本题的脚本

技术分享

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

脚本:                                                          

#!/bin/bash

#Program:

#      Test the file directory is exists ornot.And test the file‘s filetype.

#History:

#       2016/01/27 Tryrus First release

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH

 

read-p "Please input a file directory,I will check the directory‘s type." fd

test-z $fd && echo "You MUST input a file directory." &&exit 0

if[ -f "$fd" ];then

       echo "The $fd is exists"

       test -b $fd &&filetype="block file"

       test -c $fd &&filetype="character file"

       test -f $fd && filetype="regularefile"

       test -h $fd &&filetype="symbolic link"

       test -p $fd &&filetype="named pipe"

       test -S $fd &&filetype="socket file"

  echo "The filename: $fd is a$filetype"

else

       mkdir $fd

       echo "Creat the directory $fdsucceed"

fi

结果截图:

技术分享


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

脚本:

#!/bin/bash

#Program:

#      Print Nine Nine Multiplication Table

#History:

#       2016/01/27 Tryrus First release

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH

 

declare-i i

declare-i m

for((i=1;i<=9;i++))

do  

       m=1

       while [ $m -le $i ]

       do

              echo -e -n  "${m}x${i}=$[$i*$m] \t"

              m=m+1

       done

       echo

done

结果截图:

技术分享


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

8.1以查询www.sina.com.cn为例来说明dns的工作流程。

8.1.1收到用户的查询要求,先查看本身有没有记录,如没有则向 .root查询

8.1.2.root查询中查到.cn

8.1.3第二层.cn查询中查到.com

8.1.4第三层.com查询中查到.sina

8.1.5第四层.sina.com.cn查询到就是自己

8.1.6记录暂存内存并回报用户

8.2搭建主备DNS服务器

8.2.1备份主要文件

#cp/etc/named.conf /etc/named.conf.bak

#cp/etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak

8.2.2安装DNS服务器组件

安装bind

技术分享


8.2.3编辑DNS主要配置文件

#接收所有地址的53端口

#允许所有主机的查询

#关闭dnssec

技术分享

技术分享

8.2.4修改/etc/named.rfc1912.zones,增加如下文件

技术分享

8.2.5增加DNS正向配置 /var/named/tryrus.cn.zone

技术分享

8.2.6修改DNS反向解析配置/var/named/0.168.192.zone

技术分享

8.2.7检查是否有语法错误

技术分享

8.2.8更改权限及群组

技术分享

8.2.9启动DNS服务

#servicenamed restart

#servicenetwork restart

8.2.10测试DNS配置

技术分享

8.2.11备DNS服务器配置跟主服务器配置基本一样,更改以下配置即可。

#vim/etc/named.rfc1912.zones

技术分享

8.2.12在备DNS服务器上测试

技术分享



以上是关于Linux运维面试题及解答的主要内容,如果未能解决你的问题,请参考以下文章

运维工程师面试题及答案(网络运维工程师面试题)

运维工程师面试题及答案(网络运维工程师面试题)

刚出炉的网易Linux运维面试题(附带答案)

合格linux运维人员必会的30道shell编程面试题及讲解-08

合格linux运维人员必会的30道shell编程面试题及讲解-09

linux认证的面试题及答案