月份:2017年10月
刚刚做运维工作
北京,9期,13k,网管转型运维
先来说说这份工作的面试吧!以前也发过帖子,主要有shell,mysql,zabbix,nginx,redis,rsync,ansible,其中shell最重要。好了面试就说到这,反正大家认真学,基本的都会,但是shell就是看大家自己的学习态度了,我是练习的人家出个想法自己基本2,3分钟内就可以想出逻辑。
刚开始工作的时候,基本不知道自己干什么,第一天我记得非常清楚,给我一台电脑叫我自己装一些自己常用的软件,但是没干过,我哪知道装什么,东拼西凑装了好几个,后来实际用的也就是个xshell,和一个笔记工具。
工作了,上来就是叫我搞监控用zabbix ,公司什么报警都没有,也没给我标准自己去搞吧,幸亏帮同学搞过没有晕头,但是最后还是挨批了 ,时间太长做了2个星期没出来。
哎怪自己太贪心不会玩,其实可以先把cpu、硬盘、内存等基础的先搞出来,然后再完善。我搞的时候是想全部都搞定的,什么nginx php redis mongo mysql 等等一起搞出来。早知道1天就搞定了,以后的再优化。
之后就是搞网站迁移,插件安装,svn 等等。自己是边学边干,感觉自己进步挺快的。在这个期间,写了差不多40个监控脚本,和守护进程脚本。还有2,3个安装脚本。用ansible写的布置yml也有10几个。就这样2个月就过去了。
这2个月给我最大的感受就是shell和ansible太有用了,可以节省自己很多时间,现在也在学习python。因为公司现在用的是dijago以后python一定会用上。
好了牢骚了这么多。希望大家努力学习。都会一份自己满意的工作和可以接受的工资。哦工资没说,月薪13k。
在这里谢谢铭哥把我带进这个圈子,不是铭哥我估计我现在还是在当网管。谢谢九期的小伙伴,大家一起学习的日子。希望大家在以后的工作中都能实现自己的目标。
shell习题-打印正方形
交互式脚本,根据提示,需要用户输入一个数字作为参数,最终打印出一个正方形。
在这里我提供一个linux下面的特殊字符■,可以直接打印出来。
示例: 如果用户输入数字为5,则最终显示的效果为
■ ■ ■ ■ ■
■ ■ ■ ■ ■
■ ■ ■ ■ ■
■ ■ ■ ■ ■
■ ■ ■ ■ ■
参考答案:
#!/bin/bash read -p "please input a number:" sum a=`echo $sum |sed 's/[0-9]//g'` if [ -n "$a" ] then echo "请输入一个纯数字。" exit 1 fi for n in `seq $sum` do for m in `seq $sum` do if [ $m -lt $sum ] then echo -n "■ " else echo "■" fi done done
shell习题-判断没有文件
判断所给目录内哪些二级目录下没有text.txt文件。
有text.txt文件的二级目录,根据文件计算选项中单词数最大的值(选项间以|分割,单词间以空格分隔)。
假如脚本名字为1.sh, 运行脚本的格式为 ./1.sh 123 root,其中123为目录名字,而root为要计算数量的单词。
说明: 这个shell脚本题目出的有点歧义。 原题给的描述不是很清楚,我另外又改了一下需求,依然不是很清晰。在这里我再做一个补充: 对于有test.txt的目录,计算出该test.txt文件里面所给出单词的次数。不用找最大。
参考答案:
#!/bin/bash if [ $# -ne 2 ] then echo "useage $0 dir word" exit 1 fi if [ -d $1 ] then cd $1 else echo "$1目录不存在" exit 1 fi for f in `ls $1` do if [ -d $f ] then if [ -f $f/test.txt ] then n=`grep -cw "$2" $f/test.txt` echo "$1/$f/test.txt 里面有$n个$2" else echo "$1/$f 下面没有test.txt" fi fi done
杀了5回,寻得出路
各位小伙伴好,我是15期学员,今年4月报名的,报名之前是做系统支持的,也就是处理客户在使用系统中的一些问题,相当于售后工作;每个月拿着5K的工资,扣了该扣的,到手也就4K多左右,在深圳这个高消费的城市4K多生活还是很坚难的。
报名之后学了一个月,后面也没怎么学,总是学下,玩下,学下,玩下,学了后面的忘记前面的,我这人有个坏毛病,自制力超级差,差到什么程度勒。差到铭哥都对我无语了,认为我无药可救的地步了,不过后面铭哥还是一直督促我学习,询问我为什么没有回复专贴;为了逼自己学习,于是6.17我从在职的公司果断辞职了,埋头在家学习了一个半月,把所有的课程过一遍,不懂的在VIP群里问下同学,和直接QQ上问铭哥,每次铭哥都很负责任的回答我。
看完了第二个阶段的课程,我就更新了下简历,更新之前把简历发给铭哥指点了下;没有刻意去投简历到公司,都是让他们找我的(北上广运维人才需求还是很大的),接到面试电话我就用纸记上,尽量公司地址不远都安排在一个时间段(比如,第一家公司在福田安排在上午9点,如果后面还有一家福田的公司打电话给你,你就可以按排在10.30,一般一个半小时面试时间充足了)这样下来一天就可以面试四家左右,但人很累是真的;好了,下面我简单介绍下这几天的面试情况;说得不好大家见谅!
第一 家
8.4号下午接到的一个面试,是做金融的,运维是外包的,HR叫要离职的运维直接打电话给我的,电话简单聊了下,我直接告诉人家我mysql很弱,结果那面试的运维说没事,过来聊下,于是我8.5号上午就过去,到了地方,打电话给他,他拿着我的简历出来,说会议室有人,问我抽烟吗,我说抽,直接把我拉到抽烟区,边抽烟,边问我,主要问的是:LAMP、LVS原理,LVS三种模式,iptables(如果80端口允许通过,其它所有端口不允许通过,请问是先能允80还是先拒绝所有)我回答当然是先允许后拒绝所有;后面就一直追着我问mysql方面的,我当时主不懵B了,(脏读,幻读,四个隔离级别,mysql主从,读写分离)总之边聊边抽烟,抽了大概5,6支左右,面试完了,我都跑厕所吐了;后面打道回俯;
第二家
下午,坐了个把小时车,转了N次车,到达深圳科技中心 科技园,到达公司,递交简历,坐会议室等待,一会人事总监,过来跟我面试,叫我简单介绍自己,介绍完了之后,告诉我,他们这边服务器都是开发在管理,他们现在要招一个网管,来管理公司内部的PC ,还问我会不会装win ios 系统,问了些防火墙,路由方面的;简单答了下,下楼走人;
第三家
8.8号,星期一,下午,去凯立德导航面试,到了先做面试题,在群里小伙伴,跟我弟的帮助下,顺理完成简单得不能再简单的面试题,做完交卷,技术主管来了,先简单介绍下自己,然后就问了之前做运维做过那些,我把lamp.lnmp,主从 ,简单的介绍了下,中间也聊了蛮多,具体聊啥忘记了,结果到最后面试官来句,你对WEB服务器方面很熟悉,但是我们招的是大数据方面的,结果当时就无语了,你招大数据方面精通的,那你叫我来嘎哈!
然后面试完成,下楼,抽只烟,继续去旁边不远的一栋写字楼面试第二家(这就是安排在一起的好处,面试完一家可以继续不远处面试第二家) 走在路途中的时候,这家的HR就问我到哪了,我说我到楼下了,上楼,填了个面试报告,应该是开发的面试主管来了,去会议室(有人),所另找一个地方,直接去公司旁边的小房间,开门的一瞬间,当时就无语了,(我草,杂物间,里面什么乱七八遭的都有)当时心里一万只草尼马跑过,简单介绍下,(实在是没心情介绍自己)真的简单的介绍了下,问了下LAMP LNMP原理,nginx 的常用优化,面试完成,提包闪人。
第五家
也就是正式入职的一家。路程蛮远的,拉勾上直接聊的,由于路程蛮远,提前过去了,真心远,不过HR说月底搬科技园,所以才考虑去面试,到了之后,公司在类似工业区里面,真心很小,交了简历,一会HR跟面试官一起面试,先自我介绍下,此处省N字,然后面试官开始问了:
你对运维怎么理解的,答:系统安全,保障系统业务的维定,提前预防和处理发生的故障。好像就答了这三点。
然后问 你们平时用什么做系统监控,(cacti监控硬件,nagios 或zabbix监控软件)我会说我是在去的路上用手机登陆猿课APP看了监控介绍吗,哈哈!
继续问,你们平时是怎么做到保障一台面宕掉,另外一台面马上接手业务的;当时我有点懵,随口就说了:做主从,数据同步,一台从宕掉,另外一台会马上接手任伤。(我也不知答得对不对)
后面还问了LAMP LNMP原理性的东西,然后我又自己给自己挖了坑,我说我Mysql很弱,面试官直接问,你不是做过主从吗,怎么会弱勒。当时就懵B了,心想这下完了;
然后又继续问,你之前公司主从是你做的吗,我很肯定说:是的。然后问我,我们会司就你一个,你有信心搞定吗。我直接说:有信心。
问完,又问我有什么想了解他们公司的吗?我问了下公司主要做什么,有多少台服务器,在完成自己工作后,能不能自己学习新的东西(这点很重要,要表现有你好学,公司都喜欢好学的员工)。
然后面试官问我,未来的一个方向是什么:我说开发型运维,后面肯定是要去学python的。他说你以后就是想往自动化运维方面发展是吗?我说是的。
然后面试完成,HR问我要期望多少薪资,我没敢多要要了8.5。结果今天下午打电话给我说明天过来入职;给了8K 试用期2个月6K。好了就这么多,希望各位都能转型成功,找到好工作!在次感谢铭哥,带我入门,找到人生一第份运维工作。
shell习题-计算器
用shell写一个简易计算器,可以实现加、减、乘、除运算,假如脚本名字为1.sh,执行示例:./1.sh 1 + 2
参考答案:
#!/bin/bash if [ $# -ne 3 ] then echo "参数个数不为3" echo "当使用乘法时,需要加上脱义符号,例如 $0 1 \* 2" exit 1; fi num1=`echo $1|sed 's/[0-9.]//g'` ; if [ -n "$num1" ] then echo "$1 不是数字" ; exit 1 fi num3=`echo $3|sed 's/[0-9.]//g'` ; if [ -n "$num3" ] then echo "$3 不是数字" ; exit 1 fi case $2 in +) echo "scale=2;$1+$3" | bc ;; -) echo "scale=2;$1-$3" | bc ;; \*) echo "scale=2;$1*$3" | bc ;; /) echo "scale=2;$1/$3" | bc ;; *) echo "$2 不是运算符" ;; esac
shell习题-自动添加项目
需求背景:
服务器上,跑的lamp环境,上面有很多客户的项目,每个项目就是一个网站。 由于客户在不断增加,每次增加一个客户,就需要配置相应的mysql、ftp以及httpd. 这种工作是重复性非常强的,所以用脚本实现非常合适。
mysql增加的是对应客户项目的数据库、用户、密码,ftp增加的是对应项目的用户、密码(使用vsftpd,虚拟用户模式),httpd就是要增加虚拟主机配置段。
参考答案
#!/bin/bash webdir=/home/wwwroot ftpudir=/etc/vsftpd/vuuser mysqlc="/usr/bin/mysql -uroot -xxxxxx" httpd_config_f="/usr/local/apache2/conf/extra/httpd-vhosts.conf" add_mysql_user() { mysql_p=`mkpasswd -s 0 -l 12` echo "$pro $mysql_p" >/tmp/$pro.txt $mysqlc <<EOF grant all on $p.* to "$pro"@'127.0.0.1' identified by "$mysql_p"; EOF } add_ftp_user() { ftp_p=`mkpasswd -s 0 -l 12` echo "$pro" >> /root/login.txt echo "$ftp_p" >> /root/login.txt db_load -T -t hash -f /root/login.txt /etc/vsftpd/vsftpd_login.db cd $ftpudir cp aaa $pro //这里的aaa是一个文件,是之前的一个项目,可以作为配置模板 sed -i "s/aaa/$pro/" $pro //把里面的aaa改为新的项目名字 /etc/init.d/vsftpd restart } config_httpd() { mkdir $webdir/$pro chown vsftpd:vsftpd $webdir/$pro echo -e "<VirtualHost *:80> \n DocumentRoot "/home/internet/www/$pro/" \n ServerName $dom \n #ServerAlias \n</VirtualHost> " >> $httpd_config_f /usr/local/apache2/bin/apachectl graceful } read -p "input the project name: " pro read -p "input the domain: " dom add_mysql_user add_ftp_user config_httpd
这小说,不看可惜了
说明: 15期的,深圳
今天面了一家,虽然没当场给offer,但跟技术总奸跟hr聊过之后感觉有戏,也怕自己忘记了,发个帖子给司机们参考一下。
先说说我面的第一家的情况吧。我是7.18号下午三点左右投的的简历,当天6点就有电话让我面试了,一家做餐饮app的,地点闹市区,简单看了下招聘要求和复习对应的知识紧张又兴奋的去了,到了好失望,虽说是市区,可十几年楼龄的商住两用楼也太坑了吧 ,一出电梯,这啥啊,这这这…不是荒废多年的豆腐小作坊嘛,额。。。深呼吸。。。来都来了,打个怪吃个经验再走呗。
进门坐下,自我介绍。。。根据简历问了下ha和lb,mysql主从,忽悠过去,二面老大模样的来了,来了直接放大招,ssd读取速度是普通硬盘的多少倍,额..2倍..哦不是…啊,不知道。砰,子弹穿膛过,扶着墙抗住了。。。用的什么防火墙…懵逼三秒,额用的iptables和依赖阿里云的云骑士。哦…停顿三秒,还有什么要求吗… 那个要求的月薪可以达到吗…有经验的老手可以…嗯,明白,憋着最后一口气退出来了,面了15分钟,坐两个半小时车屁颠屁颠回去…
好久没打怪,被怪打死了。主城复活,下个BOSS直聘,又上传了自己diy的简历,眼一睁又一闭,第一天过去了,好吧,没有音讯。第二天早上好像发生了化学反应,咚咚咚要了三份简历给了三个面试邀请。。。
第一家离家不远,做O2O 移动app运营的,看了下招聘要求,感觉这个怪不是红色的,还是个女怪,比较喜欢,目测可以吃下。对应招聘要求做了针对性复习,官网了解了下(感觉跟hr谈的时候起了点效果),又在草稿上列举了自己该问的问题,比如公司服务器环境,防火墙(感谢打死我的老妖怪),架构,是否有做ha和lb(感觉这些是万金油)…装备哦了,准备出门收怪… …
套路开始:自我介绍—工作经历—职责。Ok,技术总奸开始出招了。
1 知道哪些服务器版本,用的哪些,ubuntu知道吗,无难度,pass
2 yum安装和源码安装有什么区别,(yum我主要用于依赖库的安装,自定义安装的服务和软件用源码,可以自定义路径,精简参数,不知道对不对)
3 Mysql主从实现(heartbeat keepalived.),两者有什么区别(keepalived更容易配置,不是大型网络优先keepalived….)
3 你了解的读写分离中间件(mysqlproxy,360的一个叫啥,叫不出名字,也是根据mysqlproxy优化的,mycat后面才想到, mycat是从求职群的消息知道,感谢铭哥,你给我的不只是知识,更是圈子,人脉)
4 mysql的主从版本不一致,从某天挂掉了,如何恢复(心想这是考主从原理啊,主从版本跟这有关系吗,烟雾弹吧,不管了,直接说出主从原理)… …继续
5 做过mysql调优吗,说说一些参数(datadir,basedir,sock…依稀记得spare_size,max_connections..不知道对不对,不管了,说出来了)
6 用户直观的感觉访问很慢咋办(看下slow_log,看看哪条sql语句慢,这里装了下逼,把论坛里的mysql优化的一个例子说出来,是myisam转换为innodb,key设置为null那个,感谢那位师兄),如果看slow_log,没发现有慢查询呢,但是开发同事连接很慢呢,是通过主机名连的吗?不是,是ip,哦那ping 下mysql所在主机是否有丢包,有就查网络原因,ping值正常就show processlist,看看那些sql在使用mysql资源,不知道对不对,当时就这么答了
7 Lvs的三种模式,说说你知道的,额,小怪,无难度,nat模式适用于20台一下的网络环境,因为是nat转发,遭受ddos攻击容易波及其他服务器…dr模式就把原理答了下…
8 写过脚本吗,当然写过,最有挑战性的就是写了交互式安装lanmp环境的脚本(盗用课程,铭哥收下我膝盖)
9 对监控了解吗,说下你认为有心得的:最有心得的就是自定义脚本添加到nagios实现个性化监控
10 自动化运维工具(重点说了ansible)。
被强奸了N次后,总奸总算说了他们现在的环境,架构和现在的瓶颈(tomcat相关),然后说了下我如果入职负责哪些哪些方面。。。接下来hr(s少妇)来又轮了我一遍,砍掉2K后说我能接受不(好爽,接受了。问这个薪资怎么得出来的,我说能力匹配,然后说了下我要的薪资有波动区间主要是考虑到市区生活成本高,你提出的xxxk,基于龙岗这样的水平,可以接受)……小伙子,8.1号通知你(7月底才完全离职)…
终于写完了,看完的举爪支持下… …
shell习题-获取子进程
说明:本shell题目是一个网友在公众号中提问的,正好利用这个每日习题的机会拿出来让大家一起做一做。
给出一个进程PID,打印出该进程下面的子进程以及子进程下面的所有子进程。(只需要考虑子进程的子进程,再往深层次则不考虑)
参考答案:
#!/bin/bash read -p "please input a pid number: " p ps -elf > /tmp/ps.log is_ppid(){ awk '{print $5}' /tmp/ps.log > /tmp/ps1.log if ! grep -qw "$1" /tmp/ps1.log then echo "PID $1 不是系统进程号,或者它不是父进程" return 1 fi } is_ppid $p if [ $? -eq "1" ] then exit fi print_cpid(){ p=$1 awk -v p1=$p '$5 == p1 {print $4}' /tmp/ps.log |sort -n |uniq >/tmp/p1.log n=`wc -l /tmp/p1.log|awk '{print $1}'` if [ $n -ne 0 ] then echo "PID $p 子进程 pid 如下:" cat /tmp/p1.log else echo "PID $p 没有子进程" fi } print_cpid $p for cp in `cat /tmp/p1.log` do print_cpid $cp done 另外,一条命令查询的方法是:pstree -p pid
shell习题-监控cpu使用率
用shell写一个监控服务器cpu使用率的监控脚本。
思路:用top -bn1 命令,取当前空闲cpu百份比值(只取整数部分),然后用100去剑这个数值。
参考答案:
#!/bin/bash while : do idle=`top -bn1 |sed -n '3p' |awk '{print $5}'|cut -d . -f1` use=$[100-$idle] if [ $use -gt 90 ] then echo "cpu use percent too high." #发邮件省略 fi sleep 10 done
shell习题-问候用户
2017年10月27日
shell习题
No Comments
aming
写一个脚本,依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么
Hello,root,your UID is 0.
参考答案: