快速报名
首页 / 干货教程 / 干货教程 / linux运维常见面试题集(三)

linux运维常见面试题集(三)

前段时间,在为大家准备面试的时候收集到一套Linux运维面试题,感觉比较全面,一直保存在草稿,刚在整理后台时翻了出来,干脆就发出来好了,以备不时之需。

相对而言,Nginx/HAProxy+Keepalived就简单多了。
HAProxy的特点是:

1、HAProxy也是支持虚拟主机的。

2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导

  同时支持通过获取指定的url来检测后端服务器的状态
3、HAProxy跟LVS类似,本身就只是一款负载均衡软件

  单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的
4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡

  对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡
5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:

①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;

② static-rr,表示根据权重,建议关注;

③leastconn,表示最少连接者先处理,建议关注;

④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似

 我们用其作为解决session问题的一种方法,建议关注;
⑤ri,表示根据请求的URI;

⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;

⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

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

支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景

Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。

基于LVM快照备份
在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录

进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别

而innodb不开启独立表空间的话只能备份整个数据库。

tar包备份

percona提供的xtrabackup工具
支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同

数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展

可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份

20、keepalive的工作原理和如何做到健康检查
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组

这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内

其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了

这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护

及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的

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

21、统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip
cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10

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

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

24、简述raid0 raid1 raid5 三种工作模式的工作原理及特点
RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率

但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证

而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合

RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据

不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能

RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性

当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据

RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上

任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)

所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能

25、你对现在运维工程师的理解和以及对其工作的认识
运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务

运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失

因此运维工程师的工作需要严谨及富有创新精神

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

27、服务器开不了机怎么解决一步步的排查
A、造成服务器故障的原因可能有以下几点:

wKioL1lMgrHDCEhfAABceoMZqwY330.png-wh_50

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

wKioL1lMg2vhIvWKAAKkezGi_-4547.png-wh_50

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.*$#\1#g'

192.168.20.130
39、请写出下面 linux SecureCRT 命令行快捷键命令的功能?
Ctrl + a

Ctrl + c

Ctrl + d

Ctrl + e

Ctrl + l

Ctrl + u

Ctrl + k

tab

Ctrl+shift+c

Ctrl+shift+v

解答:

Ctrl + a —->光标移动到行首

Ctrl + e —->光标移动到行尾

Ctrl + c —->终止当前程序

Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断

Ctrl + l —->清屏

Ctrl + u —->剪切光标以前的字符

Ctrl + k —->剪切光标以后的字符

Ctrl + y —->复制u/k的内容

Ctrl + r —->查找最近用过的命令

tab —->命令或路径补全

Ctrl+shift+c —->复制

Ctrl+shift+v —->粘贴

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

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

crontab –e
00 00 * /bin/sh /root/a.sh

一、Linux操作系统知识

1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块?
答:
常见的Linux发现版本有Redhat、Centos、Debian、Ubuntu、Suse
最擅长Redhat和Centos
Redhat官网:www.redhat.com
Centos官网:www.centos.org
我最擅长Linux基本命令操作及相关服务搭建

2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解?
答:

开机步骤
a、首先是bios加电自检、初始化,这个过程会检测相关硬件(cpu、内存、显卡、硬盘等)

     然后读取一个启动顺序,以硬盘为例,会读取硬盘中的MBR。
b、加载内核读取/boot里边的配置文件。
c、启动初始化进程,开始运行/sbin/init
d、读取/etc/inittab确定运行级别
e、根据/etc/rc.d/rcN.d加载开机启动程序,rcN.d都是链接文件,都指向/etc/rc.d/init.d再运行/etc/rc.d/rc.local
f、用户登录(3种方式ssh、命令行、图形化)
g、进入loginshell,以命令行为例,首先读取/etc/profile这个全局配置文件

     然后再针对当前用户读取家目录中的 ~/.bash_profile和~/.bash_login和~/.profile
h、最后一步就是打开non-loginshell

     进入图形化后手动新建一个终端,但这个shell不读取/etc/profile

忘记密码
a、重启系统,在GRUB界面,选取忘记密码的系统,按e键进入编辑模式
b、选项Kernel.....按e键进行编辑
c、在编辑界面rhgbquiet后加空格,然后输入"single"或"1"回车
d、按b启动进入单用户模式
f、进入系统后passwd回车输入新密码(如果有selinux,先暂时关闭setenforce0)

3.企业中Linux服务器系统分区标准是什么?(硬盘为300G,内存16G)
答:
/boot200M
/swap16G
/70G
/data剩下的全部空间

4.某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤。
答:
首先把系统关机,然后以光盘启动进入救援模式(linuxrescue)

执行"fsck.ext3-y/dev/sda2"(假如只读的分区类型为ext3,分区为/dev/sda2)

5.安装一台系统使用DVD光盘安装,如何安装50台Linux系统如何安装呢?思考一下。
答:
a、可以多用几张DVD一台一台的安装。
b、可以用Kickstart批量安装(客户端从网络启动)

6.用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决?
答:
a、编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,将HWADDR和MAC地址这两行删除。
b、修改文件/etc/udev/rules.d/70-persistent-net.rules,删除之前eth0所在的行,将下一行eth1修改为eth0
c、reboot

7.Linux网卡配置文件路径是什么?要使服务器上外网,必须满足的条件有哪些?需要配置什么?
答:
网卡配置文件路径:/etc/sysconfig/network-scripts/ifcfg-eth*(*代表数字)
要上外网需要:能够链接internet的网线(或无线)、有网卡
需要配置:IP、netmask、gateway、dns(自动或手动都ok,服务器一般自动)

8.一般可以使用什么软件远程linux服务器?通过什么上传文件和下载文件?
答:
远程连接linux的软件:xshell、SecureCRT、putty、vnc(图形化)
上传和下载文件:lrzsz、sftp

9./mnt目录主要用于什么?/root目录跟root用户有什么关系?/根目录与/boot目录有什么联系?
答:
/mnt一般用于挂载外接设备
/root是一个目录,是root用户的家目录
/boot目录是/目录下的一个子目录

10.某一天误操作,执行了rm-rf*,会有哪些情况发生?请举例。
答:
a、如果当前目录为"/tmp",那么这个目录下的东西会全部删除(默认不包含隐藏文件)
b、如果当前目录为"/",那么系统上的数据将会丢失,且无法启动,系统崩溃(谨慎使用这个命令)
二、Linux命令及文件操作

1.在/tmp/目录下创建test.txt文件,内容为:Hello,World!,用一个命令写出来。
答:
echo "Hello,World!" > /tmp/test.txt

2.给test.txt文件除所有者之外增加执行权限,最终以数字写出文件的权限。
答:
655
默认是644,可以通过"chmod 655 /tmp/test.txt"

3.用vi命令编辑test.txt,如何跳转到末行,首行,行首、行末,如何在光标行下一行插入

   如何复制5行,删除10行,查找jingfeng的字符、把jingfeng替换为jfedu.net
答:
末行:G
首行:gg
行首:^(Shift+6)
行尾:$(Shift+4)
光标下插入一行:o
复制5行:5yy
删除10行:10dd
替换::%s/jingfeng/jfedu.net/g

4.查找linux系统下以txt结尾,30天没有修改的文件大小大于20K同时具有执行权限的文件并备份到/data/backup/目录下。
答:
find / -name *txt -mtime +30 -type f -size +20k -perma= x -exec cp {} /data/backup/\;

5.当前test.txt所属的用户为root,组为abc,请将test.txt使拥有者为abc,组为root,写出命令。
答:
chown abc:root test.txt

6.如何修改Linux启动级别为字符模式并永久生效,如何临时、永久关闭selinux及防火墙,请分别写出操作方法。
答:
更改字符模式:修改/etc/inittab一行为id:3:initdefault:
临时关闭selinnuxsetenforce0
临时关闭防火墙iptables-F
永久关闭selinux修改/etc/selinux/config一行为SELINUX=permissive
永久关闭防火墙 iptables -F; /etc/init.d/iptablessave

7.每次开机在/tmp目录下创建一个当天的日期文件夹(提示:当前日期表示的方法为:`date+%Y%m%d`)
答:
echo "mkdir/tmp/ `date+%Y%m%d`" >> /etc/rc.d/rc.local

8.如何查看文件内容,命令有哪些?查看文件第1行到3行,查看文件最后一行。
答:
查看文件内容:vim、cat、head、tail
查看第1到行:head -3 file
查看最后一行:tail -1 file

9.查看linux服务器IP的命令,同时只显示包含ip所在的行打印出来。
答:
以eth0为例
只打印所在的行:ifconfig eth0 | grep "inetaddr:"
只打印ip:ifconfig eth0 | grep "inetaddr:" | awk -F: '{print$2}' | awk -F ' ' '{print$1}'

10.将普通用户test加入root组的命令是?
答:
usermod -G root test

抢先报名    优先占座