MENU

面试题集锦

• 2020 年 07 月 03 日 • 默认分类,杂谈

海内存知己 天涯若比邻
过一次年,结婚、存款、父母养老,一系列向钱看的事都在碾压我们本来还挺简单的神经,但难过没有出路,唯有找到好的方法和事业方向,才能实现一步一个脚印的逆袭。
1、什么是运维?什么是游戏运维
1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,
在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术
运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等
2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维
开发运维:是给应用运维开发运维工具和运维平台的
应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查
系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等
总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑
开发运维、应用运维和系统运维他们的工作是环环相扣的
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
游戏运营要做的一个事情除了协调工作以外
还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划
3、现在给你三百台服务器,你怎么对他们进行管理?
管理3百台服务器的方式:
1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。
3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。

4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点

RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
还有一个大功能,多块盘放在一起可以有冗余(备份)
RAID整合方式有很多,常用的:0 1 5 10
RAID 0,可以是一块盘和N个盘组合
其优点读写快,是RAID中最好的
缺点:没有冗余,一块坏了数据就全没有了
RAID 1,只能2块盘,盘的大小可以不一样,以小的为准
10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高
RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘
特点,读写性能一般,读还好一点,写不好
冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
性能从好到坏:RAID0 RAID10 RAID5 RAID1
成本从低到高:RAID0 RAID5 RAID1 RAID10
单台服务器:很重要盘不多,系统盘,RAID1
数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10)
WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5
我们会根据数据的存储和访问的需求,去匹配对应的RAID级别
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
LVS: 是基于四层的转发
HAproxy: 是基于四层和七层的转发,是专业的代理服务器
Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
区别: LVS由于是基于四层的转发所以只能做端口的转发
而基于URL的、基于目录的这种转发LVS就做不了
工作选择:
HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器
配置简单,所以中小型企业推荐使用HAproxy

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
Squid、Varinsh和Nginx都是代理服务器

什么是代理服务器:
能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资
源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接
收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你
如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网

区别:
1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业

  但是本身不支持特性挺多,只能缓存静态文件

2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成
3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术

在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。
还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存
它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的
4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境

工作中选择:
要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。

7、Tomcat和Resin有什么区别,工作中你怎么选择?
区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少
最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些
但稳定性和java程序的兼容性,应该是比resin的要好

工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容

8、什么是中间件?什么是jdk?
中间件介绍:
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源
中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯
是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口

但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递
通过中间件,应用程序可以工作于多平台或OS环境。

jdk:jdk是Java的开发工具包
它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境

9、讲述一下Tomcat8005、8009、8080三个端口的含义?
8005==》 关闭时使用
8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
8080==》 一般应用使用

10、什么叫CDN?

  • 即内容分发网络
  • 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到
    最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度

11、什么叫网站灰度发布?
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式
AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B
如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来
灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度

12、简述DNS进行域名解析的过程?
用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端

13、RabbitMQ是什么东西?
RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器
消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用
队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用
消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地

14、讲一下Keepalived的工作原理?
在一个虚拟路由器中,只有作为MASTER的VRRP服务器会一直发送VRRP通告信息,
BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)
多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性
由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息

15、讲述一下LVS三种模式的工作过程?
LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)

一、NAT模式(VS-NAT)
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址
并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP
将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址
缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈
因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时
大量的数据包都交汇在负载均衡器那,速度就会变慢!

二、IP隧道模式(VS-TUN)
原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大
那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS
RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过
负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持
IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户
所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量
这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”
(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上

三、直接路由模式(VS-DR)
原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应
所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR
而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)
并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户
则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端
由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域
也可以简单的理解为在同一台交换机上
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端
与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
mysql的innodb如何定位锁问题:
在使用 show engine innodb status检查引擎状态时,发现了死锁问题
在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)
innodb_trx ## 当前运行的所有事务
innodb_locks ## 当前出现的锁
innodb_lock_waits ## 锁等待的对应关系

mysql如何减少主从复制延迟:
如果延迟比较大,就先确认以下几个因素:

  1. 从库硬件比主库差,导致复制延迟
  2. 主从复制单线程,如果主库写并发太大,来不及传送到从库

    就会导致延迟。更高版本的mysql可以支持多线程复制
  3. 慢SQL语句过多
  4. 网络延迟
  5. master负载
    主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层
  6. slave负载
    一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器

只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数:
–slave-net-timeout=seconds 单位为秒 默认设置为 3600秒

参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据

–master-connect-retry=seconds 单位为秒 默认设置为 60秒

参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试

通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟

MySQL数据库主从同步延迟解决方案
最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行
还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit
= 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog
innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave

17、如何重置mysql root密码?

一、 在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法:
1、 在SHELL环境下,使用mysqladmin命令设置:

   mysqladmin –u root –p password “新密码”   回车后要求输入旧密码

2、 在mysql>环境中,使用update命令,直接更新mysql库user表的数据:

   Update  mysql.user  set  password=password(‘新密码’)  where  user=’root’;
   flush   privileges;
   注意:mysql语句要以分号”;”结束

3、 在mysql>环境中,使用grant命令,修改root用户的授权权限。

   grant  all  on  *.*  to   root@’localhost’  identified  by  ‘新密码’;

二、 如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下:
1、 关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务)
2、 使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务

   /usr/local/mysql/bin/mysqld_safe  --skip-grant-table  &

3、 使用空密码的root用户登录数据库,重新设置ROOT用户的密码

  #mysql  -u   root
   Mysql> Update  mysql.user  set  password=password(‘新密码’)  where  user=’root’;
   Mysql> flush   privileges;

18、lvs/nginx/haproxy优缺点
Nginx的优点是:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构
它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一
Nginx单凭这点可利用的场合就远多于LVS了。

2、Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一
相反LVS对网络稳定性依赖比较大,这点本人深有体会;

3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来
LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。

4、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。

5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了
如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。

6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器
LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。

7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器

8、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了
不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃

9、Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多

Nginx的缺点是:
1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点
2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测

  不支持Session的直接保持,但能通过ip_hash来解决

LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器

       它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)

LVS的优点是:
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生

  这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低

2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西

  所以并不需要太多接触,大大减少了人为出错的几率

3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案

  如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived

4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等

LVS的缺点是:
1、软件本身不支持正则表达式处理,不能做动静分离

  而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在

2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了

  特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了
  相对而言,Nginx/HAProxy+Keepalived就简单多了。

HAProxy的特点是:
1、HAProxy也是支持虚拟主机的。
2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导

  同时支持通过获取指定的url来检测后端服务器的状态

3、HAProxy跟LVS类似,本身就只是一款负载均衡软件

  单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的

4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡

  对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡

5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:
①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
② static-rr,表示根据权重,建议关注;
③leastconn,表示最少连接者先处理,建议关注;
④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似

 我们用其作为解决session问题的一种方法,建议关注;

⑤ri,表示根据请求的URI;
⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

19、mysql数据备份工具
mysqldump工具
mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump

支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景
Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。

基于LVM快照备份
在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录
进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别
而innodb不开启独立表空间的话只能备份整个数据库。

tar包备份

percona提供的xtrabackup工具
支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同
数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展
可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份

20、keepalive的工作原理和如何做到健康检查
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组
这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内
其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了
这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护
及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的

Keepalived健康检查方式配置
HTTP_GET|SSL_GET
HTTP_GET | SSL_GET
{
url {
path /# HTTP/SSL 检查的url可以是多个
digest <STRING> # HTTP/SSL 检查后的摘要信息用工具genhash生成
status_code 200# HTTP/SSL 检查返回的状态码
}
connect_port 80 # 连接端口
bindto<IPADD>
connect_timeout 3 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 2 #连接间隔时间
}

21、统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip

cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10

22、使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.log
tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log

23、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1
iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080

24、简述raid0 raid1 raid5 三种工作模式的工作原理及特点
RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率
但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证
而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合

RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据
不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能
RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性
当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据

RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上
任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)
所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能

25、你对现在运维工程师的理解和以及对其工作的认识
运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务
运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失
因此运维工程师的工作需要严谨及富有创新精神

26、实时抓取并显示当前系统中tcp 80端口的网络数据信息,请写出完整操作命令
tcpdump -nn tcp port 80

27、服务器开不了机怎么解决一步步的排查

A、造成服务器故障的原因可能有以下几点:

B、如何排查服务器故障的处理步骤如下:

28、Linux系统中病毒怎么解决
1)最简单有效的方法就是重装系统

2)要查的话就是找到病毒文件然后删除

  中毒之后一般机器cpu、内存使用率会比较高
  机器向外发包等异常情况,排查方法简单介绍下

top 命令找到cpu使用率最高的进程
一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置

rm -f 命令删除病毒文件

检查计划任务、开机启动项和病毒文件目录有无其他可以文件等

3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下

29、发现一个病毒文件你删了他又自动创建怎么解决
公司的内网某台linux服务器流量莫名其妙的剧增,用iftop查看有连接外网的情况
针对这种情况一般重点查看netstat连接的外网ip和端口。

用lsof -p pid可以查看到具体是那些进程,哪些文件
经查勘发现/root下有相关的配置conf.n hhe两个可疑文件,rm -rf后不到一分钟就自动生成了
由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首

查杀病毒最好断掉外网访问,还好是内网服务器,可以通过内网访问
断了内网,病毒就失去外联的能力,杀掉它就容易的多
怎么找到呢,找了半天也没有看到蛛丝马迹,没办法只有ps axu一个个排查
方法是查看可以的用户和和系统相似而又不是的冒牌货,果然,看到了如下进程可疑

看不到图片就是/usr/bin/.sshd
于是我杀掉所有.sshd相关的进程,然后直接删掉.sshd这个可执行文件
然后才删掉了文章开头提到的自动复活的文件

总结一下,遇到这种问题,如果不是太严重,尽量不要重装系统
一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜
一般都能找到元凶。但是如果遇到诸如此类的问题
/boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,个人觉得就要重装系统了

30、说说TCP/IP的七层模型
应用层 (Application):
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示层(Presentation Layer):
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等

会话层(Session Layer):
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话

传输层 (Transport):
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

网络层 (Network):
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

数据链路层 (Link):
建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正

物理层(Physical Layer):
是计算机网络OSI模型中最低的一层
物理层规定:为传输数据所需要的物理链路创建、维持、拆除
而提供具有机械的,电子的,功能的和规范的特性

简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层
物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础
物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境
如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”

31、你常用的Nginx模块,用来做什么
rewrite模块,实现重写功能
access模块:来源控制
ssl模块:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module 模块实现代理
ngx_http_upstream_module模块实现定义后端服务器列表
ngx_cache_purge实现缓存清除功能

32、请列出你了解的web服务器负载架构
Nginx
Haproxy
Keepalived
LVS

33、查看http的并发请求数与其TCP连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024
不修改这里web服务器修改再大也没用,若要用就修改很几个办法,这里说其中一个:
修改/etc/security/limits.conf

  • soft nofile 10240
  • hard nofile 10240
    重启后生效

34、用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20

35、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线

!/bin/bash

for ip in seq 1 255
do
{

ping -c 1 192.168.1.$ip > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo 192.168.1.$ip UP
else
echo 192.168.1.$ip DOWN
fi
}&
done
wait

36、已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近 7 天的访问日志!请问如何解决? 请给出解决办法或配置或处理命令

创建文件脚本:

!/bin/bash

for n in seq 14
do

date -s "11/0$n/14"
touch access_www_(date +%F).log
done

解决方法:

pwd/application/logs

ll

-rw-r--r--. 1 root root 0 Jan 1 00:00 access_www_2015-01-01.log
-rw-r--r--. 1 root root 0 Jan 2 00:00 access_www_2015-01-02.log
-rw-r--r--. 1 root root 0 Jan 3 00:00 access_www_2015-01-03.log
-rw-r--r--. 1 root root 0 Jan 4 00:00 access_www_2015-01-04.log
-rw-r--r--. 1 root root 0 Jan 5 00:00 access_www_2015-01-05.log
-rw-r--r--. 1 root root 0 Jan 6 00:00 access_www_2015-01-06.log
-rw-r--r--. 1 root root 0 Jan 7 00:00 access_www_2015-01-07.log
-rw-r--r--. 1 root root 0 Jan 8 00:00 access_www_2015-01-08.log
-rw-r--r--. 1 root root 0 Jan 9 00:00 access_www_2015-01-09.log
-rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log
-rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log
-rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log
-rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log

-rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log

find /application/logs/ -type f -mtime +7 -name "*.log"|xargs rm –f

也可以使用-exec rm -f {} ;进行删除

ll

-rw-r--r--. 1 root root 0 Jan 7 00:00 access_www_2015-01-07.log
-rw-r--r--. 1 root root 0 Jan 8 00:00 access_www_2015-01-08.log
-rw-r--r--. 1 root root 0 Jan 9 00:00 access_www_2015-01-09.log
-rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log
-rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log
-rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log
-rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log

-rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log

37、如何优化 Linux系统(可以不说太具体)?

  1. 不用root,添加普通用户,通过sudo授权管理
  2. 更改默认的远程连接SSH服务端口及禁止root用户远程连接
  3. 定时自动更新服务器时间
  4. 配置国内yum源
  5. 关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)
  6. 调整文件描述符的数量
  7. 精简开机启动服务(crond rsyslog network sshd)
  8. 内核参数优化(/etc/sysctl.conf)
  9. 更改字符集,支持中文,但建议还是用英文字符集,防止乱码
  10. 锁定关键系统文件
  11. 清空/etc/issue,去除系统及内核版本登录前的屏幕显示

38、请执行命令取出 linux 中 eth0 的 IP 地址(请用 cut,有能力者也可分别用 awk,sed 命令答)
cut方法1:

ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1

192.168.20.130

awk方法2:

ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}'

192.168.20.130
awk多分隔符方法3:

ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'

192.168.20.130
sed方法4:

ifconfig eth0|sed -n '/inet addr/p'|sed -r 's#^.ddr:(.)Bc.*$#1#g'

192.168.20.130

39、请写出下面 linux SecureCRT 命令行快捷键命令的功能?
Ctrl + a
Ctrl + c
Ctrl + d
Ctrl + e
Ctrl + l
Ctrl + u
Ctrl + k
tab
Ctrl+shift+c
Ctrl+shift+v

解答:
Ctrl + a —->光标移动到行首
Ctrl + e —->光标移动到行尾
Ctrl + c —->终止当前程序
Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断
Ctrl + l —->清屏
Ctrl + u —->剪切光标以前的字符
Ctrl + k —->剪切光标以后的字符
Ctrl + y —->复制u/k的内容
Ctrl + r —->查找最近用过的命令
tab —->命令或路径补全
Ctrl+shift+c —->复制
Ctrl+shift+v —->粘贴

40、每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包)

cat a.sh

/bin/bash

cd /var/www/ && /bin/tar zcf /data/html-date +%m-%d%H.tar.gz html/

crontab –e

00 00 * /bin/sh /root/a.sh
1.如何在Linux中永久设置网络信息,IP:192.168.1.10,
子网掩码:255.255.255.0 网关:192.168.1.1
答: vim /etc/sysconfig/network-scripts/ifcfg-eth0

IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAT=192.168.1.1

2.如何关闭防火墙?
答: /etc/init.d/iptables stop
永久关闭
Chkconfig iptables on
3.查看内存运行状态的命令是什么?

Free

4.RAID的含义及优势? RAID 0 、RAID1、RAID5 分别指什么,各自的特点?
答:
1)RAID:廉价冗余磁盘阵列,指通过硬件软件技术将多个较小、
低速的磁盘整合成一个大磁盘使用的一种存储技术,其不仅可存储数据,
还可以实现一定程度的冗余保障,具有“速度快、安全性高”的优势。
2)RAID0:条带模式,由两个或两个以上的磁盘组成,
同一份文档分散在不同的磁盘中,并行写入,提高写效率。
3)RAID1:镜像模式,由至少两个磁盘组成,
同一份文件被分别写入到不同的磁盘中,每份磁盘数据一样,
实现容错,提高读效率。
4)RAID5:分布式奇偶校验的独立磁盘模式,结合RAID0和RAID1的好处,

同时避免它们的缺点。由至少3块以上大小相同的磁盘组成,实现冗余。

5.每天晚上00:00执行mysql 数据备份,请写出 crontab 配置项?
0 0 * mysqldump -uroot -p123456 -flush -logs 数据库名 > 备份文件名
6.查看iptables 默认策略的指令是什么?
Iptables -L
7.iptables 开放端口 80 端口的语句怎么写?

Iptables -I INPUT -p tcp --dport 80 -j ACCEPT

8.TCP 和UDP 区别是什么?
答:
TCP:传输控制协议,提供的是面向连接、可靠的字节流服务,
当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,
之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,
流量控制等功能,保证数据能从一端传到另一端。
UDP:用户数据协议,是一个简单的面向数据报的传输层协议。
UDP不提供可靠性,它只是把应用程序传给IP层的数据报发出去,
但是并不能保证他们能够到达目的地。由于UDP在传输数据报前不用

在客户和服务器之间建立一个连接,且没有超时重发机制,故而传输速度很快。

9.LInux主机需要上网,有那几个必须的网络项设置?分别是什么?
需要4个,分别是 DNS、IP地址、子网掩码、网卡。
10.除了FAT32 和ext3,还有哪些文件系统格式?
答:ext4 ,xfs
11.Linux中 每周六的04点20分删除/tmp/log_*文件,怎样实现?
答: 20 04 6 rm -rf /tmp/log_*
12.Linux 引导加载的先后顺序是? 请标序号

BIOS (1) Kernel(5) GRUB(4)MBR (3) RAID(2)

13.在BASH shell 中2>&1的作用?
是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,
即将标准出错也输出到 out.file文件中。最后一个&,是让该命令在后台执行。
14.Linux系统中 /etc/hosts 文件的作用?
答: Linux 的/etc/hosts是配置IP地址和其对应主机名的文件,
这里可以记录本机的或其他主机的ip以及对应主机名。

不同的linux版本,这个配置文件也可能不同。比如Debian的文件是/etc/hostname。

15.每天凌晨1点在 /data 目录新建当天日期文件夹?
答: 0 1 * mkdir /data/$(date “+%Y%m%d”)
16.如何查看 占用端口 8080 的进程?
netstat -anutp | grep :8080

lsof -i : 8080

17.Httpd 有几种工作模式,每种模式的简单区别?
答: 2种:
最主要的两种模式是,perfork 模式和 worker 模式。
Perfork 每个子进程只有一个线程,效率高但消耗内存大,是unix下默认的模式。
Work模式每个进程有多个线程,内存消耗低,但一个线程崩溃会牵连其它同子进程的线程。
18.Mysql如何给testuser用户对testdb数据库所有表授权访问,密码为 testpwd,写出命令?

答: grant all on testdb.* to testuser@”localhost” identified by “testpwd”

19.授权管理员用户可以在网络中的所有主机登录,对所有库 ,表
有完全权限且有授权的权限、登录密码tarena:
答:mysql -hlocalhost -uroot -p 999
Grant all on . to root@”%” identified by “tarena” with grant option;
20.查看当前登录数据库服务器的用户是谁?
答: select user();
21.查看当前登录数据库服务器用户的权限?
Show grants;
22.查看当前数据库服务器有哪些授权用户。

Select user,host from mysql.user

23.不允许数据库管理员在数据库服务器本机登录:
Delete from mysql.user where host in(“127.0.0.1”,”::1”,”localhost”,”svr5.tarena.com”);
Flush privileges;
24.授权userweb用户可以从网络中的任意主机访问数据库服务器,对studb库下的tuser表
有查看、更新username字段和age字段的权限 登录密码 userweb888.
Grant select,update(username,age) on studb.tuser to userweb@”%” identified by “userweb888”;
Mysql -h192.168.4.5 -uuserweb -puserweb888
25.授权用户userweb重置自己的登录密码为123456,并检查能否使用新密码登录。
答: set password=password(“123456”);
26.数据库管理员修改授权用户userweb的登录密码为654321,让授权用户userweb使用新密码登录数据库服务器。
答:mysql -h192.168.4.5-uroot -ptarena
Set password for userweb@”%”=password(“654321”);

Mysql -h192.168.4.5 -uuserweb -p654321

27.撤销授权用户userweb的所有授权并使其不再能使用此用户连接数据库服务器。
答:mysql -h 192.168.1.5 -uroot -ptarena
Revoke all on user studb.tuser from userweb@”%”;
Delete from mysql.user where user=”userweb” and host=”%”;
Flush privileges;
28.授权webadmin用户可以从网络中的所有主机登录,对bbsdb库拥有完全授权,且有授权权限,登录密码为webadmin
答:grant all on bbsdb.* to webadmin@”%” identified by “webadmin” with grant option ;
grant insert on mysql.* to webadmin@”%”;
29.在客户端使用授权用户webadmin登录,把自己的授权给userone用户,登录密码是 userone。
Mysql -h192.168.1.5 -uwebadmin -pwebadmin
Grant all on bbsdb.* to userone@”%” identified by “userone”;
30.撤销webadmin 用户的授权权限。
Mysql -h192.168.1.5 -uroot -ptarena

Revoke grant option on bbsdb.* to webadmin@”%”;

31.只允许数据库管理员从数据库服务器本机登录且有授权的权限,登录的密码123qwer456.
答: mysql -h192.168.1.5 -uroot -ptarena
grant all on . to root@”localhost” identified by “123qwer456”
with grant option ;
Quit
Mysql -hlocalhost -uroot -p123qwer456
Delete from mysql.user where host!=”localhost”;
Flush privileges;
32.简述DNS进行域名解析的过程。
答:首先,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:
1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;
3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域名,由顶级查找二级域,
二级域查三级域,直至查到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,
DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。
4)若没有找到,则返回错误信息。
33.进程的查看和调度分别使用什么命令?
答: 进程查看的命令是 ps 和 top。

   进程调度的命令有 at,crontab ,batch,kill。

===========================================================
34.当文件系统收到破坏时,如何检查和修复系统?

  成功修复文件系统的前提是要有两个以上的主文件系统,并保证在修复之前

首先卸载将被修复的文件系统。使用命令fsck对受到破坏的文件系统进行修复。
Fsck检查文件系统分为5步,每一步检查系统不同部分的连接特性并对上一步
进行验证和修改。在执行fsck命令时,检查首先从超级块开始,然后是分配的
磁盘块、路径名、目录的连接性、链接数目以及空闲块链表、i-node。
35.解释i节点在文件系统中的作用。
答:在linux文件系统中,是以块为单位存储信息的,为了找到某一个文件
在存储空间中存放的位置,用i节点对一个文件进行索引。
I节点包含了描述一个文件所必须的全部信息。所以i节点是文件系统管理的一个数据结构。
36.什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
答: 链接分为 符号链接 和 硬链接
符号链接可以建立对于文件和目录的链接。符号链接可以跨文件系统,
即可以跨磁盘分区。符号链接的文件类型位是I,链接文件具有新的i节点。
硬链接不可以跨文件系统。它只能建立对文件的链接,硬链接的文件类型位是一,

且硬链接文件的i节点同被链接文件的i节点相同。

37.简述网络文件系统NFS,并说明其作用。
答:网络文件系统是应用层的一种应用服务,它主要应用于LInux和linux系统、
Linux和Uinx系统之间的文件或目录的共享。对于用户而言可以
通过NFS方便的访问远地的文件系统,使之成为文件系统的一部分。
采用NFS之后省去了登录的过程,方便了用户访问系统资源。
一、简答题20道
1.简述Linux 文件系统通过i 节点把文件的逻辑结构和物理结构转换的工作过程。
参考答案:
Linux 通过i 节点表将文件的逻辑结构和物理结构进行转换。
i 节点是一个64 字节长的表,表中包含了文件的相关信息,其中有文件的大小、文件所有者、文件的存取许可方式以及文件的类型等重要信息。在i 节点表中最重要 的内容是磁盘地址表 。在磁盘地址表中有13 个块号,文件将以块号在磁盘地址表中出现的顺序依次读取相应的块。Linux 文件系统通过把i 节点和文件名进行 连接,当需要读取该文件时,文件系统在当前目录表中查找该文件名对应的项,由此得到该文件相对应的i 节点号,通过该i 节点的磁盘地址表把分散存放的文件物 理块连接成文件的逻辑结构。
2.简述进程的启动、终止的方式以及如何进行进程的查看。
参考答案:
在Linux 中启动一个进程有手工启动和调度启动两种方式:
(1)手工启动
用户在输入端发出命令,直接启动一个进程的启动方式。可以分为:
①前台启动:直接在SHELL 中输入命令进行启动。
②后台启动:启动一个目前并不紧急的进程,如打印进程。
(2)调度启动
系统管理员根据系统资源和进程占用资源的情况,事先进行调度安排,指定任务运行的时间和场合,到时候系统会自动完成该任务。
经常使用的进程调度命令为:at、batch、crontab。

  1. 简述DNS 进行域名解析的过程。
    参考答案:

首先,客户端发出DNS 请求翻译IP 地址或主机名。DNS 服务器在收到客户机的请求后:
(1)检查DNS 服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;
(3)若没有查到,则将请求发给根域DNS 服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS 服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。
(4)若没有找到,则返回错误信息。
4.系统管理员的职责包括那些?管理的对象是什么?
参考答案:
系统管理员的职责是进行系统资源管理、设备管理、系统性能管理、安全管理和系统性能监测。管理的对象是服务器、用户、服务器的进程及系统的各种资源等。
5.请写出apache2.X 版本的两种工作模式,以及各自工作原理。如何查看apache 当前所支持的模块,并且查看是工作在哪种模式下?
答案:prefork(多进程,每个进程产生子进程)和worker(多线程,每个进程生成多个线程)
prefork 的工作原理是,控制进程在最初建立―StartServers个子进程后,为了满足MinSpareServers 设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32 个,直到满足MinSpareServers 设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
worker 是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker 也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM 的工作方式将是Apache 2.0 的发展趋势。
可以通过命令httpd -l 可以查看apache 当前的模块,如果带有worker.c 就是工作在worker 模式下,如果有prefork.c 就是工作在prefork.c 的模式下。
6.什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
参考答案:
静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场合,且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化,当网络状况变化后必须由网络管理员修改路由表。动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动 学习 网络的拓朴结构,并更新路由表。其缺点是路由广播更新信息将占据大量的网络带宽。
7.进程的查看和调度分别使用什么命令?
参考答案:
进程查看的命令是ps 和top。
进程调度的命令有at,crontab,batch,kill。
8.当文件系统受到破坏时,如何检查和修复系统?
参考答案:
成功修复文件系统的前提是要有两个以上的主文件系统,并保证在修复之前首先卸载将被修复的文件系统。
使用命令fsck 对受到破坏的文件系统进行修复。fsck 检查文件系统分为5 步,每一步检查系统不同部分的连接特性并对上一步进行验证和修改。在执行 fsck 命令时,检查首先从超级块开始,然后是分配的磁盘块、路径名、目录的连接性、链接数目以及空闲块链表、i-node。
9.解释i 节点在文件系统中的作用。
参考答案:
在linux 文件系统中,是以块为单位存储信息的,为了找到某一个文件在存储空间中存放的位置,用i 节点对一个文件进行索引。I 节点包含了描述一个文件所必须的全部信息。所以i 节点是文件系统管理的一个数据结构。
10.什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
参考答案:
链接分硬链接和符号链接。
符号链接可以建立对于文件和目录的链接。符号链接可以跨文件系统,即可以跨磁盘分区。符号链接的文件类型位是l,链接文件具有新的i 节点。硬链接不可以跨文件系统。它只能建立对文件的链接,硬链接的文件类型位是-,且硬链接文件的i 节点同被链接文件的i 节点相同。
11.在对linux 系统分区进行格式化时需要对磁盘簇(或i 节点密度)的大小进行选择,请说明选择的原则。
参考答案:
磁盘簇(或i 节点密度)是文件系统调度文件的基本单元。磁盘簇的大小,直接影响系统调度磁盘空间效率。当磁盘分区较大时,磁盘簇也应选得大些;当分区较小时,磁盘簇应选得小些。通常使用经验值。
12.简述网络文件系统NFS,并说明其作用。
参考答案:
网络文件系统是应用层的一种应用服务,它主要应用于Linux 和Linux 系统、Linux 和Unix系统之间的文件或目录的共享。对于用户而言可以通过 NFS 方便的访问远地的文件系统,使之成为本地文件系统的一部分。采用NFS 之后省去了登录的过程,方便了用户访问系统资源。
13.某/etc/fstab 文件中的某行如下:
/dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2
请解释其含义。
参考答案:
(1)第一列:将被加载的文件系统名;
(2)第二列:该文件系统的安装点;
(3)第三列:文件系统的类型;
(4)第四列:设置参数;
(5)第五列:供备份程序确定上次备份距现在的天数;
(6)第六列:在系统引导时检测文件系统的顺序。
14.Apache 服务器的配置文件httpd.conf 中有很多内容,请解释如下配置项:
(1)MaxKeepAliveRequests 200 (2)UserDir public_html
(3)DefaultType text/plain (4)AddLanguare en.en
(5)DocumentRoot―/usr/local/httpd/htdocs‖
(6)AddType application/x-httpd-php.php.php.php4
参考答案:
(1)允许每次连接的最大请求数目,此为200;
(2)设定用户放置网页的目录;
(3)设置服务器对于不认识的文件类型的预设格式;
(4)设置可传送语言的文件给浏览器;
(5)该目录为Apache 放置网页的地方;
(6)服务器选择使用php4。
15.某Linux 主机的/etc/rc.d/rc.inet1 文件中有如下语句,请修正错误,并解释其内容。
/etc/rc.d/rc.inet1:
……
ROUTE add –net default gw 192.168.0.101 netmask 255.255.0.0 metric 1
ROUTE add –net 192.168.1.0 gw 192.168.0.250 netmask 255.255.0.0 metric 1
参考答案:
修正错误:
(1)ROUTE 应改为小写:route;(2)netmask 255.255.0.0 应改为:netmask255.255.255.0;
(3)缺省路由的子网掩码应改为:netmask 0.0.0.0;
(4)缺省路由必须在最后设定,否则其后的路由将无效。
解释内容:
(1)route:建立静态路由表的命令;(2)add:增加一条新路由;
(3)-net 192.168.1.0:到达一个目标网络的网络地址;
(4)default:建立一条缺省路由;(5)gw 192.168.0.101:网关地址;
(6)metric 1:到达目标网络经过的 路由器 数(跳数)。
16.试解释apache 服务器以下配置的含义:
(1)port 1080 (2)UserDir userdoc
(3)DocumentRoot ―/home/htdocs‖
(4);
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
deny from all
allow from 192.168.1.5
</Directory>;
(5)Server Type Standlone
参考答案:
Apache 服务器配置行含义如下:
(1)将apache 服务器的端口号设定为1080;
(2)设定用户网页目录为userdoc;
(3)设定apache 服务器的网页根目录:/home/htdocs;
(4)在此apache 服务器上设定一个目录/home/htdocs/inside,且此目录只允许IP 地
址为192.168.1.5 的主机访问;
(5)定义apache 服务器以独立进程的方式运行。
17.简述使用ftp 进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp 文件传输命令是什么?
参考答案:
(1)ftp 有两种登录方式:匿名登录和授权登录。使用匿名登录时,用户名为:anonymous,密码为:任何合法email 地址;使用授权登录时,用户名为用户在远程系统中的用户帐号,密码为用户在远程系统中的用户密码。
区别:使用匿名登录只能访问ftp 目录下的资源,默认配置下只能下载;而授权登录访问的权限大于匿名登录,且上载、下载均可。
(2)ftp 文件传输有两种文件传输模式:ASCII 模式和binary 模式。ASCII 模式用来传输文本文件,其他文件的传输使用binary 模式。
(3)常用的ftp 文件传输命令为:bin、asc、put、get、mput、mget、prompt、bye
18.将内网 192.168.0.0/24 的原地址修改为 公网IP地址:1.1.1.1
[root@xuegod63 ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
把从 eth0进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1.
[root@xuegod63 ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
19.简述raid0 raid1 raid5 三种工作模式的工作原理及特点。
RAID 0:连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的RAID 结构。RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合。
RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1 可以提高读取性能。RAID1 是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写 ,而不需要重组失效的数据。简单来说就是:镜象结构,类似于备份模式,一个数据被复制到两块硬盘上。
RAID10:高可靠性与高效磁盘结构一个带区结构加一个镜象结构,因为两种结构各有优缺点,因此可以相互补充。主要用于容量不大,但要求速度和差错控制的数据库中。
RAID5:分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。支持一块盘掉线后仍然正常运行
20.如何查看占用端口8080 的进程
lsof -i:8080
二、命令题20道

  1. 查看当前并发访问数
  2. -an | grep ESTABLISHED
  3. 如何用iptables工具阻断来自 192.168.0.1的所有网络连接
  4. -IINPUT -s 192.168.0.1 -jDROP
  5. umask 022 ,请描述该命令的含义
    umask设置文件或目录的缺省权限,umask022表示目录的缺省权限为755,文件的缺省权限为644
  6. 设置当前用户环境中 test变量为 123并使之立即生效,请写出完整操作命令
  7. test=123
  8. .Linux 系统的开机启动顺序
    加载BIOS>读取MBR>Boot Loader>加载内核>用户层init一句inittab文件来设定系统运行的等级(一般3或者5,3是多用户命令行,5是界面)>init进程执行rc.syninit>启动内核模块>执行不同级别运行的脚本程序>执行/etc/rc.d/rc.local(本地运行服务)>执行/bin/login,就可以登录了。
  9. ps aux 中的 VSZ代表什么意思,RSS代表什么意思
    VSZ:虚拟内存集,进程占用的虚拟内存空间

RSS:物理内存集,进程战用实际物理内存空间

  1. FTP 的主动模式和被动模式
    FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XX端口,你过来连接我”。于是服务器从20端口向客户端的 XX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来连接我”。于是客户端向服务器的XX端口 发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。

  1. Mysql客户端工具中,请问如何查询当前所有的连接进程信息
  2. -uuser -ppassword -e "showprocesslist"
  3. 查看当前系统每个ip的连接数
  4. -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -rn
  5. 在11月份内,每天的早上6点到12点,每隔2小时执行一次/usr/bin/httpd.sh怎么实现。
  6. 6-12/2 11 /usr/bin/httpd.sh
  7. 将 /test/a目录建立软链接到 /test/b目录,请写出完整的操作命令
  8. -s /test/a test/b
  9. 查询并列出 test进程所打开的当前所有文件,请写出完整的操作命令
  10. -c test
  11. 如何查看占用端口8080 的进程
  12. -anpt|grep 8080
  13. 什么叫主键?
    对表中数据进行唯一标识的数据列的组合;不能缺失;不能空值;
  14. 问题错误日志:Error: Can’t create a new thread (errno 12)应该怎么解决?
    数据库服务器问题,数据库操作无法创建新线程。一般是有以下3个方面的原因:

1)、MySQL 线程开得太多。
2)、服务器系统内存溢出。
3)、环境软件损坏或系统损坏。

  1. 操作报错:ERROR 1010 (HY000): Error dropping database。
    在做数据库删除时出现这种提示,其原因是在database下面含有自己放进去的文件,譬如.txt文件或.sql文件等,只要进去把这个文件删了在执行。
  2. 连接报错 [ERROR] Slave I/O: error connecting to master 'repl@192.168.0.50:3306' - retry-time: 60 retries: 1, Error_code: 2003。
    a、网络不通(是否打开防火墙)

b、复制用户的密码不对
c、指定的master_port端口不对
d、master上的mysql-bin.xxxxxx被误删
e、主库磁盘空间满了

  1. 什么叫数据的事务?
    事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。

事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。

  1. innodb引擎的4大特性
    1.插入缓冲(insert buffer)

2.二次写(double write)
3.自适应哈希索引(ahi)
4.预读(read ahead)

  1. 怎么对命令进行取别名?
  2. la='ls -a'

1、什么是 Redis?
Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
(1)Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(2)Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
(3)Redis 支持数据的备份,即 master-slave 模式的数据备份。
Redis 优势
(1)性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。
(2)丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。
(3)原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性。
(4)丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。
Redis 与其他 key-value 存储有什么不同?
(1)Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis 的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
(2)Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样 Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
2、Redis 的数据类型?
答:Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及 zsetsorted set:有序集合)。
我们实际项目中比较常用的是 string,hash 如果你是 Redis 中高级用户,还需要加上下面几种数据结构 HyperLogLog、Geo、Pub/Sub。
如果你说还玩过 Redis Module,像 BloomFilter,RedisSearch,Redis-ML,面试官得眼睛就开始发亮了。
3、使用 Redis 有哪些好处?
(1)速度快,因为数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是 O1)
(2)支持丰富数据类型,支持 string,list,set,Zset,hash 等
(3)支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4)丰富的特性:可用于缓存,消息,按 key 设置过期时间,过期后将会自动删除
4、Redis 相比 Memcached 有哪些优势?
(1)Memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类
(2)Redis 的速度比 Memcached 快很
(3)Redis 可以持久化其数据
5、Memcache 与 Redis 的区别都有哪些?
(1)存储方式 Memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis 有部份存在硬盘上,这样能保证数据的持久性。
(2)数据支持类型 Memcache 对数据类型支持相对简单。 Redis 有复杂的数据类型。
(3)使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
6、Redis 是单进程单线程的?
答:Redis 是单进程单线程的,redis 利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。
7、一个字符串类型的值能存储最大容量是多少?
答:512M

image
8、Redis 的持久化机制是什么?各自的优缺点?
Redis提供两种持久化机制 RDB 和 AOF 机制:
1、RDBRedis DataBase)持久化方式:
是指用数据集快照的方式半持久化模式)记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。
优点:
(1)只有一个文件 dump.rdb,方便持久化。
(2)容灾性好,一个文件可以保存到安全的磁盘。
(3)性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis的高性能)
(4)相对于数据集大时,比 AOF 的启动效率更高。
缺点:
数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
2、AOFAppend-only file)持久化方式:
是指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储)保存为 aof 文件。
优点:
(1)数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。
(2)通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。
(3)AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))
缺点:
(1)AOF 文件比 RDB 文件大,且恢复速度慢。
(2)数据集大的时候,比 rdb 启动效率低。
9、Redis 常见性能问题和解决方案:
(1)Master 最好不要写内存快照,如果 Master 写内存快照,save 命令调度 rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务
(2)如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步一次。
(3)为了主从复制的速度和连接的稳定性,Master 和 Slave 最好在同一个局域网
(4)尽量避免在压力很大的主库上增加从
(5)主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1<- Slave2 <- Slave3…这样的结构方便解决单点故障问题,实现 Slave 对 Master的替换。如果 Master 挂了,可以立刻启用 Slave1 做 Master,其他不变。
10、redis 过期键的删除策略?
(1)定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键的过期时间来临时,立即执行对键的删除操作。
(2)惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
(3)定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。
11、Redis 的回收策略(淘汰策略)?
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据
注意这里的 6 种机制,volatile 和 allkeys 规定了是对已设置过期时间的数据集淘汰数据还是从全部数据集淘汰数据,后面的 lru、ttl 以及 random 是三种不同的淘汰策略,再加上一种 no-enviction 永不回收的策略。
使用策略规则:
(1)如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用 allkeys-lru
(2)如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用allkeys-random
12、为什么 edis 需要把所有数据放到内存中?
答 :Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以 redis 具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘 I/O 速度为严重影响 redis 的性能。在内存越来越便宜的今天,redis 将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
13、Redis 的同步机制了解么?
答:Redis 可以使用主从同步,从从同步。第一次同步时,主节点做一次 bgsave,并同时将后续修改操作记录到内存 buffer,待完成后将 rdb 文件全量同步到复制节点,复制节点接受完成后将 rdb 镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。
14、Pipeline 有什么好处,为什么要用 pipeline?
答:可以将多次 IO 往返的时间缩减为一次,前提是 pipeline 执行的指令之间没有因果相关性。使用 redis-benchmark 进行压测的时候可以发现影响 redis 的 QPS峰值的一个重要因素是 pipeline 批次指令的数目。
15、是否使用过 Redis 集群,集群的原理是什么?
(1)Redis Sentinal 着眼于高可用,在 master 宕机时会自动将 slave 提升为master,继续提供服务。
(2)Redis Cluster 着眼于扩展性,在单个 redis 内存不足时,使用 Cluster 进行分片存储。
16、Redis 集群方案什么情况下会导致整个集群不可用?
答:有 A,B,C 三个节点的集群,在没有复制模型的情况下,如果节点 B 失败了,那么整个集群就会以为缺少 5501-11000 这个范围的槽而不可用。
17、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
答:Redisson、Jedis、lettuce 等等,官方推荐使用 Redisson。
18、Jedis 与 Redisson 对比有什么优缺点?
答:Jedis 是 Redis 的 Java 实现的客户端,其 API 提供了比较全面的 Redis 命令的支持;Redisson 实现了分布式和可扩展的 Java 数据结构,和 Jedis 相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等 Redis 特性。
Redisson 的宗旨是促进使用者对 Redis 的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。
19、Redis 如何设置密码及验证密码?
设置密码:config set requirepass 123456
授权密码:auth 123456
20、说说 Redis 哈希槽的概念?
答:Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。

image
21、Redis 集群的主从复制模型是怎样的?
答:为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有 N-1 个复制品.
22、Redis 集群会有写操作丢失吗?为什么?
答 :Redis 并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。
23、Redis 集群之间是如何复制的?
答:异步复制
24、Redis 集群最大节点个数是多少?
答:16384 个。
25、Redis 集群如何选择数据库?
答:Redis 集群目前无法做数据库选择,默认在 0 数据库。
26、怎么测试 Redis 的连通性?
答:使用 ping 命令。
27、怎么理解 Redis 事务?
答:
(1)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
(2)事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
28、Redis 事务相关的命令有哪几个?
答:MULTI、EXEC、DISCARD、WATCH
29、Redis key 的过期时间和永久有效分别怎么设置?
答:EXPIRE 和 PERSIST 命令。
30、Redis 如何做内存优化?
答:尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的 web 系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的 key,而是应该把这个用户的所有信息存储到一张散列表里面。
31、Redis 回收进程如何工作的?
答:一个客户端运行了新的命令,添加了新的数据。Redi 检查内存使用情况,如果大于 maxmemory 的限制, 则根据设定好的策略进行回收。一个新的命令被执行,等等。所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。
32、都有哪些办法可以降低 Redis 的内存使用情况呢?
答:如果你使用的是 32 位的 Redis 实例,可以好好利用 Hash,list,sorted set,set等集合类型数据,因为通常情况下很多小的 Key-Value 可以用更紧凑的方式存放到一起。
33、Redis 的内存用完了会发生什么?
答:如果达到设置的上限,Redis 的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以将 Redis 当缓存来使用配置淘汰机制,当 Redis 达到内存上限时会冲刷掉旧的内容。
34、一个 Redis 实例最多能存放多少的 keys?List、Set、Sorted Set 他们最多能存放多少元素?
答:理论上 Redis 可以处理多达 232 的 keys,并且在实际中进行了测试,每个实例至少存放了 2 亿 5 千万的 keys。我们正在测试一些较大的值。任何 list、set、和 sorted set 都可以放 232 个元素。换句话说,Redis 的存储极限是系统中的可用内存值。
35、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?
答:Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。
相关知识:Redis 提供 6 种数据淘汰策略:
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据
36、Redis 最适合的场景?
1、会话缓存(Session Cache)
最常用的一种使用 Redis 的情景是会话缓存(session cache)。用 Redis 缓存会话比其他存储(如 Memcached)的优势在于:Redis 提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗? 幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用 Redis 来缓存会话的文档。甚至广为人知的商业平台Magento 也提供 Redis 的插件。
2、全页缓存(FPC)
除基本的会话 token 之外,Redis 还提供很简便的 FPC 平台。回到一致性问题,即使重启了 Redis 实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似 PHP 本地 FPC。 再次以 Magento 为例,Magento提供一个插件来使用 Redis 作为全页缓存后端。 此外,对 WordPress 的用户来说,Pantheon 有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。
3、队列
Reids 在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得 Redis能作为一个很好的消息队列平台来使用。Redis 作为队列使用的操作,就类似于本地程序语言(如 Python)对 list 的 push/pop 操作。 如果你快速的在 Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用 Redis 创建非常好的后端工具,以满足各种队列需求。例如,Celery 有一个后台就是使用 Redis 作为 broker,你可以从这里去查看。
4,排行榜/计数器
Redis 在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis 只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的 10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可: 当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES Agora Games 就是一个很好的例子,用 Ruby 实现的,它的排行榜就是使用 Redis 来存储数据的,你可以在这里看到。
5、发布/订阅
最后(但肯定不是最不重要的)是 Redis 的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用 Redis 的发布/订阅功能来建立聊天系统!

image
37、假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?
答:使用 keys 指令可以扫出指定模式的 key 列表。
对方接着追问:如果这个 redis 正在给线上的业务提供服务,那使用 keys 指令会有什么问题?
这个时候你要回答 redis 关键的一个特性:redis 的单线程的。keys 指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用 scan 指令,scan 指令可以无阻塞的提取出指定模式的 key 列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用 keys 指令长。
38、如果有大量的 key 需要设置同一时间过期,一般需要注意什么?
答:如果大量的 key 过期时间设置的过于集中,到过期的那个时间点,redis 可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。
39、使用过 Redis 做异步队列么,你是怎么用的?
答:一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep 一会再重试。如果对方追问可不可以不用 sleep 呢?list 还有个指令叫 blpop,在没有消息的时候,它会阻塞住直到消息到来。如果对方追问能不能生产一次消费多次呢?使用 pub/sub 主题订阅者模式,可以实现1:N 的消息队列。
如果对方追问 pub/sub 有什么缺点?
在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如 RabbitMQ等。
如果对方追问 redis 如何实现延时队列?
我估计现在你很想把面试官一棒打死如果你手上有一根棒球棍的话,怎么问的这么详细。但是你很克制,然后神态自若的回答道:使用 sortedset,拿时间戳作为score,消息内容作为 key 调用 zadd 来生产消息,消费者用 zrangebyscore 指令获取 N 秒之前的数据轮询进行处理。到这里,面试官暗地里已经对你竖起了大拇指。但是他不知道的是此刻你却竖起了中指,在椅子背后。
40、使用过 Redis 分布式锁么,它是什么回事?
先拿 setnx 来争抢锁,抢到之后,再用 expire 给锁加一个过期时间防止锁忘记了释放。
这时候对方会告诉你说你回答得不错,然后接着问如果在 setnx 之后执行 expire之前进程意外 crash 或者要重启维护了,那会怎么样?这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得 set 指令有非常复杂的参数,这个应该是可以同时把 setnx 和expire 合成一条指令来用的!对方这时会显露笑容,心里开始默念:摁,这小子还不错。

1.Nginx 是如何实现并发的?
2.为什么 Nginx 不使用多线程?
3.Nginx常见的优化手段有哪些?
4.502错误可能原因有哪些?

  1. Nginx 是如何实现高并发的?
    nginx采用一个master进程,多个woker进程的模式。

• master进程主要负责收集、分发请求。每当一个请求过来时,master就拉起一个worker进程负责处理这个请求。
• 同时master进程也负责监控woker的状态,保证高可靠性
• woker进程一般设置为跟cpu核心数一致。nginx的woker进程在同一时间可以处理的请求数只受内存限制,可以处理多个请求。
Nginx 的异步非阻塞工作方式正把当中的等待时间利用起来了。在需要等待的时候,这些进程就空闲出来待命了,因此表现为少数几个进程就解决了大量的并发问题。

image.png
过程:每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker很聪明,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。

  1. 为什么 Nginx 不使用多线程?
    Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会耗光服务器资源。

Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),考虑到高并发,所以不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发。

  1. Nginx常见的优化配置有哪些?
    (1) 调整worker_processes

指Nginx要生成的worker数量,最佳实践是每个CPU运行1个工作进程。
了解系统中的CPU核心数,输入
grep processor /proc/cpuinfo|wc -l

(2) 最大化worker_connections
Nginx Web服务器可以同时提供服务的客户端数。与worker_processes结合使用时,获得每秒可以服务的最大客户端数
最大客户端数/秒=工作进程*工作者连接数
为了最大化Nginx的全部潜力,应将工作者连接设置为核心一次可以运行的允许的最大进程数1024。
(3) 启用Gzip压缩
压缩文件大小,减少了客户端http的传输带宽,因此提高了页面加载速度
建议的gzip配置示例如下:( 在http部分内)

image.png
(4) 为静态文件启用缓存
为静态文件启用缓存,以减少带宽并提高性能,可以添加下面的命令,限定计算机缓存网页的静态文件:
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
(5) Timeouts
keepalive连接减少了打开和关闭连接所需的CPU和网络开销,获得最佳性能需要调整的变量可参考:

image.png
(6) 禁用access_logs
访问日志记录,它记录每个nginx请求,因此消耗了大量CPU资源,从而降低了nginx性能。
完全禁用访问日志记录
access_log off;

如果必须具有访问日志记录,则启用访问日志缓冲
access_log /var/log/nginx/access.log主缓冲区= 16k

  1. 502报错可能原因有哪些?
  2. Bad Gateway是指错误网关,无效网关

检查:
(1) FastCGI进程是否已经启动
(2) FastCGI worker进程数是否不够
(3) FastCGI执行时间过长
(4) FastCGI Buffer不够
nginx和apache一样,有前端缓冲限制,可以调整缓冲参数
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;

(5) Proxy Buffer不够
如果你用了Proxying,调整
proxy_buffer_size 16k;
proxy_buffers 4 16k;

(6) php脚本执行时间过长
将php-fpm.conf的
<value name="request_terminate_timeout">0s</value>

0s改成一个时间
TCP/IP三次握手四次挥手常见面试题

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
【问题3】为什么不能用两次握手进行连接?
答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
【问题4】如果已经建立了连接,但是客户端突然出现故障了怎么办?
答:TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

1 请升级当前操作系统内核,并使用新内核启动。
1.rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org #安装公钥
2.yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm #安装ELRepo
3.yum update #执行系统依赖更新操作
4.yum --disablerepo="*" --enablerepo="elrepo-kernel" list available #搜索可用的内核版本
5.yum --enablerepo=elrepo-kernel install kernel-ml #安装kernel-ml
2 apache都安装什么模块? nginx都安装了什么模块? nginx怎么不安装默认的模块

nginx -V
--without
3 crontab中用什么命令定义某个程序执行的优先级别
4 请将你虚拟机网卡添加子接口 要求1个网卡2个IP 192.168.X.X和192.168.X.X+1
5 top命令可以看平均负载的有3个数字,这3个数字分别代表多少时间?这3个数字除了可以用top命令查看,还可以再哪里看到?
1 5 15 uptime iostat
6 DNS原理?Dns用的是什么协议,TCP还是UDP? 什么时候用TCP 什么时候用UDP? DNS用多少端口??
dns有两个情况,一种是区域传输,一种是域名解析

1.区域传输时,一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息,传输协议是tcp。

2.域名解析时,首选的通讯协议是udp

使用udp传输,不用经过TCP三次握手,这样DNS服务器负载更低,响应更快

但是当域名解析的反馈报文的长度超过512字节时,将不能使用udp协议进行解析,此时必须使用tcp
7 DNS 有什么记录都?
8 软连接和硬链接区别?(ln -s 和 ln)
软链接:ln -s 源文件 目标文件
硬链接:ln 源文件 目标文件
软链接会创建一个新的inode节点号,能够跨分区查找,删除源文件后就失去了作用
硬链接并不会创建一个新的节点号,而是两个链接指向两个不同的源文件,删除其中一个源文件,其他一个还是会生效的

9 ftp分哪两种工作模式,客户端使用什么命令下载 上传 下载到指定目录?
10 从你在浏览器中输入一个网址,到你完全获取这个网页,dns解析在这过程经过那些步骤,假设本机没有缓存

11用户反映访问网站慢 你怎么办?
首先自己打开一下网站,确认是我们这边的问题还是客户端的问题
如果是自己这边的问题
1.调试网络看各种数据的加载速度
2.查看服务器硬件,cpu,mem等负载情况
3.最后检查程序代码问题
如果是客户端问题
1.加带宽
2.mysql语句优化
3.使用非关系型数据库,如redis
4.弄一个CDN服务器
12 手动轮转/var/log/yum.log 文件 要求每天轮转一次,保留4天的内容
配置/etc/logrotate.d/yum
daily
rotate 4
13 统计出登陆成功的3个IP 和登陆失败的5个IP
14 查找系统内所有.gz结尾的文件并备份到/tmp/backup目录下
find / -name "*.gz" -exec tar -cf {} /tmp/backup ;
15 查找10天以内被修改过的.txt结尾的文件
find / -mtime -10 -name "*.txt"
16 查找系统内所有镜像文件的位置,并把他们的位置记录在/iso.txt文件内 .iso
17 把etc目录打包压缩备份到/tmp目录下,备份文件的名称内包含备份日期和时间(具体时间)
tar -cf /tmp/$(date +%Y%m%d).tar.gz /etc
18 将/etc/passwd中的用户按UID大小排序
cat /etc/passwd | sort -t: -k3 -n
19七层模型都是什么
从下往上,物理层-->数据链路层-->网络层-->传输层-->会话层-->表示层-->应用层
20 二层交换机中配置了多个VLAN。上行接口需要配置成(trunk)模式 能让所有VLAN与上层设备互通
21 实现两台机器的免密登陆
各自生成一个公钥,再将自己的公钥分发到需要免密登录的客户端上
ssh-keygen
ssh-copy-id IP
22 简述(可画图)TCP三次握手 四次断开
23 设置FTP服务器的开机自启 实现用户可以随时下载与上传
24 Linux内核引导时,从文件 () 中读取要加载的文件系统
/etc/fstab
/etc/fstab 文件负责配置Linux开机时自动挂载的分区

25 现在给你五百台服务器,你怎么对他们进行管理? 注意是管理,不是搭建服务及架构。
cmdb管理
26 多核CPU和单核CPU的优点和缺点,是否所有程序在多核CPU上运行速度都快?为什么?
单核cpu:
优点:处理单线程速度快
缺点: 处理多个进程时速度慢,没有冗余

多核cpu:
优点:多进程 能同时处理很多任务量 冗余功能
缺点 功耗较大 需要特定平台支持 需要大容量内存跟进
27 将/home/tong/test 目录下大于100K的文件转移到/tmp目录 注意是文件。
find /home/tong/test -type f -size +100k -exec cp -rvf {} /tmp ;
28 写一条192.168.10.0网段从网关192.168.10.1出去的路由
route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.10.1
29 假如您需要找出 /etc/my.conf 文件属于哪个包 (package) ,您可以执行:
rpm -qf /etc/my.cnf
30 为什么要有swap分区?工作原理是什么?
当我们的系统物理内存不足时,我们就需要释放一部分来空间以供当前程序来运行,那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
31 如何看当前Linux系统有几颗物理CPU和每颗CPU的核数?
cat /proc/cpuinfo|grep -c 'physical id' cat /proc/cpuinfo|grep -c 'processor'
32 给您一台最小化安装的linux机器,如何进行基础优化?
这个题目见仁见智,自己想怎样优化就怎样优化,合理即可
1配置网卡

!/bin/bash

修改网卡名为eth0、eth1形式

sed -i "/linux16.*$/s//& net.ifnames=0 biosdevname=0/g" /boot/grub2/grub.cfg

删除原网卡名对应配置文件

rm -rf /etc/sysconfig/network-scripts/ifcfg-ens*

为eth0配置静态IP

echo -n "Enter the IPaddress:"
read IPaddress
echo -n "Enter the NETMASK:"
read NETMASK
echo -n "Enter the GATEWAY:"
read GATEWAY
echo -n "Enter the DNS1:"
read DNS1
nmcli connection add con-name eth0 ifname eth0 connection.autoconnect yes \
ipv4.method manual ipv4.addresses $IPaddress/$NETMASK \
ipv4.gateway $GATEWAY ipv4.dns $DNS1 type ethernet

设置主机名

echo -n "Enter the hostname:"
read hostname
hostnamectl set-hostname $hostname

把该主机域名写入hosts文件

echo "$IPaddress $hostname">>/etc/hosts
reboot

2配置环境

!/bin/bash

修改普通用户进程数限制(根据需要修改)

sed -i "s/4096/65535/g" /etc/security/limits.d/20-nproc.conf

修改systemd service进程数限制(根据需要修改)

sed -i "s/#DefaultLimitNPROC=/DefaultLimitNPROC=65535/g" /etc/systemd/system.conf

系统总句进程数默认足够(有需要可修改)

echo "kernel.pid_max = 655350" >> /etc/sysctl.conf

修改单进程句柄数限制

修改systemd service的单进程句柄数(根据需要修改)

sed -i "s/#DefaultLimitNOFILE=/DefaultLimitNOFILE=65535/g" /etc/systemd/system.conf

修改普通用户单进程句柄数限制(根据需要修改)

echo "* soft nofile 65535">>/etc/security/limits.conf
echo "* hard nofile 65535">>/etc/security/limits.conf

修改系统总句柄数限制(根据需要修改)

echo 655350 > /proc/sys/fs/file-max

修改每个端口最大监听队列的长度(程序负载越大,需修改该数值越大,默认128)

echo "net.core.somaxconn = 5120">>/etc/sysctl.d/99-sysctl.conf

最大tcp半链接数,调大可防synflood攻击,默认1024

echo "net.ipv4.tcp_max_syn_backlog = 10240">>/etc/sysctl.d/99-sysctl.conf

关闭Selinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

让历史命令显示时间

echo "export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]"">>/etc/profile
echo "export HISTSIZE=5000">>/etc/profile
echo "export HISTIGNORE="ls:ls -lrt:ls -al:clear:pwd"">>/etc/profile

设置时区为上海

rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

修改yum源**

yum install -y wget

添加epel源

yum -y install epel-release

备份原yum仓库

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

添加163源

cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

重建缓存

yum clean all
yum makecache

更新系统

yum -y update

时间同步

yum -y install ntp ntpdate
systemctl enable ntpd
systemctl start ntpd

安装RPM增量包套件,在更新rpm包时,可以只更新增量内容与旧rpm包合成新包使用,可以减少下载量

yum install -y deltarpm

其他常用RPM包:GCC编译器、perl库、zlib库、OpenSSL开发库、vim编辑器、命令补全工具

yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel vim bash-completion
reboot
33 使用命令 ,32 位数字随机密码生成。
< /dev/urandom tr -dc a-z|head -c ${1:-32} ; echo
;为命令的顺序执行,&&逻辑与 echo空格换行

生成10个大写字母
< /dev/urandom tr -dc A-Z|head -c ${1:-10};echo

生成10个数字
< /dev/urandom tr -dc 0-9|head -c ${1:-10};echo

生成10个数字和大写字母的组合字符串
< /dev/urandom tr -dc 0-9-A-Z|head -c ${1:-10};echo
34 Linux系统中病毒怎么解决? 请安装linux杀毒,并且定时更新病毒库。
yum epel-release
yum install clamd -y
35 你是如何防黑客入侵、安全防护?
1、账号和口令
1、减少系统无用账号,降低安全风险。
使用命令 userdel <用户名> 删除不必要的账号。
使用命令 passwd -l <用户名> 锁定不必要的账号。
使用命令 passwd -u <用户名> 解锁必要的账号。

2、检查是否有特殊帐号存在
查看空口令和root权限账号,确认是否存在异常账号:

使用命令 awk -F: '($2=="")' /etc/shadow 查看空口令账号。
使用命令 awk -F: '($3==0)' /etc/passwd 查看UID为零的账号。

加固空口令账号:

使用命令 passwd <用户名> 为空口令账号设定密码。
确认UID为零的账号只有root账号。

3、添加口令策略
使用命令 vi /etc/login.defs 修改配置文件。

PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数

使用chage命令修改用户设置。

例如,chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>表示将此用户的密码最长使用天数设为30,最短使用天数设为0,密码2000年1月1日过期,过期前七天警告用户。

设置连续输错三次密码,账号锁定五分钟。

使用命令 vi /etc/pam.d/common-auth修改配置文件,在配置文件中添加 auth required pam_tally.so onerr=fail deny=3 unlock_time=300。

4、限制能su到root的用户
1.使用命令 vi /etc/pam.d/su修改配置文件,在配置文件中添加行。

例如,只允许test组用户su到root,则添加 auth required pam_wheel.so group=test。

2、ssh 服务安全
ssh暴力破解被使用的攻击次数最多,所以应该尽可能的防止,对SSH服务进行安全加固,防止暴力破解成功

使用命令 vim /etc/ssh/sshd_config 编辑配置文件。

不允许root账号直接登录系统。
设置 PermitRootLogin 的值为 no。

修改SSH使用的协议版本。
设置 Protocol 的版本为 2。

修改允许密码错误次数(默认6次)。
设置 MaxAuthTries 的值为 3。

配置文件修改完成后,重启sshd服务生效

3、文件系统防护
1、设置umask值=027
使用命令 vi /etc/profile 修改配置文件,添加行 umask 027, 即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限

2、设置登录超时
设置系统登录后,连接超时时间,增强安全性。

使用命令 vi /etc/profile 修改配置文件,将以 TMOUT= 开头的行注释,设置为TMOUT=180,即超时时间为三分钟

4、启用日志
Linux系统默认启用以下类型日志

系统日志(默认)/var/log/messages
cron日志(默认)/var/log/cron
安全日志(默认)/var/log/secure

记录所有用户的登录和操作日志

vim /etc/profile # 打开配置文件

修改配置文件

history
USER=whoami
USER_IP=who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'
if [ "$USER_IP" = "" ]; then
USER_IP=hostname
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chmod 300 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=date +"%Y%m%d_%H:%M:%S"
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/history 2>/dev/null

source /etc/profile # 加载配置生效

/var/log/history 是记录日志的存放位置,可以自定义

36 安装Linux系统对硬盘分区时,有两种分区类型:
(/) 和 (swap)
37 说明在什么情况下,会收到以下ping请求返回的结果。
Request timed out:

响应超时ping的地址不存在 或者网络无连接, 网线故障,
38 查看/var/log目录下的文件数?
find /var/log -type f |wc -l
39 内核分为 () 、 ()、 () 和() 等四个子系统
进程管理系统,内存管理系统,I/O管理系统,文件管理系统
40 OSI 7层模型 每一层有什么协议

41 查看当前编译安装nginx的版本及安装了什么模块
nginx -v
rpm -ql nginx
42 nginx在生产下用单进程 还是多进程工作??为什么?
nginx 是多进程. 一个主进程管理多个worker子进程

43 请说说并且优化一下nginx(附加) 最后
44 说说你以前公司的架构?说说你所知道的架构
45 说说你以后的职业规划
46 当前系统为ext4 请修复sda2分区。 如果系统为XFS文件系统 请修复sda5分区
47 查看当前httpd服务是否安装。 rpm包怎么卸载?
48 yum 安装和 rpm安装有什么区别?
49 搭建lnmp 实现wordpress
(提示nginx配置文件php要去#) 主要是LNMP 最后做
50 网站压力测试使用过什么命令?
(提示ab命令)[root@zhaohan ~]# yum install -y httpd-tools[root@zhaohan ~]# ab -c 10 -n 1000 http://www.baidu.com/ 指定并请求数为10,总请求数为1000,对http://www.baidu.com/进行压力测试
1、NAT和PAT的区别
NAT的分为:静态NAT、动态NAT、端口NAT(PAT)。
静态NAT:内部网络中的每个主机都被永久的映射成外部网络中的某个合法地址;
动态NAT:在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络;
PAT:是人们比较熟悉的一种转换方式。PAT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。PATT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。也就是采用portmultiplexing技术,或改变外出数据的源port的技术将多个内部ip地址映射到同一个外部地址。
网络地址转换(NAT)是一个Internet工程任务组(InternetEngineeringTaskForce,IETF)标准,用于允许专用网络上的多台PC(使用专用地址段,例如10.0.x.x、192.168.x.x、172.x.x.x)共享单个、全局路由的IPv4地址。IPv4地址日益不足是经常部署NAT的一个主要原因。WindowsXP和WindowsMe中的"Internet连接共享"及许多Internet网关设备都使用NAT,尤其是在通过DSL或电缆调制解调器连接宽带网的情况下。
NAT对于解决IPv4地址耗费问题(在IPv6部署中却没必要)尽管很有效,但毕竟属于临时性的解决方案。这种IPv4地址占用问题在亚洲及世界其他一些地方已比较严重,且日渐成为北美地区需要关注的问题。这就是人们为什么长久以来一直关注使用IPv6来克服这个问题的原因所在。
除了减少所需的IPv4地址外,由于专用网络之外的所有主机都通过一个共享的IP地址来监控通信,因此NAT还为专用网络提供了一个隐匿层。NAT与防火墙或代理服务器不同,但它确实有利于安全。
2、NAT使用的几种情况:
1.连接到INTERNE,但却没有足够的合法地址分配给内部主机;
2.更改到一个需要重新分配地址的ISP;
3.有相同的IP地址的两个INTRANET合并;
4.想支持负载均衡(主机);
3、NAT有4种用法:
1.TRANSLATION INSIDE LOCALADDRESS-----------将内部地址一对一的翻译成外部地址;
2.OVER LOADING INSIDE GLOBAL ADDRESS---------将内部地址多对一的翻译成外部地址,通过地址加端口号的方式区别不同的本地地址。这种方式就是所谓的PAT/color:43aa144927;
3.TCP LOAD DISTRIBUTING----提供在多个、利用率高的主机之间进行负载分担的方法;
4.HANDLING OVER LAPPING NETWORK----这种方法主要用于两个INTRANET的互联.
NAT的地址转换是指每个内网地址都被转换成ip地址+源端口的方式,这需要公网ip地址为多个。
而PAT由于ip地址不足够,就会出现内网地址被转换成ip地址+端口段的形式,这样的公网ip地址通常只是一个。
举个例子:
NAT PAT
192.168.0.2:4444----〉202.116.100.5:4444 192.168.0.2:4444----〉202.116.100.5:50003
192.168.0.3:5555----〉202.116.100.6:5555 192.168.0.3:5555----〉202.116.100.5:50004
192.168.0.10:1233---〉202.116.100.5:1233 192.168.0.10:1233---〉202.116.100.5:50005
简单来说,PAT―多对1,nat―多对多.
4、 解压acces.gz文件至access.log,保持源文件不删除解压:
Cp access.gz/access.log/access1.gz cd/access.log gzip-daccess1.gz
5、若一台计算机的内存为128M,则交换分区的大小通常是_1.5到2倍;256M_。
6、简述raid0、raid1、raid5三种工作模式的工作原理及特点
raid0:条带卷,利用率100%,相对读写速率最快,相对安全性差。数据随机存入到阵列中的一个磁盘上。同时从2块磁盘读数据;读速度与raid1相差不多;
raid1:镜像卷,使用率50%,相对读写速率一般,相对安全性高。最少2块磁盘组成,数据同时存入到两块磁盘上。同时从2块磁盘读数据;写速度会比raid0慢;
raid5:带奇偶校验的镜像卷,相对读写速率较快,相对安全性高可以添加热被磁盘作为冗余。
7、将/usr/local/test目录下大于100k小于500k的文件转移到/tmp目录下
Find /usr/local/test -size +100k -a -size -500k -exec mv {}/tmp;
8、软链接和硬链接的区别:
硬链接不会创建新的inode,只是给源文件多加了一个文件名 软链接创建新的inode,相当于重新创建了一个文件
硬链接不能跨分区 软链接可以跨分区
硬链接删除源文件后,另一个文件还能用 软链接删除源文件后,链接文件不能再使用
9、ps aux中的VSZ代表什么意思?RSS代表什么意思?
VSZ:虚拟内存集,进程占用的虚拟内存空间
RSS:物理内存集,进程战用实际物理内存空间.
10、保存当前磁盘分区的分区表,dd命令是个强大的命令,在复制的同时进行转换,请写出具体命令 **
Dd if=/dev/sda of=./mbr.txt bs=1M count=512
11、6块300G的硬盘做raid5,新的设备容量是多大?
由于RAID5磁盘阵列兼顾了安全性和速度,所以有一块磁盘是要被用作安全备份区的,所以6块300G的磁盘实际使用到的只有5块5*300=1500G
12、显示网络接口常见命令是:ifconfig或者ipa;查看服务端口的命令是:ss-anptul
Linux操作系统查看当前网络设备命令为:ipa,将当前计算机的IP地址设为192.168.1.10,子网掩码为255.255.255.0命令为:ifconfigeth0192.168.1.10netmask255.255.255.0
Linux查看当前主机TCP协议连接情况的命令为:ss-antpl
Linux操作系统查看/etc/passwd文件前10行的命令为:head-10/etc/passwd;将前10行追加到/etc/passwd_new文件结尾的命令是:head-10/etc/passwd>>/etc/passwd_new。
Linux操作系统启动服务名为kstoredb_NODEDBd的命令为:systemctl start kstoredb_NODEDBd;Windows系统启动服务名为kstoredb_NODEDBd的命>令为:netstart kstoredb_NODEDBd
13、假设服务器具有6块900G本地磁盘,单块磁盘IO约为150M/S,现对磁盘进行RAID划分,简述理论上6块盘做成RAID5级别后实>际存储大小、实际IO为多少? **
理论上6块硬盘做raid5;其中有一块盘做冗余;因为有校验位;所以
实际大小是900*(6-2)=4000G
实际IO是:写的速率150m/s(小于。理论上写过程中,RAID5会进行校验耗费时间)*4=600m/s
因为读取数据的时候校验位的盘是需要读取的所以实际:读的速率是(6-1)*150=750m/s
14、问:请简要描述Linux系统下源代码编译方式安装软件的大致步骤
1.部署基础环境:关闭防火墙;关闭selinux;安装编译器
2.下载、解压软件包
3、配置安装路径
4、编译
5、安装
15、问:列出当前系统中所有的网络连接(包含进程名),请写出完整操作命令
netstat-anputl -t TCP -l监听 -a所有 -u UDP -n显示端口号和IPppid
16、实时抓取并显示当前系统中tcp80端口的网络数据信息,请写出完整操作命令 tcpdump -n tcpport80(tcpdump -i ens33 'tcp port 80')
17、问:linux中你常用的系统命令说5个 ls、cat、mkdir、useradd、touch、pwd
18、问:关闭swap分区
Swapoff -a关闭所有的交换分区 swapoff /dev/sde关闭sde交换分区
19、问:kernel调参
linux内核参数调整说明
所有的TCP/IP调优参数都位于/proc/sys/net/目录。例如,下面是最重要的一些调优参数,后面是它们的含义:
1./proc/sys/net/core/rmem_max---最大的TCP数据接收缓冲。
2./proc/sys/net/core/wmem_max---最大的TCP数据发送缓冲。
3./proc/sys/net/ipv4/tcp_timestamps---时间戳在(请参考RFC1323)TCP的包头增加12个字节。
4./proc/sys/net/ipv4/tcp_sack---有选择的应答。
5./proc/sys/net/ipv4/tcp_window_scaling---支持更大的TCP窗口.如果TCP窗口最大超过65535(64KB),必须设置该数值为1。
6.rmem_default---默认的接收窗口大小。
7.rmem_max---接收窗口的最大大小。
8.wmem_default---默认的发送窗口大小。
9.wmem_max---发送窗口的最大大小。
/proc目录下的所有内容都是临时性的,所以重启动系统后任何修改都会丢失。
建议在系统启动时自动修改TCP/IP参数:
把下面代码增加到/etc/rc.local文件,然后保存文件,系统重新引导的时候会自动修改下面的TCP/IP参数:
echo256960>/proc/sys/net/core/rmem_default
echo256960>/proc/sys/net/core/rmem_max echo256960>/proc/sys/net/core/wmem_default
echo256960>/proc/sys/net/core/wmem_max echo0>/proc/sys/net/ipv4/tcp_timestamps
echo1>/proc/sys/net/ipv4/tcp_sack echo1>/proc/sys/net/ipv4/tcp_window_scaling
TCP/IP参数都是自解释的,TCP窗口大小设置为256960,禁止TCP的时间戳(取消在每个数据包的头中增加12字节),支持更大的TCP窗口和TCP有选择的应答。
20、问:系统安全加固
1.密码策略 修改系统的密码策略1)经常修改密码2)使用一些特殊的字符和密码的长度增加密码的难度 3)不要随便告诉他人密码
2.权限ugo锁定系统中不必要的系统用户和组 锁定下列用户,锁定之前备份/etc/passwd和/etc/shadow文件 禁用无关的组 禁止root用户远程登录
3.预防flood攻击linux中预防SYNflood.在/etc/sysctl.conf文件中添加net.ipv4.tcp_syncookies=1
4.加固TCP/IP协议设置/etc/sysctl.conf文件相应权限
5.默认权限与umask不要修改正确的umask值022
6.做任何修改文件的动作先备份再做操作
21、问:硬件性能测试用过什么
对IO进行简单测试dd if=/dev/zero of=testbs=1M count=4096
用top和iostat查看wa%及写硬盘速度top-n1每秒钟的cpu
通过df-h命令查看磁盘情况通过hdparm测试读取速率hdparm-t/dev/sda
linux中几块盘求平均值就是磁盘的平均读取速率
22、问:硬件报错能不能看懂 看BIOS
23、问:临时调整和永久生效系统内核参数在哪里调
1.临时调整内核参数
开启内核路由转发功能,通过01设置开关 #echo"1">/proc/sys/net/ipv4/ip_forward
禁止所有的icmp回包(禁止其他主机ping本机) #echo"1">/proc/sys/net/ipv4/icmp_echo_ignore_all
调整所有进程可以打开的文件总数ps:如果大量用户访问时,可以因为该数字太小而导致错误

echo"108248">/proc/sys/fs/file-max

2.永久调整内核参数 vim/etc/sysctl.conf
开启内核路由转发功能,通过01设置开关 net.ipv4.ip_forward=1
禁止所有的icmp回包(禁止其他主机ping本机) net.ipv4.icmp_echo_ignnore_all-=1
调整所有进程可以打开的文件总 fs.file-max=108248
24、问:如何查看当前linux系统的状态,如CPU使用,内存使用,负载情况
sar综合命令 mpstat11cpu监测 free-m内存使用 top负载
25、问:显示CPU利用率的命令,查看系统版本的命令
CPU利用率的命令:top或sar
查看系统版本的命令:cat/etc/redhat-release或uname-a
26、问:查看网卡历史流量实时查看网卡流量
网卡历史流量:sar-nDEV-f/var/log/sa/saxx#查看xx日的网卡流量历史
实时查看网卡流量:sar-nDEV15(每间隔1秒刷新一次,共5次)
27、问:如何查看当前系统每个ip的连接数
Netstat -n |awk'/^tcp/{print$5}'|awk -F: '{print$1}'|sort| uniq-c
28、问:找出/home下所有7天以前,以.ok结尾的文件列
Find /home -name "*.ok" -mtime +7
29、问:快速生成一个10G的文件
Dd if=/dev/zero of=test bs=10M count=1024
30、问:列出Linux常见打包工具并写相应解压缩参数(至少三种)
压缩打包命令:tar -czf filename. Tar dirname Zip filename. Zip dirname Gzip filename bzip2 -z filename
解压包命令:tar -xf filename.tar unzip filename.zip gzip -d filename.gz bzip2 -d filename.bz2
31、标准端口的范围是?
1-65535
32、常见协议(http、https、ftp、mysql、redis)默认端口。
http:80https:433ftp:21mysql:3306redis:6379
33、请写出下列端口所运行的服务21、22、23、3306、6379
21:ftp 22:ssh 23:telnet 3306:mysql 6379:redis
34、写出下面服务的常用端口:ftp、http、dns、smtp、pop3、dhcp、tftp、mysql、ssh、https
ftp:21控制端口 20数据端口 http:80 dns:53 smtp:25"简单邮件传输协议" pop3:110"邮局协议版本3" 3389:window远程桌面
dhcp:客户端是以UDP68 服务器是以UDP67 tftp:69文件传输协议 mysql:3306 ssh:22 https:443
35、Linux中的服务自启动添加方法有哪些。
centos6:有两种1.chkconfig服务名on
2.vim/etc/rc.d/rc.local/usr/sbin/服务名start
centos7:有三种1.systemctl enable服务名
2.vim/etc/rc.localsystemctlstart服务名
3.vim/etc/fstabsystemctlstart服务名
36、从本机复制文件、文件夹到服务器并替换同名文件的写法有哪几种?
有两种:1.scp -r 源文件路径目标文件 ip:目标文件路径
2.rsync-avr源文件路径目标文件 ip:目标文件路径
37、请解释下Telnet和SSH的区别
Telnet:不安全,没有对传输的数据进行加密,容易被监听还有遭受中间人攻击,telnet不能压缩传输数据,所以传输慢;
ssh:对数据进行了RSA加密,安全性高,ssh传输数据是经过压缩的,所以数据传输速度比较快
38、如何检查Selinux是否开启?getenforce
39、 检查服务器是否正常工作的最好办法是?
1.ping 服务器ip
2.ss -antul|grep 服务端口
3.ps aux|grep 服务名
4.systemctl status 服务名
40、Linux记录log的服务叫什么名字?rsyslog
41、ping命令通过什么协议(internet控制信息协议)来实现?icmp
42、网络装机工具cobbler了解吗,有哪些组件?批量装机:pxe
43、查看某一端口的连接客户端IP,比如3306端口ss-antpul|grep3306
44、设置系统当前运行级别中test服务状态为启动时自动加载,请写出完整操作命令

runlevel//查看当前的运行级别

chkconfig--level5teston
45、计划任务在11月份,每天早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh怎么实现?
00 6-12/2 11 bash/usr/bin/httpd.sh
46、请写下Linux系统中cron定时任务,每天07至23点,每隔半小时执行apache重启,并禁用系统邮件通知
crontab -e /30 7-23 systemctl restart httpd>/dev/null2>&1
47、以下字段可能和哪个服务有关?表示什么意思? /5 * ping -c 100 www.wanmel.com>/root/network.log2>&1
答:(计划任务)每五分钟ping www.wanmel.com (http://www.wanmel.com) 100次将错误和正确的输出覆盖到/root/network.log
48、/var/www/html/是网站的发布目录,如何每天凌晨0点30分对其进行自动备份,每次备份成按时间生成不同的备份包,写出操作步骤?
30 0 * tar-zcf $(date +%Y%m%d).html.tar.gz /var/www/html
49、计划每星期天早8点服务器定时重启,如何实现?
0 8 7 reboot
50、每天中午12点使用tcpdump命令抓取目的端口为tcp80的1000个包输出到当前目录,以当前时间命名。请写出定时任务及脚内容 **
0 12 * bash tcpdump.sh
Vim tcpdump.sh tcpdump -c 1000 tcp dstport80 -w ./$(date+%Y%m%d)
51、Http的错误代码含义(404、410、504、502)?
404(未找到)服务器找不到请求的网页。
410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。
504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
52、apache如何修改配置参数,将默认端口改为非默认端口。
1、如何改变Apache端口:
找到Apache安装目录下conf目录下的httpd.conf文件。打开它,找到"Listen",紧接着Listen的数字就是端口号,默认状态下为"Listen80"。在之前的PHP专题中提到过关于在安装配置Apache时会遇到端口与IISHTTP端口冲突的问题,因为IISHTTP端口默认也为80。那么我们就可以在这里改变Apache的端口,从而避免冲突,比如可以改成:Listen8011。改好之后别忘重起Apache服务使得配置生效。
Vim /etc/httpd/conf/httpd.conf
2、apache有几种工作模式,分别介绍下其特点,并说明什么情况下采用不同的工作模式?
apache有三种工作模式:分别是prefork,worker和event
1.prefork:是一种进程、与派生的工作模式,用的是进程去处理请求,所以比较容易消耗内存,但是稳定性好,某个进程出现问题不会影响到其他请求。要求稳定的时候使用
2.worker:是使用多个子进程、每个子进程有多个线程、由于使用的是线程去处理请求,消耗内存小,适合高流量的请求,但是如果某个进程出现问题,那么这个进程下的线程都会出现问题,即稳定性不是很好。这种模式不能php要测试一下在访问量多的时候使用
3.event模式:是为解决keep-alive保持长连接出现的一种工作模式,使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等到超时才会被释放,所以这个时候就出现了event的工作模式就出现了。在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。另外,event模式是不支持用在https上的。
3、apache的工作模式,如何执行php代码
进程模式prefork
线程模式work
事件模式event
安装apache的php模块libphp5.so
apache做代理----后端服务器安装php-fpm
53、进程和线程的区别?
线程:线程来源与进程,线程模式需要事先开启
线程模式并发量高 相对与进程模式来说没有进程模式稳定 共享内存 不支持php
进程:进程稳定性高;线程稳定性低
进程独占内存;线程共享进程的内存一个进程可以有多个线程;
54、dhcp客户端是哪个地址来申请一个新的ip地址的?
dhcp客户端是使用广播地址来向全网发送广播包来寻找dhcp服务器的
源地址是0.0.0.0 广播地址是:255.255.255.255 客户端没有IP地址才需要申请,所以它只能用0.0.0.0来代替它的ip,向服务器端申请ip地址。
55、DHCP(动态主机配置协议)
主要目的是为了方便我们的主机IP地址的配置,如果网络中存在大量的主机时,可通过部署DHCP协议,由DHCP服务器分配可用地址给主机。
客户端启用了DHCP,开机后,它会发布一个的广播报文,广播报文经过网关时会带上相应标记,要使路由可达,当DHCP服务器收到这个报文后,DHCP服务器会根据报文标记,分配一个网关所在网段IP地址给客户端,如果所有客户端未划分网关,DHCP会在地址池内随机分配IP给客户端
地址池:在用户定义了DHCP范围及排除范围后,剩余的地址构成了一个地址池,地址池中的地址可以动态的分配给网络中的客户机使用。地址池仅对自动获取IP的方式有效,手动设置IP只要符合规则可无视此项。
56、单独修改某一个账户的配置?
user_config_dir=/etc/vsftpd/userconf
vim /etc/vsftpd/userconf/zhanghu local_root=/zhanghu
57、我们都知道FTP协议有两种工作模式,说书他们的大概的一个工作流程?
模式:主动模式(ActiveFTP)和被动模式(PassiveFTP)
1、在主动模式下:FTP客户端随机开启一个大于1024的端口N,向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORTN+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。
客户端使用1024以上的端口连接服务器的21号端口,并且会事先开启一个1024+N的端口准备让服务器来连接,服务器得知客户端准备的端口后,用20号端口与客户端连接,创建数据链路时server端处于主动去连接客户端的状态固称为主动传输模式
2、在被动模式下:FTP客户端随机开启一个大于1024的端口N,向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORTP命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
客户端使用1024以上的端口连接服务器的21号端口,服务器接到连接请求后,开启一个1024+M的端口等待客户端来连接,再通知客户端这个等待连接的端口号是1024+M,客户端接到服务器端的信息后,开启新的一个1024+N的端口与1024+M进行连接,创建数据连接时,server端处于被客户端连接的状态,固称为被动传输模式
vsftp默认是根据客户端不同而使用不同模式,windows客户端则使用主动,linux客户端则使用被动
可以用pasv_enable=NO来强制使用主动
总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。
被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防
58、我们都知道dns既采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么时候采用udp协议?为什么要这么设计? **
dns有两个情况,一种是区域传输,一种是域名解析
1.区域传输时,一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息,传输协议是tcp。
2.域名解析时,首选的通讯协议是udp
使用udp传输,不用经过TCP三次握手,这样DNS服务器负载更低,响应更快
但是当域名解析的反馈报文的长度超过512字节时,将不能使用udp协议进行解析,此时必须使用tcp
59、当用户在浏览器当中输入一个网站,说说计算机对dns解释结果哪些流程?注:本机跟本地DNS还没有缓存
www.baidu.com.
1.用户输入网址到浏览器;
2.浏览器发出DNS请求信息;
3.计算机首先查询本机HOST文件,不存在,继续下一步;
4.计算机按照本地DNS的顺序,向区域dns服务器查询IP结果;区域dns服务器查询不到时会从根域开始,按照DNS层次结构向下搜索,直至对于信息具有权威性;
5.将返回dns结果给本地dns和本机,本机和本地dns并缓存本结果,直到TTL过期,才再次查询此结果;
6.返回IP结果给浏览器;并给本地的DNS一份结果;
7.浏览器根据IP信息,获取页面;
60、在nslookup使用中请问如何查询test.com域中的MX记录
Nslookup -query type=MX test.com Host dig nslookup settype=mx test.com
61、修改ssh客户端端口:

vim/etc/ssh/ssh_config /Port查找端口行,删除#,将22修改为目标端口

62、修改ssh服务端端口:

vim/etc/ssh/sshd_config /Port查找端口行,删除#,将22修改为目标端口

systemctl restart sshd

63、NFS共享文件怎么做的,用的什么技术,碰到了什么问题、
用nfs做nas存储,当访问的过多时;会比较卡: 提升交换机的配置原来是百兆的话要提升到千兆或者万兆
64、SHELL脚本ll中单引号,双引号及不加引号的简单区别
单引强引硬引取消引号内特殊字符的意义
双引弱引软引取消部分引号内特殊字符的意义让多个以空格为分隔符的字符串形成一个整体字符串
65、如何实现对MySQL数据库进行分库逻辑备份,请用脚本实现
mysqldump

vimmysqldump.sh

Mysqldump -uroot -p'QianFeng@123'\
-A--single-transaction\
--routines--triggers--master-data=2\
--flush-logs >/backup/date+%F-%H-mysql-all.sql
66、设计一个shell程序,每5分钟执行一次获取当前服务器的基本情况(内存使用率,CPU负载,I/O,磁盘使用率),保存到120.20.20.20数据库上数据库帐号aaa密码bbb库名test表名host,表结构自行设计 **

crontab-e

/5 * bash/serverstatus.sh
mysql -h120.20.20.20 -uaaa -p'bbb' -e 'create test.host(cipanvarchar(20),memvarchar(20),loadaver1varchar(20),loadaver2varchar(20),loadaver3varchar(20),ioaveragevarchar(20))'

vim/serverstatus.sh

1、mem_used=free-m | awk 'NR==2{print $3}'
2、mem_total=free-m | awk 'NR==2{print $2}'
3、a=df-Th|awk'NR==2{print$6}'|awk-F%'{print$1}'
4、mem_average=$((mem_used*100/mem_total))
5、load_average1=uptime|awk-F':|+|,''{print$(NF-4)}'
6、load_average1=uptime|awk-F':|+|,''{print$(NF-2)}'
7、load_average1=uptime|awk-F':|+|,''{print$(NF)}'
8、io_average=iostat-x|awk'NR==4{print$4}'
9、mysql -h120.20.20.20 -uaaa -p'bbb' -e 'insetintotest.hostvalues($a,$mem_average,$mem_average1,$mem_average2,$load_average3,$io_average)'
67、写一个脚本,实现tomcat的web服务监控
监控tomcat的开启和关闭;或是端口8005,8009;
http与tomcat连接是8080端口;与nginx是不需要端口
1.可以写脚本+计划任务
2.可以使用nagios
3.可以使用zabbix在agent的配置文件内定义key:

vim/etc/zabbix/zabbix_agentd.conf

UserParameter=tomcat_port*:/tomcat_monitor.sh$1
编写脚本:

vim/tomcat_monitor.sh

if $1-eq 8080;then lsof-i:8080 return$? elif$1-eq8005;then lsof-i:8005
return$? else return8 fi
68、写一个脚本实现nginx服务的管理
文件锁:
编译安装时需要写此脚本;
笔记上有答案5nginx安装7小步设置开机启动

vi/etc/init.d/nginx #!/bin/bash #chkconfig:-9920

description:Oooothisismynginxstartupscript

PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid"
case"$1"in start) $PROG ;; stop)
kill-sQUIT$(cat$PIDF) ;; restart) $0stop $0start ;; reload)
kill-sHUP$(cat$PIDF) ;; *)
echo"Usage:$0{start|stop|restart|reload}" exit1 esac exit0

chmod+x/etc/init.d/nginx #chkconfig--addnginx

69、很重要:写一个防火墙配置脚本,只允许远程主机访问本机的80端口

vimiptables.sh

Iptables -t filte r-I INPUT -p tcp! --dport80 -j DROP
70、编写shell脚本,清理/var/logs/目录下的一个持续增长的conn.log文件,以日为单位形成一个新的压缩文件,并删除30天前的日志压缩文件

vimcleanlog.sh

清理日志脚本

tar-czf /log_backup/conn_date+%y年%m月%d号-%H:%M:%S.log.tar.gz /var/logs/conn.log
wait $$ rm-rf/var/logs/conn.log find/log_backup/-mtime+30-execrm{};
71、备份并压缩/data目录的所有内容,存放在/backup目录里,且文件名形式为如:yymmdd_data,yy为年,mm为月,dd为日
1、读取/app/app.log文件中每行第一个域的全部数据加入到/backup/yymmdd_app_am.log,yy为年,mm为月,dd为日
2、删除/app/app.log文件
3、shell程序appbak存放在/usr/bin目录下。(最少写一个循环)

crontab-e 59231**/usr/bin/appbak chmod+x/usr/bin/appbak

vim/usr/bin/appbak abc=date+%Y%b%d_data tar-czf/usr/bin/backup/$abc/data wait
cat/app/app.log|awk'{print$1}'>>/usr/bin/backup/$abc rm-rf/app/app.log
72、针对Linux6、7系统简述常用运维或自动运维巡检的shell、python脚本。
73、查看内存使用率,CPU负载,I/O,磁盘使用率及这台服务器上的应用监控以Nginx为列查看其端口是否开启
74、请使用awk、sed、grep三个命令,请举写出命令语句。
grep 'root' /etc/passwd
sed -ri '/SELINUX=/cSELINUX=disabled' /etc/selinux/conf
cat/etc/passwd | awk'NR==1{print$1}'
75、请用shell脚本实现:批量添加5个用户,用户名为:user1-5,密码为:user名+3个随机字符
For I in{1..5}
do
useradd user$i
suijishu=opensslrand-hex2|sed-r"s/(...)(.)/\1:\2/g"|awk-F:'{print$1}'
echo user$i$suijishu | passwd --stdin user$i
done
76、批量修改文件或目录权限最好的办法是什么?
77、请说出以下符号在bashshell中的意义:
$0、$n、$#、$?、$*、$$、$(#aa)
$0当前读取内容
$n位置变量
$#参数个数上一语句的返回值
pid
$*所有参数
78、请用自己熟悉的脚本语言,快速替换notic服务下config.properties配置文件中所有变量值为jdbc.username,jdbc.password的值为blue和pass1234
sed-ri's/jdbc.username/blue/g'config.properties
sedri's/jdbc.password/pass1234/g'config.properties
79、echo "ABCDEFGabtdefg" | sed-i s/c/t/g这条命令是否正确?如若正确会显示什么结果?
80、在系统中添加100个用户,用户名为user001到user100
81、请使用脚本实现批量创建10个系统账号sj_user01-sj_user10并设置密码(密码为随机8位字符串)
82、在shell编程时,使用方括号表示测试条件的规则是?
83、用shell写一段启动脚本服务
84、编写shell脚本,能够生成32位随机密码
85、计算1加到100的值
86、统计/var/log下文件(非目录)的个数
find /var/log -typef | wc-l
87、统计出yum安装的apache的访问日志access_log中访问量最多的5个IP
cat/var/log/httpd/access_log|awk'{ips iipsi}}'|sort-rn-k2|head-5ssss
88、请用至少两种语言实现提取下面日志中的电话号码和内容,并将提取结果(mobile=xxxx&content=xxx)发post请求到http://api.leju.com/sms/send接口
格式:IP---时间电话内容**
157.55.35.42---23/Apr/2014:12:02:51+080018666668888"Missingargument2forgetstr()"
89、编写一个并发执行查询的shell执行文件exec_sql.sh,有以下要求:第一、实现脚本输入两个参数,第一个参数为存储sql语句的文件(可能存储1000条查询,语句之间用分号隔开),第二个参数为最大并发度,
例如:./exec_sql.sh./sql1000.sql8
第二、要求所有语句执行完脚本才可以退出
第三、记录开始时间、结束时间、每条语句的执行结果重定向到一个文件
第四、使用sqlplus命令行工具执行所需查询语句
90、Shell写过什么脚本
91、你认为写的最厉害的脚本
92、统计apache的access.log中访问量最多的5个IP
93、编写shell脚本获取本机的网络地址,比如:本机的IP地址是:192.168.100.2/255.255.255.0,那么它的网络地址是192.168.100.1/255.255.255.0
94、请用一条命令,处理一下文件内容file.txt,将域名取出并进行计数排序从大到小,如处理:
http://www.sina.com.cn/index.html (http://www.sina.com.cn/index.html) http://www.sina.com.cn/1.html (http://www.sina.com.cn/1.html) http://house.sina.com.cn/index.html
http://bj.house.sina.com.cn/index.html (http://bj.house.sina.com.cn/index.html) http://house.sina.com.cn/3.html (http://house.sina.com.cn/3.html) http://www.sina.com.cn/2.html
http://gz.house.sina.com.cn/2.html (http://gz.house.sina.com.cn/2.html) http://house.sina.com.cn/2.html
95、很重要:编写shell脚本将当前目录下大于10K的文件转移到/tmp目录下
96、编写SHELL脚本,查找linux系统下以txt结尾,30天没有修改的文件大小大于20K同时具有执行全线的文件并备份到/data/backup/目录下,某一天没有文件在/data/backup下生产一个当时日志的文件,内容为"缺失文件".
PYTHON
给出程序运行结果
defextendList(val,list=): list.append(val) returnlist list1=extendList(10) list2=extendList(123,)
list3=extendList('a') print"list1=%s"%list1 print"list2=%s"%list2 print"list3=%s"%list3
97、实现用用户输入入用用户名和密码,当用用户名为ye或sk且密码为123时,显示登陆成功,否则登陆失败,失败时允许重复输入入三次
foriinrange(3): u=input("user>:") p=input("pwd>:") ifu=="yg"oru=="sk"andp=="123": print("登陆成功")
Break else: print("登陆失败")
MYSQL
98、如何用mysql命令进行备份和恢复?以test库为例,创建一个备份,并再用此备份恢复备份:
mysqldump -u用户名- p'123' -B test > /mysql_backup/date+%F-%H-mysql-test.sql
备份之后可用mysqlbinlog查看:#mysqlbinlog/mysql_backup/2018-09-26-20-mysql-test.sql
恢复:mysql-uroot-p'123'-D test < /mysql_backup/2018-09-26-20-mysql-test.sql
99、MySQL:主从复制集群,高可用,具体配置,关系型数据库原则,怎么在集群中实现分库分>表,锁机制
主从复制集群:
1、mysql主
①开启二进制文件:#vim/etc/my.cnf(写入如下内容)
mysqld\
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
②重启服务:#systemctlrestartmysqld
③进入数据库,为从服务器授权

mysql-uroot-p'123'

mysql>grant replication slave , replication client on . to 'rep'@'IP或网段' identifiedby '123';
mysql>flushprivileges;
2、mysql从
①测试rep用户是否可用:#mysql -h 'mysql主IP' -urep -p'123'
②启动服务序:#vim/etc/my.cnf
mysqld\
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
③重启服务:#systemctlrestartmysqld
④再次测试rep用户是否可用:#mysql-h'mysql主IP'-urep-p'123'
⑤从设备上设置主服务
mysql>change master to master_host='mysql主IP' , master_user='rep' , master_password='123' , master_auto_position=1;(自动获取)
3、主主、多从
高可用:
①mysql主主同步
②在两台mysql上安装keepalived:#yum-y install keepalived
③keepalived主备配置文件:#vim/etc/keepalived/keepalived.conf
!ConfigurationFileforkeepalived
global_defs{
router_idmysql1
}
vrrp_scriptcheck_run{//定义配置健康检查脚本的配置名称check_run
script"python/root/keepalived_check_mysql.sh"
interval5//执行健康检查的时间间隔单位s(每5秒钟检查一次)
}
vrrp_instanceVI_1{
stateMASTER
interfaceens33
virtual_router_id88
priority100
advert_int1//检查keepalived本身服务的时间间隔
authentication{
auth_typePASS
auth_pass1111
}
track_script{
check_run//名字必须和上面的脚本配置名称一致
}
virtual_ipaddress{
192.168.122.100devens33
}
}
④编写mysql状态检测脚本(主主):

vim/root/bin/keepalived_check_mysql.sh

chmod755/root/keepalived_check_mysql.sh

/etc/init.d/keepalivedstart

⑤测试及诊断
100、关系型数据库原则:ACID(注:数据库事务通常指对数据库进行读或写的一个操作序列)
1、A(Atomicity)原子性是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
2、C(Consistency)一致性是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。如完整性约束a存款+b存款=2000。
3、I(Isolation)隔离性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
4、D(Durability)持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

返回文章列表 打赏
本页链接的二维码
打赏二维码