第二阶段考试
一 、判断题10道、一题3分
1、DNS默认端口号是多少?( D )
A、443 B、80 C、25 D、53
2、docker中以下那个命令不正确 ?( B )
A、docker run B、docker file C、docker exec D、docker images
3、在shell脚本中以下那个选项不是关键字 ( C )
A、if B、for C、watch D、while
4、打印/etc/passwd的奇数行? ( A )
A、sed -n '1~2p' /etc/passwd
B、sed -c '1~2p' /etc/passwd
C、sed -n '1~3p' /etc/passwd
5、Linux下查看服务程序占用的端口命令是什么?( B )
A ps -aux
B netstat –apn
C watch
D lsof
6、 在linux系统中,用来存放系统所需要的配置文件和子目录是( A )
A /etc
B /var
C /root
D /home
7、(多选)下面哪些命令可以查看file1文件的第300-500行的内容?( BC )
A cat file1 | tail -n +300 | head -n 200
B cat file1| head -n 500 | tail -n +300
C sed -n ‘300,500p’ file1
8、Linux下查看磁盘使用情况的命令是?( B )
A dd
B df
C top
D netstat
9、linux查看系统活跃进程的命令是?( A )
A ps
B netstat
C df
D ifconfig
10、在shell 中变量的赋值有四种方法,其中,采用name=12 的方法称 ( A )
A 直接赋值
B 使用read 命令
C 使用命令行参数
D 使用命令的输出
二、填空题10道、一题3分
1、在linux中,某文件的权限为:drw-r–-r–-,该权限用数值形式表示为(644),修改文件权限用(chmod)命
令。
2、在Linux 系统 中,以(文件)方式访问设备 。
3、链接分为:(软链接) 和 (硬链接)。
4、(DHCP)可以实现动态 IP 地址分配。
5、DNS 实际上是分布在internet 上的主机信息的 数据库 ,其作用是(FQDN)和(IP)之间的转换。
6、当LAN 内没有条件建立DNS 服务器,但又想让局域网内的用户可以使用计算机名互相访问时,应配
置 (/etc/hosts) 文件。
7、DHCP 是动态主机配置协议的简称,其作用是:(为指定网段内的主机动态的分配ip地址) 。
8、 唯一标识每一个用户的是 (uid) 和 (username) 。
9、docker和虚拟机的区别在于虚拟机有(内核)。
10、docker采用了一种(分层构建,联合挂载)挂载的方式实现了可写层
三、操作题一共5道、一题8分。
1、简述Raid0、Raid1、Raid5、Raid10的区别?
读写性能 可用空间 容错能力 最少磁盘数
Raid 0 提升 N*mins(S1,S2,...) 无容错能力 2,2+
Raid 1 读性能提升,写性能略有下降 1*min(S1,S2...) 有冗余能力 2,2N
Raid 5 提升 (N-1)*mins(S1,S2,..) 允许最多1块磁盘损坏 3,3+
RAID 10 提升 N*min(S1,S2,...)/2 每组镜像最多只能坏一块 4,4+
2、通过shell脚本部署一个httpd服务。
#CentOS 8 编译安装 httpd-2.4.46
#安装前准备,关闭防火墙和SElinux
systemctl disable --now firewalld.service
sed -i.bak 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
#1: 安装相关依赖包
dnf -y install gcc make autoconf apr-devel apr-util-devel pcre-devel openssl-devel redhat-rpm-config
#2: 下载并解压缩包
$TARGET=/usr/local/src
$INSTALL=/apps/httpd
rpm -qa wget && echo "Prepare to Download httpd" || yum -y install wget &> /dev/null
wget -qO $TARGET/httpd-2.4.46.tar.bz2 http://apache.mirror.serversaustralia.com.au//httpd/httpd-2.4.46.tar.bz2
tar xvf $TARGET/httpd-2.4.46.tar.bz2 -C $TARGET
#3: 配置
cd $TARGET/httpd-2.4.46
./configure --prefix=$INSTALL --sysconfdir=/etc/httpd --enable-ssl
#4: 编译并安装
make -j 4 && make install
#5: 配置环境
echo 'PATH="$INSTALL"/bin:$PATH' > /etc/profile.d/httpd.sh
. /etc/profile.d/httpd.sh
#6: 运行
apachectl start
#7: 指定用apache用户运行
useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache
sed -ri 's#(User )daemon#1apache#' /etc/httpd/httpd.conf
sed -ri 's#(Group )daemon#1apache#' /etc/httpd/httpd.conf
#8: 配置生效
apachectl restart
#9: 验证生效
curl 10.0.0.82 &> /dev/null
if [ `echo $?` -eq 0 ]; then
echo "httpd install complete"
else
echo "httpd install failed"
fi
3、通过dockerfile实现nginx的部署
#在Dockerfile目录下准备编译安装的相关文件
mkdir /data/dockerfile/web/nginx/1.16.1 -pv
cd /data/dockerfile/web/nginx/1.16.1
vim nginx.conf
user nginx;
worker_processes 1;
#daemon off;
wget http://nginx.org/download/nginx-1.16.1.tar.gz
#编写Dockerfile文件
vim Dockerfile
#Nginx Dockerfile
FROM centos:centos7.7.1908
MAINTAINER dave <root@dave.com>
RUN yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
&& useradd -r -s /sbin/nologin nginx
&& yum clean all
ADD nginx-1.16.1.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.16.1
&& ./configure --prefix=/app/nginx
&& make
&& make install
&& rm -rf /usr/local/src/nginx*
ADD nginx.conf /apps/nginx/conf/nginx.conf
COPY index.html /apps/nginx/html/
RUN ln-s /apps/nginx/sbin/nginx /usr/sbin/nginx
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]
#生成nginx镜像
cd /data/dockerfile/web/nginx/1.16.1
vim build.sh
#!/bin/bash
docker build -t nginx-centos7:1.6.1-v2
chmod +x build.sh
#验证镜像生成
docker images
docker run -d -p 80:80 nginx-centos7:1.6.1-v2
curl 127.0.0.1
4、简述TCP三次握手的过程?
建立握手前, 客户端开启tcp随机端口, 服务端要监听对应服务端口
1. 客户端发送请求报文, TCP头部SYN置为1, 同时生成本机序号seq=x, 之后进入SYN_SEND状态
2. 服务端收到SYN报文进行确认, 将确认报文中SYN和ACK位都置为1, 同时将确认号ack设置为ack=x+1通知客户端发送下一个包, 同时自己也会添加一个序号seq=y, 之后进入SYN_RECV状态
3. 客户端收到确认报文, 将ACK置为为1, 确认后设定为ack=y+1, 自己的序号为seq=x+1, 此时TCP连接建立, 客户端随机进入ESTABLISHED状态, 服务端收到客户端确认, 之后进入ESTABLISHED状态
5、docker容器时间跟本地时间不一致怎样解决
重新指定localtime
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Australia/Sydney /etc/localtime
如果重新指定后还有问题, 使用ntpdate或者rdate命令同步时间