linux系统运维企业常见面试题集合(一)(二)
linux系统运维企业常见面试题集合(一)
原创 民工哥
linux系统运维企业常见面试题集合(一)
本文所有内容均来自于个人整理而成,其中解答均属个人观点,如有不正之处,烦请给予指正,谢谢!!!
1、请描述下linux 系统的开机启动过程
开机加电BIOS自检----------->MBR引导----------->grub引导菜单----------->加载内核----------->启动init进程----------->读取inittab文件----------->启动mingetty进程----------->登录系统
2、权威DNS和递归DNS含义,智能DNS的实现原理
权威DNS
是经上一级授权对域名进行解析的DNS服务器,同时它可以把解析授权转授给其他服务器,
递归DNS
负责接受用户对任何域名的查询,并返回结果给用户,它可以缓存结果避免用户再向上查询
智能DNS
就是将对用户发起的查询进行判断出是哪个运营商的用户查询,然后将请求转发给相应的运营商IP处理,减少跨运营访问的时间,提高访问速度
3、通过APACHE访问日志access.log统计IP和每个地址访问的次数,列出访问量前10名的IP地址,写出具体命令
awk '{print $1}' access.log|uniq -c|sort -rn |head -10
4、编写脚本实现将/usr/local/test目录下大于100K文件,将它拷贝到/tmp目录下
#!/bin/bash
for file in `ls /usr/local/test`
do
if [ -f $file ];then
if [ `ls -l $file`|awk '{print $5}' -gt 10000];then
mv $file /tmp/
fi
fi
done
5、将本地的80端口的请求转发到8080端口,本机地址10.0.0.254,写出命令
iptables -t nat -A PRETOUTING -d 10.0.0.254 -p tcp --dprot 80 -j NDAT --to-destination 10.0.0.254:8080
6、如何实现nginx代理的节点访问日志记录的是真实访客的IP,不是代理的IP
配置nginx.conf配置文件增加下同的标记内容
server{
listen 80;
server_name blog.text.com;
location / {
proxy_pass http://test_servers;
proxy_set_header Host $host;
proxy_set_headerX-Forwarded-For $remote_addr;
}
修改完成后,重新加载nginx即可,/application/nginx/sbin/nginx -s reload
7、MYSQL 一主多从,主库宕机,如何合理切换到从库,其它从库如何处理?
1:登陆所有从库查看post信息,使用POST最大的做为新的主库,然后将从为提升为新的主库,登陆从库(新的主库)执行stop slave,
2:修改my.cnf配置文件,开启log-bin并重新启动数据库服务,登陆数据库执行restet master ,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,同步所有机器的/etc/hosts文件(这时就体现了之前全网用域名则不是用IP的作用了,不然还得修改网站程序切换到新主库服务器IP上,否则无法连接到数据库)
2:登陆其它从库,执行change master操作,查看同步状态
8、误操作drop语句导致数据库数据破坏,请给出恢复的实际大体步骤
所有数据恢复的基础都在于备份,必须要有完整的备份,否则恢复无从谈起
误操作导致的数据库破坏需要使用增量恢复的方法进行恢复数据库,具体步骤如下
1、查看备份与binlog文件
2、刷新并备份binlog文件
mysqladmin -uroot -pmysql123 -S /data/mysql.sockflush-logs
3、将binlog文件恢复成sql语句
mysqlbinlog --no-defaults mysql-bin.000061 mysql-bin.000062 >bin.sql
4、将其中误操作的语句删除(就是drop的动作)
5、解压全备文件,恢复全备文件
gzip -d mysql_backup_2016-10-12.sql.gz
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < mysql_backup_2016-10-12.sql
如果有对表的操作,恢复数据时需要接表名
6、恢复误操作前的binlog文件记录的sql语句
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < bin.sql
最后登陆数据库,查看数据是否恢复成功,如果有确定的误操作时间,就直接恢复这段时间的数据即可
9、列举一个实际生产的例子,网站访问速度慢是因为数据库访问慢导致的
问题情况描述:
突然有一天,有同事反应,网站访问速度很慢,有时候会出现打不开网站的情况,刷新等待好长时间后又正常打开
解决步骤:
登陆数据库执行show full processlist 看到有很多相同的查询动作且征对同一张表,因此确定网站打不开的原因是这个,故将此IP禁止访问。日常工作中避免此类问题发生解决方法如下:可以将数据库读写分离;安装数据缓存服务器,尽量将大部分的请求不直接对接数据库;
10、一个shell 脚本手工可以执行,放入定时任务后不能执行,可能的原因?
手工可以执行,表明脚本本身不存在逻辑上的问题,可能原因有以下几点
1:定时任务书写有错误导致,执行的脚本没有写绝对路径,找不到脚本
2:环境变量问题导致
11、利用shell开发rsync服务启动、停止脚本,并通过chkconfig 进行开关机管理
[[email protected] download]# vi RSstart.sh
#!/bin/sh
##create by mingongge at 2017-01-10
. /etc/init.d/functions
case "$1" in
start)
rsync --daemon
if [ $? -eq 0 ];then
action "rsync is started" /bin/true
else
action "rsync is started" /bin/false
fi
;;
stop)
pkill rsync
sleep 2
if [ `ps -ef|grep rsync|grep -v grep |wc -l` -eq 0 ];then
action "rsync is stoped " /bin/true
else
action "rsync is stoped " /bin/false
fi
;;
restart)
pkill rsync
sleep 2
if [ `ps -ef|grep rsync|grep -v grep |wc -l` -eq 0 ];then
rsync --daemon
if [ $? -eq 0 ];then
action "rsync is restarted" /bin/true
fi
fi
;;
*)
echo "USAGE :{start|stop|restart}"
;;
esac
“RSstart.sh" [New] 36L, 731C written
[[email protected] download]# chmod +x RSstart.sh
[[email protected] download]# sh RSstart.sh
USAGE :{start|stop|restart}
[[email protected] download]# sh RSstart.sh start
rsync is started [ OK ]
[[email protected] download]# ps -ef|grep rsync
root 1088 1 0 Jan09 ? 00:00:00 rsync --daemon
root 3527 2869 0 03:54 pts/0 00:00:00 grep rsync
[[email protected] download]# sh RSstart.sh stop
rsync is stoped [ OK ]
[[email protected] download]# ps -ef|grep rsync
root 3540 2869 0 03:54 pts/0 00:00:00 grep rsync
[[email protected] download]# sh RSstart.sh start
rsync is started [ OK ]
[[email protected] download]# sh RSstart.sh restart
rsync is restarted [ OK ]
[[email protected] download]# ps -ef|grep rsync
root 3558 1 0 03:54 ? 00:00:00 rsync --daemon
root 3564 2869 0 03:55 pts/0 00:00:00 grep rsync
配置开关机管理
然后在脚本最前面加上以下内容
# chkconfig: 2345 21 99
# description: chkconfig rsync service
具体自己测试下,也有可能这个启动,关闭序号有冲突,需要修改
12、请描述OSI7层模型各层名字及功能,并举例在不同层对应的协议
第一层:物理层,利用传输介质为数据提供物理连接, 对应的协议:ARP
第二层:数据链路层:建立和管理各节点间的链接链路 对应的协议:PPTP、CDP
第三层:网络层,是控制数据链路层与上传输层之间的信息转发、建立与维持对应的协议:IP、路由协议
第四层:传输层,提供会话传输服务,确保数据正确传送对应的协议:TCP UDP
第五层:会话层,提供建立会话管理,支持数据交换
第六层:表示层,处理数据(数据格式、编码、加密等),按一定的格式传送至会话层
第七层:应用层,为用户提供各类应用服务(文件、打印、邮件等服务)对应协议:HTTP、FTP、SMTP、POP3
13、linux系统环境下如何查看系统运行了多长时间
[[email protected] download]#uptime
02:05:22 up 2:32, 2 users, load average: 0.00, 0.00, 0.00
[[email protected] download]#top
top -02:07:34 up 2:34, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 73total, 1 running, 72 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 486284k total, 174664kused, 311620k free, 6424k buffers
Swap: 1048568k total, 0kused, 1048568k free, 63548k cached
02:05:22 up 2:32, 2 users, load average: 0.00,0.00, 0.00
服务器运行多长时间 登陆用户数 上一分钟、5分钟、15分钟的负载
14、linux系统中添加路由的方法
主机路由
route add -host 192.168.197.100 dev eth0
网关路由
route add default gw 192.168.197.1
网络路由
route ad -net 192.168.1.0 netmask 255.255.255.0 deveth1
route ad -net 192.168.1.0 netmask 255.255.255.0 gw192.168.197.1
15、已知test.txt文件内容如下,请取出文件的5-15行内容
[[email protected] ~]# cat test.txt
1
2
3
4
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
16
17nnnnnn
方法一:[[email protected] ~]# grep 15bbbbbb -B 10 test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
方法二:[[email protected] ~]# sed -n '5,15p' test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
方法三:[[email protected]~]# awk '{if(NR<16 && NR>4) print $1}' test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
linux系统运维企业常见面试题集合(二)
原创 民工哥
linux系统运维企业常见面试题集合(二)
本文所有内容均来自于个人整理而成,其中解答均属个人观点,如有不正之处,烦请给予指正,谢谢!!!
1
/var/log/messages日志出现kernel:nf_conntrack:tablefull,dropping packet,请问是什么原因导致的,如何解决?
此报错为iptables报错信息,连接跟踪表已满,开始丢包,可能的原因是由于频繁的连接、关闭,或者网络的一些TCP的连接导致的
解决方法:
1、加大跟踪表的大小
2、禁用一些不必跟踪的连接状态
3、禁用模块 ip_vs nf_conntect
2
linux系统nginx与Php环境,发现PHP-FPM进程高,请说出可能的原因以及如何解决
1:php的插件程序与现有的PHP版本存在不兼容情况,解决方法从php.ini中禁止相关插件
2:软件本身存在问题,需要开发协同运维一同处理,查找原因
3:php程序存在死循环现象,使用服务器负载过高,解决方法使用top命令查看
3
磁盘报错:nospace left on device,但是df-h查看空间没有满,为什么?
原因:系统inode满了,因为所有的文件的文件名信息都是存放在inode里面的,文件内容是存放在block里面
可以使用df -i 来查看inode的使用情况
[[email protected] download]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1234576 138303 1096273 12% /
tmpfs 60785 1 60784 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
4
磁盘空间满了,删除一部分nginx日志后,但是磁盘空间还是满的,为什么?
删除的日志信息,一部分可能还是被进程调用,因此,需要重启nginx服务来释放进程;或者实际生产环境中使用>/log/access.log清空文件
5
查看apache进程数
perfork模式
ps -ef|grep http|grep -v grep|wc -l
worker模式
pstree -a|grep httpd|wc -l
6
提取文件test.log中FAILD与SUCCESSFUL的字符但不包括DONE的行,然后以:为隔符,提取第三列
[[email protected]]# cat test.log
FAILD:SUCCESSFUL:DONE:CRITICAL
FAILD:SUCCESSFUL:NO:GOOD
FAILD:NO:DO:QINGYUN
SUCCESSFUL:DONE:CRITICAL::CRITICAL
方法一:
[[email protected]]# egrep "FAILD|SUCCESSFUL"test.log |grep -v DONE|awk -F ':' '{print $3}'
NO
DO
方法二:
[[email protected]]# egrep "FAILD|SUCCESSFUL"test.log |grep -v DONE|cut -d: -f3
NO
DO
7
公司机房的服务器接近254台了,请你设计一个解决方案,如何划分网段,并实现业务平滑迁移。
第一种方案:变长子网掩码的方法,加大IP地址的可使用范围,全网分发/etc/hosts文件
第二种方案:增加核心交换机,在核心交换机划分VLAN,将新增的服务器加入新的VLAN中,全网分发/etc/hosts文件
8
Nginx反向代理如何实现代理RS节点上的不同虚拟主机,请说出原理和配置方法或思路。
客户端向反向代理发送请求,反向代理按一定的规则转发至目标服务器,并将返回的内容返回给客户端,可分为以下两种:
配置内部不同服务器转发:
upstream app1 {
server 192.168.1.10:80 weight=5;
server 192.168.1.11:80 weight=5;
}
upstream app2 {
server 192.168.1.20:80 weight=5;
server 192.168.1.21:80 weight=5;
}
配置server
server{
listern 80;
server_name app.abc.com
}
配置匹配转发规则
location /app1/ {
proxy_pass http://example.com/app1;
proxy_set_header Host $host;
}
location/app2/ {
proxy_passhttp://example.com/app2;
proxy_set_header Host $host;
}
做为负载均衡
配置负载均衡服务器池,也就是调度规则
upstream test_servers {
server 192.168.1.2:80 weight=5;
server 192.168.1.4:80 weight=5;
server 192.168.1.6:82 weight=15;
}
然后配置server标签,
server {
listen 80;
server_name www.abc.com;
proxy_pass http://test_servers;
proxy_set_header Host $host
}
配置完成后,重新加载nginx服务
9
说出netstat -an命令结果中最后一列status对应的不同网络连接状态含义
[[email protected] ~]# netstat -an
Active Internet connections (servers andestablished)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 139.24.65.45:54296 10.11.68.13:80 ESTABLISHED
tcp 0 52 39.24.65.145:22 36.32.8.85:546 ESTABLISHED
tcp 0 0 139.24.165.45:586 10.11.8.13:80 CLOSE_WAIT
listen 服务启动后首先处于的状态(监听状态)
established 建立连接,表示建立连接的两端可以正常通信了
close_wait 对方主动关闭连接或网络异常而中断,因此状态会变成
time_wait 主动断开连接,收到对方确认后的状态,相当于释放资源,可以设置些种状态的参数,也就是主动断开后,下一次再连接的时间间隔
syn_sent 请求连接的状态,需要访问其它机器时首先发出的同步信号
10
binlog是什么?binlog记录的是什么?有几种模式及优缺点,企业中选择哪种模式做同步?
bInlog:是用于记录所有更新了数据的操作语句,语句以事件的形式保存,它描述数据的更改过程
作用:用于实时备份数据,数据库的主从复制
log_bin 打开记录binlog功能
binlog的查看
mysqlbinlog /home/mysql/binlog/binlog.000003
binlog的删除:可分为自动与手动删除
自动删除
能过binlog参数expire_logs_days来实现
show binary logs;
show variables like "expire_logs_days;"
set gloable expire_logs_days=3;
手工删除
reset master 删除主的binlog
reset slave 删除从的中继日志
三种模式:
Row level模式 :日志会记录每一行数据被修改的形式,然后在从端对相同的数据进行修改
优点:可以不记录执行SQL语句上下文相关的信息,只记录哪一条数据被修改,修改成什么样了
缺点:所有执行的语句都当记录到日志文件中,而且都会以每行记录的修改来记录,会产生大量的日志内容
statement模式:每一条修改数据的SQL都会记录master的bin-log中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL来执行
优点:解决了上row level模式的缺点,不需要记录每一行数据的变化,减少日志量,可以得高性能
缺点:由于记录的是执行语句,在此模式下会有主从无法复制的问题出现
mixed自动模式:MYSQL会根据执行的每一条具体SQL语句来区分对待记录的日志格式,
企业使用场景:
1、如果不会用到mysql特殊的功能,基本都是默认的模式statement模式
2、如果会到mysql的一些特殊功能,基本都是会使用row level模式
11
请详细描述http协议原理
http协议:是客户端与服务端之间通信传输数据的基础,HTTP协议是基于TCP/IP协议之上的协议
原理包括四个过程:
连接:浏览器与服务器建立连接,打开一个socket的虚拟文件,表明连接建立成功
请求:浏览器通过socket向服务器提交请求(一般是GET或POST请示命令)
应答:浏览器请求提交后,通过HTTP协议传送给服务器,服务器收到后进行处理将结果又通过HTTP回传给客户端,从而在客户端显示出所请求的页面
关闭连接:当应答结束后,浏览器与服务器之间就断开连接
12
请详细描述MySQL主从复制原理。
原理:主库开启binlog功能并授权从库连接主库同步的用户权限 ,将数据库的修改或变化生成bin-log日志,从库通过change mster的语句得到主库的相关信息,从库开启slave并连接主加进行相关验证,验证通过后,主库的IO线程根据从库的请求将相关位置点信息,与最新的blnlog信息发送给从库的IO线程,从库的IO线程将SQL语句的信息放在relay-log中,最后从库的SQL线程将relay-log中的SQL语句应用到从库中,实现主库与从库之间的数据同步,然后不断重新上述动作
13
用一条命令将除了sshd、crond、network、rsyslog几个服务之外的服务全部关闭(无需开机自动)
方法一:
[[email protected]~]# for name in `chkconfig --list|grep 3:on|awk '{print $1}'|grep -Ev "sshd|crond|rsyslog|network"`;dochkconfig $name off;done
[[email protected]~]# chkconfig --list|grep 3:on
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
方法二:
[[email protected] ~]# chkconfig--list|grep 3:on|awk '{print $1}'|grep -Ev"sshd|crond|rsyslog|network"|sed -r "s#(.*)#chkconfig \1off#g"|bash
[[email protected]~]# chkconfig --list|grep 3:on
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
14
说明系统/etc/inittab中各个启动级别的含意
[[email protected]~]# tail /etc/inittab
#Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this) 关机
# 1 - Single user mode 单用户模式
# 2 - Multiuser, without NFS (The same as 3,if you do not have networking) 多用户,没有NFS
# 3 - Full multiuser mode 完整多用户模式
# 4 - unused
# 5 - X11 桌面模式
# 6 - reboot (Do NOT set initdefault to this) 重启
#
id:3:initdefault: 默认