linux整理的面试题
如何查看当前的Linux服务器的运行级别
who -r和 runlevel 命令可以用来查看当前的Linux服务器的运行级别。
如何查看linux的默认网关
netstat -nr 或者route -n ,可以查看默认网关和当前的路由表
cpio命令是什么
cpio就是复制入和复制出的意思。cpio可以向一个归档文件(或单个文件)复制文件、列表、还可以从中提取文件。
patch命令是什么
patch命令就是用来将修改(或补丁)写进文本文件里。patch命令通常是接收diff的输出并把文件的旧版本转换为新版本。举个例子,Linux内核源代码由百万行代码文件构成,所以无论何时,任何代码贡献者贡献出代码,只需发送改动的部分而不是整个源代码,然后接收者用patch命令将改动写进原始的源代码里。
创建一个diff文件给patch使用,
# diff -Naur old_file new_file > diff_file
旧文件和新文件要么都是单个的文件要么都是包含文件的目录,-r参数支持目录树递归。
一旦diff文件创建好,我们就能在旧的文件上打上补丁,把它变成新文件:
# patch < diff_file
如何用命令行查看spf记录;(用dig命令来查看域spf记录,spf其实就是记录dns的记录)
linuxtechi@localhost:~$ dig -t TXT google.com
识别linux系统中指定文件(/etc/fstab)的关联包
# rpm -qf /etc/fstab
以上命令能列出提供/etc/fstab这个文件的包。
哪条命令查看bond0的状态
(网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术)
cat /proc/net/bonding/bond0
linux系统中的/proc文件系统有什么用
/proc文件系统是一个基于内存的文件系统,其维护着关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、I/O地址、直接内存访问通道和正在运行的进程。这个文件系统所代表的并不是各种实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的。
如何在/usr目录下查找出大于10MB的文件
# find /usr -size +10M
如何在/home目录下找出120天之前被修改过的文件
# find /home -mtime +120
如何在/var 目录下找出90天内未被访问过的文件
# find /var ! -atime -90
在整个目录下查找"core",如果发现则无需提示直接删除掉
# find /-name core -exec rm {} ;
strings命令有什么用
strings命令用来提取和显示非文本文件中的文本字符串。(LCTT 译注:当用来分析你系统上莫名其妙出现的二进制程序时,可以从中找到可疑的文件访问,对于追查入侵有用处)
tee过滤器有什么用
tee命令主要被用来向standout(标准输出流,通常是命令执行窗口)输出的同时也将内容输出到文件,下面是tee的man 信息
ping baidu.com | tee -a /var/log/baidu.log
在以上例子中,从ping输出可以追加到 /var/log/baidu.log 文件中,并且同样在屏幕上显示了出来。
export PS1 = “ L O G N A M E @ h o s t n a m e : LOGNAME@hostname: LOGNAME@hostname:PWD:” 这条命令是在做什么
这条export命令会更改登陆提示符来显示用户名、本机名和当前的工作路径。
ll | awk ‘{print $3,“owns”,$9}’ 这条命令是在做什么
这条ll命令会显示这些文件的文件名和他们的拥有者
linux中at命令有什么用
at命令是用来安排一个程序在未来做一次一次性的执行,所提交的任务都放在/var/spool/at目录下并且到了执行时间的时候通过atd守护进程来执行
请描述下linux系统开机的过程
开机加电BIOS自检》MBR引导》grub引导菜单》加载内核》启动init进程》读取inittab文件》启动minggetty进程(Linux的一个扩张强制访问控制安全模块)》登录系统
权威DNS和递归DNS含义,智能DNS的实现原理
权威DNS是经上一级授权对域名进行解析的DNS服务器,同时它可以把解析授权转授给其他服务器;
递归DNS负责接受用户对任何域名的查询,并返回结果给用户,它可以缓存结果避免用户再向上查询;
智能DNS就是将对用户发起的查询进行判断出是哪个运营商的用户查询,然后将请求转发给相应的运营商IP处理,减少跨运营访问的时间,提高访问速度。
通过APache访问日志access.log统计IP和每个地址访问的次数,列出访问量前10名的IP地址,写出具体命令
awk ‘{print $1}’ access.log|uniq -c|sort -rn |head -10
编写脚本实现将/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
将本地的80端口的请求转发到8080端口,本机地址10.0.0.254,写出命令
iptables -t nat -A PRETOUTING -d 10.0.0.254 -p tcp –dprot 80 -j DNAT –to-destination 10.0.0.254:8080
实现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
MYSQL 一主多从,主库宕机,如何合理切换到从库,其它从库如何处理?
1)登陆所有从库查看post信息,使用POST最大的做为新的主库,然后将从为提升为新的主库,登陆从库(新的主库)执行stop slave,
2)修改my.cnf配置文件,开启log-bin并重新启动数据库服务,登陆数据库执行restet master ,show master statusG;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,同步所有机器的/etc/hosts文件(这时就体现了之前全网用域名则不是用IP的作用了,不然还得修改网站程序切换到新主库服务器IP上,否则无法连接到数据库);
3)登陆其它从库,执行change master操作,查看同步状态。
误操作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
最后登陆数据库,查看数据是否恢复成功,如果有确定的误操作时间,就直接恢复这段时间的数据即可。
ps:所有数据恢复的基础都在于备份,必须要有完整的备份,否则恢复无从谈起,误操作导致的数据库破坏需要使用增量恢复的方法进行恢复数据库
列举一个实际生产的例子,网站访问速度慢是因为数据库访问慢导致的
突然有一天,有同事反应,网站访问速度很慢,有时候会出现打不开网站的情况,刷新等待好长时间后又正常打开。
登陆数据库执行show full processlist 看到有很多相同的查询动作且征对同一张表,因此确定网站打不开的原因是这个,故将此IP禁止访问。日常工作中避免此类问题发生解决方法如下:可以将数据库读写分离;安装数据缓存服务器,尽量将大部分的请求不直接对接数据库。
一个shell 脚本手工可以执行,放入定时任务后不能执行,可能的原因?
手工可以执行,表明脚本本身不存在逻辑上的问题,可能原因有以下几点
1)定时任务书写有错误导致,执行的脚本没有写绝对路径,找不到脚本
2)环境变量问题导致。
利用shell开发rsync服务启动、停止脚本,并通过chkconfig 进行开关机管理
[root@mysql-1 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
[root@mysql-1 download]# chmod +x RSstart.sh
[root@mysql-1 download]# sh RSstart.sh
USAGE :{start|stop|restart}
[root@mysql-1 download]# sh RSstart.sh start
rsync is started [ OK ]
[root@mysql-1 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
[root@mysql-1 download]# sh RSstart.sh stop
rsync is stoped [ OK ]
[root@mysql-1 download]# ps -ef|grep rsync
root 3540 2869 0 03:54 pts/0 00:00:00 grep rsync
[root@mysql-1 download]# sh RSstart.sh start
rsync is started [ OK ]
[root@mysql-1 download]# sh RSstart.sh restart
rsync is restarted [ OK ]
[root@mysql-1 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
具体自己测试下,也有可能这个启动,关闭序号有冲突,需要修改
描述OSI7层模型各层名字及功能,并举例在不同层对应的协议
第一层:物理层,利用传输介质为数据提供物理连接, 对应的协议:ARP
第二层:数据链路层:建立和管理各节点间的链接链路 对应的协议:PPTP、CDP
第三层:网络层,是控制数据链路层与上传输层之间的信息转发、建立与维持对应的协议:IP、路由协议
第四层:传输层,提供会话传输服务,确保数据正确传送对应的协议:TCP UDP
第五层:会话层,提供建立会话管理,支持数据交换
第六层:表示层,处理数据(数据格式、编码、加密等),按一定的格式传送至会话层
第七层:应用层,为用户提供各类应用服务(文件、打印、邮件等服务)对应协议:HTTP、FTP、SMTP、POP3
linux系统环境下如何查看系统运行了多长时间
执行系统命令uptime,其中第三个字段,如下的2:32处则表示系统从上次启动开始已运行了多长时间
[root@mysql-1 download]#uptime
02:05:22 up 2:32, 2 users, load average: 0.00, 0.00, 0.00
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
已知test.txt文件内容如下,请取出文件的5-15行内容
方法一:[root@i ~]# grep 15bbbbbb -B 10 test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
方法二:[root@i ~]# sed -n ‘5,15p’ test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
方法三:[root@i~]# awk ‘{if(NR4) print $1}’ test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
/var/log/messages日志出现kernel:nf_conntrack:tablefull,dropping packet,请问是什么原因导致的,如何解决?
1)加大跟踪表的大小
2)禁用一些不必跟踪的连接状态
3)禁用模块 ip_vs nf_conntect
ps:此报错为iptables报错信息,连接跟踪表已满,开始丢包,可能的原因是由于频繁的连接、关闭,或者网络的一些TCP的连接导致的
linux系统nginx与Php环境,发现PHP-FPM进程高,请说出可能的原因以及如何解决?
1)php的插件程序与现有的PHP版本存在不兼容情况,解决方法从php.ini中禁止相关插件
2)软件本身存在问题,需要开发协同运维一同处理,查找原因
3)php程序存在死循环现象,使用服务器负载过高,解决方法使用top命令查看
磁盘报错:nospace left on device,但是df-h查看空间没有满,为什么?
可以使用df -i 来查看inode的使用情况
[root@mysql-1 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
ps:系统inode满了,因为所有的文件的文件名信息都是存放在inode里面的,文件内容是存放在block里面
磁盘空间满了,删除一部分nginx日志后,但是磁盘空间还是满的,为什么?
删除的日志信息,一部分可能还是被进程调用,因此,需要重启nginx服务来释放进程;或者实际生产环境中使用>/log/access.log清空文件
请详细描述MySQL主从复制原理
原理:主库开启binlog功能并授权从库连接主库同步的用户权限 ,将数据库的修改或变化生成bin-log日志,从库通过change mster的语句得到主库的相关信息,从库开启slave并连接主加进行相关验证,验证通过后,主库的IO线程根据从库的请求将相关位置点信息,与最新的blnlog信息发送给从库的IO线程,从库的IO线程将SQL语句的信息放在relay-log中,最后从库的SQL线程将relay-log中的SQL语句应用到从库中,实现主库与从库之间的数据同步,然后不断重新上述动作
写一个sed命令,修改/tmp/input.txt文件的内容,要求①删除所有空行②一行中,如果包含”11111″,则在”11111″前面插入”AAA”,在”11111″后面插入”BBB”,比如:将内容为0000111112222的一行改为:0000AAA11111BBB2222
删除所有空行命令
[root@~]# sed ‘/^$/d’ /tmp/input.txt
插入指定的字符
[root@~]# sed ‘s#(11111)#AAA1BBB#g’ /tmp/input.txt
找到/tmp/目录下面的所有名称以”_s1.jpg”结尾的普通文件,如果其修改日期在一天内,则将其打包到/tmp/back.tar.gz文件中
find /tmp -type f -name “.*_sj.jpg” -mtime 1|xarges tar zxf /tmp/back.tar.gz
配置mysql服务器的时候,配置了auto_increment_increment=3,请问这里的3意味着什么?
auto_increment是用于主键自动增长的,从3开始增长,3表示自增的起始值
用一条命令显示本机eth0网卡的IP地址,不显示其它字符
方法一:
[root@apache ~]# ifconfig eth0|grep “inet addr”|awk -F ‘[ :]+’ ‘{print $4}’
192.168.1.22
方法二:
[root@apache ~]# ifconfig eth0|awk -F ‘[ :]+’ ‘NR==2 {print $4}’
192.168.1.22
方法三:
[root@apache ~]# ifconfig eth0|sed -n ‘2p’|sed ‘s#^.*addr:##g’|sed ‘s# Bc.*$##g’
192.168.1.22
方法四:
[root@apache ~]# ifconfig eth0|sed -n ‘2p’|sed -r ‘s#^.*addr:(.*) Bc.*$#1#g’
192.168.1.22
请详细说明keepalived的故障切换工作原理
这种故障切换是通过VRRP协议来实现的,主节点会按一定的时间间隔发送心跳信息的广播包,告诉备节点自己的存活状态信息,当主节点发生故障时,备节点在一段时间内就收到广播包,从而判断主节点出现故障,因此会调用自身的接管程序来接管主节点的IP资源及服务,当主节点恢复时,备节点会主动释放资源,恢复到接管前的状态,从而来实现主备故障切换。
写出一个curl命令,访问指定服务器61.135.169.121上的如下URL:http://www.baidu.com/s?wd=test,访问的超时时间是20秒:
curl –connect-timeout 20 http://61.135.169.121/s?wd=test
用netstat命令配合其他shell命令,按照源IP统计所有到80端口的ESTABLISHED状态链接的个数,输出结果类似(第一列为连接数,第二列为IP):
[root@~]# netstat -an|grep ESTABLISHED
tcp 0 52 139.224.199.85:22 101.47.33.86:51763 ESTABLISHED
tcp 0 0 139.224.199.85:45368 106.11.68.13:80 ESTABLISHED
[root@ ~]# netstat -an|grep ESTABLISHED|grep “:80”
tcp 0 0 139.224.199.85:45368 106.11.68.13:80 ESTABLISHED
[root@ ~]# netstat -an|grep ESTABLISHED|grep “:80″|awk ‘BEGIN{FS=”[[:space:]:]+”}{print $4}’
139.224.199.85
说明:FS 是字段分隔符
如果需要进行整理并排序的话,完整命令如下
[root@ ~]# netstat -an|grep ESTABLISHED|grep “:80″|awk ‘BEGIN{FS=”[[:space:]:]+”}{print $4}’|sort|uniq -c|sort -nr
一个目录中有很多文件(ls查看时好多屏),想最快速度查看到最近更新的文件,如何看?
ls -lrt /etc #最底部的就是最新更新的文件
参数说明:
-r, –reverse #翻转排序
-t #按照修改时间排序
如何查看/etc/services文件有多少行?
方法1:直接使用命令wc
wc -l /etc/services
方法2:给文件内容加行号
cat -n /etc/services | tail -1
方法3:sed -n ‘$=’ /etc/services
方法4:grep -n $ /etc/services | tail -1
ftp、https、smtp、pops、ssh的端口号
ftp(20和21)、https(443)、smtp(25)、pops(110)、ssh(22)
服务器通常要手动配置IP地址,子网掩码,默认网关,DNS服务器,请简述每项的作用
1.IP地址用来区分主机、
2.子网掩码的作用是用来区分网络上的主机是否在同一网络取段内,需要结合IP地址使用
3.默认网关的作用是起到信息转发
4.把域名转换为IP地址,进行实际网络通讯
在一个系统架构中,如何避免系统高负载,单点故障和数据丢失
1.实现不同服务器上的数据分布
2.高可用集群
3.数据库高可用
使用SSH连接登录linux服务器未能登录成功,可能的原因有哪些?
1.防火墙允许22端口通过
2.测试网络连通信
3.端口是否被占用
使用什么方法可以阻止某一个或者某一段ip访问你的服务器,大致需要做哪些操作?
防火墙富规则
firewall-cmd --add-rich-rule 'rule family=ipv4 source address=172.16.30.0/24 service name=ssh drop' --permanent
作为一名优秀的运维工程师,你将如何完成当前运维工作和不断提高运维质量?
1. 工作中胆大心细,遇到问题首先自己查阅资料想办法解决
2. 平时要用谦杯的态度多去跟老员工学习他们的思路以及处理问题的办法
3. 工作之余要及时对自己的技术进行总结,并了解自己哪方面还有不足,着手针对性提高
4. 整理出一套自己的运维思路,并参考别人的例子吸取优化完善自己的那套流程
5. 加强对身体的重视,良好的身份是一切革命的本钱
服务器蓝屏和自动重启的可能原因有哪些?
内存条不稳定或者损坏、软件冲突、硬件不兼容、系统文件丢失
如果一台服务器出现网络故障,排查步骤?
who 有谁在、history做过什么操作、监听网络服务netstat -nalp、正在运行的进程ps aux、系统日志和内核消息dmesg、ping命令、
windows和linux查看系统开放的端口命令是什么?
netstat -ano|more
netstat -tpln
常见的文件系统有哪些,5个以上的例子
fat32、ntfs、exfat
swap、vfat、xfs、ext4
linux下制定DNS服务器的配置文件是什么?
/etc/resolv.conf
linux和windows 默认远程端口是什么?常见的远程连接工具有哪些?
3389和22
mstsc——anydesk——putty——vnc——xshell——xftp——ssh
访问百度,怎么查看节点?
tracert www.baidu.com
FTP使用OSI哪层的协议,默认端口号是什么?
应用层 21
windows系统命令行中,查看IP地址以及ARP缓存记录的命令是什么?
ipconfig
ARP -a
常见的网络服务以及端口号?
ftp21、ssh22、telnet23、smtp25、wins42、udp67、http80、oracle66、qq4000
写出监控系统指标的命令(例如:内存,CPU,流量等)
top(能够实时展示系统中各个进程的资源占用状况,默认每三秒更新一次)
vmstat(可实时监控操作系统的内存、进程、CPU使用情况,常见用法如vmstat 1 5,意为每隔一秒获取一次数据,共获取5次)
什么是DDOS攻击,有哪些类型?
模拟大量用户来进行访问网络,造成网络拥堵、瘫痪
1.基于ARP 2.基于ICMP 3.基于IP 4.基于TCP 5.基于应用层