第二阶段考试
一 、判断题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下查看服务程序占用的端口命令是什么?( D )
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行的内容?( B C )
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 服务器,但又想让局域网内的用户可以使用计算机名互相访问时,应配
置 ( hosts ) 文件。
7、DHCP 是动态主机配置协议的简称,其作用是:( 动态分配IP地址 ) 。
8、 唯一标识每一个用户的是 ( UID ) 和 ( 用户名 ) 。
9、docker和虚拟机的区别在于虚拟机有( 独立的内核 )。
10、docker采用了一种( 数据卷 )挂载的方式实现了可写层
三、操作题一共5道、一题8分。
1、简述Raid0、Raid1、Raid5、Raid10的区别?
RAID俗称磁盘冗余阵列,简称为磁盘阵列.区别在于:
raid0:至少需要俩块磁盘;优点是读写速度块,性能最佳;缺点是没有冗余,磁盘一旦损坏,容易丢失数据
raid1:需要双数磁盘(2,4,6...);优点是镜像冗余,可以最多损坏一半数据也不会丢失;缺点是写入速度较慢.适合做系统盘.
raid5:至少需要三块磁盘;优点是具有一定的性能和冗余,可以最多损坏一个数据也不会丢失,读性能相对比较好;缺点是:写入性能不高.
raid10:也叫raid01,至少需要四块磁盘,先按raid0分为俩组,再分别对俩组按raid1做镜像冗余;优点是既兼顾了冗余,又提高了性能;缺点是:花费高
2、通过shell脚本部署一个httpd服务。
#!/bin/bash ##thi sh is make install apache yum install apr-devel apr-util-devel gcc pcre-devel openssl-devel redhat-rpm-config wget make curl -y &> /dev/null id apache [ $? -ne 0 ] && useradd -r apache -s /sbin/nologin -d /var/www -u 48 [ -d /apps ] || mkdir /apps &> /dev/null [ -d /etc/httpd ] && rm -rf /etc/httpd cd /usr/local/src [ -e httpd-2.4.43.tar.bz2 ] || wget https://mirror.bit.edu.cn/apache//httpd/httpd-2.4.43.tar.bz2 [ -d httpd-2.4.43 ] && rm -rf httpd-2.4.43 tar xf httpd-2.4.43.tar.bz2 cd httpd-2.4.43/ ./configure --prefix=/apps/httpd --sysconfdir=/etc/httpd --enable-ssl &>/dev/null make &>/dev/null make install &>/dev/null echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh . /etc/profile.d/httpd.sh sed -i 's/daemon/apache/g' /etc/httpd/httpd.conf sed -i 's/^#ServerName.*/ServerName localhost:80/p' /etc/httpd/httpd.conf apachectl [ $? -eq 0 ] && echo -e "`curl 127.0.0.1:80` Apache 安装成功" || echo "Apache 安装失败"
3、通过dockerfile实现nginx的部署
构造底层cento7.8镜像
[root@ubuntu18044 /dockerfile/centos]#tree . ├── build.sh └── Dockerfile 0 directories, 2 files [root@ubuntu18044 /dockerfile/centos]#cat Dockerfile FROM centos:centos7.8.2003 LABEL maintainer="huangguangrui <158086268@qq.com>" RUN yum install -y wget && rm -f /etc/yum.repos.d/* && wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo && sed -i /mirrors.aliyuncs.com/d /etc/yum.repos.d/CentOS-Base.repo && sed -i /mirrors.cloud.aliyuncs.com/d /etc/yum.repos.d/CentOS-Base.repo && yum install -y 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 system-devel zlib-devel && yum clean all && rm -f /etc/localtime && ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime && useradd -u 88 www
[root@ubuntu18044 /dockerfile/centos]#bash build.sh v2 Sending build context to Docker daemon 3.584kB Step 1/3 : FROM centos:centos7.8.2003 ---> afb6fca791e0 Step 2/3 : LABEL maintainer="huangguangrui <158086268@qq.com>" ---> Using cache ---> bb2d0951cf40 Step 3/3 : RUN yum install -y wget && rm -f /etc/yum.repos.d/* && wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo && sed -i /mirrors.aliyuncs.com/d /etc/yum.repos.d/CentOS-Base.repo && sed -i /mirrors.cloud.aliyuncs.com/d /etc/yum.repos.d/CentOS-Base.repo && yum install -y 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 system-devel zlib-devel && yum clean all && rm -f /etc/localtime && ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime && useradd -u 88 www ---> Using cache ---> 53ddfb263e3e Successfully built 53ddfb263e3e Successfully tagged centos7.8:v2 REPOSITORY TAG IMAGE ID CREATED SIZE centos7.8 v2 53ddfb263e3e 4 minutes ago 399MB
基于centos7.8部署nginx.
.[root@ubuntu18044 /dockerfile/nginx]#tree
. ├── build.sh ├── Dockerfile ├── index.html └── nginx-1.16.1.tar.gz 0 directories, 4 files [root@ubuntu18044 /dockerfile/nginx]#cat Dockerfile FROM centos7.8:v2 LABEL maintainer="huangguangrui <158086268@qq.com>" ADD nginx-1.16.1.tar.gz /usr/local/src RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/apps/nginx && make && make install && rm -rf /usr/local/src/nginx* COPY nginx.conf /apps/nginx/conf/ COPY index.html /apps/nginx/html/ EXPOSE 80 443 CMD ["/apps/nginx/sbin/nginx"]
[root@ubuntu18044 /dockerfile/nginx]#bash build.sh v1
Sending build context to Docker daemon 1.037MB [WARNING]: Empty continuation line found in: RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/apps/nginx && make && make install && rm -rf /usr/local/src/nginx* COPY nginx.conf /apps/nginx/conf/ [WARNING]: Empty continuation lines will become errors in a future release. Step 1/7 : FROM centos7.8:v2 ---> 53ddfb263e3e Step 2/7 : LABEL maintainer="huangguangrui <158086268@qq.com>" ---> Running in 7eded2fde31c Removing intermediate container 7eded2fde31c ---> bb694b405bd8 Step 3/7 : ADD nginx-1.16.1.tar.gz /usr/local/src ---> 2e9fa1ceb851 Step 4/7 : RUN cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/apps/nginx && make && make install && rm -rf /usr/local/src/nginx* COPY nginx.conf /apps/nginx/conf/ ---> Running in 493f60b288a0 ... Removing intermediate container a043cefe19a8 ---> 857ba4e06075 Successfully built 857ba4e06075 Successfully tagged nginx-centos7.8:v3 REPOSITORY TAG IMAGE ID CREATED SIZE nginx-centos7.8 v1 21bdd2a2cd1c 3 minutes ago 409MB centos7.8 v2 53ddfb263e3e 13 minutes ago 399MB centos centos7.8.2003 afb6fca791e0 3 months ago 203MB
[root@ubuntu18044 /dockerfile/nginx]#docker run -d -P nginx-centos7.8:v1 73c15f016987a4cee2bd396bbedf3dfd4b5298d677bb5f7edccc53d5330c74f1 [root@ubuntu18044 /dockerfile/nginx]#docker port gallant_easley 443/tcp -> 0.0.0.0:32775 80/tcp -> 0.0.0.0:32776 [root@ubuntu18044 /dockerfile/nginx]#curl 127.0.0.1:32776 <h1>nginx in docker for dockerfile</h1>
4、简述TCP三次握手的过程?
三次握手,也叫TCP连接的建立.这个连接必须是一方主动打开,另一方被动打开的. 握手之前双方都是CLOSED阶段,首先由主动打开连接的客户端结束CLOSED阶段,被动打开连接的服务器端也结束CLOSED阶段,
并进入LISTEN阶段,随后开始三次握手.
第一次握手:客户端向服务器端发送一段TCP报文,其中包括:
标志位为SYN,表示请求建立新连接;序列号为seq=x;随后客户端进入SYN-SENT阶段
第二次握手:服务器端收到来自客户端的TCP报文后,结束LISTEN阶段,并返回一段TCP报文,其中包括:
标志位为SYN和ACK,表示 服务器端同意建立新连接;序列号为seq=y;
确认号为ack=x+1,表示 确认已经收到客户端的序号seq,并将seq的值加1作为确认号ack的值;
随后服务器端进入SYN-RCVD阶段
第三次握手:客户端收到来自服务器端的确认数据的TCP报文后,结束SYN-SENT阶段,并返回最后一段报文,其中包括:
标志位为ACK,表示确认收到服务器端的同意连接信号;
序号为seq=x+1,表示收到服务器端的ack号,并将ack的值加1作为自己序号seq的值;
确认号为ack=y+1,表示已经收到服务器端的seq序号,并将seq序号的值加1作为自己确认号ack的值;
随后客户端进入了ESTABLISHED阶段;
服务器收到最后的一段报文后,也结束了SYN-RCVD阶段,进入ESTABLISHED阶段.
此后客户端和服务器端就可以正常的进行数据传输了,这就是三次握手的过程.
5、docker容器时间跟本地时间不一致怎样解决
时间不一样可以通过更改时区来解决:
首先进入容器内:
docker exec -it 容器ID/名字 bash
删除默认配置的时区:
rm -f /etc/localtime
把上海的时区软连接到/etc/localtime
ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime