首页 > 【力推】linux运维面试题(b站沈超老师视频笔记)
头像
许愿offer1007
编辑于 2020-04-07 23:46
+ 关注

【力推】linux运维面试题(b站沈超老师视频笔记)

目录:
  • 网络基础类
  • Linux系统管理类(权限优化、备份策略、RAID磁盘阵列、资源查看、启动过程、系统优化)
  • Shell编程类(文本截取、随机字符串、网站检测)
  • Linux网络服务类(SSH、DHCP+FTP、DNS、Apache配置、Apache优化、Nginx配置、HTTP状态码)
  • 数据库管理类(SQL语句、集群、索引、Redis)
1.1 ISO/OSI的七层模型
应用层:为用户提供服务,给用户一个操作界面
表示层:数据提供表示;加密(非对称);压缩(tar.gz)
会话层:确定是否需要网络传递(网络/本地)
传输层:报文分组(发送时)和组装(接收时);传输协议选择(TCP/UDP);端口封装;差错校验
网络层:IP地址编址;路由选择(静态/动态)
数据链路层:MAC地址编址;MAC地址寻址;差错校验
物理层:实际数据传输;电气特性
(IP +MAC +端口)

1.2 TCP/IP 四层(网络接口层)/五层模型(数据链路层+物理层)

1.3 TCP三次握手过程

序列号2^32随机数seq,确认号ack = seq +1
标志:SYN ACK FIN

1.4 TCP四次挥手

1.5 172.22.141.231/26,该IP位于哪个网段?该网段拥有多少可用IP地址?广播地址是什么?
子网掩码是用来划分 网络地址/主机地址 的
IP地址分类:
A:以0开头,1.0.0.0~126.255.255.255 127.0.0.1是本机地址
B:10,128.0.0.0~191.255.255.255
C:110,192.0.0.0~223.255.255.255
私有IP地址:
A:10.0.0.0~10.255.255.255
B:172.16.0.0~172.31.255.255
C:192.168.0.0~192.168.255.255

2.1 简述Linux权限划分原则
【文件类型  r w x
注意:给文件或目录分配权限时,先考虑所有者和所属组
遵守最小化权限原则:用啥权限给啥权限
修改目录及子文件归属或权限时,注意递归
文件基本权限是最常用、也是最有效的Linux安全防护手段
ACL有风险,极易出现溢出
chattr 保护系统文件 上锁 root也不能改】
  • 注意权限分离(Linux系统权限、数据库权限不要掌握在同一部门)
  • 权限在满足使用的情况下,最小优先
  • 减少使用root用户,尽量用“普通用户+sudo提权”进行日常操作
  • 重要系统文件,如/etc/passwd /etc.fstab ,日常建议chattr锁定
  • 使用脚本检测系统中新增的SUID、SGID
  • 可以使用工具(如chkrootkit等)检测rootkit脚本(恶意软件)
  • 开启SSH服务密钥对登录,修改SSH服务端口
2.2 当用户user1对/testdir目录有x和w权限时,该目录下的只读文件file1是否可修改和删除?【可删,不可改】

2.3 (1)需要备份的内容:
重要系统目录
网络服务数据:Mysql、Apache(网站内容、配置文件、日志文件)
(2)备份策略:
完整备份:cp tar dump xfsdump
增量备份:dump xfsdump 以前一次作为参照,还原难度高
差异备份:以第一次备份作为参照,适用于变化不大的情况
(3)备份频率
实时备份:如Mysql的主从复制
定时备份
(4)备份存储位置
本地、异地
(5)常见服务器的备份方案:
a.每日备份的数据(异地备份):
Mysql数据库(主从备份之外,增量备份一次)
b.每周备份的数据(异地备份)
Mysql数据库(完整备份)
重要系统数据
网页数据
其他服务相关数据

2.4 网站服务器每天产生的日志数量较大,请问如何备份?文本处理性能差,不如数据库)
日志的切割与轮替:
a.系统日志管理工具:logrotate
b.Apache服务配置文件自带日志切割功能,但是需要通过脚本进行轮替

2.5 简述RAID0 RAID1 RAID5的特点与原理
RAID0(独立磁盘冗余阵列)
  • 必须使用两块或两块以上硬盘组成
  • 每块硬盘的大小必须一致
  • 是所有动态磁盘中,数据读写最快的(收益)
  • 损坏几率相对最高
  • 没有磁盘容错功能
RAID1(镜像卷)
  • 由两块或2的倍数硬盘组成
  • 每块硬盘大小必须一致
  • 硬盘使用率只有50%,写入速度最慢(那一半去做备份了)
  • 拥有磁盘容错功能
RAID5
  • 由三块或三块以上硬盘组成
  • 每块硬盘大小必须一致
  • 磁盘利用率是n-1块盘(一块留做奇偶校验)
  • 利用奇偶校验(异或),拥有容错功能(只允许1块坏盘)
扩展:6 (升级的5);10(中和1、0)
软RAID:由操作系统模拟的RAID,一旦硬盘损坏,操作系统就会损坏,RAID会丧失作用(几乎没用)
硬RAID:由立于硬盘之外的,硬件RAID卡组成;就算硬盘损坏,也不会导致RAID卡损坏,磁盘容错才能起作用。

2.6 资源查看
综合监控工具 dstat (yum -y install dstat)
eg.  dstat --top-cpu 3 3   占用最多的进程

2.7 启动过程
CentOS 6.x 基本启动过程(线性)
  • 服务器加电,加载BIOS信息,BIOS进行系统检测
  • 加载启动引导程序(grub)
  • 由grub加载系统内核
  • 系统内核重新自检,并加载硬件驱动
  • 由内核启动系统第一个进程/sbin/init
  • 由/sbin/init进程调用/etc/init/rcS.conf,进行系统初始化配置
  • 由/etc/init/rcS.conf调用/etc/inittab,确定系统的默认运行级别
  • 确定默认运行级别后,调用/etc/init/rc.conf配置文件
  • 运行相应的运行级别目录/etc/rc[0-6].d/中的脚本
  • 在启动登录界面之前,执行/etc/rc.d/rc.local中的程序
CentOS 7.x 基本启动过程(并发式 瀑布流)
  • 服务器加电,加载BIOS信息,BIOS进行系统检测
  • 加载启动引导程序(grub2)
  • 由grub2加载inintamfs虚拟文件系统
  • 内核初始化,以加载动态模块的形式加载部分硬件的驱动
  • 内核启动系统的第一个进程,也就是systemd
  • systemd开始调用默认单元组(default.target),并按照默认单元组开始运行子单元组
2.8 如何进行Linux的系统优化
  • 禁用不必要的服务:ntsysv命令最为方便(设置自启动)
  • 避免直接使用root用户,普通用户使用sudo授权操作
  • 锁定重要系统文件
  • 配置国内yum源,加快***
  • 配置系统同时打开最大文件数(vi /etc/profile    ulimit -SHn  65535)
  • 同步时间服务器(ntpdate ntp1.aliyun.com    通过crond定时任务,让时间同步命令每半小时执行一次)
  • 更改ssh服务的默认端口,配置SSH密钥对登录
  • 配置合理的IPtables防火墙规则
  • 配置合理的SELinux安全上下文
  • 指定合理的监控策略
  • 定时备份系统重要文件
3.1 文本截取
(1)有一个b.txt文本,要求将所有域名截取出来,并统计重复域名出现的次数
http://www.baidu.com/index.html
cat b.txt | cut -d "/" -f 3 | sort | uniq -c | sort -nr
(2)统计当前服务器正在连接的IP地址,并按连接次数排序(cut不能以空格做分隔符)
netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d ":" -f 1 | sort -n | uniq -c | sort -nr

3.2 随机字符串
(1)使用循环在/atguigu目录下创建10个txt文件,要求文件名由6位随机小写字母加固定字符串(_gg)组成,例如:pzjebg_gg.txt
随机字符串生成
  • /dev/random 依赖系统中断生成随机字符串,可以保证数据的随机性但生成数据慢,会占用系统进程资源
  • /dev/urandom 快,但随机性不足,常用
tr 对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符。
-c 取代所有不属于第一字符集的字符
-d 删除所有属于第一字符集的字符
例如:echo "aa..+1 b2c/*$dd 3 ls 4" | tr -dc '0-9\n'
>>>1 2 3 4
答:
#!/bin/bash
if [ ! -d /atguigu ]
then
mkdir /atguigu
fi
cd /atguigu
for (( i=1 ; i<=10; i++ ))
do
filename=$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 6)
touch "$filename"_gg.txt
done
(2)生成随机数字:
$RANDOM   生成0-32767的数字
$(($RANDOM%1000))    生成1000以内随机数

3.3 网站监测
ping 消耗资源最少,但不准确,只能检查双方网络是通的
(1)批量检查多个网站是否可以正常访问,要求使用shell数组实现,检测策略尽量模拟用户真实访问模式
nmap 扫描端口
数组声明: array_n=(1 2 3)    调用echo ${array_n[*]}
curl: 开源的用于数据传输的命令行工具。可以用于http访问,上传下载、用户认证、代理访问等。
格式: curl [选项] url或IP地址
选项:-o 将命令输出保存在指定文件
-s Silent模式。不输出任务内容
-w 按指定格式输出内容,如:-w %{http_code}:输出http状态码
--connect-timeout:连接超时时间
......
code=$(curl -o /dev/null -s --connect-timeout 5 -w '%{http_code}'$i | grep -E "200|300")
if ["$code" != ""]
then
echo "$i is ok">> /root/ok.log
else
sleep 10
code=$(curl -o /dev/null -s --connect-timeout 5 -w '%{http_code}'$i | grep -E "200|300")
......

4.网络服务
经验类:
服务优化类:
程序优化
架构优化
4.1 SSH
(1)哪些设置能够提升SSH远程管理的安全等级
  • SSH的登录验证方式
  • SSH的登陆端口(默认22)和监听设置(/etc/ssh/sshd_config
  • SSH的登录用户限制(/etc/ssh/sshd_config   PermitRootLogin)
  • SSH的登录超时设置(/etc/profile export TMOUT=300 设置客户端无操作5分钟    unset TMOUT)
  • SSH登录失败尝试次数(/etc/ssh/sshd_config    MaxAuthTries 6)

答:
  • 登录验证模式修改为密钥登录
  • 登录端口修改为非22端口以及指定监听IP
  • 禁止root用户远程登录
  • 设置无操作时自动断开连接
  • 设置登录失败后登录尝试次数为6次
  • 编写防火墙规则,使用白名单机制放行ssh服务监听端口
(2)ssh连接时认证时间过长如何解决?
/etc/ssh/sshd_config   UseDns no
取消ssh登录时的dns反向解析请求功能

(3)scp和rsync进行远程文件复制有什么区别?

4.2 DHCP+FTP
(1)请简述通过DHCP服务器获取IP地址的过程
租约是广播,续租是直连
DHCP租用失败:
  • 如果DHCP客户机无法找到DHCP服务器,他将从TCP/IP的B类网段169.254.0.0/16中挑选一个IP地址作为自己的临时IP地址,继续每隔5分钟尝试与DHCP服务器进行通讯,一旦与DHCP服务器取得联系,则客户机放弃自动配置的临时IP地址,而使用DHCP服务器分配的IP地址。
  • DHCP客户机收到DHCP服务器回应的ACK报文后,通过地址冲突检测(ARP)发现服务器分配的地址冲突或者由于其他原因导致不能使用,则发送DECLINE报文,通知服务器所分配的IP地址不可用。
答:
  • 客户机请求IP(客户机发DHCPDISCOVER广播包)
  • 服务器响应(服务器发DHCPOFFER广播包)
  • 客户机选择IP(客户机发DHCPEQUEST广播包)
  • 服务器确定租约(服务器发DHCPACK/DHCPNAK广播包)
(2)FTP的主被动模式
(3)集群环境中,如何保证所有服务器之间的时间误差较小
手动测试同步:
ntpdate 时间服务器IP地址
自动同步:
可以将命令写入计划任务

4.3 DNS
(1)DNS解析过程
域名: www.atguigu.com.
根域: .
顶级域: com
二级域:(注册域)atguigu
三级域: www
1、/etc/hosts 用来做解析 保存即生效
2、网卡配置文件 /etc/sysconfig/network-script/ifcfg-eth0

答:
  • 客户机首先查看本地hosts文件是否有解析记录。有则直接用来访问web server
  • 没有则向网卡中记录的首选DNS(本地DNS)发起查询请求
  • 本地DNS若有记录则返回给客户端,客户端接收到后直接访问web server
………………………………………………………………………………………………
  • 若没有,则本地DNS向根域服务器发起请求,请求解析对应顶级域的IP地址(开始迭代查询)
  • 本地DNS得到顶级域服务器IP后,再向顶级域服务器发起请求,请求解析权威DNS服务器的IP地址
  • 本地DNS服务器获取到权威DNS服务器IP地址后,再向其查询具体的完整域名的对应解析记录
  • 最终本地DNS将查询到的对应域名的解析记录发送给客户端,并在本地记录一份
(2)权威DNS和(本地)递归DNS的含义
  • 权威DNS是经上一级授权对域名进行解析的DNS服务器,同时它可以把解析授权转授给其他服务器
  • 递归DNS负责接受用户对任何域名的查询,并返回结果给用户,它可以缓存结果避免用户再向上查询
(3)智能DNS
将对用户发起的查询进行判断出是哪个运营商的用户查询,然后将请求转发给相应的运营商IP处理,减少跨运营商访问的时间,提高访问速度。

4.4 Apache配置
公司里有一台服务器,需要在上面跑两个网站,并且其中一个网站需要更换新域名,请问如何处理?
网站1:www.a.com
网站2:www.b.com > www.d.com
(1)虚拟主机
  • 基于IP
  • 基于IP+端口
  • 基于域名
1、用IP区分网站
ifconfig eth0:0 设置网卡子接口 临时生效;永久:扩展插头/虚拟机 新增网卡接口+配置文件
httpd.conf:

2、用端口区分网站
httpd.conf LISTEN要监听新增的端口
3、数据包的关键词
httpd.conf :
NameVirtualHost *:80 开关
(2)apache的工作模式
1、prefork模式:事先开启子进程,单进程单线程处理单个请求
2、worker模式:一对多线程,并发能力强点,但不安全
3、event模式:+分配管理线程 更擅长高并发
查看工作模式:httpd -V | grep -i "server mpm"

4.5 Apache优化
(1)日志的轮替(防止日志过大)
access.log/error.log(/var/log)
利用apache自带的rotatelogs工具进行日志切割,保证单个日志文件不过大
CustomLog "| /bin/rotatelogs -l /wwwlogs/access_%Y%m%d.log 86400" combined
(2)美化错误页面
可以将404 500等错误信息页面重定向到网站首页或其他页面,提升用户体验。
vim httpd.conf
ErrorDocument 404 http://www.a.com
(3)屏蔽apache版本等敏感信息
(4)配置静态缓存(特定文件,减少服务器的访问压力)
(5)禁止解析PHP
如:uploads目录 上传了非法代码 禁止它的解析

另:有哪些技术可以提高网站的安全效率
CDN内容分发网络
所有的客户请求都扔给了当地的CDN机房,资源同步的大规模缓存,减轻压力,且保护了真正的服务器

4.6 Nginx配置
(1)apache和nginx(web服务器)的优缺点,怎么选择?
apache的优缺点:
优点:
  • apache的rewrite功能强大
  • 模块非常多,基本想要的功能都能找到模块
  • 存在时间较长,文献较全,bug也相对较少
  • 动静态解析都超稳定
缺点:
  • 由于工作模式是同步阻塞性,导致资源消耗较高,并发能力较差(相较于其他web服务器)
nginx的优缺点:
优点:
  • 轻量级服务,比apache占用更少的内存及资源
  • 并发能力强,nginx处理请求是异步非阻塞的,在高并发下能保持低资源低消耗高性能
  • 高度模块化的设计,编写模块相对简单
  • 社区活跃,各种高性能模块产出迅速
缺点:
  • 动态处理上需要使用fastcgi连接PHP的FPM服务,相比Apache不占优势
apache和nginx的选择
  • nginx适合做静态处理,简单,效率高
  • apache适合做动态处理,稳定,功能强
  • 并发较高的情况下优先选择nginx,并发要求不高的时候两者都可以,规模稍大的可以使用nginx作为反向代理,然后将动态请求 负载均衡到后端apache上
(2)为什么nginx的并发能力强,资源消耗低?
同步/异步   +   阻塞/非阻塞        nginx以异步非阻塞方式工作
  • 客户端发送request,服务器分配work进程来处理
  • 能立即处理完的,处理后work进程释放资源,进行下一个request的处理
  • 不能立即处理完的work进程注册返回事件,然后接着去处理其他request
  • 当之前的request结束返回后,触发返回事件,由空闲work进程接着
通过这种快速处理,快速释放请求的方式,达到同样的配置可以处理更大并发量的目的
(3)Nginx常用模块及功能



(3)Nginx如何连接PHP进行页面解析的?


CGI(Common Gateway Interface)公共网关接口,是外部扩展应用程序与 Web 服务器交互的一个标准接口。服务器端与客户端进行交互的常见方式多,CGI 技术就是其中之一。根据CGI标准,编写外部扩展应用程序,可以对客户端浏览器输入的数据进行处理,完成客户端与服务器的交互操作。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要 行为是将CGI解释器进程保持在内存中并因此获得较高的性能。

4.7 HTTP状态码
1**:信息,服务器收到请求,需要请求者继续执行操作
2**:成功,操作被成功接收并处理
3**:重定向,需要进一步的操作已完成请求
4**:客户端错误,请求包含语法错误或无法完成请求
5**:服务器错误,服务器在处理请求的过程中发生了错误
常见的:

5.1 SQL语句

5.2 集群
(1)MYSQL 一主多从,主库宕机,如何合理切换到从库,其他从库如何处理?
1、主从服务器原理
技术点:bin-log二进制日志
开启主服务器的bin-log日志记录功能,将主服务器的bin-log日志传到从服务器,从服务器根据日志内容将数据还原到本地。
主从服务器:
从服务器主动把主服务器上的数据同步到本地(备份)
2、主从故障切换:
  • 登陆所有从库查看post信息,使用POST最大的做为新的主库,然后将从库提升为新的主库,登陆从库(新的主库)执行stop slave
  • 修改my.cnf配置文件,开启bin-log并重新启动数据库服务,登录数据库执行reset master,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,最后修改对应服务器的IP地址等信息
  • 登录其他从库,执行change master操作,查看同步状态。
(2)单台Mysql达到性能瓶颈时,如何处理?
数据库代理工具:Amoeba
Amoeba致力于MySQL的分布式数据库前端代理层,它主要在应用层访问Mysql的时候充当sql路由功能,专注于分布式数据库代理层(Database Proxy)开发。具有负载均衡、高可用性、SQL、过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能。

5.3 索引
(1)什么是索引
索引本质是数据结构,排好序的快速查找数据结构,可以提高查找效率
数据分身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引
(2)索引的分类
  • 主键索引
  • 单值索引 一个索引只包含单个列,一个表可以有多个单列索引。如果字段会被经常用来检索就可以用单值索引
  • 复合索引 一个索引包含多个列,如电话簿上姓+名字。最好不超过5个字段
  • 唯一索引 所有列的值必须唯一,但是允许有空值
  • 普通索引和唯一索引可以称为辅助索引
(3)劣势
  • 实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引列也要是占用空间的。
  • 虽然索引大大提高了查询速度,但是会降低更新表的速度,如对表进行INSERT,UPDATE,DELETE。因为更新表示,Mysql不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。
  • 索引只是提高效率的一个因素,如果Mysql有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询。
(4)什么时候需要创建索引
  • 主键自动建立唯一索引
  • 频繁作为查询条件的字段应该创建索引
  • 查询中与其他表关联的字段,外键关系建立索引
  • 频繁更新的字段不适合创建索引,因为每次更新不单单是更新了记录还会更新索引
  • where条件里用不到的字段不创建索引
  • 单键/组合索引的选择问题,在高并发下倾向创建组合索引
  • 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
  • 查询中统计或者分组字段(group by)
(5) 误操作drop语句导致数据库数据破坏,请给出恢复的实际大体步骤
  • 手动切割bin-log日志并记好切割好的bin-log日志文件位置,这里假设为009,备份全部bin-log日志
  • 找到之前全备份数据最后备份到的bin-log文件位置并记好位置,这里假设为005
  • 用mysqladmin命令将005到008bin-log文件中的SQL语句分离出来,并找到drop库的语句将其删掉
  • 将之前全备数据导入mysql服务器
  • 将步骤3中分离出的SQL语句导入mysql服务器
  • 将009bin-log文件删除,再次刷新bin-log日志,到此数据库已恢复成功

5.4 Redis
(1) 工作原理
Redis是一个key-value存储系统,它支持的value类型相对较多,包括string、list、set和zset,这些数据都支持push/pop/add/remove及交并补等操作,而且这些操作都是原子性的,在此基础上,redis支持各种不同方式的排序。为了保证效率,数据是缓存在内存中的,redis会周期性的把数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave同步
(2)redis持久化-RDB
在redis运行时,RDB程序将当前内存中的数据库快照保存到磁盘中,当redis需要重启时,RDB程序会通过重载RDB文件来还原数据库
redis持久化-AOF
(Redis的bin-log)以协议文本的方式,将所有对数据库进行的写入命令记录到AOF文件,达到记录数据库状态的目的

(3)如何利用redis对mysql进行性能优化

----【完】----

全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐