目录:
- 网络基础类
- 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
(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) 回帖