一 、判断题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.html与https://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.html,https://zhuanlan.zhihu.com/p/53374516
5、docker容器时间跟本地时间不一致怎样解决
//将本地的时间localtime文件复制到容器内即可
docker cp /etc/localtime CONTAINERID:/etc/localtime