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

    2017-08-17 15:52:15
    linux运维面试题
  • 企业Linux运维面试题问答 企业Linux运维面试题问答
  • Linux运维面试题

    2017-11-09 20:35:00
    Linux运维面试题 1)Linux启动大致过程? *BIOS自检 *运行系统内核并检测硬件从硬盘启动并运行系统的第一个进程init(LILO和GRUB模式) *init读取系统引导配置文件/etc/inittab,并根据运行级别配置服务/etc/rc.d/rc....

         Linux运维面试题


    1)Linux启动大致过程?

    *BIOS自检

    *运行系统内核并检测硬件从硬盘启动并运行系统的第一个进程init(LILO和GRUB模式)

    *init读取系统引导配置文件/etc/inittab,并根据运行级别配置服务/etc/rc.d/rc.local

    2)服务器已有用户和组是nginx,现在要把在home目录下app.conf的文件所属主属组为nginx的命令是




    3)请详细描述DNS查询原理




    4)目前常用的监控软件有哪些?你最用是哪个,具体部署哪些用途




    5)用iptables 添加一个规则允许192.168.0.123 访问本机3306 端口




    6)编写一个shell 脚本,实现每周日23:35 自动删除系统内 容量大于500M的,以.tmp结尾的文件




    7)28)crontab  在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh 怎么实现 ?



    8)vim 常用的快捷键:怎么复制一行然后打印出来,移动文件开头,移到文件最后一行,删除整行,在文件向前查找test,将所有出现old的替换为new


    9)Linux下常用的DNS服务软件是什么,举出集中常用的DNS记录,如果域名是abc.com 配置好了一台邮件服务器,IP地址为183.7.0.20,该如何做解析。是否了解bind的智能解析,如果了解请阐述下其原理



    10)mysql数据库主从复制原理,常接触的数据库分库分表工具有哪些,怎么分?













    本文转自去轻狂书生51CTO博客,原文链接:http://blog.51cto.com/8999a/1963440 ,如需转载请自行联系原作者




    展开全文
  • linux运维面试题汇总

    2018-07-11 19:47:47
    linux运维面试题汇总,包括计算机网络,linux系统常见命令,常用系统服务,集群搭建等当面
  • 1 服务器的linux系统是什么版2 linux你做过那些优化 3 在linux上部署过那些服务4 你怎样用nagios做的监控,监控什么? 5 用cacti怎样对网络进行监控?以前公司的情况(问具体的数字? 6 你怎样查看日志?查什么内容? 7 ...
  • 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 运维面试题

    2020-12-15 10:59:11
    32.pxe装机流程 DHCP获取ip,获取tftp服务器地址 Tftp服务器>>>initrd.img pxelinux.0 pxelinux.cfg/defultS>>>ftp地址 ks.cfg 文件地址 ftp提供的镜像,获取到镜像文件,然后按照ks.cfg 内容进行安装 1)准备...

    1.删除30天前文件类名字为…log的文件

    find log/ -mtime +30 -a -type f -a -name "*.log" -exec rm -f {} \;
       find log/ -mtime +30 -a -type f -a -name "*.log" | xargs rm -f
       Rm -rf $( -mtime +30 -a -type f -a -name "*.log")
    

    2.网卡配置路径

      /etc/sysconfig/networkmask-scripts/ifcfg-ens32
    

    3.路由器添加删除路由条目
    静态路由

    route add -net 192.168.28.0/24 gw 192.168.13.1
      route del -net 192.168.28.0/24 gw 192.168.13.1
    

    默认路由

      route add default gw 192.168.13.1
      route del default gw 192.168.13.1
    

    4.cat /etc/fstb/
    这个文件里面都是什么
    怎么写
    挂载文件,挂载目录,类型,挂载选项(默认),是否备份,开机是否校验。
    5.遇到什么类型故障,怎么处理
    删除系统挂在目录,无法进入
    输入root密码,修复
    vi /etc/fstab 注释掉,reboot
    mount -o remount,rw / :把根以读写重新挂载,之后就可以修改了
    6.当前根文件系统共20G,基于LVM制作的LV 名为“/dev/mapper/centos-root”,随着
    日常系统使用,剩余空间明显不足,需要扩展根文件系统。新加硬盘/dev/sdd(20G),
    想要将此硬盘扩展至根文件系统,应如何操作?

    1.创建PV(dev/sdd)
    2.扩展原有卷组cenos
    3.扩展原有逻辑卷/dev/cetos/root
    4.刷新逻辑卷
    具体操作:
    关机加硬盘(20G)

      ls /dev/sdd
      df -hT
      pvscan
      vgdisplay cenos  (free PE /size 0)
      pvcreate /dev/sdd
      vgextend centos /dev/sdd
      vgdisplay centos
      lvextend -l +5119 /dev/centos/root
      xfs_growfs /dev/centos/root
      df -hT
    

    7.常用RAID级别,特点
    0-6,组合款1 0.

    8.之前使用过服务器的内核版本
    3.10
    9.为什么有的命令(tar ps)可以不加“-”?
    继承unix
    10.top命令内容都是什么?

    在这里插入图片描述

    当前时间,上线时间,用户,平均负载(1min,5min,15min的平均负载,单双核)
    任务总数,运行数,休眠数,停止的,僵尸进程
    cpu总核数(按1显示全部核数),user、system、nice、idle、IO-wait、hi(硬中断)、si(软中断)、st(虚拟化磁盘节省)
    kb单位内存,空闲,已用的,缓存
    kb单位交换分区,空闲,已用,可用空间。

    11.你们公司服务器以前用的什么内核文件
    Vmlinuz-2.6.32-432.e16.*86_64

    12.centos 6开机默认运行级别配置
    在这里插入图片描述
    在这里插入图片描述

    Cat /etc/redhat-release
    CentOS release 6.5 (Finanl)     #是6.5版本
    Vim /etc/inittab
      
    
    /etc/systemctl
    

    在这里插入图片描述

    修改字符图形界面切换开机

    在这里插入图片描述

    13.系统级别安全加固
    在这里插入图片描述

    14.block还有但是写不进去内容什么原因?
    i节点耗尽,磁盘配额原因
    15.添加删除路由条目。
    (1)临时:
    1)静态
    加: route add -net 网段/短格式掩码 gw 网关
    减: route del -net 网段/短格式掩码 gw 网关
    2)默认
    加:route add default gw 网关
    减:route del default gw 网关
    (2)永久
    1)CentOS6:vi /etc/rc.local (开机后自动引导文件)
    CentOS7:vi /etc/rc.local 或 vim /etc/rc.d/rc.local
    2)默认路由可以添加到 /etc/sysconfig/network-scripts/ifcfg-ens32
    3)Vi /etc/sysconfig/static-routers (静态)
    例:any net 192.168.200.0/24 gw 192.168.250.254
    16.DNS解析查询方式
    1).递归查询 2).迭代查询
    17.ssh服务绝对路径
    /etc/ssh/sshd

    18.你曾面对公司最棘手的问题
    有客户反馈无法访问网站的问题
    网站出现了5XX错误的解决方案
    网站突然变得很慢的解决方案
    cpu飚高的处理案例
    数据库强制关闭后导致故障的排查案例
    做活动时,CDN带宽突然增加很多的排查案例
    IDC机房流量暴涨的解决案例
    公司老网站迁移的故障案例分析
    一主多从,主服务器宕机的解决案例
    数据库服务器CPU周期性飚高的解决案例
    网站遭受木马攻击,导致网站目录下所有的文件被篡改
    fstab修改错误导致系统无法启动的修复案例
    Linux服务器被入侵后,如何抓虫
    Linux服务器中木马,如何清除和扫描
    服务器被植入挖矿木马之后,cpu飚高的处理办法
    9台nosql数据库同事宕机的解决方案
    大并发慢查询导致cpu耗尽的处理方案
    计划任务造成宕机的解决案例
    inode满导致磁盘无法写入的案例
    云服务器远程连接速度慢的案例
    服务器磁盘因断电损坏的解决案例
    mysql innodb异常修复案例
    已删除数据但磁盘不释放空间的问题分析案例
    Linux Argumet list too long错误解决案例
    zabbix-server被入侵的解决案例
    zabbix漏洞引起的攻击导致内存爆满,服务器宕机案例
    redis漏洞加固方案
    服务器挖矿病毒排查案例

    19.笔试易考,预定义变量
    在这里插入图片描述

    20.四表五链
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    21.char 和vacgar区别

    在这里插入图片描述

    22.tomcat服务器故障
    故障1:
    故障现象: WEB无法访问、SSH无法登陆、桌面登陆验证失败。重启服务器后可以正常登陆。
    故障信息:通过查看系统日志发现cat /var/log/message显示root用户创建了2000多个sessions后显示内存不足。进入tomcat安装目录(/usr/local/tomcat7/logs/)查看日志localhosts_time.log(当天日志)。发现如下错误:java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:714)
    故障判定: 由于tomcat创建的过多sessions,导致系统内存不足。产生如上问题。
    解决方法:在catalina.sh文件中将JVM虚拟机内存调大
    JAVA_OPTS=“-server -Xms4096m -Xmx4096m -XX:PermSize=128M
    -XX:MaxPermSize=256m -XX:NewSize=256m -XX:MaxNewSize=512m” (tomcat7与tomcat8中对于非堆内存的调整变量名有所不同)

    故障2
    故障现象:Tomcat访问报500错误,无法对外提供服务。多个Tomcat服务异常。
    故障排查:查看系统资源,内存有小量上涨,CPU、带宽等负载显著下降,TCP连接数处于ESTABLISHED状态的数据没有显明变化,但非ESTABLISHED状态的数量大量减少。第一时间先上重启服务大法。重启后能短暂提供服务,但是马上又回到卡死状态。使用jstack看到有很多进程卡在网络访问。同时有应用日志报某个服务地址访问失败。想起之前为了优化小概率无法解析域名的错误,而把域名IP写到hosts文件中。
    故障判定: 因某个第三方服务器域名对应的IP地址变化,导致hosts中写的IP地址错误,响应超时时间过长,导致Tomcat的线程被大量占用,无法接受新请求。进一步导致其它Tomcat因为该Tomcat的问题无法响应而同样线程占满,无法响应新请求,造成服务器雪崩问题。所以多次重启均无效,后修改为正确IP地址后恢复正常。
    解决方案:
    1.增加脚本高频(1分钟1次或可更慢)的定时来判断IP是否有变化并刷新hosts文件;
    2.修改tomcat使得有更大的线程数;
    3.缩短请求第三方的超时时间,按具体情况10秒左右;
    4.把这部分可能阻塞的请求,若不影响业务,改用消息队列异步处理,减少线程占用;
    5.增加熔断机制,异常时避免雪崩

    23.软硬连接区别
    硬链接与软连接的区别
    1.删除源文件,硬链接没有影响,软连接不可用
    2.软连接可以跨文件系统,硬链接不可以
    3.硬链接inode号相同,软连接不同
    目录不可以做硬链接,可以做软连接

    24.CentOS6和7区别

    在这里插入图片描述

    25.进程状态除了S和R还有什么?
    R:(task_running)可执行状态
    S:(task_interruptible)可中断的睡眠状态
    D:(task_ununinterruptable)不可中断的睡眠状态
    T:(task_stopped or task_traced)暂停状态或跟踪状态
    Z:(task_dead-exit_zombie)退出状态,进程变成僵尸进程
    X:(task_dead-exit_dead)退出状态,进程即将销毁

    26.什么是进程什么是线程,并发和并行
    进程:资源分配的基本单位,有独立的空间
    线程:CPU独立运行和独立调度的基本单位
    并发:可以处理多个同时发生的事情
    并行:可以同时处理多个事情

    27.常见的RAID级别有哪些?
    RAID 0 条带模式 提高读写速度,数据没有冗余
    RAID 1 镜像模式 数据安全性高,磁盘使用率低,只能使用偶数块盘
    RAID 5 分布式奇偶校验 允许有一块硬盘损坏,写速度降低,最少使用三块硬盘

    28.如果某一天你误执行rm -rf*,会有哪些情况发生
    电脑中的没有权限的文件都会删除,系统命令被删除无法使用,grub.conf被删除,系统开机无法引导,整个系统难以正常运转

    29.Linux常见系统发行版本有哪些?
    RedHat,Centos,suse,ubuntu,fedora

    30.FTP主被动模式原理
    PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。

    PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。

    ansible与SaltStack对比:

    相同点:
    1.都是使用python语言开发的
    2.都具有二次开发的特性
    3.执行命令都支持Ad-hoc模式 (临时命令,执行完就返回)
    4.都可以通过YAML格式文件批量执行
    5.返回的结果都是JSON数据,便于后续处理

    不同点:
    1.Ansible部署更简单,没有客户端,而Saltstack有客户端;
    2.Saltstack的响应速度要比Ansible更快;Ansible通过SSH协议实现,Saltstack使用了ZeroMQ实现通信;
    3.Ansible更加安全,SSH加密传输
    4.Saltstack对于Windows支持更友好,Ansible通过Power Shell来管理Windows
    5.Ansible维护简单,没有客户端,没有守护进程;saltstack需要有Master和minion,主机要启动一个守护进程。

    32.pxe装机流程

    DHCP获取ip,获取tftp服务器地址
    Tftp服务器>>>initrd.img pxelinux.0 pxelinux.cfg/defultS>>>ftp地址 ks.cfg 文件地址
    ftp提供的镜像,获取到镜像文件,然后按照ks.cfg 内容进行安装

    1)准备Centos6安装源,放在/var/ftp/centos6下
    2)安装tftp服务,启用,修改tftp配置
    3)准备linux内核,初始化镜像
    4)准备pxe引导程序,启动菜单文件
    5)安装启用dhcp服务
    6)新建虚拟机,设置网络引导并进行验证
    7)实现kikstart无人值守安装
    8)Pxe与kikstart配合使用实现批量装机

    33.Redis数据类型
    redis中的值可以有string,hash,list,set,zset,geo等多种数据结构和算法组成.

    34.Redis是单线程还是多线程,为什么是这样的?Redis6增加多线程为什么?
    1.Redis在处理客户端的请求时,包括获取(socket读)、解析、执行、内容返回(socket写)等都由一个顺序
    行的主线程处理,这就是所谓的“单线程”。但如果严格来讲从Redis4.0之后并不是单线程,除了主线程外,也有后台线程在处理一些较为缓慢的操作,例如清理脏数据、无用连接的释放、大key的删除等等。
    2.官方回应:使用Redis时,几乎不存在CPU成为瓶颈的情况,Redis主要受限于内存和网络。例如在一个普通的Linux系统上,Redis通过使用pipelining每秒可以处理100万个请求,所以如果应用程序主要使用O(N)或O(log(N))的命令,它几乎不会占用太多CPU。
    使用了单线程后,可维护性高。多线程模型虽然在某些方面表现优异,但是它却引入了程序执行顺序的不确定性,带来了并发读写的一系列问题,增加了系统复杂度、同时可能存在线程切换、甚至加锁解锁、死锁造成的性能损耗。Redis通过AE事件模型以及IO多路复用等技术,处理性能非常高,因此没有必要使用多线程。单线程机制使得Redis内部实现的复杂度大大降低,Hash的惰性Rehash、Lpush等等“线程不安全”的命令都可以无锁进行。
    3
    •可以充分利用服务器CPU资源,目前主线程只能利用一个核
    •多线程任务可以分摊Redis同步IO读写负荷

    展开全文
  • 常见Linux运维面试题分享 1、如何添加一块新的50G硬盘到Linux服务器系统作为单独的分区,并正在使用?需要哪些操作步骤?  a、把硬盘放进服务器并连接 b、建立硬盘分区(fdisk命令) c、格式化分区 d、挂载分区(可写入...

    学习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 ...
  • 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” 的形式输出所有参数。

    展开全文

空空如也

空空如也

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

linux运维面试题

linux 订阅