运维面试题

278 阅读18分钟

运维面试题-Linux基础篇 你对现在运维工程师的理解以及对其工作的认识

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

故障排查 提示:无论是运维面试、还是工作我们最常见的就是故障排查,衡量是否符合运维岗招聘要求,一个关键要素,就是排错能力。

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

答:从两个方面分析故障原因, 硬件:1)服务器电源问题,断电、电源线松动;2)散热不良造成蓝屏或死机;软件:1)服务器系统文件丢失;2)物理链路或人为原因,造成网络参数配置错误

处理步骤: 1、首先检查服务器开关指示灯是否是亮的,如果不亮,在检查电源完好的情况下重新启动服务器,如果启动不成功,与客户协商是否可以启用备用服务器并尽快恢复数据。 2、如果服务器开关指示灯是亮的,接入键盘和显示器,输入账号密码看能否登录,如果不能, 重启服务器并尽快恢复数据,重启失败,启用备用服务器或更换服务器。 3、如果能够通过账号密码登录系统,先查看网卡指示灯是否是亮的,并用ifconfig查看网卡接口是否正常,并用ping命令来测试网络的连通性。 4、如果ping不通,打开网卡配置信息,确认配置信息各项参数是否正常,DNS网关配置是否是正确的,并用ifdown,ifup重启网卡,再ping看能不能ping通。 5、如果还是ping不通,及时排查本地纤尾以及模块等物理设备是否连接正常,收发光是否在规定的范围内,协商客户是否可以重启服务器,并确认数据方面没有网络配置和数据方面的变化。 6、如果ping通,告诉数据人员检查链路是否连接正常,看有没有丢包,确认没有丢包再检查纤尾和模块物理是否连接正常。 7、如果还是无法正常开机,重启机器,重复3456步骤,多检查几遍,还是不可以建议更换新的服务器,尽快恢复业务!

2、Linux系统中病毒怎么解决

答:1)先将中毒服务器的网络断开;2)查找并删除病毒,top命令找到cpu使用率最高的进程,可以用ps aux 找到病毒文件位置,rm -f 命令删除病毒文件,检查计划任务、开机启动项和病毒文件目录有无其他可疑文件,chkconfig --list | grep 3:on;然后检查开机启动的一个文件,more /etc/rc.local;3)即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装系统。

3、 发现一个病毒文件你删了他又自动创建怎么解决

答:1)先断掉网络连接,断了外网,病毒就失去外联的能力,杀掉它就容易的多;断了内网,就不会扩大危害范围; 2)查看确定可疑进程,ps axu一个个排查可疑的用户及系统文件相似而又不是的文件,用lsof -p pid可以查看到具体是那些进程,经查发现可疑文件,rm -rf后不到一分钟就自动生成,由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首,用命令杀掉即可 3)总结,尽量不要重装系统 一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜

Linux基础 提示:有的时候,面试可能会将某几个问题综合起来问你,需要灵活应对,比如:Raid的原理及区别?实际是一个问题!问到区别,就必然牵扯到原理!

1、 什么是Linux 答:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

2、 Unix和Linux有什么区别? 答: 版本 Linux是Unix的克隆版本。但是,如果考虑可移植操作系统接口(POSIX)标准,则可以将Linux视为UNIX。

Linux只是核心 所有Linux发行版都包括GUI系统,GNU实用程序,安装和管理工具,GNU c / c ++编译器,编辑器(vi)以及各种应用程序,例如OpenOffice,Firefox。 UNIX操作系统被认为是完整的OS,因为一切都来自一个供应商。

安全与防火墙 Linux随附了基于Netfilter和IPTables的开源防火墙工具,可保护您的系统免受黑客的攻击。UNIX操作系统带有自己的防火墙产品。

备份与恢复 UNIX和Linux带有自己的一套工具,用于将数据备份到磁带和其他备份介质。但是,Linux和UNIX共享一些通用工具,例如tar,转储/还原和cpio等。

3、 Linux 的体系结构? 答:从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用。

4、Linux的基本组件是什么? 答:内核:它是Linux的核心组件,它充当软件和硬件之间的接口。 Shell:它充当用户和内核之间的接口。 GUI: 它代表图形用户界面,这是用户与系统交互的另一种方式。但这与图像,按钮,用于交互的文本框不同。 系统实用程序:这些是允许用户管理计算机的软件功能。 应用程序:执行一组任务的一组功能。

5、什么是 Linux 内核? 答:内核是操作系统的心脏。它充当软件和硬件之间的桥梁。如果软件请求硬件,则内核将在软件和硬件之间传递数据。例如,如果您想播放一首歌曲,则应启动默认播放器,它会请求内核播放一首歌曲,现在,内核将与硬件联系以寻求许可或寻求硬件组件,就像您插入任何耳机一样。大多数Android手机使用Linux内核。内核可以编辑,因为它是根据通用公共许可证发行。功能:系统内存管理、 应用程序管理、硬件设备管理、文件系统管理

6、Linux 开机启动过程?(6和7有点区别,如果不问具体的,可直接说7,千万不要6和7一起说,做个保留,如果问6再说,展示你知识程度深,以免他又问你6和7更难的知识,给自己找坑)

答:centos7开机启动流程

1)开机自检BIOS:根据BIOS中设置,检测内存、硬盘、CPU等硬件信息,决定启动介质,找到MBR扇区

2)MBR引导:读取硬盘第一个扇区,将MBR加载到内存,根据MBR的设置,去找系统的grub引导

3)GRUB2菜单:显示启动菜单给用户,根据所选项或采用默认值,加载内核文件,将系统控制权转交内核

4)加载内核:运行第一个进程 init (进程号永远为 1 ),加载内核文件vmlinuz、虚拟文件系统模块initramfs

5)systemd进程初始化:挂载/etc/fstab文件中的系统,从虚拟文件系统模块initramfs挂载磁盘根目录,内核初始化,加载/usr/lib/systemd/systemd文件,加载target配置(进入相应的运行级别),运行终端,输入用户名和密码。

7、Linux系统缺省的运行级别? 答: 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别2:多用户状态(没有NFS,不支持网络) 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 运行级别4:系统未使用,保留 运行级别5:登陆后进入图形GUI模式 运行级别6:系统正常关闭并重启

8、如何优化 Linux系统(可以不说太具体)? 答: 01)不用root ,添加普通用户,通过sudo授权管理。 02)更改默认的远程连接SSH服务端口及禁止root用户远程连接。 03)定时自动更新服务器时间。 04) 配置yum更新源,从国内更新源下载安装rpm包。 05)关闭selinux及iptable(IPtable工作场景如果有wan ip一般要打开,高并发除外)。 06)调整文件描述符的数量。进程及文件的打开都会消耗文件描述符。 07)定时自动清理/var/spool/clientmquene/目录垃圾文件,防止inodes节点被占满。 08)精简开机自启动服务(crond,sshd,network,rsyslog)。 09)linux内核参数优化/etc/sysctl.conf ,执行sysctl -p生效。 10)更改字符集,支持中文,但建议还是使用英文字符集,防止乱码问题,不要使用中文。 11)锁定关键系统文件。 chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 处理以上内容后把chattr.lsattr改名 oldboy ,这样就安全多了。 12)清空/etc/issue,去除系统及内核版本登录前的屏幕显示。 13)清除无用的默认系统账户或组。

9、Linux 使用的进程间通信方式? 答:管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。信号(signal) 、消息队列、共享内存、信号量、套接字(socket) 。

管道(pipe) 普通管道:通常有两种限制,一是单向传输,二是智能在父子或者兄弟进程间使用。 流管道:去除了第一种限制,为半双工,只能在父子或兄弟进程间使用,可以双向传输。 命令管道:去除了第二种限制,可以在许多并不相关的进程之间进行通信。

信息量(somephore) 信息量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

消息队列(message queue) 消息队列是由信息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

信号 (signal) 消息是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

共享内存(shared memory) 共享内存就是映射一段能被其他进程所访问的内存,这种共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

套接字(socket) 套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同进程间的进程通信。

10、Linux 有哪些系统日志文件? 答:不同的网络服务会使用它自己的日志文件案来记载它们自己产生的各项信息。下述的目录内则是个别服务所制定的日志文件。 /var/log/cron 这个文件记录了系统例行性工作调度的相关信息,如你的crontab调度有没有实际被进行?进行过程中有没有发生错误?/etc/crontab是否编写正确?在这个日志文件内都可以查询。

/var/log/dmesg 该文件记录系统在开机时内核检测过程中所产生的各项信息。由于centos默认将开机时内核的硬件检测过程取消显示,因此额外将数据记录在此文件中。

/var/log/lastlog 该文件记录了系统上所有帐号最近一次登入系统时的相关信息。lastlog命令就是利用这个文件所记录的信息来显示结果。

/var/log/maillog或/var/log/mail/* 该文件或目录记录邮件的来往信息,其实主要记录SMTP和POP3(IMAP)协议提供者所产生的信息。

/var/log/messages 该文件几乎记录了系统发生的所有错误信息(或者是重要的信息),所以这个文件相当重要;如果系统发生莫名的错误时,这个文件是必查的日志文件之一。

/var/log/secure 基本上,只要牵扯到需要输入帐号密码的软件,当登入时(不管登入正确与否)都会被记录到这个文件中。包括系统的login程序、图形界面登入所使用的gdm程序、su、sudo等程序,还有网络联机的ssh、telnet等程序,登入信息都会被记载在这里。

/var/log/wtmp,/var/log/faillog 这两个文件可以记录正确登入系统者的账户信息(wtmp)与错误登入时所使用的账户信息(faillog)。这个文件对追踪一般帐号者的使用行为很有帮助。

/var/log/httpd/,/var/log/news/,/var/log/samba/*

11、请写出下面 linux SecureCRT 命令行快捷键命令的功能? 答: Ctrl + a —->光标移动到行首 Ctrl + e —->光标移动到行尾 Ctrl + c —->终止当前程序 Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断 Ctrl + l —->清屏 Ctrl + u —->剪切光标以前的字符 Ctrl + k —->剪切光标以后的字符 Ctrl + y —->复制u/k的内容 用Ctrl + u剪贴内容advertise,比如输完ddd,下一行,Ctrl + y 自动粘贴进来advertise

Ctrl + r —->查找最近用过的命令 输入之后进入交互,输入关键字即可

tab —->命令或路径补全

12、BASH和DOS之间的基本区别是什么? 答:BASH,命令区分大小写;反斜杠(/)表示目录分隔符;正斜杠“\”表示转义字符;不遵循文件中的约定命名 ;DOS,命令不区分大小写;'/'代表命令参数;''代表目录分隔符;遵循文件中的命名约定

13、linux 基础之-高并发内核优化 答: 1)单进程最大打开文件数限制 2)内核TCP参数方面 Linux系统下,TCP连接断开后,会以 TIME_WAIT 状态保留一定时间,然后才释放端口。当并发请求过多时,会产生大量 TIME_WAIT 状态连接,无法及时断开会占用大量的端口资源和服务器资源。 3)IO事件分配机制 生产环境请根据自己的实际情况调整观察再调整

网络 1、 说说TCP/IP的七层模型 答: 应用层 (Application):例如,用qq还是微信 网络服务与最终用户的一个接口。 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示层(Presentation Layer):微信传输的是图片,设备不识别人能识别的图片,将其转换为各种格式JPEG;若是文本将其转化为ASCll 数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层) 格式有,JPEG、ASCll、DECOIC、加密格式等

会话层(Session Layer):发送端使用qq程序接收端必须是qq不能是微信 建立、管理、终止会话。(在五层模型里面已经合并到了应用层) 对应主机进程,指本地主机与远程主机正在进行的会话

传输层 (Transport):微信使用的是udp高效,但是丢包;淘宝网站购物,用的是tcp安全但是效率低 定义传输数据的协议端口号,以及流控和差错校验。 协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

网络层 (Network):类似普通话,保证从大方面,能找到通信另一方; 进行逻辑地址寻址,实现不同网络之间的路径选择。 协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

数据链路层 (Link):类似方言,保证从小方面,能定位具体的真实设备 建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议) 将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正

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

简单的说,物理层确保原始的数据可在各种物理媒体上传输。网线(电信号传输)、光纤(光传输)传输的媒介不一样,使用的标准也不一,定义其标准。

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

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

#!/bin/bash #不仅显示在终端,而且在当前目录保存在线主机到uplog日志 ips="192.168.1." for i in {1..254}; do ping -W 1 -c 1 ips{ips}{i} &>/dev/null && echo "ips{ips}{i} is up" | tee -a uplog || echo "ips{ips}{i} is down" done echo "Please read uplog to know which host is online. " 或 #!/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.ipUPelseecho192.168.1.ip UP else echo 192.168.1.ip DOWN
fi }&
done
wait

或 #!/bin/bash ips="172.16.0." for ip in seq 1 3 do

ping -W 1 -c 2 ips{ips}{ip} &> /dev/null

if [ ?eq0];thenecho"? -eq 0 ];then echo "{ips}${ip} is up"

else echo "ips{ips}{ip} is down" fi done

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 4、请执行命令取出 linux 中 eth0 的 IP 地址(请用 cut,有能力者也可分别用 awk,sed 命令答) 答:ifconfig eth0 | sed -n '2p'| awk -F " " '{print 2}'提示:“里面有空格” 或者ifconfig ens33 | grep netmask | awk -F " " '{print 2}'

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

6、常用网络问题排查命令

ping :判断两个网络是否可互通。

ARP 地址解析协议 功能:显示和修改IP地址与MAC地址的之间映射 arp -a :显示所有的ARP表项 arp -s IP MAC 在ARP中缓存添加一条记录 arp -d IP 在ARP中缓存删除一条记录 arp -g 显示所有表项

netstat 该命令显示协议统计信息和当前的TCP/IP连接。 1》netstat -a 显示所有连接和侦听端口,服务器连接通常不显示

2》netstat -e 显示以太网统计 3》netstat -n 以数字格式显示IP地址和端口号 4》netstat -r 显示路由表的内容 5》netstat -s 显示每个协议的统计 telnet ip 端口

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

2、你常用的Nginx模块,用来做什么 答:rewrite模块,实现重写功能

access模块:来源控制

ssl模块:安全加密

ngx_http_gzip_module:网络传输压缩模块

ngx_http_proxy_module 模块实现代理

ngx_http_upstream_module模块实现定义后端服务器列表

ngx_cache_purge实现缓存清除功能

3、查看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

重启后生效

4、已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近 7 天的访问日志!请问如何解决? 请给出解决办法或配置或处理命令 答:find /app/logs/ -type f -name ".log"-mtime +7 -exec rm -f {} ; 或find /app/logs/ -type f -name ".log"-mtime +7 |xargs rm -f

5、每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包 答:编写shell脚本;创建计划任务: crontab –e 00 00 * * * /bin/sh /root/a.sh 脚本如下:

#/bin/bash
cd /var/www/ && /bin/tar zcf /data/html-date +%m-%d%H.tar.gz html/
1 2 数据库

1、主从复制的过程原理

1.当从库和主库建立MS关系后,会向主数据库发送SYNC命令

2.主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来

3.当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis

4.从Redis接收到后,会载入快照文件并且执行收到的缓存的命令

5.之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致