继续屌丝回答网传面试题
后续将整理出豪鹫亲身经历面试过的公司运维技术面的题目(非笔试题目,技术面运维经理的提问),并也附上答案。
敬请期待。。。。。
上海某证券公司:
Linux开机流程
答:过程如下:
<1>开启电源,加载BIOS————当你按下电源按钮时,服务器会检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常,加载BIOS信息,因为BIOS中包含了CPU的相关信息,设备启动顺序信息,硬盘信息,内存信息,时钟信息等等,加载之后,服务器知道应该去读取哪个硬件设备了。
<2>读取MBR————硬盘上第0磁道第一个扇区被称为MBR(Master Boot Record,主引导记录),大小是512字节,存放了预启动信息和分区表信息
<3>Boot Loader————Boot Loader就是在操作系统内核运行之前运行的一段小程序,通过这段小程序,可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。Boot Loader有若干种,其中以Grub、Lilo最为常见,以Grub为例,系统读取内存中的grub配置信息(centos 6.x是grub.conf),并按照此配置信息来启动不同的操作系统。
<4>加载内核————根据grub设定的内核映像所在的路径,系统读取内存映像,并进行解压缩操作,此时屏幕一般会输出“Uncompressing linux”的提示,当解压缩内核完成后,屏幕输出“OK,booting the kernel”。
<5>用户层init依据inittab文件来设定运行等级————内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittb文件,并依据此文件来进行初始化工作。一般情况下,要么是等级3(命令行界面),要么是等级5(图形化界面)。
<6>init进程执行rc.sysinit————在设定了运行等级之后,Linux系统执行的第一个用户层文件就是/etc/rc.d/sysinit脚本程序,它的工作包括设定PATH、设定网络配置、启动swap分区、设定/proc等等。
<7>启动内核模块————具体是依据/etc/modules.conf文件或/etc/modulefiles(centos 6.x)目录下的文件来装载内核模块。
<8>执行不同运行级别的脚本程序————根据运行级别的不同,系统会运行rc0.d到rc6.d中相应的脚本程序来完成相应的初始化工作和启动相应的服务。
<9>执行/etc/rc.d/rc.local————rc.local就是在一切初始化工作后,linux留给用户进行个性化的地方,可以把你想设置和启动的东西放到这里。
<10>执行/bin/login程序,进入登录状态————此时,系统哥已经进入到等待用户输入username和password的时候了。
2.TCP三次握手,四次挥手
答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
说明:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)
第一次握手————建立连接时,客户端发送syn包(syn=j)到服务器,并进入syn_send状态,等待服务器确认;
第二次握手————服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个syn包(syn=k),即syn+ack包,此时服务器进入syn_recv状态;
第三次握手————客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=k+1),此包发送完毕,客户端和服务器进入established状态,完成三次握手,客户端与服务器开始传送数据。
第一次挥手————客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态;
第二次挥手————服务器收到FIN后,发送一个ACK包给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态;
第三次挥手————服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态;
第四次挥手————客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。
3.如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0
答:iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 8080
4.什么是NAT,常见分为那几种,DNAT与SNAT有什么不同,应用事例有那些?
答:NAT(Network Address Translation,网络地址转换)是将IP数据包头中的IP地址转换为另一个IP地址的过程。分为DNAT (目的网络地址转换)和SNAT(源网络地址转换)……
5.包过滤防火墙与代理应用防火墙有什么区别,能列举几种相应的产品吗?
答:包过滤防火墙是根据包头进行的过滤,并且是处于网络层的,根据包的源ip地址,目标ip地址,协议类型,端口号,进行过滤;代理应用防火墙工作在应用层,他使用代理服务器技术,将内网对外网的访问,变为防火墙对外网的访问,可以对包的内容进行分辨,从而过滤。
代理应用防火墙:天融信GFW4000
包过滤防火墙:华为 NE 16E
6.iptables是否支持time时间控制用户行为,如有请写出具体操作步骤。
答:iptables+crontab。
7.说出你知道的几种linux/unix发行版本。
答: Linux:Redhat、CentOS、Fedora、SuSE、Gentoo、Debian、Ubuntu
Unix:FreeBSD、Solaris、AIX、HP
8.列出linux常见打包工具并写相应解压缩参数(至少三种)
答:tar -zxf 、 gzip -d 、 unzip 、 bzip2 -d 、 unrar
9.计划每星期天早8点服务器定时发送一封内容为:test的邮件。发信人:user1@ab.com 收信人:test1@example.com,如何实现?
答:豪鹫习惯用sendEmail工具发送邮件
安装:
tar zxf sendEmail-v1.56.tar.gz
cd sendEmail-v1.55
cp sendEmail /usr/local/bin
chmod 0755 /usr/local/bin/sendEmail
chown nagios:nagios /usr/local/bin/sendEmail
/usr/local/bin/sendEmail -f user1@ab.com -t test1@example.com -s smtp.163.com -u "this is test" -xu username -xp password -m test
选项参数说明:
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu 表示SMTP验证的用户名
-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用f!2dafaffad就不能被正确识别)
-m 表示邮件的内容
-cc 表示抄送
-bcc 表示暗抄送
-o message-file=mail.html 以mail.html文件的内容作为邮件内容发送
-o message-content-type=html 邮件内容的格式,html表示它是html格式
-o message-charset=utf8 邮件内容编码</pre>
-a /data/site/a.rar 发送ttlsa.rar这个文件, 作为邮件附件
10.当用户在浏览器当中输入一个网站,说说计算机对dns解释经过那些流程?注:本机跟本地dns还没有缓存。
答:
1、当客户机在浏览器输入网站地址,并回车,客户机发出查询请求,首先在本地计算机的缓存中查找。如果在本地无法获得查询信息,则将查询请求发给DNS服务器。
2、首先客户机将域名查询请求发送到本地DNS服务器,当本地DNS服务器接到查询后,首先在该服务器管理的区域的记录中查找,如果找到该记录,则利用此记录进行解析;如果没有区域信息可以满足查询要求,服务器在本地的缓存中查找。
3、如果本地服务器不能在本地找到客户机查询的信息,将客户机请求发送到根域名DNS服务器。
4、根域名服务器负责解析客户机请求的根域部分,它将包含下一级域名信息的DNS服务器地址返回给客户机的DNS服务器地址。
5、客户机的DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域我的DNS服务器地址。
6、按照上述递归方法逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应IP地址信息。
7、客户机的本地DNS服务器将递归查询结果返回客户机。
8、客户机利用从本地DNS服务器查询得到的IP访问目标主机,即想访问的网站,也就完成了一个解析过程。
11.我们都知道,dns既采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么时候采用udp协议?为什么要这么设计?
答:
A.从数据包大小上分:UDP的最大包长度是65507个字节,相应dns查询的时候数据包长度超过512个字节,这时解析器通常使用TCP重发原来的请求,因为tcp协议主要用于DNS服务器之间传递较大块的信息,例如同步数据库,UDP用户普通的dns查询。
B.从协议本身分:大部分的情况下使用UDP协议,大家都知道UDP协议是一种不可靠的协议,dns不像其它的使用UDP的Internet应用 (如:TFTP,BOOTP和SNMP等),大部分集中在局域网,dns查询和响应需要经过广域网,分组丢失和往返时间的不确定性在广域网比局域网上更 大,这就要求dns客户端需要好的重传和超时算法,这时候使用TCP。
这样设计是因为传输数据的尺寸比较大,并且对数据的精确要求比较高,采用tcp的方式可以保证数据的完整性和正确性。
12.一个EXT3的文件分区,当使用touch test.file命令创建一个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况,说说你的理由。
答:磁盘配额或者inode耗尽。
13.我们都知道FTP协议有两种工作模式,说说它们的大概的一个工作流程?
14.编写个shell脚本将当前目录下大于100K的文件转移到/tmp目录下
答:豪鹫提供两种方法————
A.使用for循环结合awk去读取目录下列出的文件大小,大于100k的文件mv到tmp下;
B.使用find命令;
具体如下:
法1:for结合awk
[root@zintao01 file]# cat mvfile.sh
#!/bin/bash
#script for move currently dir to /tmp which size is bigger than 100k;
#create by haojiu;
#date 2015-x-x
for file in `ls -l | sed -e '1d' | awk '$5 > 102400 {print$NF}'`;
do
mv $file /tmp/
done
法2:find命令
[root@haojiu file]# find ./ -type f -size +100k -exec mv {} /tmp/ \;
15.apache有几种工作模式,分别介绍下其特点,并说明什么情况下采用不同的工作模式?
答:apache主要有两种工作模式:prefork(预派生,默认安装模式)和worker(支持混合的多线程多进程的多路处理模块,可以在编译的时候加参数–with-mpm- worker选择工作模式)
prefork的特点:
1、prefork MPM 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销。
2、可以防止意外的内存泄漏,但这种模式消耗的内存比较大;
3、在服务器负载下降的时候会自动减少子进程数
worker的特点:
worker MPM 使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,假如一个线程崩溃,整个进程就会连同其任何线程一起"死掉".由于线程共享内存空间,所以一个程式在运行时必须被系统识别为"每 个线程都是安全的"。
16.编写shell脚本获取本机的IP/netmask。
答:豪鹫提供以下几种获取方法,仅供参考;
法1:直接通过截取ifconfig命令运行结果
[root@zintao01 ~]# cat getIP.sh
#!/bin/bash
#This script using for get IP and NETMASK.
#create by haijiu
#date 2015-x-x
#获取IP和NETMASK也可以有以下几种方法,任选其一即可;
#IP=`ifconfig eth0|grep -w 'inet'|sed 's/^.*addr://g'|sed 's/ Bcast.*$//g'`
#NETMASK=`ifconfig eth0 |grep -w 'inet'|sed 's/^.*Mask://g'`
#IP=`ifconfig eth0|grep 'inet addr'|cut -d ":" -f2|cut -d " " -f1`
#NETMASK=`ifconfig eth0|grep 'inet addr'|cut -d ":" -f4`
IP=`ifconfig eth0 |grep "inet addr"|awk -F: '{print $2}'|awk '{print $1}'`
NETMASK=`ifconfig eth0 |grep "inet addr"|awk -F: '{print $4}'|awk '{print $1}'`
echo "$IP/$NETMASK"
法2:通过ifconfig-eth0配置文件获取(此种方法适用于有固定的静态IP地址,不过通常服务器都是有固定IP地址的~_~)
[root@haojiu ~]# cat getIP.sh
#!/bin/bash
#This script using for get IP and NETMASK.
#create by haijiu
#date 2015-x-x
#此种方法适用于有固定的静态IP地址
#同样豪鹫这里也提供两种获取方法,仅供参考;
file=”/etc/sysconfig/network-scripts/ifcfg-eth0″
if [ -f $file ] ;then
#IP=`grep "IPADDR" $file|awk -F"=" '{ print $2 }'`
#NETMASK=`grep "NETMASK" $file|awk -F"=" '{ print $2 }'`
#IP=`grep IPADDR $file|cut -d= -f2`
#NETMASK=`grep NETMASK $file|cut -d= -f2`
IP=`cat $file|grep IPADDR|cut -d= -f2`
NETMASK=`cat $file|grep NETMASK|cut -d= -f2`
echo "$IP/$NETMASK"
exit 1
fi
17.简述DDOS攻击的原理,有没有解决办法?有,如何解决?
答:分布式服务拒绝攻击就是用一台主服务器来控制N台肉鸡对目标服务器进行合理的资源请求,导致服务器资源耗尽而不能进行正常的服务。
几种流行的DDOS攻击方式:SYN/ACK FLOOD攻击、TCP全连接攻击、CC攻击(百科:攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS,和伪装就叫:cc(ChallengeCollapsar)。CC主要是用来攻击页面的。)
一个简单的测试: 首先是网站如果打不开的话,可以尝试着用3389连接一下服务器看看,然后还可以用PING命令来测试,再一种方式就是用telnet来登录80端口看看,看会不会出现黑屏。如果这些方式测试都连接不上的话,那就说明受到DDOS攻击了。
然后如果除了80端口之外的其他端口连接都正常,PING命令测试也正常,但就是80端口访问不了,然后看看IIS是否正常,可以把80端口改成其他端口测试,如果可以正常访问,那就说明很可能受到CC攻击。
防御DDOS攻击:
<1>要有充足的网络带宽和稳定安全的机房:选择口碑好、服务好、安全防护好点的机房,网络带宽直接决定了能抗受攻击的能力。
<2>软硬设备的防护:硬件DDOS防火墙黑洞、冰盾都不错,软件如web服务器都有相应的ddos防护模块,iptables,做单IP的并发限制,流量限制,syn及部分攻击限制。
<3>网站架构优化,避免单点提供服务,集群,冗余,负载均衡、缓存技术的架设。
<4>服务器系统自身的优化及安全参数调配
<5>采用高性能的网络设备
18.简述linux下编译内核的意义与步骤,有做过LFS吗?有,请简述过程,注意哪些,意义。
答:编译内核的意义在于使系统更加精简化,更为适合自身业务提供服务,减去很多不必要的预安装功能,使系统能更稳定提供服务;
内核编译的一般步骤:
1、准备工作:备份相关文件,下载并解压Linux新内核;
2、清除从前编译内核时残留的.o文件和不必要的关联;
3、配置内核,修改相关参数;
4、正确设置关联文件
5、make clean
6、编译内核
7、编译模块
8、安装模块
9、使用新内核
10、重新生成ram磁盘
11、重启服务器
19.你的5W,并发是如何做的,架构是什么?LVS,采用什么模式?这个模式的优点是什么? 采用的什么调度方法?为什么采用这个调度方法?你还知道哪些?前端调度有几台服务器,单台机器并发多少?你是如何优化系统的?做了那些配置?
答:一般来讲,lvs架构顶住5w并发是没问题的。具体看公司的服务器架构,一般使用最多的是DR模式,其优点是:调度器只是分发请求,应答包通过单独的路由方法返回给客户端,与TUN模式相比,DR模式不需要隧道结构,
20.raid原理
答:raid中文是“独立冗余磁盘阵列”,它的工作原理:RAID按照实现原理的不同分为不同的级别,不同的级别之间工作模式是有区别的。整个的RAID结构是一些磁盘结构,通过对磁盘进行组合达到提高效率,减少错误的目的。
RAID 0————无差错控制的带区组,要实现RAID0必须要有两个以上硬盘驱动器,RAID0实现了带区组,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。在所有的级别中,RAID0的速度是最快的。但是RAID0没有冗余功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
RAID 1————镜象结构,RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。
RAID5————分布式奇偶校验的独立磁盘结构,RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错,允许单个磁盘出错,,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。硬盘的利用率为n-1。 但是它对数据传输的并行性解决不好,而且控制器的设计也相当困难。
RAID10————高可靠性与高效磁盘结构,这种结构无非是一个带区结构加一个镜象结构,因为两种结构各有优缺点,因此可以相互补充,达到既高效又高速还可以的目的。大家可以结合两种结构的优点和缺点来理解这种新结构。这种新结构的价格高,可扩充性不好。主要用于容量不大,但要求速度和差错控制的数据库中。
21.如何查看占用80端口的进程,并清理该端口进程。
答:使用命令lsof -i:80查看占用80端口的进程,使用命令pkill该进程
或者直接使用命令:lsof -i:80|sed '1d'|awk '{print $1}'|xargs kill
22.你对什么数据库比较了解?oracle装过吗?什么版本?mysql,说说有那些引擎,对mysql优化怎么看?备份都是怎么备份的。主从复制,是实时的吗?有添加过10W条左右的数据测试过吗?还问了些mysql的基础问题。
答:豪鹫个人的情况,一个一个问题来:
A.平时用mysql比较稍微多些,oracle也用过,但也只是接触一些皮毛,因为有专门的DBA管理和权限控制的原因;
B.本地虚拟机和公司测试环境还是有安装过oracle,版本是Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production;
C.mysql的存储引擎有很多,常用的有四种存储引擎:MyISAM、InnoDB、MEMORY和MERGE,其中以MyISAM和InnoDB最为常见。
MyISAM:不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
InnoDB:InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以及保留数据和索引。
MEMORY:memory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。
MERGE:merge存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,MERGE表中并没有数据,对MERGE类型的表可以进行查询、更新、删除的操作,这些操作实际上是对内部的MyISAM表进行操作。
补充:MyISAM存储引擎和InnoDB存储引擎的区别————MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
两种类型最主要的差别就是Innodb支持事务处理与外键和行级锁。而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,如果数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是首选。而InnoDB的理想使用场合则是高并发,更新操作比较多的表。需要使用事务的表。对自动灾难恢复有要求的表。
D.MySQL优化:
E.Mysql备份:豪鹫的备份策略是每周日凌晨3点做全备,每天凌晨3点做增备,以防万一,我还保留9天内的binlog文件,备份好的文件在本地磁盘保留一份,同时通过ftp自动上传到远程的存储服务器上,然后再利用脚本监控Mysql的备份脚本是否正常工作。
F.主从复制:有主从复制(异步)、半同步复制、基于SSL复制,豪鹫采用的是异步的主从复制,异步复制的好处在于它比同步复制快。
23.cacti和nagios各有什么优势,你用的cacti版本号多少?你都监控过哪些服务?报警是如何实现的?
答:cacti比较侧重于流量方面的监控,画图也比较美观,提供各种插件有针对性地进行监控,豪鹫见过有很多机房也采用cacti监控流量;而nagios则比较侧重于监控网络服务,提供接口可自定义脚本插件监控自定义的服务等;豪鹫最开始使用cacti的版本是0.8.7,后来升级到0.8.7g,再后来使用0.8.8a和0.8.8b版本;监控的对象包括:主机资源(CPU、内存、磁盘使用率、网卡流量、web服务、db状态、tcp状态以及其他根据业务自定义监控等),报警均使用139邮箱报警,绑定到手机(不过手机号码最好是移动的号码,如果是非移动号码,是可以注册开通139邮箱,但不能绑定到手机)。
24.你对系统安全,有什么想法?常见攻击有哪些?DDos攻击,一般你会怎么处理。对于,系统自身安全,你有那些见解。
答:
25.你平时用的最多的Linux发行版是什么?
答:豪鹫用过Solaris系统,Centos5.x/6.x、redhat5.x/6.x、SUSE 11,当然还有其他系统,如:AIX,HP,FreeBSD,Fedora,Debian,Gentoo,Ubuntu……具体看个人。