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运维人员必会的30道shell编程面试题及讲解-08