一、选择题:(20 分,每题2 分)
1、下列哪个不属于内核的功能? ( A )
A 用户管理B 内存管理C 进程管理D 安全管理
2、修改文件或者目录的读写权限使用下面哪个命令?( B )
A chown B chmod C umask D chgrp
3、sed 命令用于修改原文件内容的参数是?( C )
A. -E B. -l C. -i D. -x
4、ping 命令指定包大小的参数是?( D )
A -c B -s C -x D -l
5、下面不属于linux 系统启动级别的是?( D )
A 多用户模式B 预留模式C 重启模式D 命令行模式
6、下面不属于进程状态的是:( D )
A running B stopped C Zombie D wait
7、下面不属于VIM 编辑器的模式是?( D )
A 命令模式 B 编辑模式 C 末行模式 D 运行模式
8、vsftpd 服务中关于匿名用户的配置,如下解释不正确的有?( A )
A anonymous_upload_enable=YES,允许上传文件
B anonymous_enable=YES,允许匿名登录
C anonymous_other_write_enable=YES,允许删除文件
D 以上都不对
9、配置lnmp 环境,访问index.html 时,网页显示403,有可能出现的原因是? A
A http 运行用户无法访问网页目录
B 网页不存在
C php 配置不正确
D mysql 配置不正确
10、下面不属于httpd 虚拟机类型是?( C )
A、IP
B、端口
C、Hostname
D、FQDN
二、简答题(30 分,每题5 分)
1、描述linux 目录结构以及目录结构命名规定。(5 分)
/bin :存放系统命令
/sbin:超级用户使用的命令存放的目录
/boot:存放着系统的启动文件和内核
/dev:设备文件主目录
/proc:系统进程和系统硬件信息
/etc:系统主配置文件
/var:所有服务的登录的文件或错误信息文件(LOG FILES)都在/var/log下,此外,一些数据库如MySQL则在/var/lib下,还有,用户未读的邮件的默认存放地点为/var/spool/mail
/home:普通用户的家目录
/lib&lib64:系统库文件存放的目录
/usr:系统帮助文档以及源码包安装位置,此目录是最庞大的目录,要用的应用程序和文件几乎都在这个目录
/mnt:用户挂载目录
/run:存放当前运行程序库的目录(当前运行的目录)
/root:超级用户root家目录
/tmp:临时文件存放目录 系统启动过程中会产生一些临时文件,这些临时文件就存放在tmp目录下。如果说tmp目录没有存储空间,系统一定启动不起来。
/media:可移动介质挂载点
/opt:第三方应用程序文件存放目录
第一层:“/”目录下的各个目录应该放什么文件数据,例如:/etc目录下放置系统的配置文件,例如:/etc/exports,/etc/hosts,而/bin和/sbin放置程序及系统命令。
第二层:是针对/usr(unix software resource|Secondary hierarchy)和/var(Variable data)这两个目录的子目录来定义。例如:/var/log下放置系统日志文件等
linux系统的目录结构最顶端是“/”,一切目录从根开始。 我们可以通过tree命令得到根(/)下的目录结构
2、Linux 上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。(5 分)
1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
ls: list
功能:查看目录下文件的详细信息
-a:显示所有文件,包括隐藏文件。
-l:列表形式显示详细信息。
-d:查看目录属性。
[root@localhost ~]# ls
anaconda-ks.cfg nginx-1.14.2 nginx-1.14.2.tar.gz
[root@localhost ~]# ll
total 996
-rw-------. 1 root root 1335 Feb 24 20:08 anaconda-ks.cfg
drwxr-xr-x 9 1001 1001 186 Mar 26 21:14 nginx-1.14.2
-rw-r--r-- 1 root root 1015384 Mar 26 21:13 nginx-1.14.2.tar.gz
cd :change directory 切换目录
cd ~ 切换之家目录
cd / 切换至根目录
pwd:显示当所在的工作目录
[root@localhost ~]# pwd
/root
touch:创建文件
[root@localhost ~]# touch xinxin2019
total 996
-rw-------. 1 root root 1335 Feb 24 20:08 anaconda-ks.cfg
drwxr-xr-x 9 1001 1001 186 Mar 26 21:14 nginx-1.14.2
-rw-r--r-- 1 root root 1015384 Mar 26 21:13 nginx-1.14.2.tar.gz
-rw-r--r-- 1 root root 0 Mar 31 20:18 xinxin2019
mkdir :创建文件夹
[root@localhost ~]# mkdir xinxin
[root@localhost ~]# ll
total 996
-rw-------. 1 root root 1335 Feb 24 20:08 anaconda-ks.cfg
drwxr-xr-x 9 1001 1001 186 Mar 26 21:14 nginx-1.14.2
-rw-r--r-- 1 root root 1015384 Mar 26 21:13 nginx-1.14.2.tar.gz
drwxr-xr-x 2 root root 6 Mar 31 20:19 xinxin
-rw-r--r-- 1 root root 0 Mar 31 20:18 xinxin2019
cp:复制文件或者文件夹(-r)
-r 复制目录
[root@localhost ~]# cp xinxin2019 ./xinxin
mv:移动文件或者更名
[root@localhost ~]# mv xinxin2019 xinxin2020
rm :移除文件
-r:递归
-f :不询问直接删除
rm -rf (常用)
rm -rf ./xinxin2020
cat:显示文件内容
[root@localhost ~]# cat anaconda-ks.cfg
ln:创建链接文件
-s :创建符号链接
-v : 显示
[root@localhost ~]# ln -sv anaconda-ks.cfg softlink
‘softlink’ -> ‘anaconda-ks.cfg’
lrwxrwxrwx 1 root root 15 Mar 31 20:26 softlink -> anaconda-ks.cfg
find:查找系统命令路径
[root@localhost ~]# which useradd
/usr/sbin/useradd
tar:压缩或者解压目录
压缩:
tar -zcvf xinxin2019.tar.gz nginx-1.14.2
解压:
tar -zxvf xinxin2019.tar.gz -C /tmp
3、一个文件的内容如下,如何使用awk 截取第二列的2-5 位置的字符? (5 分)
cat tmp.txt |awk '{print $2}'|awk -F"xx" '{print $1}'
$ cat tmp.txt
aaa aaaxxaaaaaa
bbb bbbxxbbbbbb
ccc cccxxcccccc
ddd dddxxdddddd
eee eeexxeeeeee
4、叙述centos7 启动图形界面的开机启动流程?(5 分)
1.uefi或BIOS初始化,开始post(power on self test)开机自检
这个过程是开机后,BIOS或UEFI进行硬件检查的阶段,检查内存,硬盘,CPU等硬件信息。
2. 加载MBR到内存
加载磁盘主引导记录到内存
自检硬件没有问题时候,BIOS将会直接找硬盘的第一个扇区,找到前446字节,将MBR加载到内存中,MBR将告诉程序下一阶段去哪里找系统的grub引导。此阶段属于grub第一阶段。grub还有1.5阶段和2阶段。
MBR概述:全称为Master Boot Record,即硬盘的主引导记录;是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。
1.主引导程序即主引导记录(MBR)
可在FDISK程序中找到,它用于硬盘启动时将系统控制转给用户指定的并在分区表中登记了的某个操作系统。
2.磁盘分区表项(DPT,Disk Partition Table)
由四个分区表项构成。
负责说明磁盘上的分区情况,其内容由磁盘介质及用户在使用FDISK定义分区时决定。(具体内容略)
3.结束标志
其值为AA55,存储时低位在前,高位在后,即看上去是55AA(十六进制)。
3. GRUB阶段
grub引导阶段
grub第1.5和第2阶段,信息默认存放在扇区中,如果使用grub-install生成的第2阶段的文件是存放在/boot分区中的。
为了加载内核系统,不得不加载/boot分区,而加载/boot分区,要有/boot分区的驱动,/boot分区驱动是放在/boot分区中的啊,我们好像进入死循环了,Linux是怎么解决的呢?就是靠放在1.5阶段中的数据,放在第一个扇区后的后续扇区中,第1.5阶段和2阶段总共27个扇区。
第1.5阶段:mbr之后的扇区,识别stage2所在的分区上的文件系统。
第2阶段:开机启动的时候看到Grub选项、信息,还有修改GRUB背景等功能都是stage2提供的,stage2会去读入/boot/grub/grub.conf或者menu.lst等配置文件。
4. 加载内核和initramfs
引导内核阶段
加载内核,核心开始解压,启动一些最核心的程序。
为了让内核足够的轻小,硬件驱动并没放在内核文件里面。
kernel内核开始初始化,用systemd来代替centos6以前的init程序
先执行initrd.target
包括挂载/etc/fstab文件中系统,挂载之后,就可以切换到根目录了。
从initramfs根文件系统切换到磁盘的根目录
systemd执行默认target配置
centos7表面有“运行级别”这个概念,实际是为了兼容以前的系统,每个所谓“运行级别”都有对应的软连接指向,默认的启动级别/etc/systemd/system/default.target,根据它的指向可以找到系统要进入到哪个模式。
模式:
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
5. systemd阶段
systemd阶段开启服务
systemd执行sysinit.target
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下面的/etc/rc.d/rc.local
Systemd执行multi-user.target下的getty.target及登录服务
systemd执行graphical图形化(运行级别为5)需要的服务
5、简述LVS NAT 模型工作原理(5 分)
原理是修改目标IP地址为挑选出新的RS的IP地址。即请求进入负载均衡器时做DNAT,响应出负载均衡器时做SNAT。
1.当用户请求到达Director Server,此时请求的数据报文会先到达内核的PREROUTING链,此时报文的源IP是CIP,目标IP是VIP。
2.PREROUTING链检查发现数据包的目标IP是本机,将数据包送至INPUT链。
3.IPVS内核模块比对数据包请求的服务是否为集群服务,如果是,则修改数据包的目标IP为后端服务器的IP,然后将数据包发至POSTROUTING链,做DNAT转换。此时报文的源IP是CIP,目标IP是RIP
4.POSTROUTING链通过选路,将数据包发送到Real Server。
5.Real Server比对发现目标IP是自己的IP,开始建立响应报文发回给Director Server,此时报文的源IP是RIP,目标IP是CIP.
6.Director Server在响应客户端之前,此时会将源IP地址修改为自己的IP地址,然后响应给客户端,做SNAT转换。此时报文的源IP是VIP。目标IP是CIP。
6、简述HTTP 的MPM 工作模式(5 分)
MPM:multi-processing module多路处理模块,支持三种I/O模型:prefork,worker,event
prefork:多进程I/O模型,每个进程响应一个请求,默认模型
一个主进程:生成和回收n个子进程,创建套接字,不响应请求
多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个
会预先准备好子进程等待用户的访问,系统调用fork函数
prefork用一个进程相应用户的请求
worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型
一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n
缺点是当一个线程受影响时,该子进程的所有线程都会受到影响
event:事件驱动模型(worker模型的变种)
一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,(这里是比worker改进的地方)当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放,这样增强了高并发场景下的请求处理能力
prefork MPM:进程相应请求
worker MPM:线程响应用户的请求
event MPM:比worker多了一个监管的模型
三、实战题:(总分50 分)
1、创建一个20G 的分区,并格式化为ext4 文件系统。**要求:**(15 分)
- (1)block 大小为2048,预留空间20%,卷标为MYDATA,
fdisk /dev/sdb
n-->p-->1-->2048-->+20G-->w
mkfs -t ext4 -b 2048
tune2fs -m 20 /dev/sdb1
e2label /dev/sdb1 /mydata
- (2) 挂载至/mydata 目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳。
mkdir /mydata
mount -o noatime,noexec /dev/sdb1 /mydata
- (3)可开机自动挂载。
vim /etc/fstab
/dev/sdb1 /mydata ext4 noatime,noexec 0 0
mount -a
2、使用systemd 配置nginx 服务开机启动(10 分)
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
ExecReload=/usr/local/openresty/nginx/sbin/nginx -s reload
ExecStop=/usr/local/openresty/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
开启nginx服务
systemctl start nginx.service
开机自启nginx
systemctl enable nginx.service
3、搭建DNS,并实现DNS 主从解析。(10 分)
搭建DNS主从服务器。假设主DNS服务器IP为192.168.1.100,从DNS服务器IP为192.168.1.101
(1)登录主DNS服务器和从DNS服务器上安装DNS服务器软件
root用户执行 yum install bind
(2)然后修改主DNS服务器上的DNS主配置文件/etc/named.conf
options {
listen-on port 53 { any; }; 监听端口和哪些主机可以访问解析,any表示所有
directory "/var/named"; 数据库文件的目录位置
allow-query { any; }; 允许哪些主机请求查询
recursion yes; 将自己视为客户端的一种查询方式
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.com" IN {
type master;
file "magedu.com";
allow-transfer{192.168.1.101;} 定义哪些从DNS服务器可以同步数据,多个IP之间以分号分隔,且最后以分号结尾。
}
zone "1.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.1";
allow-transfer{192.168.1.101;}
}
(3)修改从DNS服务器上的DNS主配置文件/etc/named.conf
options {
listen-on port 53 { any; }; 监听端口和哪些主机可以访问解析,any表示所有
directory "/var/named"; 数据库文件的目录位置
allow-query { any; }; 允许哪些主机请求查询
recursion yes; 将自己视为客户端的一种查询方式
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.com" IN {
type slave; 表示本机是从DNS服务器
file "slaves/magedu.com"; 表示同步后的文件放置在哪里,这是相对于/var/named/目录的相对路径
masters{192.168.1.100;} 定义主服务器地址
}
zone "1.168.192.in-addr.arpa" IN {
type slave;
file "slaves/named.192.168.1";
masters{192.168.1.100;}
}
(4)修改主DNS服务器的域名的解析库文件,从DNS服务器不需要定义
正向解析文件:/var/named/magedu.com
$TTL 86400
$ORIGIN magedu.com.
@ IN SOA ns1.magedu.com. admin.magedu.com. (
2019011301
1H
5M
1W
86400 )
@ IN NS ns1.magedu.com.
@ IN NS slave.magedu.com.
@ IN MX 10 mail.magedu.com.
ns1 IN A 192.168.1.110
slave IN A 192.168.1.111
www IN A 192.168.1.110
ftp IN A 192.168.1.110
web IN A CNAME ftp
说明:增加了两条slave的记录。
反向解析文件:/var/named/named.192.168.1
$TTL 86400
@ IN SOA ns1.magedu.com. admin.magedu.com. (
2019011301
1H
5M
1W
86400 )
@ IN NS ns1.magedu.com.
@ IN NS slave.magedu.com.
110 IN PTR ns1.magedu.com.
111 IN PTR slave.magedu.com.
110 IN PTR www
110 IN PTR ftp
110 IN PTR web
(5)重启主DNS服务器和从DNS服务器上的named服务
# cd /var/named
(仅主DNS服务器执行)# chown named:named named.192.168.1 magedu.com
# service named restart
(6)观察
观察从DNS服务器上的解析库文件是否进行同步,位置于/var/named目录下
观察日志文件:/var/log/messages
子域授权:
在本域名服务器上的正向解析文件定义子域
# vim /var/named/magedu.com
$TTL 86400
$ORIGIN magedu.com.
@ IN SOA ns1.magedu.com. admin.magedu.com. (
201901130
1H
5M
1W
86400 )
@ IN NS ns1.magedu.com.
@ IN NS slave.magedu.com.
ops.magedu.com. IN NS ns1.ops.magedu.com. 添加NS记录
@ IN MX 10 mail.magedu.com.
ns1 IN A 192.168.1.110
ns1.ops.magedu.com. IN A 192.168.1.120 添加对应的A记录
slave IN A 192.168.1.111
www IN A 192.168.1.110
ftp IN A 192.168.1.110
web IN A CNAME ftp
当然子域还需要有对应的子域的解析库文件,配置格式与上级域类似。这样才能对子域进行解析。
4、基于LNMP 搭建wordpress。(15 分)
1、编译安装搭建wordpress
1)编译安装nginx
yum -y install gcc gcc-c++ autoconf automake make wget vim
yum -y install openssl openssl-devel libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed libtool zlib zlib-devel pcre pcre-devel patch
yum -y install libxml2 libxml2-dev
yum -y install libxslt-devel
yum -y install perl-devel perl-ExtUtils-Embed
yum install bzip2 bzip2-devel -y
yum -y install libjpeg-devel -y
yum install libpng -y
yum install libpng-devel -y
yum install freetype-devel -y
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_flv_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_stub_status_module --with-http_sub_module --with-http_random_index_module --with-http_degradation_module --with-http_secure_link_module --with-http_gzip_static_module --with-http_perl_module --with-pcre=../pcre-8.42 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.1.1-pre8 --with-file-aio --with-mail --with-mail_ssl_module --with-stream --with-ld-opt="-Wl,-E" --add-module=../nginx-sticky-module --add-module=../nginx_vts
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
2)编译安装php
./configure -prefix=/usr/local/php -with-config-file-path=/usr/local/php/etc -with-bz2 -with-curl -enable-ftp -enable-sockets -disable-ipv6 -with-gd -with-jpeg-dir=/usr/local -with-png-dir=/usr/local -with-freetype-dir=/usr/local -enable-gd-native-ttf -with-iconv-dir=/usr/local -enable-mbstring -enable-calendar -with-gettext -with-libxml-dir=/usr/local -with-zlib -with-pdo-mysql=mysqlnd -with-mysqli=mysqlnd -with-mysql=mysqlnd -enable-dom -enable-xml -enable-fpm -with-libdir=lib64 -enable-bcmath --with-openssl
vim /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=php-fpm
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
ExecStop=/usr/bin/pkill php-fpm
PrivateTmp=false
[Install]
WantedBy=multi-user.target
cp ./php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
确保phpinfo()显示正常。
3)安装数据库
yum install wget -y
wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum localinstall mysql57-community-release-el7-7.noarch.rpm -y
yum install mysql-community-server -y
systemctl start mysqld
systemctl enable mysqld
grep 'temporary password' /var/log/mysqld.log
2019-06-09T11:00:52.630626Z 1 [Note] A temporary password is generated for root@localhost: YHORQsfC_1,D
mysql_secure_installation
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'wordpress' );
/** MySQL database password */
define( 'DB_PASSWORD', '数据库密码' );
/** MySQL hostname */
define( 'DB_HOST', '127.0.0.1' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
2、搭建php-admin
下载phpMyAdmmin上传至服务器
登录phpMyAdmin报错mysqli_real_connect(): (HY000/2002): No such file or directory
mv config.sample.inc.php config.inc.php
$cfg['Servers'][$i]['host'] = '127.0.0.1';
安装成功。
0人点赞