月份:2017年10月


vim的加密功能


一、 利用 vim 加密:

优点:加密后,如果不知道密码,就看不到明文,包括root用户也看不了;
缺点:很明显让别人知道加密了,容易让别人把加密的文件破坏掉,包括内容破坏和删除;

vim编辑器相信大家都很熟悉了吧,vim里有一个命令是给文件加密的,举个例子:

1) 首先在root主目录/root/下建立一个实验文件text.txt:
#  vim  text.txt

2) 进到编辑模式,输入完内容后按ESC,然后输入:X(注意是大写的X),回车;

3) 这时系统提示让你输入密码,2次,如下所示:
输入密码: *******
请再输入一次: *******

4) 保存后退出,现在这个文件已经加密了;

5) 用cat或more查看文件内容,显示为乱码;用 vim重新编辑这个文件,会提示输入密码,如果输入的密码不正确,同样会显示为乱码!
注意:文件加密后,千万别忘了密码!

二、 vim编辑加密的文件(前提是你知道加密的密码):

1)  用 vim 打开文件如text.txt,要输入正确的密码,然后在编辑时,将密码设置为空,方法是输入下面的命令:
:set key=
然后直接回车,保存文件后,文件已经解密了。

2) 或者这样也行:
在正确打开文件后用 “:X” 指令,然后给一个空密码也可以。保存用“wq!”保存。
两种方法实际上效果是一样的。

这些面试干货不来看看吗


大家好,我是13期的学员,最近在杭州找了份运维的工作,因为经验并不多,所以就简单地谈下心得体会。

我是2015.12.23报名的猿课,上一份工作是在一家网络安全厂商做售后技术支持,因为每天要出差到处跑,而且因为项目原因,经常要加班到晚上不定时,所以没有一个稳定的时间来学习linux课程,只能抽时间来尽量学习,到上个月底 断断续续的学完了一些除一些高级应用以外的课程。

上个月底,把上一份工作辞了,这个月初来杭州开始找工作。在拉钩上投了接近二十份简历,其中有两版,第一版是按照自己实际的工作经验写的,结果可想而知,根本连简历这关都过不去,直接被打回了,后来根据铭哥的指点,把上一份工作写成运维经验,收到了几家面试邀请,所以说这里一定要注意,简历的工作经历内容一定要是运维相关的工作,否则连面试机会都拿不到,至于简历具体的写法,建议参考STAR原则来写,这样通过概率比较高。

我一共面试了两家公司,分别说一下情况:

第一家公司开始说是做个人资产管理的,后来去面试的时候发现是做医疗的,这时候就感觉不咋靠谱,去了先做了一份笔试题,然后就是一个研发来给面试,大概问了下面这些问题:

1、为什么从上一家公司离职

2、平时使用哪个发行版的linux,centos6和7的区别是什么,如果业务要用,你会选择哪个版本,为什么

3、mysql用过哪个版本,说明5.1/5.5/5.6和5.7的区别分别是什么?

4、linux、apache、nginx、php、mysql调优具体需要修改哪些参数?

5、做没做过软件测试,如果要做能否胜任

6、做没做过网络管理,如果要做能否胜任

后来了解了下他们的情况,现在有接近十个研发,网管和运维都没有,都是开发在兼职做,所以他们想照个运维+测试+网管的人,感觉这家小公司好不靠谱,后来就回去等消息吧,没下文了。

第二家就是发offer的这家。昨天通知第二天上午去面试,是一家做互联网金融的公司,所以我就在前一天晚上按照他们的招聘要求把相关的内容都看了准备下,包括lanmp优化,各种应用搭建等。今天上午去了之后,填了一张调查表,然后并没有笔试,直接去了技术负责人那里进行了面试,他看我上学学的信息安全专业,就对这个比较感兴趣,简历上的东西基本没问,主要问了一些网站安全相关的

1、如果有人对网站进行DDoS/CC攻击怎么办?(DDoS攻击是一种业界难题,这种题没有绝对的答案,但是有一些常用的思路可以参考:http://mp.weixin.qq.com/s?__biz=MjM5MzM3NjM4MA==&mid=212568540&idx=4&sn=8b4edc2a5e244e31391b78eb55bdaea3&scene=23&srcid=070773uSMNAuBiMcOIN8LiHr#rd

2、linux本身的安全优化可以怎么做?(论坛里有)

3、数据加密主要用在网络访问的哪个过程(密码等信息的存储过程,防止被脱裤或数据库泄露的时候明文泄露,这个我答上了,他对我竖了下大拇指,从这以后聊天就轻松多了,后来回来之后想了下,应该还有数据传输过程,防止被嗅探等)

4、lnmp的常用优化方法有哪些(论坛里有,自己总结一下,注意思路)

5、有没有了解过NoSQL,简述下(简述了memcached,这个在招聘要求中有写到,所以提前一天看了下。)

6、能不能接受加班(当然回答能)

7、是否了解keepalived的工作过程(了解,简单描述了下工作流程),然后看我提到了VRRP协议,就问我这是什么协议(虚拟路由冗余协议,又简单介绍了下),然后他问我网络知识是学校课程学的还是自学的(这种是送分题,肯定是说自学的,突出自己的学习能力)

8、你学信息安全专业的,在学校有没有做过什么令自己有成就感的专业方面的事情(我说发现过学校网站上的一些漏洞,这种可以说一下,但是要保持谦虚,不要显得太过自负就好)

9、还有没有什么要向我了解的(一般面试官提了这种问题,尽量不要说没有,这是面试官了解你态度的一种途径,你可以说想了解下公司现在团队和业务的情况,总之这就是个送分题,对自己没坏处)

跟技术部领导很聊得来,比较满意,但是后来在跟人力聊得时候掉坑里了,由于没有经验,所以在期望薪资的地方没敢要太高,后来被人力压榨了1k下去,还说他们要考虑考虑,有好几个面试过的他们要综合考虑一下,但是我感觉都是扯淡,就是想吓唬我然后尽量压低工资,但是我因为跟技术总监聊得来,后来比较有信心,跟他们扯,最终又把待遇提高了500,所以大家要注意,以后去面试一定要把期望薪资写的比自己实际期望的高一截,如果谈的不好,反正也无所谓了,如果谈的好,自己有更大的余地去谈薪资,切记!

总结几点心得体会吧:

1、师傅领进门,修行在个人。linux运维是一个相当宽泛的描述,涉及的东西太多,老师不可能把所有的东西都交给你,所以需要自己根据需要扩展知识面和学习深度,这样才能适应需求。

2、在面试之前,一定要根据企业招聘需求里提到的技能点进行针对性的学习复习,这样才能在面试的时候有更好的表现。

3、面试期望薪资填写一定要比实际期望的高一截

4、学习过程一定要知其然,知其所以然,不要只是照着文档做一遍就行了,明白原理之后会发现自己更加游刃有余得心应手。

另外感谢铭哥和群里的小伙伴们,没有你们的支持和监督,我说不定就半途而废了,有你们的支持和帮助我才能坚持下来。

现在要开始一段新的征途了,要比以前更加努力才可以。

shell习题-清理日志


要求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件。在堡垒机批量发布,也要批量发布到crontab里面。

A类机器日志存放路径很统一,B类机器日志存放路径需要用*匹配(因为这个目录里除了日志外,还有其他文件,不能删除。匹配的时候可用*.log)

A类:/opt/cloud/log/   删除7天前的
B类: /opt/cloud/instances/  删除15天前的

要求写在一个脚本里面。不用考虑堡垒机上的操作,只需要写出shell脚本。

 

参考答案:

#!/bin/bash

dir1=/opt/cloud/instances/ 
dir2=/opt/cloud/log/

  if [ -d $dir1 ];then
      find $dir1 -type f -name "*.log" -mtime +15 |xargs rm -f
  elif [ -d $dir2 ];then
      find $dir2 -type f -mtime +7 |xargs rm -f
  fi

shell习题-处理文本


有如下文本,其中前5行内容为

1111111:13443253456
2222222:13211222122
1111111:13643543544
3333333:12341243123
2222222:12123123123

用shell脚本处理后,按下面格式输出:

[1111111]
13443253456
13643543544
[2222222]
13211222122
12123123123
[3333333]
12341243123

 

参考答案:

#! /bin/bash

sort -n filename |awk -F ':' '{print $1}'|uniq >id.txt

for id in `cat id.txt`; do
        echo "[$id]"
        awk -v id2=$id -F ':' '$1==id2 {print $2}' filename  
        #另外的方式为: awk -F ':' '$1=="'$id'" {print $2}' filename  
done

shell习题-处理日志


写一个脚本查找/data/log目录下,最后创建时间是3天前,后缀是*.log的文件,打包后发送至192.168.1.2服务上的/data/log下,并删除原始.log文件,仅保留打包后的文件

参考答案:

#!/bin/bash

find /data/log -name “*.log” -mtime +3 > /tmp/file.list
cd /data/log
tar czvf log.tar.gz `cat /tmp/file.list|xargs`
rsync -a log.tar.gz  192.168.1.2:/data/log  //这一步需要提前做一个免密码登录
for f in `cat /tmp/file.list`
do
    rm -f $f
done

成功往往在不经意间


学了大约5个月吧,其实本来应该在6月份出来找工作的,但是一直拖到7月10号才下定决心跑到深圳去找工作。。11号时第一场面试黄了,问了如下问题,表现不好。

1、你现在还在职吗?(回答已经离职)
2、可以介绍一下你的工作经历吗?(把简历上的项目随便吹了一下)
3、你主要的工作经历是在那个公司里面?(这个问题问得有点突然,就直接照简历的公司说)
4、有没有做过这种日活跃用户有百万级的项目?(这个只能说没有,就老实和他说没有。)
5、你做过lamp环境的搭建吗?(回答做过)
6、对阿里云的服务器熟悉吗?(老实的回答,自己买了个vps,用lnmp搭建博客。)
7、mysql数据备份做过吗?(做过,然后自己挖了个坑吹到主从去。。)
8、根据我的话,直接问mysql主从的原理?(简述了一下主从原理。。)
9、对redis熟悉吗?(回答只搭建配置过。)
10、你能说一下对nginx里面配置的认知吗?(开启懵逼状态,就说了nginx的一些功能。感觉跑题了。。)
11、你能说一下nginx与php是怎么相联的吗?(我当时的回答是,nginx可以通过ip加port方式或者通过php的sock文件来连接。继续跑题。。。)
12、你知道fastcgi吗?(我就说了解一些,只看过一会儿 。。。心理在想,这下黄了。)
13、你知道nginx在进程配置上有什么讲究?(没答上来。。懵逼中。。)
14、对php的配置你所知道的有那些?(又没答上来。。)
15、php-fpm在进程的管理方面有那些?(。。。)
16、php-fpm分为动态与静态管理进程,这两种方式有什么不同(这个是提醒我,但是我依然没回答得上。。)
17、一台机子上面的php进程数有什么讲究,如何去配置一个最合适的进程?(。。。)
18、你对php其他的一些配置还有什么了解(。。。)
19、1个Ip在1分钟内访问不能超过100次,如何配置??(。。。)

这家我录了音,发在求职群里。。。后面那10分钟问参数问得我整个人都没信心了。。11号下午在深圳乱逛时接到两个面试的电话,一家是做互联网的,另一家是游戏运维(最后确定去这家,星期一报到)。。

互联网那家,没有笔试题,就叫我自我介绍,然叫我描述一下在简历里写的nginx负载均衡项目。。还有mysql备份等。。其他的都没有。。忘了录音了。。

游戏运维这家,做完笔试题,还问了我一些题目里的,说脚本是你自己写的吗?(当然说是自己写的),他还问这里有那题是百度的?(随便指了一题。。),然后问我有没有游戏运维经验(我说没有,之前做的都是web运维。。。),最后都是乱聊的,说我的发展的目录之类的。。

还介绍游戏运维是怎么怎么样,特意加强的问了愿不愿意加班(我当时说,嗯,有点不习惯吧,但是也可以。。)基本上我都记不太清了,他走了之后又来一个面试官。。问我系统负载怎么看(额,太简单了,我就说,w top这些。。)还问我试题里面有什么你觉得需要加强的?(我说shell吧,基本简单的都会写,难的可能要点时间。。)

还问我这个expect功能是怎么样。。。(开始有点懵了。。我说。。这expect功能就是用来自动分发命令用的。。)他也没多问。。最后是hr来和我聊天。。说什么租房这些,还有平时爱好 这些。。还有问我平时玩什么游戏。。。。

最后一家面试是在14号那天的(也是成功的这家)。。拉勾突然发邮件叫我去面试,我也没多想,直接去了。。这家也是没笔试题,直接面试,还是围绕我简历里的那个nginx负载均衡项目提问(额。),我麻利的把之前的面试说过的话又重复了一遍。。还提问了,mysql如何备份?(我就说,每天备份binlog日志,每一周用mysqldump备份一个全库。)顺着我的话,又问了,binlog是你自己写脚本备份的?(是啊。。当然说是。。)

最后问了一个问题。。如果不小心,开发人员弄错一个mysql里的数据,或者drop掉了某个关键的表,你如何处理?(我的回答是:首先不能给其最高的root权限操作,只能给予其够用的权限。在开头先预防,如果真的出现这样的问,那binlog备份就起到最关键的作用,binlog可以根据某个时间段来进行数据恢复,确保mysql能恢复到这个时间段的状态)

之前我来时想要8k左右的。。。但是面了第一家后,没信心了。。。后面几家hr问我薪资,我都说的6-8k,搞得现在这家也是给的6500。。不过好在提供住宿,每月有值班费1000,餐补600-700。

shell习题-批量杀进程


linux系统中,根目录/root/下有一个文件ip-pwd.ini,内容如下

10.111.11.1,root,xyxyxy

10.111.11.1,root,xzxzxz

10.111.11.1,root,123456

10.111.11.1,root,xxxxxx

……

文件中每一行的格式都为linux服务器的ip,root用户名,root密码,请用一个shell批量将这些服务器中的所有tomcat进程kill掉。

讲解: 有了ip,用户名和密码,剩下的就是登录机器,然后执行命令了。批量登录机器,并执行命令,咱们课程当中有讲过一个expect脚本。所以本题就是需要这个东西来完成。

 

参考答案:

首先编辑expect脚本 kill_tomcat.expect

#!/usr/bin/expect
set passwd [lindex $argv 0]
set host [lindex $argv 1]
spawn ssh root@$host

expect {
    "yes/no" { send "yes\r"; exp_continue}
    "password:" { send "$passwd\r" }
}

expect "]*"
send "killall java\r"
expect "]*"
send "exit\r"

编辑完后需要给这个文件执行权限 

chmod a+x kill_tomcat.expect

然后编辑shell脚本

#!/bin/bash
n=`wc -l ip-pwd.ini`
for i in `seq 1 $n`
do
    ip=`sed -n "$n"p ip-pwd.ini |awk -F ',' '{print $1}'`
    pw=`sed -n "$n"p ip-pwd.ini |awk -F ',' '{print $3}'`
    ./kill_tomcat.expect $pw $ip
done

shell习题-判断函数


请使用条件函数if撰写一个shell函数 函数名为 f_judge,实现以下功能

1)当/home/log 目录存在时 将/home目录下所有tmp开头的文件或目录移/home/log 目录。

2)当/home/log目录不存在时,创建该目录,然后退出。

 

参考

#!/bin/bash

f_judge (){
    if [ -d /home/log ]
    then 
        mv /home/tmp* /home/log/
    else
        mkdir -p /home/log
        exit
    fi
}

面试杀手锏


大家好,我是14期的一名学员,毕业于材料物理专业(非计算机相关),应届毕业生,于2016年初报名猿课, 由于原专业的影响之后半年间的学习效率并不高,在7月中旬收到offer。

现在对此次求职做出总结。首先是简历部分,作为应届毕业生,根本没什么项目经验,感觉参考简历中写的又离自己很远,所以一开始写的简历就很顺理成章的被铭哥批回来了。

根据铭哥指导,这些项目经验是一定要有的。两种目的,一是把所学知识通过这种方式在简历上展现出来,以获得更多的面试机会;二是面试时也有得说,对于学习中的一些问题和细节也可以这个时候说出来,以加大通过可能性。所以,关于这段自己的经历经验,自己一定要理顺。那么这个简历部分真的要感谢铭哥的指导,因为当时我还没投,是人事看到Boss直聘上的简介和我要的附件简历,就面这一个公司。

第二部分是笔试部分,当时先让填写一张表,然后在表的后面画一颗树。那么表的信息没什么好说的,我觉得这棵树肯定是一个人性格思想的体现了,所以我想一定要有很深的根,枝叶一定要茂盛,当时选用彩色的笔,不能太单调。画好之后呢,觉得一棵树好像有点个人主义了,又在旁边画了两颗陪衬的。我在这里想要表达的意思是,如果有类似的考题,要显示出你很注重基础,也很自信看好未来,有集体感,这是我能想到的,希望有同学表现的更好。然后是正经的考题了:

1.请解释以下Linux中的概念:
属组(group)、管道(pipe)、交换分区(swap)、单用户模式(single user mode)、负载(load)

2.请写出一下linux命令的功能:
grep、service、du、ssh、lsof
3.目前某公司有一个互联网端口,需要将公司中6台工作用电脑连入互联网,这些电脑均是单网卡,其他网络设备有一台单口路由器和一台8口交换机。请设计方案,包括网络拓扑图及相关设备的IP地址 、掩码、网关等信息。

4.你在运维工作中遇到过最严重的事故是什么,是如何产生及怎样解决的?
5.python如何定义一个函数,并试写一个函数,给定n,返回n以内的斐波那契数列。
6.python中什么是模块,模块是如何导入解释器的,分别有哪几种方法?
前面还有一些题目,但同样是测试个人品质和思维性的,就没有记录下来。这些题有的自己会有的在VIP群中同学的帮助下也有答案了,不过因为我还没有学习python,所以怕面试官问到自己又答不上来,反而得不偿失,所以python的题就没有答。

之后是人事面试,主要问题有这么几个:

一、问我学的不是计算机为什么要来做运维。我说的是在社团中有过运维经历,而原专业前景又不好,所以选择的运维来学习。

二、除了运维,有没有其他方面的兴趣,以后想怎么发展。我说现在就只想做好运维,但不排除会转到开发,个人比较喜欢linux嵌入式,但近几年可能性很小。

三、说出三个最可能造成你离职的原因,我就想了一会儿,因为之前想过之后规划,有两个原因,一是在本公司个人能力提升的空间,二是因为人生规划,也许会到其他地区(北京)去。我说这两个是我已经想过的可能性最大的原因,要是非让我说出第三个,我觉得刚刚您提出的其他方面的兴趣也是一个,但现在想想可能性不大。

四、你觉得大学期间让你获得最大成就感的事是什么。我说的是能够帮助别人吧,在集体中能体现出自己的价值(当时真是这么想的,因为本人性格有些内向,所以如果我能帮到别人真的是很开心的,而且面试后反思,好像也没有更好的答案了吧)。

五、你理解运维工作的性质是什么。然后我说的是从硬件上的调配,服务上的应用,和开发人员的协调这些运维人要做的工作。然后她说,你说的好像是技术层面上的,在其他方面有什么理解吗,当时我就懵了,不就这些么,还有啥呀。突然想到一件事,她是人事,不是技术主管,得从另一个角度理解这个性质,我说做运维工作和生活要协调好,因为遇到突发情况,无论什么时候都得回来救火(大概就这意思),果真就不问我了。人事面之后我的收获是,面试时不要过于严肃,言语得当即可,尽量不要形成一问一答的程序化场面,可以互相交流么,就像聊天。虽然她作为招聘方,但也没什么了不起的,咱虽然是求职者,那也不是地位就低了,自信就好。
最后是技术面了,刚才人事面没让我自我介绍,这次先让我做介绍,那么把事先想好的说辞讲了一遍,对原专业一句带过不能讲太多,主要介绍运维经历。因为这家公司的招聘要求里有自动化运维,而我当时是没有打算以自动化运维来求职的,所以给我要了简历后就抓紧准备自动化运维知识,依然很仓促。所以当时的场面就有些尴尬了,不过招聘要求不能只有这一点啊,咱也有猿课杀手锏,拿笔记给他看。

之后就问这些笔记上的知识,自信就找回来了。问了我一些问题后,他说你有什么想问我的吗,之前就想好了有这么一个环节,所以就把准备的问题和对公司简要的认识结合起来问了。这个可以去搜一下应该问什么问题,我也是看了网上的建议才想出的问题。这个结束了,面试也就结束了,他说这得回去等人事通知,不是他自己等决定的。

我以为没戏了,出了写字楼,外面下着小雨,和我的心情一样。我就冒着雨走了好远,雨大了,打辆车回家。当时真的是整个人都不好了,第二天自己出去连续看了三场电影,内容没怎么关注,反正是想了好多,最后得出的结论是,面试失败了,但收获了很多,也了解到了自己的短处,应该振作起来继续努力。第三天没事了,正兴致勃勃的做着shell练习题呢,接到人事电话说我被录用了。

以上是我的求职经历,我希望能帮到一些同学,尤其是非计算机相关专业还是应届毕业生的同学。再次感谢铭哥把我带进计算机行业,也感谢14期同学们的帮助,谢谢!

shell习题-按要求处理文本


linux系统 /home目录下有一个文件test.xml,内容如下:

<configuration>
    <artifactItems>
        <artifactItem>
       <groupId>zzz</groupId>
       <artifactId>aaa</artifactId>
    </artifactItem>
    <artifactItem>
       <groupId>xxx</groupId>
       <artifactId>yyy</artifactId>
    </artifactItem>
    <!-- </artifactItem><groupId>some groupId</groupId> 
       <version>1.0.1.2.333.555</version> </artifactItem>-->
    </artifactItems>
</configuration>

请写出shell脚本删除文件中的注释部分内容,获取文件中所有artifactItem的内容,并用如下格式逐行输出 artifactItem:groupId:artifactId

分析:这个文件比较特殊,但是却很有规律。注释部分内容其实就是<!– –>中间的内容,所以我们想办法把这些内容删除掉就ok了。而artifactItem的内容,其实就是获取<artifactItem></artifactItem>中间的内容。然后想办法用提到的格式输出即可。

 

参考答案:

#!/bin/bash

egrep -v '<!--|-->' 1.txt |tee 2.txt  //这行就是删除掉注释的行
grep -n 'artifactItem>' 2.txt |awk '{print $1}' |sed 's/://' > /tmp/line_number.txt
n=`wc -l /tmp/line_number.txt|awk '{print $1}'`

get_value(){
    sed -n "$1,$2"p 2.txt|awk -F '<' '{print $2}'|awk -F '>' '{print $1,$2}' > /tmp/value.txt
    nu=`wc -l /tmp/value.txt|awk '{print $1}'`
    for i in `seq 1 $nu`
    do
        x=`sed -n "$i"p /tmp/value.txt|awk '{print $1}'`
        y=`sed -n "$i"p /tmp/value.txt|awk '{print $2}'`
        echo artifactItem:$x:$y
    done
}

n2=$[$n/2]

for j in `seq 1 $n2`
do
    m1=$[$j*2-1]
    m2=$[$j*2]
    nu1=`sed -n "$m1"p /tmp/line_number.txt`
    nu2=`sed -n "$m2"p /tmp/line_number.txt`
    nu3=$[$nu1+1]
    nu4=$[$nu2-1]
    get_value $nu3 $nu4
done