整理的linux面试运维题

  1. 如何在非交互模式下把 /home/example/下所有.conf文件中的 192.168.0.2 改成 db01 ?
 
find /home/example/ -type f -name "*.conf" -print|xargs sed -i 's/192.168.0.2/db01/g'
 
 
  1. 写iptables 规则,只允许远程主机访问本机的 22,80 ,443端口 
 
 
iptables -A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sport 22,80,443 -j ACCEPT
 
iptables -P INPUT DROP
iptbales -P FORWAD DROP
iptbales -P OUTPUT DROP
然后,提取以“:“分割的第五个字段?
  1. nginx 配置文件修改后,在不影响线上访问的前提下,用什么命令检查文件语法错误以及平滑重启nginx 
    /usr/local/nginx/sbin/nginx -t
    /usr/local/nginx/sbin/nginx -s reload
 
 
  1. 从 bytu.log 文件中提取包含 “”WARNING“”或“”ERROR“”同时不包含“”IGNOR“”的行,然后提取 : 分割的第五字段
 
cat bytu.log |grep -E 'WARNING|ERROR'|grep -v "IGNOR"|awk -F : '{print $5}'
 
5.统计bytu.log 日志中 每个IP地址的访问次数,请根据访问量统计出前10个。
日志样例如下:
172.17.111.101 - [02/Jul/2016-23:22:22 +0800] -Get/HTPP/1.1 200 19
 
cat bytu.log| awk '{print $1}'|uniq -c |sort -rn|head -n 10 
 
6 .写一个脚本,判断172.17.111.0/24的网络里,哪些IPping
 
#!/bin/bash
 
for i in `seq 1 255`;do
 
    ping -c 1 172.17.111.$i &>/dev/null
 
    if [ $? -eq 0 ]; then
       echo "172.17.111.$i OK"
    else
       echo "172.17.111.$i error"
    fi
done
 
 
  1. .假设你有一个名为 ‘abc’ 的表,它存在多个字段,如 ‘createtime’ ‘engine’。名为 engine 的字段由 ‘Memoty’ ‘MyIsam’ 两种数值组成。如何只列出 ‘createtime’ ‘engine’ 这两列并且 engine 的值为 ‘MyIsam’
 
select createtime, engine from abc where engine=MyIsam 
 
 
  1. 配置nginx  *.test.com server 访问代理到后端 10.0.0.1 服务器,访问 www.test.com/test.html 跳转到 www.baidu.com 并且只允许10.0.0.0/8 网段访问。
 
server
{
        listen 80;
        server_name *.test.com;
 
location /
{
      rewrite /test.html http://www.baidu.com permanent;
      proxy_pass 10.0.0.1;
      proxy_set_header Host   $host;
      allow 10.0.0.0/8; 
      deny all;
}
}
 
  1. 在什么样的情况下会出现 403,503,502,500 错误,大体描述一下 
 
403(用户认证拒绝) 404(找不到文件) 500(服务器程序问题) 502(nginx请求后端php找不到) 503(出现在squid,vanish代理软件上,代理服务器访问后端服务器出错) 504(mysql数据有延迟)
 
 
  1. 写一个查看本机并发连接命令并取出被连接数ip排行
 
netstat -nat|grep -i "80"|wc -l
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
 
 
 
  1. linux 如何挂在windows 下的共享目录 
关闭 windows和linux的防火墙;
在windows 系统上创建共享目录share,注意要修改这个目录的属性为共享;
在linux系统上创建/windows目录, chmod 777 /windows;
mount -t cfis //windowsip/share/ /windows
 
  1. 统计目录A 中 所有 .svn 文件夹合计占用磁盘大小  
find 目录A -name "*.svn" -type d|xargs du -ch |tail -n1|awk '{print $1}'
 
 
  1. crontab 误删了,如何恢复 ? 为了防止 crontab被误删,我们该怎么做 ?
从 /var/log/cron 中恢复最近几天的crontab运行日志, 为了防止 crontab误删, 可以每天对crontab备份,备份最近15天数据,过期清除。

#!/bin/bash

DATE=$(date +%Y%m%d)

 

crontab -l > /home/work/bak/crontab_$DATE.bak

find /home/work/bak/ -mtime +15 -name '*.bak' -exec rm -rf {} ;

       
  1. root 用户下以 httpd 用户的身份运行脚本 /opt/case/www.km.com/testdb.php, 用一条命令怎么实现 ?
sudo httpd php -f /opt/case/www.km.com/testdb.php
 
  1. 如何查看 进程号 为 4044 的进程打开了哪些文件 ?
 
通过进程名字以及pid 执行 lsof -c programe-name 或 lsof -p $pid
 (losf 命令很实用  lsof /proc 查看被打开某一文件相关进程信息; losf -i:25查看监听25端口的进程; losf -i @192.168.1.1 查看活动的链接; losf -u root 查看某个用户打开的文件.)
 
  1. MySQL 怎么授权及取消授权,假如环境如下:
授权IP: 172.16.0.11      用户名:test     密码: 123456        数据库名: monitor   权限 :SELECT
 
grant SELECT privileges on monitor.* to 'test'@172.16.0.11 identified by '123456'; 
flush privileges;
revoke select privileges on monitor.* to 'test'@172.16.0.11 identified by '123456';
flush privileges;
 
  1. linux 怎么查看用户登录日志 
last
 
 
  1. 如果你负责监控系统,你会怎么做 ?、
 
监控mysql主从, 同步异常时发送邮件。 根据web日志或者网络连接数,监控当某个ip 并发连接数或者短时间内pv达到100,即 iptables -I INPUT -s 192.168.1.1 -j DROP 监控频率3分钟。 
分多钟方式监控web服务状态, 例如:监控web站点目录是否存在恶意篡改,定时curl 站点是否返回502,ddos攻击检测事实流量,流量进出大小,数据包个数进出多少,延迟高,伴随丢包现象。 
数据库慢日志检测,检测日志利用率,监控表空间使用率与剩余空间,检测吞吐量,用户连接数,磁盘读写总时间,缓存命中率。
使用nc命令来模拟web客户端检测memcache 是否正常,监控响应时间以及命中率。
 
  1. 网站pv从100w 突增到 1000w, 你会做什么
页面点击量突增,有可能是恶意攻击, 先查看访问日志里短时间内访问最大的远端地址,并查看ip地址定位信息,统计最大访问量的页面,根据页面查看由哪个页面跳转过来,进一步pv的真实性, 考虑到服务器负载 iptables 对真实性过低的大流量客户端进行阻断。
 
可以考虑咨询市场部门,是否有在部分时间内做过网站推广,是否被上热搜,当然通过访问日志也可以判断出大致原因。
 
 
  1. mysql主从延时主要哪些原因,怎么解决?
    主从有延迟是很正常的一件事,先要分析造成主从延迟的原因,主要有网络、磁盘IO两大原因。我们需要尽可能地降低延迟,所以需要把网络环境搞稳定,使用千兆网卡并做双网卡绑定,甚至使用光纤通信,也就是说不要让网络带宽成为传输数据的瓶颈。而在磁盘IO上,也需要提升,比如使用高转速高缓存的硬盘并做raid50,或者使用ssd硬盘并做raid50,大大提升磁盘的IO速度。
 
  1. 写一个脚本后台监控php-fpm 进程,当检测到进程停止后,能自动启动php-fpm 
#!/bin/bash
pid=`pgrep php-fpm|wc -l`
if [ $pid -eq 0 ];then
           echo "php have down........"
           echo "wait a minute ,php will start....."
           systemctl start php-fpm
else
       echo "php is well"
fi
 
  1. 有一日志文件  假设文件名为 demo.log,只查看它 的第1000行至2000行。 
sed -n '1000,2000'p demo.log
 
  1. 如果让你管理数量 100+ 服务器,你会如何去管理?
 
1.首先将100+台服务器都录入到资产管理系统中,并且使用zabbix 添加监控,设置邮件报警。
2.将100+台机器按照业务分组,比如数据库,测试等
  1. 使用自动化管理工具ansibel 进行批量管理。
 
 
  1. 写一个脚本将数据库备份并打包至远程服务器 192.168.1.1  /backup 目录下 。
 
#!/bin/bash
 
mysqldump -uroot  --all-database > all.sql
 
if [ $! -eq=0 ]
then
 
/usr/bin/tar -zcvf `date +%F`.tar.gz all.sql
 
/usr/bin/rsync -az `date +%F`.tar.gz 10.222.138.155:/root/backup
 
else
 
     echo "mysqldump failure" >> /tmp/mysqldump.log
fi
 
 
  1. 使用tcpdump 监听主机iP为 192.168.1.1 ,tcp端口为 80的数据,同时将结果输出到 tcpdump.log, 请写出相关命令。
 
tcpdump -nn host 192.168.1.1 and tcp and port 80 -w tcpdump.log
 
 
  1. 用sed 修改test.txt 的23行 test 为 tset;
 
sed -i "23s/test/tset/g"  test.txt
 
 
  1. 写一个脚本,实现批量添加20个用户, 用户名为 user1-20, 密码为user后面跟5个随机字符。
 
#!/bin/bash
 
for i in `seq 1 20`
do
 
useradd user_$i
password=`echo $RANDOM|md5sum|cut -c 1-5`
password="user"$password
echo $password|passwd --stdin user_$i
 
done
~       
 
 
  1. 写一个脚本,判断一个指定的脚本是否有语法错误; 如果有错误,则提醒用户键入Q或者q无视错误并退出其他任何键可以通过vim打开这个指定的脚本。
 
#!/bin/bash
 
script_file="./2.sh"
sh -n $script_file > /dev/null 2>/dev/null
 
n=`echo $?`
if [ $n -ne 0 ];then
 
   read -p "this script is a bad file,"q" or "Q" --exit,other key to edit the file:" key
   echo $key
   if [ $key == 'q' -o $key == 'Q' ]
      then
           exit
      else
         vi $script_file
   fi
 
fi
 
 
 
#!/bin/bash
 
script_file="./2.sh"
sh -n $script_file > /dev/null 2>/dev/null
 
n=`echo $?`
if [ $n -ne 0 ];then
 
   read -p "this script is a bad file,"q" or "Q" --exit,other key to edit the file:" key
   case $key in
   q|Q)
     exit 0
     ;;
   *)
     vi $script_file
     ;;
   esac
fi
 
  1. 在 1-39 内取随机数
echo $[$RANDOM%39]
 
 
  1. 显示/etc/inittab 中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行 
 
grep "^# {1,}[^ ]"  /etc/inittab
 
  1. shell 下32位随机密码生成
 
echo $RANDOM|md5sum|cut -c 1-32
 
 
  1. 使用awk命令, 计算一个目录下文件大小的总和
ls -l /root |awk '{sum=sum+$5} END {print sum}'
 
  1. 现公司有这样 需求,将nginx 反向代理 apache, 已知 apache 地址为:192.168.2.11,代理链接为 curl:http://192.168.2.11/index.php,nginx具体怎么配置实现此功能?
 
server {
listen 80;
server_name http://192.168.2.11/index.php;
location / {
proxy_pass 192.168.2.11;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#client_max_body_size 100m;
}
 
 
 
34  --使用任意一种你所熟悉的脚本完成如下任务:将/etc/passwd的第一列取出,并且每一列都以一行描述如:“The 1 account is aowgamecoser”来显示,1表示行数。
 
   cat  etc/passwd | awk -F':' '{print "the" NR "account is aowgamecoser",$1}'
 
 
  1. 假如我们部署在北京BGP线路机房的装甲风暴游戏,晚上23:00 接到投诉深圳地区部分玩家无法登陆游戏, 请概括描述故障排查思路和解决办法。
 
  1. 先查看网络是否正常,可查看深圳到北京BGP机房这段网络
  2. 查看服务器的运行情况,是否负载过高,内存跑满。
  3. 查看报错日志 
 
  1. 某天与用户投诉访问网站速度很慢或页面打不开,若你是该网站web服务器的管理员,你如何查找原因,
 
检查网站的在线用户量,根据用户的并发量来做初步判断是不是因为并发量过大引起的数据库连接负荷原因
检查数据库连接是否满负荷。
通过浏览器自带的检测请求发送到返回的时间来判断是否是因为用户带宽原因。
 
 
  1. 写一个sed命令,修改/tmp/input.txt文件的内容,要求:删除所有空行,在非空行前面加一个 “”AAA“”,在行尾加一个“”BBB“”
sed  '/^$/'d 1.tx|sed 's/$/BBB/' |sed 's/^/AAA/'
 
 
 
 
 
原文地址:https://www.cnblogs.com/weifeng1463/p/7298364.html