POJ 1015 Jury Compromise (完全揹包)
一、選擇題
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 /]#