精华内容
下载资源
问答
  • linux运维面试

    2018-10-04 16:35:14
    linux运维面试宝典,有兴趣的可以看看。我觉得还是非常不错的
  • 企业Linux运维面试题问答 企业Linux运维面试题问答
  • linux运维面试

    2017-08-17 15:52:15
    linux运维面试
  • Linux运维面试题库

    2016-07-04 13:57:09
    Linux运维面试题库,都是基础,没基础也不行
  • linux运维面试题汇总

    2018-07-11 19:47:47
    linux运维面试题汇总,包括计算机网络,linux系统常见命令,常用系统服务,集群搭建等当面
  • Linux运维面试

    千次阅读 2019-08-02 12:57:30
    下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作。 1、什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与...

    Linux运维跳槽必备的40道面试精华题(转)
    下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作。

    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 # HTTP/SSL 检查后的摘要信息用工具genhash生成

    status_code 200# HTTP/SSL 检查返回的状态码

    }

    connect_port 80 # 连接端口

    bindto

    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系统(可以不说太具体)?

    不用root,添加普通用户,通过sudo授权管理

    更改默认的远程连接SSH服务端口及禁止root用户远程连接

    定时自动更新服务器时间

    配置国内yum源

    关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)

    调整文件描述符的数量

    精简开机启动服务(crond rsyslog network sshd)

    内核参数优化(/etc/sysctl.conf)

    更改字符集,支持中文,但建议还是用英文字符集,防止乱码

    锁定关键系统文件

    清空/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.*$##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

    思而不学则殆

    展开全文
  • 2013最新linux运维面试题 一有文件file1 1查询file1 里面空行的所在行号 awk ?{if$0~/$/)print NR} file or grep -n $ file |awk ?BEGIN{FS=:}{print $1} 2查询file1 以abc 结尾的行 grep abc$ file1 3打印出file1 ...
  • 下面为大家分享几个常见的Linux运维面试。 常见Linux运维面试题分享 1、如何添加一块新的50G硬盘到Linux服务器系统作为单独的分区,并正在使用?需要哪些操作步骤?  a、把硬盘放进服务器并连接 b、建立硬盘分区...

    学习Linux进入工作岗位的过程必定是要经过面试。与其他技术岗位相同。Linux运维也要经理人力面试和技术面试。对于初级运维工程师面试题目相对也很简单,但是同样有很多朋友在简单的问题上犯错。下面为大家分享几个常见的Linux运维面试。
    在这里插入图片描述
    常见Linux运维面试题分享

    1、如何添加一块新的50G硬盘到Linux服务器系统作为单独的分区,并正在使用?需要哪些操作步骤?
      a、把硬盘放进服务器并连接

    b、建立硬盘分区(fdisk命令)

    c、格式化分区

    d、挂载分区(可写入到/etc/fatab中,重启自动挂载)

    2、有个金士顿U盘,需要往服务器/var/www/html/目录下上传一个index.html文件,如何操作并完成。

    a、把U盘挂载到服务器上(需要安装ntfs-3g),拷贝index.html到/var/www/html/

    b、把U盘链接到Windows下,用远程连接服务器,远程拷贝

    3、有一块移动硬盘,上面有300G数据,如何迅速cp到Linux服务器?

    假设硬盘在服务器上识别为sdbc

    mkdir/mydata

    mount-tntfs/dev/sdbc/mydata

    4、光盘里面有一个httpd-2.2.15.xx.rpm包,如何挂载并安装呢?

    a、挂载光盘到/mnt下(mount/dev/cdrom/mnt)

    b、安装(rpm-ivh/mnt/Packages/httpd-2.2.15.xx.rpm)

    5、使用rpm命令安装、卸载、更新ntp-0.7.12.x86_64.rpm这个软包。

    安装rpm-ivhntp-0.7.12.x86_64.rpm

    卸载rpm-entp–nodeps

    更新rpm-Uvhntp-0.7.12.x86_64.rpm

    6、/var/www/html/是网站的发布目录,如何每天凌晨0点30对其进行自动备份,写出操作步骤?

    a、crontab-e进入编辑模式

    b、添加以下内容300***/bin/tar-czf/backup/web_bak_$(date+%Y%m%d).tar.gz/var/www/html>/dev/null2>&1

    c、启动服务servicecrontabstart;chkconfigcrontabon

    7、使用tar命令打包并压缩/root目录,然后移动到/tmp下,将其权限设置其他人只读。

    tar-czf/tmp/root_bak.tar.gz/root

    chmodo=r/tmp/root_bak.tar.gz

    8、Yum命令与rpm命令的区别?如何使用rpm安装一个有依赖的包?

    rpm一般用于安装本地的包,yum一般用于在线安装(也可以本地光盘建立yum源)

    区别在于yum可以自动安装所依赖的包(不包含环境)

    加"–nodeps"选项如:rpm-ivh**.rpm–nodeps

    9、在这个月内,每天的早上6点到12点中,每隔2小时创建一个test.txt文件,内容为ok,如何实现?

    a、crontab-e进入编辑模式

    b、添加以下内容06-12/24/bin/touchtest.txt(以4月为例)

    c、启动服务servicecrontabstart;chkconfigcrontabon

    10、将/usr/local/test目录下大于100K的文件转移到/tmp目录下。

    find/usr/local/test-typef-size+100k-execmv{}/tmp;

    这就是为大家分享的10道Linux运维面试题。你是不是都会呢?在云计算迅猛发展的现在,Linux运维成为企业不可或缺的技术岗位。运维工程师是一个越老越吃香的岗位,所以如果想从事Linux运维工作一定要趁早啊。

    展开全文
  • 最新linux运维面试题 一有文件file1 1查询file1 里面空行所在行号 awk ?{if$0~/$/)print NR} file or grep -n $ file |awk ?BEGIN{FS=:}{print $1} 2查询file1 以abc 结尾行 grep abc$ file1 3打印出file1 文件第1 ...
  • 1 服务器的linux系统是什么版2 linux你做过那些优化 3 在linux上部署过那些服务4 你怎样用nagios做的监控,监控什么? 5 用cacti怎样对网络进行监控?以前公司的情况(问具体的数字? 6 你怎样查看日志?查什么内容? 7 ...
  • 我曾经经历面试linux运维没有做大量准备,面试基本都是石沉大海,不断面试,都怀疑我到底适合搞运维吗? 我懂得转行和薪资提升不容易 所以我今天把现在企业不管是初级运维还是中级运维和高级运维面试的简历和自我...
  • Linux运维面试题2

    2020-12-02 13:36:12
    Linux运维面试题2 apache怎么实现负载均衡 答案: 多台机器跑apache,然后其中一台跑nginx,让nginx去代理多台apache实现负载均衡 一台Linux服务器负载高,连接慢,怎么查看 答案: 先用w看负载多少,用top看...
    1. apache怎么实现负载均衡
      答案:
      多台机器跑apache,然后其中一台跑nginx,让nginx去代理多台apache实现负载均衡

    2. 一台Linux服务器负载高,连接慢,怎么查看
      答案:
      先用w看负载多少,用top看哪个进程占用cpu高,同时用top按M看哪个进程占用内存多,用iotop看哪个进程读写频发,用sar命令或者nload命令查看网卡流量,是否跑满带宽

    3. 现有A文件,编写shell脚本判断A文件中大于5的数字,输出
      答案:
      for d in sed 's/[^0-9]//g' A; do if [ $d -gt 5 ]; then echo $d;fi; done

    4. 怎么判断文件为空的
      答案:
      [ ! -s filename ]

    5. Linux服务器中程序经常自动停止如何处理
      答案:
      可以先写监控脚本,当发现进程不存在时自动启动。 然后要查各个日志,看看程序为什么会自动停止,只有找到根本原因,才能真正解决问题

    6. TCP断头最小长度是___字节? 答案:20字节

    7. 简述TCP三次握手的过程?

    答案:

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据

    简版:首先A向B发SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了

    1. dmesg命令中看到ip_conntrack: table full, dropping packet.,如何解决?

    答案:

    ip_conntrack表的最大值由参数ip_conntrack_max控制,查看当前设置的最大值可通过命令: cat /proc/sys/net/ipv4/ip_conntrack_max

    redhat默认大小是65536,这个值的大小是有机器的内存决定的,65536是1G内存的大小,如果你的内存不止1G,那么设置的数值大小就是65536的倍数。2G是131072,4G是262144。数值可以比当前内存可设置的最大值小,但是不能超过最大值,要不然设置之后是不生效的。

    要查看当前系统ip_conntrack的大小可以通过命令:

    cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count

    设置方法如下:

    方式一:

    echo 131072 >/proc/sys/net/ipv4/ip_conntrack_max

    要实现每次开机后都生效的话,要加到开机启动脚本/etc/rc.local里,其他开机自动运行的脚本也行。

    方式二:

    echo ‘net.ipv4.ip_conntrack_max=131072’ >> /etc/sysctl.conf

    sysctl -p

    这样每次开机都能自动设置该参数

    1. 简要描述Linux的启动过程?

    答案:(这个版本有点老了,但很详细,可以帮助你复习很多知识点,面试的时候,可以简单说一下,这个答案主要是理解为主)

    A. 启动第一步 加载BIOS

    当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。

    B. 启动第二步 读取MBR

    众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。

    系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

    C. 启动第三步 Boot Loader

    Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。

    Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。

    我们以grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。

    系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。

    D. 启动第四步 加载内核

    根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。

    系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

    E. 启动第五步 用户层init依据inittab文件来设定运行等级

    内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。

    其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。

    Linux的运行等级设定如下:

    0:关机

    1:单用户模式

    2:无网络支持的多用户模式

    3:有网络支持的多用户模式

    4:保留,未使用

    5:有网络支持有X-Window支持的多用户模式

    6:重新引导系统,即重启

    F. 启动第六步 init进程执行rc.sysinit

    在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的

    G. 启动第七步 启动内核模块

    具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

    H. 启动第八步 执行不同运行级别的脚本程序

    根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。

    I. 启动第九步 执行/etc/rc.d/rc.local

    你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:

    This script will be executed after all the other init scripts.

    You can put your own initialization stuff in here if you don’t

    want to do the full Sys V style init stuff.

    rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

    J. 启动第十步 执行/bin/login程序,进入登录状态

    此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。

    1. 在Linux下,如何分析一个程序达到性能瓶颈的原因,请分别从CPU、内存、IO、网络的角度判断是谁导致的瓶颈?注意现在的机器CPU是多核。

    答案:

    A. 用w命令看系统负载高不高,如果高可能是CPU不够用,进程太多运行太慢,也可能是磁盘I/O太高了。

    B. 用vmstat 1命令来查看各个指标,着重分析r,b,swpd,si,so,bi,bo,us,wa. 若r列或者us列数值偏高则说明cpu有瓶颈,若b列或者wa列数值偏高同时bi或bo的数字很大,则说明磁盘有压力,若swpd一直变化,并且si和so一直不为0,则说明内存不够了。

    C. 用top命令来分析哪个进程耗费cpu最多,默认按使用cpu多少排序,按M也可以按内存使用多少排序。

    D. 用sar -n DEV 1 10 或者 nload 命令可以查看网卡的流量(若没有nload命令,请使用yum install epel-release; yum install -y nload 安装)

    E. 用iotop命令可以查看磁盘读写速度 (yum install -y iotop 安装)

    1. 在bash shell中?,?,#,*代表什么,其中#和$*的区别

    答案:

    $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

    $# 是传给脚本的参数个数

    $* 显示所有向脚本传递的参数

    所以,KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲是一个数字,而*是一个字符串。

    1. 如何使用tar命令将/tmp/abc文件夹打包为压缩文件/tmp/abc.tgz。及如何知道命令是否执行成功。

    答案:

    命令:tar czvf /tmp/abc.tgz /tmp/abc

    检测:echo $?(返回值为0,说明成功)

    1. 如何判断当前服务器的80端口是否被监听,如果被监听,怎么知道被哪个进程监听

    答案:

    用netstat –lnpt |grep 80 命令来查看80端口是否被监听

    查看进程:上次命令结果的最后一列(不确定)或者使用命令:lsof –i :80看第一列

    1. 如何查看file文件的第400-500行的内容

    答案:

    sed -n ‘400,500p’ file文件名

    1. 写一个脚本,分析昨天一整天nginx记录某个站点的日志,统计出次数最多的前20个ip,并统计出一天所报500错误的次数。

    答案:

    假如nginx昨天访问日志为/data/log/2016-10-01.access.log

    前20个IP: awk ‘{print $1}’ /data/log/2016-10-01.access.log |sort -n |uniq -c|sort -nr |head -20 |awk ‘{print $2}’

    500次数: 假如状态码在第8段,awk ‘$8==”500”’ /data/log/2016-10-01.access.log |wc -l

    1. 简单介绍一下您所知道的减少和加速web服务器的请求的方法。

    答案:

    A. 针对静态的访问,做过期时间,把静态文件缓存在客户端上

    B. 在前端搭建squid反向代理,把静态的文件缓存在squid上

    C. 接入CDN

    D. 合并js、css以及小图片

    1. 办公室同事反馈网站打不开,请简述一下排查故障的思路或解决方法

    答案:

    A. 先ping一下域名,看看网络是否通

    B. Telnet 一下服务器的80端口,看是否通

    C. 查看服务器流量是否正常,借助sar或者nload

    D. 查看服务器是否有负载,用w,查看服务是否开启,用ps

    E. 抓包查看数据包是否正常,看是否有攻击,用tcpdump

    F. 查看配置是否正确

    1. 简述一下raid0,raid1、raid5、raid10他们的优势与区别

    说明:前面已经有类似的题目(5套11题)。但没有描述raid10,raid10其实就是先做raid1再做raid0,不仅加快了访问速度,还保证了数据安全。

    1. 简单介绍一下自己对哪种监控系统最熟悉,并阐述一下其优缺点

    答案:

    对Zabbix和Nagios比较熟悉。Nagios没有使用数据库来存储历史数据,所以它不能构成图表,它重在监控的状态,它只需要告诉我们监控项目是否正常,所以一目了然。Nagios配置需要修改配置文件,总体上来说比较复杂。Zabbix使用MySQL存储历史数据,所以它可以构成图表,可以查询一个月甚至一年的历史数据。Zabbix有一个自动发现的功能,当监控大批量主机的时候,可以通过这个自助发现,快速配置。所以Zabbix适合大型服务器集群的监控。

    1. 简述一下nginx的安装使用,配置,安全方面的使用配置

    答案:

    这问题问的太笼统了,不好回答。要说安装和配置,直接拿出你平时记录的学习笔记就够了,所以呢以后你面试的时候,可以带着你的笔记(同学们可以把自己的博客或者云笔记打印出来,面试的时候带着,面试官问这样的问题,就可以直接把笔记拍到桌子上给他看)。安全方面,着重从安全认证、防盗链、访问控制这几个方面描述。

    1. 是否对php熟悉,简述一下对php的优化

    答案:

    对php安装和配置还算熟悉。对于php的优化,可以说说配置日志、disable_function(这个就需要同学们去描述几个非常典型的函数了,去百度查查我给你们列出的那些函数,不用全部,有5,6个就可以了)、open_basedir等

    1. 是否对cdn熟悉,简单介绍一下排查某个区域访问有问题的解决方法。

    答案:

    首先要确定好访问有问题的区域访问到的节点ip,然后针对这个ip去排查。 比如先ping一下这个ip是否通,telnet一下这个ip的80端口是否正常。可以编辑自己电脑的hosts文件,写一条到该区域CDN的解析记录,用浏览器去访问。

    1. 常见的Linux版本有哪些?你最擅长哪一种?说明你擅长哪一块?

    答案:

    常见的Linux发行版有,Debian, Gentoo, Ubuntu, RedHat, CentOS, Fedora, Kali Linux, Suse等,最擅长CentOS,擅长部分命令使用,脚本编程,环境服务搭建与配置。

    1. 熟悉FreeBSD吗?比如改主机名?FreeBSD的默认防火墙是什么?

    答案:

    一般熟悉,改主机名使用命令:vi /etc/rc.conf,向里面加入 hostname=主机名,默认防火墙是ipfw

    1. 忘记密码怎么办?

    答案:

    忘记密码,可以进入单用户模式或者救援模式来更改密码。

    1. Linux的标准分区是什么?(内存32G,硬盘1T)

    答案:

    /boot 分200M,/分50G,swap 分16G,其余分到 /data 下。

    1. 突然发现一台Linux系统只读,应该怎么处理,请写出详细步骤。

    答案:

    文件系统只读,可能是误操作,比如挂载的时候加了ro的挂载选项。也可能是文件系统损坏,这时候可以使用fsck -y 分区 来尝试修复一下,但在修复之前最好是把重要数据做一个备份以防万一。如果修复失败,那说明是磁盘损坏,这就需要更换磁盘了。

    1. 简要描述Linux无盘值守安装过程。

    答案:

    这个不太好简述,内容太多了。大家应该好好看看扩展知识点,如果动手做了那印象会比较深刻。启动过程:PXE网卡启动–>DHCP服务器–>获得IP–>从TFTP上下载pxelinux.0、vmlinuz、initrd–>启动系统–>通过PEX去HTTP或NFS或FTP下载ks.cfg文件–>跟据ks.cfg去HTTP或NFS或FTP下载RPM包及安装系统–>完成安装。所以,我们需要安装的服务有dhcp、tftp、http/ftp、kickstart,同时也需要编辑合适的ks.cfg。这个文件就是规定安装哪些rpm包的。

    1. 用一条命令截取ifconfig中看到的IP地址,尽量使用awk,sed等处理。

    示例:

    [root@server ~] # ifconfig

    eth0 Link encap:Ethernet HWaddr 00:0C:29:78:85:52

          inet addr:192.168.130.128  Bcast:192.168.130.255  Mask:255.255.255.0
    
          inet6 addr: fe80::20c:29ff:fe78:8552/64 Scope:Link
    
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    
          RX packets:1215 errors:0 dropped:0 overruns:0 frame:0
    
          TX packets:984 errors:0 dropped:0 overruns:0 carrier:0
    
          collisions:0 txqueuelen:1000
    
          RX bytes:134394 (131.2 KiB)  TX bytes:98708 (96.3 KiB)
    

    答案:

    ifconfig eth0|grep ‘inet addr’|awk -F ’ ’ ‘{print $2}’|awk -F ‘:’ ‘{print $2}’

    1. Linux Shell可否实现多线程处理,有没有什么办法?

    答案:

    可以实现多线程。其实就是把要执行的命令丢到后台去,同时运行它们。比如,正常执行一个shell脚本是一条命令执行完成后再执行下一条命令。那如果把所有命令后面加个&,让它丢到后台去运行,则所有的命令会同时执行完。

    1. 建立一个名为index.html的文件,并使其root不可写。

    答案:

    touch index.html

    chattr +i index.html

    1. 请写一个任务计划,(周日下午两点三十五执行update.sh),并说明前面都*分别都代表什么?

    答案:

    35 14 * * 0 /bin/sh update.sh

    五个 * 分别代表 分时日月周

    1. 请用iptables写一条规则(同时允许443,80,1723,22,3306,11211,25,110,dns,ntp协议,并写出默认允许或者拒绝端口的作用)

    答案:

    iptables -I INPUT -p tcp -m multiport --dport 443,80,1723,22,3306,11211,25,110,53,123 -j ACCEPT

    iptables默认是允许所有端口开放的,如果想只放行指定某些端口,那就需要配置一下默认规则了。比如本例中,我们写完放行的端口规则后还需要写一条默认拒绝的规则iptables -P INPUT DROP 这样除了上面那规则中提到的端口可以访问外,其他端口都是拒绝的。

    1. NAT协议是什么,有哪几种,请简要说明。并写一条简单的nat规则,端口13389映射到3389端口。

    答案:

    关于NAT的描述,在前面的问题中已经给出答案。论坛也有一篇不错的文章,看图就会很清楚了http://ask.apelearn.com/question/7255。下面是两条映射的规则:

    假设本机ip为1.1.1.1,目标机器ip为2.2.2.2

    iptables -t nat -I PREROUTING -d 1.1.1.1 -p tcp --dport 13389 -j DNAT --to 2.2.2.2:3389

    1. 你所知道的虚拟化产品有几种?是否接触到docker?

    答案:

    Kvm、Xen、vmware(workstation/esxi)、virtualbox。在自己电脑上搞过workstation和virtualbox,在服务器上配置过kvm。

    接触过docker,在线上服务器使用docker跑过php环境,使用docker可以很方便地部署好环境,节省了部署和配置的时间。

    1. 网站HTTPS证书认证需要那几个文件?分别是什么?什么作用?

    答案:

    HTTPS证书需要有两个文件,一个是crt,一个是key。crt文件就是公钥文件,用来加密的。而key文件是私钥文件,是用来解密的。

    1. 请简述CDN原理。

    答案:

    在描述CDN的实现原理,让我们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差别:

    用户提交域名→浏览器对域名进行解释→得到目的主机的IP地址→根据IP地址访问发出请求→得到请求数据并回复

    由上可见,用户访问未使用CDN缓存网站的过程为:

    1. 用户向浏览器提供要访问的域名;

    2. 浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;

    3. 浏览器使用所得到的IP地址,向域名的服务主机发出数据访问请求;

    4. 浏览器根据域名主机返回的数据显示网页的内容。

    通过以上四个步骤,浏览器完成从用户处接收用户要访问的域名到从域名服务主机处获取数据的整个过程。CDN网络是在用户和服务器之间增加Cache层,如何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现,下面让我们看看访问使用CDN缓存后的网站的过程:
    在这里插入图片描述

    通过上图,我们可以了解到。

    使用了CDN缓存后的网站的访问过程变为:

    1. 用户向浏览器提供要访问的域名;

    2. 浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的CNAME记录,为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。

    3. 此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;

    4. 缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;

    5. 缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,另一方面把获取的数据返回给客户端,完成数据服务过程;

    6. 客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。

    通过以上的分析我们可以得到,为了实现既要对普通用户透明(即加入缓存以后用户客户端无需进行任何设置,直接使用被加速网站原有的域名即可访问,又要在为指定的网站提供加速服务的同时降低对ICP的影响,只要修改整个访问过程中的域名解析部分,以实现透明的加速服务。

    下面是CDN网络实现的具体操作过程。

    1. 作为ICP,只需要把域名解释权交给CDN运营商,其他方面不需要进行任何的修改;操作时,ICP修改自己域名的解析记录,一般用cname方式指向CDN网络Cache服务器的地址。

    2. 作为CDN运营商,首先需要为ICP的域名提供公开的解析,为了实现sortlist,一般是把ICP的域名解释结果指向一个CNAME记录;

    3. 当需要进行sortlist时,CDN运营商可以利用DNS对CNAME指向的域名解析过程进行特殊处理,使DNS服务器在接收到客户端请求时可以根据客户端的IP地址,返回相同域名的不同IP地址;

    4. 由于从cname获得的IP地址,并且带有hostname信息,请求到达Cache之后,Cache必须知道源服务器的IP地址,所以在CDN运营商内部维护一个内部DNS服务器,用于解释用户所访问的域名的真实IP地址;

    5. 在维护内部DNS服务器时,还需要维护一台授权服务器,控制哪些域名可以进行缓存,而哪些又不进行缓存,以免发生开放代理的情况。

    1. 构建简单网站架构模型

    设备:13台服务器,要求:有负载均衡和数据库主从

    答案:

    架构:Keepavlied + lvs + nginx/php + NFS + mysql + redis

    keepalived+lvs 使用2台

    Nginx+php-fpm使用5台

    NFS 使用1台

    Mysql双主,并使用keepalived构建高可用 使用2台

    Redis 使用1台,用来存session

    备份机器使用1台

    监控机器使用1台

    1. Linux的安全如何做?从哪些方面入手,请简要说明步骤。

    答案:

    A. 关闭不用的服务

    B. 用iptables限定规则,只开放22,80等常用端口

    C. 禁止root用户直接登录服务器,只允许密钥验证,配置合适的sudo规则

    D. 限定登录服务器的ip白名单

    E. Apache/nginx配置文件中配置web认证、访问控制、限定某些目录禁止解析等操作

    F. 设置php.ini,禁掉高危函数,配置合适的open_basedir

    1. 集群服务器中有一台发生故障,导致网站时好时坏。如果是你,你该如何处理,请简要说明步骤和方法。

    答案:

    首先要找到出问题的服务器,可以简单写个for循环,针对集群中多有机器用curl命令来测试网站能否访问。定位到故障服务器后,要在分发器上把故障机器踢掉。有一种情况,不太好处理,比如某个服务器访问网站比较慢,但也能访问。这样就不太容易找到出问题的服务器,这时候可以给所有服务器设置一个自定义header,通过curl命令可以很清楚地定位到具体的服务器。只要定位到服务器,然后再针对它去排查访问慢的原因。

    1. 常用Linux命令

    答案:

    显示指定工作目录下的内容: cd ; 复制 cp ; 移动 mv ;删除 rm ;

    查看服务器负载:top/(w) ;查看本地网卡信息:ifconfig -a ;查看文档: cat ;

    显示磁盘使用情况: df ;编辑文本:vim ;查看当前系统内存使用情况:free;

    查看占用80端口的进程:netstat –lnp|grep 80 ;

    打印file 1 文件的第一行到第三行: cat file 1|sed ‘1,3’p –n ;

    将/home/tong/test 目录下大于100K的文件转移到/tmp目录:

    find /home/tong/test -type f -szie +100k |xargs -i mv {} /tmp/

    1. 名词解释

    Swap: Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。

    Raid:磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

    chmod: linux系统命令,用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取,写入,执行3种一般权限来区分,另有3种特殊权限可供运用,再搭配拥有者与所属群组管理权限范围。您可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。

    ps aux|grep pid:过滤出进程名字中含有pid的进程

    iptables: linux系统防火墙名字叫做 netfilter,而iptables 只是它的一个实现工具。Iptables 可以用来设置、维护和检查Linux内核的IP包过滤规则的。

    43.Apache有几种工作模式,分别介绍下其特点,并说明什么情况下采用不同的工作模式?

    说明:这个问题在前面已经有过介绍。相信后续的笔试题还会出现。所以我从网上总结一些比较好的答案写在这里,帮助大家理解。

    答案:Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式。它们分别是prefork,worker和event,它们同时也代表这Apache的演变和发展。使用httpd -V 命令查看。在configure配置编译参数的时候,可以使用 --with-mpm=prefork|worker|event 来指定编译为那一种MPM,当然也可以用编译为三种都支持:–enable-mpms-shared=all,这样在编译的时候会在modules目录下自动编译出三个MPM文件的so,然后通过修改httpd.conf配置文件更改MPM。

    1、Prefork MPM

    Prefork MPM实现了一个非线程的、预派生的web服务器。它在Apache启动之初,就先预派生一些子进程,然后等待连接;可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求。这是一个成熟稳定,可以兼容新老模块,也不需要担心线程安全问题,但是一个进程相对占用资源,消耗大量内存,不擅长处理高并发的场景。

    2、Worker MPM

    和prefork模式相比,worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)。

    3、Event MPM

    这是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。

    44.有文件file1

    1. 查询file1里面空行所在的行号;

    答:grep -n ‘^$’ file1

    1. 查询file1中以abc结尾的行;

    答:grep ‘abc$’ file1

    1. 打印file1 文件的第一到三行;

    答:sed -n ‘1,3’p file1

    45.写一条192.168.10.0网段从网关192.168.9.1出去的路由

    答:route add -net 192.168.10.0/24 gw 192.168.9.1

    46.写一条放行80端口的防火墙规则。

    答:iptables -I INPUT -p tcp --dport 80 -j ACCEPT

    1. 每天早上6点到12点,每隔2小时执行一次/usr/bin/httpd.sh怎么实现

    答:crontab -e 然后添加一行

    0 6,8,10,12 * * * /bin/bash /usr/bin/httpd.sh

    48.编写个shell脚本判断根目录下有没有abc目录,如果没有就发邮件给admin@121.com

    答:#!/bin/bash

    if [ ! -d /abc ]

    then

    echo “Director /abc is gone, please check.”| mail -s ‘directory /abc is gone’ admin@121.com

    fi

    49.备份mysql数据库test库

    答:mysqldump -uroot -p’passwd’ test > /data/test.sq

    50.ftp的几种模式比较。

    答:主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。被动模式只需要服务器端开放端口给客户端连接就行了。

    主动FTP:

    命令连接:客户端 >1024端口 -> 服务器 21端口

    数据连接:客户端 >1024端口 <- 服务器 20端口

    被动FTP:

    命令连接:客户端 >1024端口 -> 服务器 21端口

    数据连接:客户端 >1024端口 -> 服务器 >1024端口

    1. 你公司监控(如zabbix)系统监控了哪些项目。

    答:监控了CPU使用率、内存剩余、磁盘使用空间、网卡流量、web服务、mysql主从、访问日志等

    1. 使用nginx做负载均衡;后端一主一备;测试发现主正常的情况下,会有10%左右的流量访问备,请分析原因。

    答:可能是nginx配置文件的max_fails(失败超过指定次数会暂停或请求转往其它服务器)太小。

    1. lvs与nginx负载均衡的区别。

    答:

    1)nginx工作在网络的七层,所以他可以针对http应用本身来做分流策略,比如针对域名,目录等,而lvs并不具备这些功能,所以nginx这点可利用的地方就多余lvs,但因为这些功能使其调整度高于lvs,需要经常触碰,触碰多了,出问题的几率就会增加,而lvs配置性不高,没有太多的可配置选项,除了增减服务器,并不需要经常去触碰他,大大减少人为出错。

    2)nginx对网络的依赖性比较小,理论上只要能ping通,网页访问正常,nginx就能连的通,lvs比较依赖于网络环境,至少需要一个公网ip来做VIP

    3)nginx测试可以查看错误日志,而lvs出错,很多都是网络问题,没有错误日志,解决比较麻烦

    4)nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。lvs的原理使其不能重发请求。比如用户正在上传一个文件,而处理该上传的节点刚 好在上传过程中出现故障,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉了

    1. apache与nginx的区别。

    答:

    1)nginx 轻量级,同样web 服务,比apache 占用更少的内存及资源 抗高并发能力大约是apache的10倍以上,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

    2)nginx的静态处理性能力比apache强,nginx处理动态不行,一般动态请求要apache去做,nginx只适合静态和反向,

    3)核心区别,apache是同步多进程,一个连接对应一个进程,nginx是异步的,很多很多个连接可以对应一个进程

    1. 你是如何学习linux,用得什么编辑器,用什么软件做技术文档。

    答:

    在这里我要强调一下,不建议大家说是通过参加培训学习的Linux,因为这样说,面试者会觉得你学的技能都是培训来的没有实战经验。但实际上,你所学到的东西,大多都是实战经验。你可以说,你的Linux技能是在工作中不断总结学到的,这时候你可以说一下自己的博客或者用你的手机给他展示一下你的学习笔记也是可以的。当然,如果你有打印出来的厚厚的一打笔记也是蛮厉害的。如果是应届毕业生,你可以说你在大学里参加了一个计算机社团,团长有给你分享很多学习资料,并且还跟着他参加过几个项目,这时候就可以吹一吹自己做过的“项目”了,其实是你之前做的实验。用的vim编辑器,你就说技术文档写到了自己博客里,或者说写到了自己的云笔记里。

    1. 网站做了负载均衡,发现有些用户访问的时候经常需要重新登录,是什么原因,怎么处理?

    答:

    这是因为用户登录后,他的请求被分发到了另外一台服务器上。默认,服务存用户的session是在/tmp/下面,本来已经在A服务器上保存了session,可下次访问到了B服务器,而B服务器又不存在刚才保存的session信息,所以就会显示未登录。要解决这个问题很容易,比较简单的做法是,做一个会话保持。比如可以设定1小时内用户的请求固定在一台服务器上。如果是nginx也可以设置ip_hash。当然最好的解决方案是,使用redis存取session,实现session共享。

    1. linux引导加载的先后顺序是BIOS kernel GRUB MBR RAID?

    答案:BIOS -> RAID -> MBR -> GRUB -> kernel

    62、进程间通信方式主要有哪几种方式?

    答案:1管道 2命名管道 3信号 4消息队列 5共享内存 6信号量 7套接字

    63、简要说明你对内核空间和用户空间的理解?

    答案:这个问题有点偏开发,大家不明白没有关系,了解一下即可。操作系统和驱动程序运行在内核空间,应用程序运行在用户空间。大家可以看看这个文章http://www.go-gddq.com/html/QianRuShiXiTong-JiShu/2012-07/1031748.htm

    64.文件描述符FD的数量与TCP连接数有什么关系?

    答案:对于服务器来讲,每一个连接到本机上面的tcp连接都要产生一个socket,每一个socket就是一个文件描述符。所以tcp连接数和文件描述符是一样的。下面我从网上找了一篇文章,帮助大家理解tcp连接数。

    在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少?

    在确定最大连接数之前,先来看看系统如何标识一个tcp连接。系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}。

    client每次发起tcp连接请求时,除非绑定端口,通常会让系统选取一个空闲的本地端口(local port),该端口是独占的,不能和其他tcp连接共享。tcp端口的数据类型是unsigned short,因此本地端口个数最大只有65536,端口0有特殊含义,不能使用,这样可用端口最多只有65535,所以在全部作为client端的情况下,最大tcp连接数为65535,这些连接可以连到不同的server ip。(注意这个说的是client,也就是客户端)

    server通常固定在某个本地端口上监听,等待client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的,因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。

    上面给出的是理论上的单机最大连接数,在实际环境中,受到机器资源、操作系统等的限制,特别是sever端,其最大并发tcp连接数远不能达到理论上限。在unix/linux下限制连接数的主要因素是内存和允许的文件描述符个数(每个tcp连接都要占用一定内存,每个socket就是一个文件描述符),另外1024以下的端口通常为保留端口。在默认2.6内核配置下,经过试验,每个socket占用内存在15~20k之间。

    对server端,通过增加内存、修改最大文件描述符个数等参数,单机最大并发TCP连接数超过10万 是没问题的,国外 Urban Airship 公司在产品环境中已做到 50 万并发 。在实际应用中,对大规模网络应用,还需要考虑C10K 问题。

    1. 你用过或测试过哪些 linux/unix文件系统?

    答案:centos5默认是ext3,centos6为ext4,centos7为xfs

    1. linux中每周六的04点20分 删除/tmp/log_*文件,怎么实现?

    答案:20 4 * * 6 /bin/rm -f /tmp/log_*

    1. linux服务器会在哪些方面产生瓶颈?如何排查出这些瓶颈?

    答案:答案在前面的题目中查找。

    1. 如何查看当前多核CPU负载情况?

    答案:top 之后按1 切换

    1. 怎样用命令查看3天前的CPU分核的负载数据?

    答案:sar -f /var/log/sa/(三天前日期)

    1. 某命令CPU负载显示以下各段,分别是什么? 10.6%us,6.6%sy, 0.0%ni 74.4%id 0.0%wa

    答案:us 用户cpu百分比 sy内核cpu百分比 ni进程占用百分比 id 空闲百分比 wa io等待占用的百分比

    1. 列举你知道的linux下的压力测试程序

    答案:测试web的工具:http_load,ab

    专业的测试工具loadrunner

    1. 描述linux系统下创建软RAID5的命令和步骤

    答案:假如有四块硬盘 /dev/sda,/dev/sdb,/dev/sdc,/dev/sdd,分别给他们分一个主分区sda1,sdb1,sdc1和sdd1,然后创建RAID设备名为md0, 级别为RAID5,使用3个设备建立RAID,空余一个做备用.

    命令如下:

    mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sd[a-d]1

    使用下面命令查看raid详细信息

    mdadm --detail /dev/md0

    1. linux发行版rhel和centos在使用上有什么区别

    答案:RHEL一直都提供源代码的发行方式,CentOS 就是将 RHEL 发行的源代码从新编译一次,形成一个可使用的二进制版本。由于 LINUX 的源代码是 GNU,所以从获得 RHEL 的源代码到编译成新的二进制,都是合法。只是 REDHAT 是商标,所以必须在新的发行版里将 REDHAT 的商标去掉。

    REDHAT 对这种发行版的态度是:“我们其实并不反对这种发行版,真正向我们付费的用户,他们重视的并不是系统本身,而是我们所提供的商业服务。”

    所以,CentOS 可以得到 RHEL 的所有功能,甚至是更好的软件。但 CentOS 并不向用户提供商业支持,当然也不负上任何商业责任。

    如果是单纯的业务型企业,购买RHEL软件并购买相应服务比较合适。这样可以节省IT管理费用,并可得到专业服务。一句话,选用 CentOS 还是 RHEL,取决于你所在公司是否拥有相应的技术力量。

    在RHEL5和RHEL6版本上是无法使用yum的,因为REDHAT只给付费用户提供这个软件。

    1. 不小心在系统下执行了chmod -x /bin/chmod 怎么办?

    答案:

    /lib64/ld-linux-x86-64.so.2 /bin/chmod +x /bin/chmod 64位

    /lib/ld-linux-x86-64.so.2 /bin/chmod +x /bin/chmod 32位

    1. linux文件的权限位x对目录和文件有何不同?

    答案:

    x位对目录来说,如果用户不配备x权限,则不能进入此目录,更别谈修改里面的文件了

    x位对文件来说,如果文件具有x,则可以被执行他,比如脚本可以执行

    1. 找出/taomee目录下的所有常规文件并设置权限644

    答案:find taomee/ -type f |xargs -i chmod 644 {}

    1. 如何查找某一文件被哪个进程打开?

    答案:lsof|grep file

    1. 新增一块存储设备,lvm操作的命令如何写

    答案:

    将物理硬盘格式化成pv pvcreate /dev/sdb

    创建卷组(VG)并将pv加到VG中 vgcreate vg1 /dev/sdb

    基于VG创建逻辑卷(LV) lvcreate -n mylvm -L 20G vg1

    1. 给主机host:172.16.0.2 增加gateway10.0.0.1

    答案: route add 172.16.0.2 gw 10.0.0.1或者网卡配置文件更改

    1. socket和tcp访问mysql的区别?

    答案:socket访问是通过服务器上的一个socket文件来和mysql服务通信,速度快,但是只能在同一台服务器连接。tcp是通过网络来通信,可以在另外的机器连接。

    1. 使用awk打印出 welcome to taomee

    答案:echo 1|awk ‘{print “welcome to taome”}’

    1. 如何将一个文件中的taomee、*****、peoplenet中的内容进行替换成network(*的内容不同)

    答案:sed -i ‘s/taomee、******、peoplenet/taomee、network、peoplenet/g’ file

    1. 找出access.log中访问top 10的ip地址

    答案:awk ‘{print $1}’ access.log | sort -n| uniq -c | sort -nr | head -n 10

    1. 打印1-100奇数

    答案:

    seq 1 2 100

    1. 删除一个文件中行号为奇数的行

    答案:sed '1~2’d file

    1. 替换某一个文件的字符串

    答案:sed -i ‘s/root/qwer/g’ file

    1. exec和souce区别

    答案:

    source就是让script在当前shell内执行、而不是产生一个sub-shell来执行。exec也是让script在同一个行程上执行,但是原有行程则被结束了。 简而言之:原有行程会否终止,就是exec与source/fork的最大差异了。

    参考文档http://blog.sina.com.cn/s/blog_4da051a60102uwd8.html

    1. 显示24小时前的内容

    find /tmp/ -mtime +1

    1. 简述linux的优化

    【硬件方面】

    1. cpu

    2. 内存 (增加内存)

    3. 存储 (使用raid,使用ssd)

    4. 网卡 (使用千兆网卡,或者双网卡绑定)

    【系统方面 】

    1. 内核参数优化(网络相关、内存相关、缓冲缓存相关)

    2. 文件系统方面(分区调优,格式化时根据存储文件特性,指定合适的块大小,noatime,日志隔离,软raid,有效使用/dev/shm,关闭不必要的服务)

    3. cpu优化 (进程绑定,中断绑定)

    numa架构cpu: http://blog.csdn.net/jollyjumper/article/details/17168175

    taskset 把进程和cpu绑定 http://blog.csdn.net/ttyttytty12/article/details/11726569

    【应用程序方面】

    1. nginx、apache、php-fpm、mysql、tomcat、squid等应用,是可以通过调节各个参数获得性能优化的。

    2. web优化,比如可以把用户请求合并(js、css合并),使用cdn加速静态页访问速度,把图片文档压缩减少带宽传输,

    3. 优化网站程序

    【架构方面】

    1. 使用简单并且稳定的架构方案

    2. 多使用缓存

    3. iptables表和链

    filter INPUT FORWARD OUTPUT

    nat PREROUTING POSTROUTING OUTPUT

    mangle PREROUTING INPUT FORWARD OUTPUT POSTROUTING

    1. 检测某个端口所占用的进程,比如3306

    答案:netstat -lnp |grep 3306

    1. 对于linux主机的cpu负载使用,什么情况下user的比例升高,什么情况下system的比

    例升高,请联系实际举例。

    答案:在Linux系统里面跑的用户安装服务比较忙的时候,会导致user的比例升高,比如mysql服务、php服务等。同样,当进程比较忙,比如php使用非常频繁,子进程非常多的时候,会导致进程切换频繁,system的比例就会升高。

    92、在不umount的情况下,如何重新设置mount的参数。

    答案:mount -o remount

    1. 说一下公司多少台服务器,是什么架构

    答案:有7台服务器,lnmp+nginx负载+keepalived,其中2台keepalived+2台nginx/php-fpm+2台mysql(一主一从)+NFS(上面兼着跑监控、备份)

    1. Nginx有哪些优化参数

    答案:

    A. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。

    B. worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10000000; 为每个进程分配cpu,上例中将8 个进程分配到8 个cpu,当然可以写多个,或者将一个进程分配到多个cpu。

    C. worker_rlimit_nofile 65535; 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数与进程数相除,现在在linux2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。

    D. useepoll;

    使用epoll的I/O模型

    E. Worker_connections 65535; 每个进程允许的最多连接数, 理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。

    F. keepalive_timeout 60; keepalive超时时间。

    G. client_header_buffer_size 4k;客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。

    H. open_file_cachemax=65535 inactive=60s;这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。

    I. Open_file_cache_valid 80s;这个是指多长时间检查一次缓存的有效信息。

    J. open_file_cache_min_uses 1; open_file_cache 指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。

    1. 提高性能和并发数,需要优化哪些内核参数

    答案:

    net.ipv4.tcp_max_tw_buckets = 6000 //timewait的数量,默认是180000。

    net.ipv4.ip_local_port_range = 1024 65000 //允许系统打开的端口范围。

    net.ipv4.tcp_tw_reuse = 1 //允许将TIME-WAIT sockets 重新用于新的TCP 连接。

    net.ipv4.tcp_syncookies = 1 //开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理。

    net.ipv4.tcp_max_orphans = 262144 //系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。

    net.ipv4.tcp_max_syn_backlog = 262144 //记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。

    net.ipv4.tcp_synack_retries = 1 //为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。

    net.ipv4.tcp_syn_retries = 1 //在内核放弃建立连接之前发送SYN 包的数量。

    net.ipv4.tcp_keepalive_time = 30 //当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时。

    1. Nginx和lvs负载均衡比较

    1)lvs的特点:

    A. 抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的 lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和 cpu方面基本无消耗。

    B. 配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。

    C. 工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。

    D. 无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。

    E. 基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。

    另:lvs也不是完全能判别节点故障的,譬如在wlc分配方式下,集群里有一个节点没有配置VIP,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。所以,用lvs也得多多当心为妙。

    1. Nginx的特点是:

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

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

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

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

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

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

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

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

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

    J. Nginx新版本已经支持代理tcp各种协议,不再仅仅局限在代理http、https以及email。

    1. zabbix监控哪些项目,模板是不是自己写的,触发报警有哪些,阀值都是多少

    答案:

    监控了CPU使用、系统负载、内存剩余、磁盘使用百分比、mysql主从、mysql队列数量、网站访问量、网卡流量、web状态码,有自己写的自定义监控脚本。触发报警的有系统负载(当高于20报警)、磁盘使用百分比(高于90%报警)、mysql主从是否正常(不正常告警)、mysql队列数量(高于400报警)、网卡流量(高于100M报警)等等。

    1. php优化参数有哪些,fastcgi设置是多少,动态还是静态

    答:

    A. php.ini安全配置,禁掉危险的函数

    disable_functions(exec,system,passthru,error_log,ini_alter,dl,openlog,syslog,readlink,   symlink,link,leak,fsockopen,proc_open,popepassthru,chroot,scandir,   chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,popen)

    B. php.ini配置日志

    display_errors = 默认Off [On] 打开错误日志

    error_log=/usr/local/php/logs/php_errors.log

    error_reporting=E_ALL & ~E_NOTICE

    C. Php.ini中定义open_basedir = /data/www:/tmp 白名单目录

    D. Php-fpm.conf中配置慢执行日志

    E. Php-fpm.conf定义max_children

    F. 问题中的fastcgi指的就是这个fpm配置,最大进程数(max_children)为300,动态(dynamic)

    1. TCP有哪些了解,TCP连接状态中“TIME_WAIT”是什么意思,影响什么

    答:关于tcp有点复杂,直接上图吧,更直观
    在这里插入图片描述

    状态描述:

    CLOSED: 这个没什么好说的了,表示初始状态。

    LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。

    SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本 上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。

    SYN_SENT: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状 态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。

    ESTABLISHED:这个容易理解了,表示连接已经建立了。

    FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别 是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。

    FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。

    TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

    CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

    CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对 方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以 close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。

    LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。

    1. 网站出现500,502,400,403,404都是什么意思,怎么排查和解决

    答案:

    500:服务器内部错误,因为服务器上的程序写的有问题,需要打开错误日志,查看日志,分析错误信息。

    502:网关错误,服务器作为网关或代理,从上游服务器收到无效响应。Nginx出现最多,出现502要么是nginx配置的不对,要么是php-fpm资源不够,可以分析php-fpm的慢执行日志,优化php-fpm的执行速度。

    400:错误请求,服务器不理解请求的语法。这可能是用户发起的请求不合理,需要检查客户端的请求。

    403:服务器拒绝请求。检查服务器配置,是不是对客户端做了限制。

    404:未找到请求的资源。检查服务器上是否存在请求的资源,看是否是配置问题。

    1. 从运维角度讲一下怎么预防cc攻击和ddos攻击

    答案:先来说一下什么是cc攻击和ddos攻击。

    1) CC主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观。

    一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的数据容量有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。

    CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。

    防御CC攻击可以通过多种方法,比如,可以分析攻击的请求头信息,分析它的特点,然后针对这些请求做一些限制。也可以分析请求的ip,利用iptables来限制ip。将网站做成静态页面,也可以有效降低服务器资源使用。另外,还可以限制连接数量,修改最大超时时间等。

    2) ddos攻击的方式有很多种,最基本的ddos攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。单一的ddos攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等等各项指标不高的性能,它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了-目标对恶意攻击包的"消化能力"加强了不少。这时候分布式的拒绝服务攻击手段(ddos)就应运而生了。ddos就是利用更多的傀儡机(肉鸡)来发起进攻,以比从前更大的规模来进攻受害者。

    简单的ddos,比如cc,我们可以通过限定ip来解决攻击。但有时候攻击量很大,甚至可以把机房的网络攻击瘫痪,这时候只能临时在上层网络把目标IP封掉,这样牺牲单个ip而保全大局。也可以接入第三方的防ddos攻击的cdn。

    1. 简要叙述下列端口锁运行的服务?

    21 22 23 25 110 143 873 3306

    答案:分别是ftp sshd telnet smtp pop3 imap rsync mysql

    1. 列出当前linux服务器所有监听的端口以及进程号。

    答案:netstat -lnp

    1. 让某普通用户能进行 cp /dir1/file1 /dir2的命令时,请说明dir1 file1最小具有什么权限

    答案:dir1 005 file1 000

    1. 简述tcp三次握手的过程?
      在这里插入图片描述

    第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

    第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;

    第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

    1. 如何显示testing文件的第100行?

    答案:sed -n ‘100p’ testing

    1. 如何查看占用端口8080的进程?

    答案:lsof -i :8080

    1. 简述 raid0 1 5 三种工作模式的工作原理?

    答案参考第5套11题

    1. 你使用过监控软件吗?说说其特点?

    答案参考第13套第9题

    10.你认为系统调优方面都包括哪些工作,已linux为例,请阐述,并举一些参数为例?

    答案参考第6套9题

    1. 如何查看当前linux系统的状态如cpu使用,内存使用,负载情况,看到swap使用量大时,是不是意味着物理内存已不够用?

    答案:top命令就可以看cpu使用、内存使用以及负载情况,当swap使用率大时,不一定是内存不够,如果swap容量固定不变,那内存就不是瓶颈。用vmstat 1命令看,si so两列的数值在不断变化时,内存就不够了。

    1. 如何修改ip主机名DNS?

    答案:

    修改ip和DNS在配置文件/etc/sysconfig/network-scripts/ifcfg-eth0中修改,修改主机名,在/etc/sysconfig/network中修改。

    1. 如何查看PID为29394的进程的环境变量?

    答案: cat /proc/29394/environ

    1. 请找出 /home下所有5天前以.log结尾的文件列表?

    答案:find /home/ -name “*.log” -mtime +5

    1. linux软链接和硬链接的区别?

    答案:软链接相当于windows的快捷方式,源文件删除软链接不可用,硬链接的文件对应同一个inode,源文件删除硬链接的文件可以用。软链接支持目录,硬链接不支持。

    1. 当io出现瓶颈时,应该查看哪个参数,为什么?

    答案: vmstat 1 查看wa列,wa列表示处于等待状态的cpu百分比,当IO比较慢时,CPU会有大量的wait。

    1. 在 bash 里 $0 $? $* $@各表示什么意思?

    答案:

    $0 Shell本身的文件名

    $?最后运行的命令的返回值

    "*所有参数列表。如"*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数

    @"@ 所有参数列表。如"@“用「”」括起来的情况、以"$1" “2""2" … "n” 的形式输出所有参数。

    展开全文
  • Linux 运维面试题20道

    2019-08-08 21:30:53
    Linux 运维面试题 1、为什么我们要使用tomcat,类似的软件有哪些? 因为Apache仅支持静态网站,不能解析Java、Jsp,它们服务端口也不同Apache端口80 tomcat端口8080 类似的软件有Weblogic (收费)Jboss(免费)...

    Linux 运维面试题

    1、为什么我们要使用tomcat,类似的软件有哪些?

    因为Apache仅支持静态网站,不能解析Java、Jsp,它们服务端口也不同Apache端口80  tomcat端口8080
    
    类似的软件有Weblogic (收费)Jboss(免费)Resin、Jetty
    

    2、tomcat优化

    内存优化:JAVA_OPTS='-Xms=256m -Xmx=1024m -Xmn=512m'
    
    并发优化:maxProcessors=2000,最大处理线程数
    
    maxSpareThreads=2000,tomcat连接器的最大空闲socket线程数
    
    缓存优化:compressionMinSize=2048,启动压缩的输出内容大小,默认2048
    

    3、影响mysql主从不同步的因素可能有哪些?

        网络延迟
        主从两台机器的负载不一样(单位时间内活跃的进程)
        mysql异常宕机情况下,如果未设置sync_binlog=1或者innodb_flush_log_at_trx_commit=1很有可能出现binlog或者relaylog文件出现损坏,导致主从不一致
        mysql本身的bug引起的主从不同步
        mysql版本不一致
        mysql的最大连接数用完了
    

    4、MySQL主从同步的原理是什么?MySQL是通过什么来保证主从数据的同步?

    同步原理:从服务器的IO线程从主服务器获取bin-log二进制日志,并在本地保存为relay-log中继日志,然后通过SQL线程来在从服务器上执行中继日志中的内容,从而使从库和主库保持一致。
    
    在slave上修改配置,通过binlog日志保证主从数据同步。
    
    在master上修改配置参数:Innodb_flush_log_at_trx_commit = 1;Sync_binlog = 1
    
    在slave上修改配置参数:Master_info_replication = “table”;
    
    Relay_log_info_replication = “table”;Relay_log_recovery = 1
    

    5、MySQL的主从复制过程是同步的还是异步的?

    主从复制的过程是异步的复制过程,主库完成写操作并计入binlog日志中,从库再通过请求主库的binlog日志写入relay中继日志中,最后再执行中继日志的sql语句。
    

    6、存储引擎InnoDB和MyISAM有什么区别?

    主要差别:两种类型最主要的差别就是InnoDB支持事务处理与外键和行级锁,而MyISAM不支持。所以MyISAM往往就容易被人认为只适合在小项目中使用。
    
    MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率高,能加载更多索引,而InnoDB是索引和数据是紧密捆绑的,没有压缩,体积比MyISAM大。
    

    7、NGINX代理负载均衡的调度算法有哪些?具体实现时的现象是什么?

    1.轮询(默认):每个请求按时间顺序逐一分配到不同的后端,如果后台某台服务器宕机,自动剔除故障系统,使用户访问不受影响,这种方式简便,成本低,但是可靠性低,负载均衡不均衡,适用于图片服务器集群和纯静态页面服务器集群。
    
    2.weight(权重):weight的值越大分配到访问概率越高,主要用于后端每台服务器性能不均衡的情况下,或者仅仅为在主从的情况下设置不同的权值,达到合理有效的利用主机资源。
    
    3.IP_HASH(访问IP):每个请求按访问的哈希结果分配,使来自同一个IP的访问固定一台后端服务器,并且可以有效解决动态网页存在的session的共享问题。
    
    4.FAIR(第三方):比weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能的进行均衡负载,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。nginx本身不支持fair,如果需要这种调度算法,则需要安装upstream_fair模块。
    
    5.URL_HASH(第三方):按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。这种调度算法需要安装nginx的hash软件包 
    

    8、为什么是四层的负载均衡,而不是其他层

    在四层模式下,仅仅只是流量转发或者是TCP的porxy。七层是full proxy,需要分析协议。显然四层的转发效率更快,但功能少了许多。MySQL的负载均衡仅仅只是发生在网络层,所以选四层代理。
    

    9、keepalived的工作原理是什么,使用的是什么协议?

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

    10、nginx的七层代理有什么好处?

       请求如果直接发到同步处理的后端,那么从收到请求到把响应发出去的这段时间中,一个进程的资源就被占用了。在慢链接的情况下,这个进程除了处理之外,大多数时间基本耗费在等待上,而nginx有异步非阻塞模型,它可以通过基于事件的方式同时处理和维护多个请求,而后端只需要做逻辑计算,节约了等待时间去处理更多的请求。
    
       动态页面的IO性能不好,nginx可以将请求缓存下来,再将完整的请求转发给后端服务器做处理,减少后端服务器的等待时间。
    

    11、nginx upstream的容错机制是怎么样的(有台机器挂掉了,nginx怎么处理的)

       nginx收到客户端的请求,将请求根据调度算法转发给后台服务器,后台服务器防问被拒接或者返回错误信息。nginx将其暂停一段时间,在这段时间内不再将请求转发给该服务器,并将请求转发给后台的其他服务器响应。
    

    12、浏览器中输入域名回车后HTTP的请求是怎么进行的?

       http将请求发送给nginx代理,nginx将请求转发给后台服务器,后台服务器接收请求,并返回信息给nginx,nginx收到后台服务器的信息后返回给http。
    

    13、nginx如何配置多域名,防盗链

    server {
           listen    80;
           server_name www.xxx.com mall.xxx.com img.xxx.com;
    }
    
    location / {
         valid_referers nono blocked mall.xxx.com;
         if ($invalid_referer){
         return 403;}
    }
    

    14、Apache、Nginx、Lighttpd都有哪些优缺点

       Apache特点:1)几乎可以运行在所有的计算机平台上;2)支持最新的http/1.1协议;3)简单而且强有力的基于文件的配置(httpd.conf);4)支持通用网关接口(cgi);5)支持虚拟主机;6)支持http认证,7)集成perl;8)集成的代理服务器;9)可以通过web浏览器监视服务器的状态,可以自定义日志;10)支持服务器端包含命令(ssi);11)支持安全socket层(ssl);12)具有用户绘画过程的跟踪能力;13)支持fastcgi;14)支持java servlets
    
       Nginx特点:nginx是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器,处理静态文件,索引文件以及自动索引,无缓存的反向代理加速,简单的负载均衡和容错,具有很高的稳定性,支持热部署。
    
       Lighttpd特点:是一个具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块,Lighttpd是众多opensource轻量级的webserver中较为优秀的一个,支持fastcgi,cgi,auth,输出压缩,url重写,alias等重要功能。
    

    15、什么是七层的负载均衡和4层的负载均衡,我们的访问请求经过这两种负载均衡都做了些什么处理?

       七层负载均衡是基于URL等应用层的负载均衡;请求经过七层时,七层负载均衡接受虚拟url请求,根据调度算法转发请求到后台服务器
    
       四层负载均衡是基于IP+端口的负载均衡;请求经过四层时,四层负载均衡根据请求的IP和端口,根据调度算法将请求转发到后台。
    

    16、LVS的三种工作模式是什么?分别是如何工作的

       NAT模式(VS-NAT):LVS将客户端发来的数据包的IP头的目的地址转换成其中一台RS(real server)的IP地址,由RS处理数据并返回给LVS,LVS再把数据包的源IP改为自己的IP,目的地址IP改为客户端的IP地址发送给客户端。
    
       IP隧道模式(VS-TUN):将客户端发来的数据包封装一个新的目的IP头标记,通过IP隧道转发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后直接返回给客户端,不需要再经过LVS。
    
       DR模式(VS-DR):客户端发送请求到VIP,LVS将请求报文的目标MAC地址改为RS的MAC地址,将请求转发给RS,而RS响应后的处理结果直接返回给客户端。
    

    17、LVS、NGINX、HAPROXY的优缺点

    LVS优点:具有很好的可伸缩性、可靠性、可管理性。抗负载能力强、对内存和CPU资源消耗比较低。工作在四层上,仅作分发,所以它几乎可以对所有的应用做负载均衡,且没有流量的产生,不会受到大流量的影响。
    
    缺点:软件不支持正则表达式处理,不能做动静分离,如果web应用比较庞大,LVS/DR+KEEPALIVED实施和管理比较复杂。相对而言,nginx和haproxy就简单得多。
    
    nginx优点:工作在七层之上,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则规则比haproxy更为强大和灵活。对网络稳定性依赖非常小。理论上能PING就能进行负载均衡。配置和测试简单,可以承担高负载压力且稳定。nginx可以通过端口检测到服务器内部的故障。比如根据服务器处理网页返回的状态码、超时等。并且可以将返回错误的请求重新发送给另一个节点,同时nginx不仅仅是负载均衡器/反向代理软件。同时也是功能强大的web服务器,可以作为中层反向代理、静态网页和图片服务器使用。
    
    缺点:不支持URL检测,仅支持HTTP和EMAIL,对session的保持,cookie的引导能力相对欠缺。
    
    Haproxy优点:支持虚拟主机、session的保持、cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。支持TCP协议的负载均衡;单纯从效率上讲比nginx更出色,且负载策略非常多。
    
    缺点:扩展性能差;添加新功能很费劲,对不断扩展的新业务很难对付。
    

    18、DNS/智能DNS/CDN原理是什么?

    DNS正向解析将客户端请求的域名转换成IP地址、反向解析将IP转换成域名。
    
    智能DNS在DNS的基础上通过匹配客户端的IP将请求分流到最近的服务器上,达到负载均衡。
    
    CDN在DNS和智能DNS的基础上,将客户端的请求转给后台真实服务器,返回给客户端的同时,缓存到本地服务器上,下次客户端再次访问该页面时直接将缓存返回给客户端。
    

    19、将本机80端口请求转发到另外一台主机的8080端口

    iptables -t nat -A PREROUTING -d 192.168.1.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:8080 
    
    iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 80 -j SNAT --to-source 192.168.1.1
    

    20、如何将本地80端口的请求转发到8080端口

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    

    版权声明:本文为CSDN博主「你的影子闪」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_37237672/article/details/81904770

    展开全文
  • Linux运维面试总结

    2021-01-07 05:08:16
    1.ssh远程连接的问题? 第一种是远程连接慢的问题: (1)可以通过ssh -v 来检测哪个步骤出现的问题。根据对应的问题,来针对性的进行解决。 (2)可能是DNS反向解析不正确导致的.正常情况下默认配置下 sshd 初次接受 ...
  • 今天小编为各位准备参加Linux运维面试的小伙伴们准备了这篇参加Linux运维面试时经常会被问到的shell脚本问题有哪些的文章,虽然现在Python在运维工作中已经使用很普遍,但是很多企业在找Linux云计算工程师的时候还是...
  • linux运维面试题:第一部分

    千次阅读 2021-01-25 23:22:46
    linux运维面试题: (第一部分)三 在生活中跳槽或者换萌新找工作时,总会显得没有水平,从而不能在人群中脱颖而出那么,如何在跳槽中,从容的应对考官的面试呢,(小宇)在这里总结了一点面试题供大家分享: 注:...
  • Linux 运维面试问题总结 1、详细描述mysql主从复制的方式?(类似跟DRBD高可用的协议类型) 答: (1)同步复制(C协议:sync):只有在本地和远程磁盘都确定写入已完成时,主节点才会认为写入完成。master的...
  • Linux运维面试题解答

    2017-03-23 13:45:52
    标签:Linux运维面试题解答1、DNS使用的端口号和协议,简单描述一下DNS正向解析和反向解析的工作原理和作用还有应用场景?DNS使用DNS使用的端口号是53,封装协议udp。正向解析是指域名到IP地址的解析过程。反向解析...
  • linux运维面试题: (第三部分)三 本章是关于docker的面试题于实战(实战=当你正在面试时,回答问题的方式) 注:(很多题都是通过网上搜索总结出来的,可能在一部分内发现自己写的东西:如有不满请联想我删除,谢谢...
  • linux运维面试题: (第二部分)三 iptables防火墙部分面试题 (仅供参考) 注:(面试题是通过本人在网上搜索总结出来的,如果您看到文章内有,属于自己创造的部分,请联系我,谢谢) 你听说过Linux下面的iptables...
  • 让我先给大家介绍一下典型的系统管理员的日常任务,以及 24 个常见 Linux 运维面试题。 初级运维面试题 1. 登录Linux服务器后你使用的前五个命令是什么? 答: lsblk — 查看所有块设备的信息 who — 可以看...
  • Linux运维面试题及解答1、创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录;1.1大家都知道linux系统分区都是以文件的形式存在的,当我们安装完一台linux系统的设备后,设备的磁盘分区...
  • linux运维面试题3

    千次阅读 2020-12-02 13:37:39
    Linux系统中DNS服务进程名为(A) A.named B.httpd C.ftpd D.SysLog 2.在UINX/Linux中,系统Root用户口令信息一半保存的文件夹是(D) A.autobat B.service.conf C.inetd.conf D.shadow 在下列选项中,属于Linux...
  • 前几天朋友去面试,拿到的一份Linux运维面试题,不太全,数据库方面的没有弄到,有些没有答完,欢迎大神补充1、写出至少四种Linux发行版本Redhat、centos、suse、ubuntu、debian、gentoo、slackware、fedora、arch ...
  • Linux运维面试题:请简要说明Linux系统在目标板上的启动过程? 该问题是Linux运维面试最常见的问题之一,问题答案如下: 1.用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动; 2.启动设备上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,504
精华内容 601
关键字:

linux运维面试

linux 订阅