一、选择题
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 -anp
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 | head -n 200
B、cat file 1 | 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、使用命令的输出
二、填空题
1、在Linux中,某文件的权限为:drw-r--r--,该权限用数值形式表示为(644),修改文件权限用(chmod)命令。
2、在Linux系统中,以(文件的)方式访问设备
3、链接分别为(硬链接)和(软链接)
4、(NAT)可以实现动态IP地址分配
5、DNS实际上是分布在Internet上的主机信息的数据库,其作用是(FQDN)和(IP地址)之间的转换
6、当LAN内没有条件建立DNS服务器,但又想让局域网内的用户可以使用计算机名互相访问时,应该配置(/etc/hosts)文件
7、DHCP是动态主机配置协议的简称,其作用是:(服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码)
8、唯一标识每一个用户的是(UID)和(用户名)
9、docker和虚拟机的区别在于虚拟机有(完整的操作系统)
10、docker采用了一种(联合)挂载的方式实现了可写层
三、操作题
1、简述Raid0、Raid1、Raid5、Raid10的区别?
答:
Raid0:条带卷,将数据分为固定大小的数据块,分别同时写入到N个磁盘中,即每个磁盘只需读写1/N的数据,提高了读写效率。但是数据没有冗余,一旦有块磁盘故障,整份数据都将不可用,安全性没有保障
Raid1:镜像卷,将数据写入到N个磁盘中,即每个磁盘都有一份完整的数据。相当于写了N份数据,写磁盘效率很低,读磁盘可从N个磁盘中同时读取,读磁盘效率提升,当一个磁盘损坏,还有其他的磁盘作为备份,数据安全性得到保障
Raid5:至少需要3块磁盘,将数据分为固定大小的数据块,分别写到N-1块磁盘中,剩余的一块用于生成校验信息,当有一块磁盘故障时,可以通过校验信息还原数据,由于校验信息的压力比较大,故所有磁盘轮流循环作为校验盘。这样即保障了读写效率也保障安全性
Raid10:先将磁盘组合为多组raid1,用于生成数据冗余,再将这多组raid1组合为raid0,用于提高读写效率,所以Raid10至少要4块磁盘。以4块磁盘为例:数据会被分为n份,分别写入到2组raid0中,然后每份数据又被写2次,写入到raid1的2块磁盘中。这样每份数据都有冗余
2、通过shell脚本部署一个httpd服务
#!/bin/bash
set -ue
RED='e[1;31m'
GREEN='e[1;32m'
END='e[0m'
rpm -q httpd &> /dev/null && echo -e "${RED}httpd已经部署,无需安装${END}"
#yum安装依赖程序
yum install -y apr apr-devel apr-util-devel pcre-devel gcc make openssl-devel lbzip2 redhat-rpm-config
#下载并解压源码包
wget -P /usr/local/src https://mirrors.aliyun.com/apache/httpd/httpd-2.4.46.tar.bz2 && cd /usr/local/src || echo -e "${RED}下载httpd源码包失败,请检查网络${END}"
tar xf httpd-2.4.46.tar.bz2 && cd httpd-2.4.46
./configure --prefix=/apps/httpd --sysconfdir=/etc/httpd --enable-ssl && make && make install
echo -e "${GREEN}httpd安装成功${END}"
#创建apache用户
useradd -r -s /sbin/nologin -d /var/www apache
sed -ri.bak 's/^User.*/User apache/' /etc/httpd/httpd.conf
sed -ri.bak 's/^Group.*/Group apache/' /etc/httpd/httpd.conf
#配置环境
echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh
echo -e "${GREEN}请重新读取配置文件/etc/profile.d/httpd.sh,之后可执行 apachectl start 或 httpd -k start 命令启动httpd服务${END}"
3、通过dockerfile实现nginx的部署
答:
准备相关文件
[root@ubuntu1804 dockerfile]#ls Dockerfile index.html nginx-1.16.1.tar.gz nginx.conf [root@ubuntu1804 dockerfile]#cat nginx.conf user nginx; worker_processes 1;
...
编写Dockerfile文件
[root@ubuntu1804 dockerfile]#vim Dockerfile
FROM centos
LABEL maintainer="jojohyj"
RUN yum install -y gcc gcc-c++ make 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=/apps/nginx
&& make && make install
&& rm -rf /usr/local/src/nginx*
&& ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx
#COPY nginx.conf /apps/nginx/conf/
COPY index.html /apps/nginx/html/
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]
生成nginx镜像
[root@ubuntu1804 dockerfile]#docker build --force-rm -t nginx:centos .
[root@ubuntu1804 dockerfile]#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx centos 0f8801ce8afd 7 minutes ago 395MB
centos latest 0d120b6ccaa8 2 days ago 215MB
生成容器测试
[root@ubuntu1804 dockerfile]#docker run -d -p 80:80 nginx:centos
eeddc9c6faf40812a12060534c3e452b92369d0d98185e3cdfd84f3fcdbc0bc9
[root@ubuntu1804 dockerfile]#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eeddc9c6faf4 nginx:centos "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, 443/tcp affectionate_leakey
[root@ubuntu1804 dockerfile]#curl 127.0.0.1
nginx base on centos
4、简述TCP三次握手过程
答:
第 1 次握手:客户端向服务器发送 SYN 报文(SEQ=x,SYN=1),并进入 SYN_SENT 状态,等待服务器确认
第 2 次握手实际上是分两部分来完成的,即 SYN+ACK(请求和确认)报文。
- 服务器收到了客户端的请求,向客户端回复一个确认信息(ACK=x+1)。
- 服务器再向客户端发送一个 SYN 包(SEQ=y)建立连接的请求,此时服务器进入 SYN_RECV 状态
第 3 次握手:客户端收到服务器的回复(SYN+ACK 报文)。此时,客户端也要向服务器发送确认包(ACK)。此包发送完毕客户端和服务器进入 ESTABLISHED 状态,完成 3 次握手
5、docker容器时间跟本地时间不一致怎么样解决
答;
进入容器,删除原有localtime文件,建立正确时区文件的软链接为新的localtime文件
[root@ubuntu1804 dockerfile]#docker exec -it ee bash
[root@eeddc9c6faf4 /]# date
Thu Aug 13 05:53:50 UTC 2020
[root@eeddc9c6faf4 /]# rm -f /etc/localtime
[root@eeddc9c6faf4 /]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@eeddc9c6faf4 /]# date
Thu Aug 13 13:54:39 CST 2020
[root@eeddc9c6faf4 /]#