马哥教育第二阶段考试

一 、判断题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 上的主机信息的 数据库 ,其作用是(域名/主机名)和(ip地址)之间的转换  

6、当LAN 内没有条件建立DNS 服务器,但又想让局域网内的用户可以使用计算机名互相访问时,应配置 (/etc/hosts) 文件

7、DHCP 是动态主机配置协议的简称,其作用是:(DHCP 允许主机从 DHCP 服务器获取所需的 TCP/IP 配置信息) 

8、 唯一标识每一个用户的是 (用户名) 和 (UID) 

9、docker和虚拟机的区别在于虚拟机有(完整的操作系统,独立的内核)。

10、docker采用了一种(Union FS/联合文件系统)挂载的方式实现了可写层

三、操作题一共5道、一题8分。 

1、简述RAID0、RAID1、RAID5、RAID10的区别?

RAID0

RAID0是将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,分段后分散存储在这些磁盘中。

RAID0读写时都可以并行处理,因此速度是最快的,但RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘损坏,所有数据都会丢失。

RAID1

RAID1是将两组磁盘互作镜像,在主磁盘上存放数据的同时也在镜像磁盘上写一样的数据。

RAID1方案造成了50%的磁盘浪费,但它总是保持一份完整的数据备份,数据安全性很高。其数据读取较单一磁盘来的快,因为数据会从两块磁盘中较快的一块中读出,但写入速度通常较慢,因为数据需要分别写入两块磁盘中并做比较。


RAID5

RAID5是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。RAID5至少需要三个磁盘。

RAID5可以理解为是RAID0和RAID 1的折衷方案。当一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID5具有和RAID0相近的数据读取速度,因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢。同时由于多个数据对应一个奇偶校验信息,RAID5的磁盘空间利用率要比RAID1高,存储成本相对较便宜。

RAID10

RAID10是先创建2个独立的RAID1,然后将这两个独立的RAID1组成一个RAID0,当往这个逻辑RAID中写数据时,数据被有序的写入两个RAID1中。

RAID10方案具有RAID0和RAID1两者的特性:虽然造成了50%的磁盘浪费,但是它提供了200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一RAID1中,就能保证数据安全性。

回答参考了https://www.cnblogs.com/ivictor/p/6099807.htmlhttps://zh.wikipedia.org/wiki/RAID,图片来自维基百科

 

2、通过shell脚本部署一个httpd服务

设主机系统为centos8

编译安装(参考了第四周作业)

#! /bin/bash

#disable selinux and firewall
sed -ri.bak 's/^SELINUX=enforcing/SELINUX=disable/' /etc/selinux/config
systemctl stop firewalld && systemctl disable firewalld

#download the source code
download_dir=/usr/local/src
wget $download_dir/httpd-2.4.43.tar.bz2 https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.43.tar.bz2

#install dependencies
dnf install -y gcc make apr-devel apr-util-devel pcre-devel openssl-devel redhat-rpm-config

#add user
id apache &> /dev/null || useradd -r -u 80 -d /var/www -s /sbin/nologin apache

#unzip and make
tar xf $download_dir/httpd-2.4.43.tar.bz2 -C $download_dir
cd $download_dir/httpd-2.4.43
./configure --prefix=/usr/local/httpd --sysconfdir=/etc/httpd --enable-ssl
make && make install

#set PATH and configure
echo 'PATH=$download_dir/bin:$PATH' > /etc/profile.d/httpd.sh
source /etc/profile.d/httpd.sh
sed -ir 's/^(User).*/1 apache/' /etc/httpd/httpd.conf
sed -ir 's/^(Group).*/1 apache/' /etc/httpd/httpd.conf

apachectl start

yum安装

#! /bin/bash

#disable selinux and firewall
sed -ri.bak 's/^SELINUX=enforcing/SELINUX=disable/' /etc/selinux/config
systemctl stop firewalld && systemctl disable firewalld

#use aliyun mirror
rm -f /etc/yum.repos.d/*
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo

#yum install
yum install -y httpd
echo hello world > /var/www/html/index.html
systemctl start httpd

3、通过dockerfile实现nginx的部署

//创建并进入目录~/homework/dockerfile/nginx

//下载nginx编译文件

root@aseal:~/homework/dockfile/nginx# wget http://nginx.org/download/nginx-1.16.1.tar.gz

//编写dockerfile

root@aseal:~/homework/dockfile/nginx# cat Dockerfile

FROM centos:7

ADD nginx-1.16.1.tar.gz /usr/local/src

RUN yum -y install wget && rm -f /etc/yum.repos.d/* && wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo
&& wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
&& yum -y install vim-enhanced tcpdump lrzsz tree telnet bash-completion net-tools bzip2 lsof zip unzip nfs-utils gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel
&& yum clean all
&& rm -f /etc/localtime
&& ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime

&& cd /usr/local/src/nginx-1.16.1

&& ./configure --prefix=/apps/nginx
&& make && make install
&& rm -rf /usr/local/src/nginx*
&& useradd -r nginx
&& ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]

//制作镜像并运行

 root@aseal:~/homework/dockfile/nginx# docker build -t nginx-centos7:v1 .

 root@aseal:~/homework/dockfile/nginx# docker run -d -p 80:80 nginx-centos7:v1

 //验证镜像制作正确 

root@aseal:~/homework/dockfile/nginx# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a5b96e6c5f1 nginx-centos7:v1 "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, 443/tcp suspicious_vaughan
root@aseal:~/homework/dockfile/nginx# curl 127.0.0.1
...

<h1>Welcome to nginx!</h1>

...

//nginx镜像制作完成

4、简述TCP三次握手的过程?

三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。

第一次握手(SYN=1, seq=x):

客户端发送一个 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序列号(ISN,init seq num)x,保存在Sequence Number字段里。

发送完毕后,客户端进入 SYN_SEND 状态。

第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己的初始序列号(ISN)y,放到 Sequence Number字段里,同时将Acknowledgement Number字段设置为客户的ISN加1,即x+1。

发送完毕后,服务器端进入 SYN_RCVD 状态。

第三次握手(ACK=1,ACKnum=y+1)

客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器的ISN+1,即y+1,作为返回的Acknowledgement Number。

发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手结束。

回答参考了https://hit-alibaba.github.io/interview/basic/network/TCP.htmlhttps://zhuanlan.zhihu.com/p/53374516

5、docker容器时间跟本地时间不一致怎样解决

//将本地的时间localtime文件复制到容器内即可

docker cp /etc/localtime CONTAINERID:/etc/localtime

原文地址:https://www.cnblogs.com/gehaibao/p/13479492.html