月份:2017年11月


shell习题-取消后缀


至少用两种方法,批量把当前目录下面所有文件名后缀为.bak的后缀去掉,比如1.txt.bak去掉后为1.txt

 

参考答案:

假设取消的后缀为.bak

方法一:

for i in `ls *.bak`
do 
    mv $i `echo $i|sed 's/\.bak//g'`
done


方法二:

for i in `ls *.bak`
do 
    newname=`echo $i|awk -F '.bak' '{print $1}'` 
    mv $i $newname
done

100块钱多不多?


说明: 本文取自24期同学的阶段总结。

时间过得很快,转眼间就过了三周了。这三周说实话过得很紧迫、很有压力,但是也让我发觉自身的缺点所在!那先从刚开始的为什么要学linux运维说起吧!

我是一名很普通很普通的一个比较不怎么爱说话的人,小时候就比较内向,可能是小时候家在深山当中吧!所以小时候形成了内向的性格。其实还有点胆小呵呵~ ,这都是小时候的事情了,现在好多了,毕竟人是会成长的嘛!

回忆不多想了,其实人活着就是为了让自己过的更好!你说是不?怎么过的好呢?我也找过很多答案有说:“我健健康康平平安安过的一生就行;我快快乐乐的没烦恼过的一生也行 等等等。。。。。”很多的!

我呢?是一个任命又不想放弃努力的人,所以在之前有想法去学习一些技能由于种种原因,半途而废了。其实嘛无非就几点:没方法、没目标、没监督,所以“一事无成”。

说到这几个核心点的时候,其实我还花了一年的时间听音频慢慢的学习并总结出来的。

方法:什么适合自己的方法呢?

我之前认为花的时间比别人长,并且长时间坚持才有效果是一个好的方法!到猿课学习之后发现是有缺陷的,花的时间长不一定能学的好学的会!就好比:我当初开始上课看视频的时候,可以花4个小时甚至更长的时间去学习,但是并没有比其他人写得快、好。

根本原因是有效学习时间太短。所以,要高效的学习才是合适自己的方法。上了三周的课得出:坚持坚持再坚持,练习练习再复习!坚持?每天的任务需要完成,这就是坚持。练习?做好笔记并且多多练习,周末抽出时间来进行校验笔记,确保笔记自己能看懂。这就是我总结出来的学习方法,仅供大家参考。

 

目标:什么是目标?我的目标就是过得好!至少活的不要太累,自己能给社会带来价值是我觉得很有成就的事情。(PS:你有工作就是价值的体现哈)说的都太远,太宏大了。简单的说就是多赚钱,买房买车呀总是需要看到的哈。

就拿近的来说:

①每天的任务(周一至周五的播客笔记)这个肯定是必须完成的;

②自己给自己下的目标学好学完linux运维。

这个两个分别是外部驱动任务和内部驱动任务,内部主要是学会,下定决心学会而且还要学好学完它;外部的就是阿明老师给学分制!

虽然,一百块不多,总会心疼吧?丢了一百钱都会心疼一阵子呢!何况这个并没有丢(PS:你们看到这里可能会想,一百RMB就不值几个钱!能干吗?没了就没了还能在赚的!你就是在心疼钱!)实话讲一百块不大不小,压根就没有感觉,我只是把这个当成一个任务来做!

好了,其实核心就是任务驱动,让内在任务驱动自己,实在不行让别人来帮你驱动自己。补充一个实例让你很好的理解:在上班的时候,领导安排下来的任务,你会认真完成吗?会不做吗?恐怕不会吧!如果你不做,结果就是走人!这个是绝对的结果。所以,会努力的完成任务,可能做的不够好,一般都过得去。过不去你就走了。这就是一个外部的任务驱动实例。

 

监督:什么是监督?直白简单的说就是反馈。当玩游戏的时候,游戏任务有打怪升级、荣誉排行榜等等系统。这个就是让你上瘾的东西,当你在做一个事情的时候,事实不断的有反馈,这样就是在间接的指导你“监督”你一步一步上级,一步一步的去打怪。

所以,在学习的时候,如果自己的内驱动力不足的时候,你就会懒,会想作别的事情、分心、注意力不集中。当然,我也有这样的情况。所以,我之前打算自学的,学了一段时间后,只要稍微松懈,直接就白费了。在猿课上课的时候,每天都学习,而且还有反馈,如果遇到问题,还可以请教一下同学或者阿铭老师。总结:监督就是实时反馈,让我们一步一步走迈向成功。

 

上述是我总结出来的一些心得,也体现出主题的“从无到有”的过程无指没有想法,有的指有想法并且正在努力改变。三周的时间也是一个心历之旅,蜕变的过程,从艰难的攀登走向平坦的达到,可能前方的路更加曲折,为啥不踩在巨人的肩上前行呢?在技能上讲,学了三周”从无知走到无知”对linux的完全就是个小白,现在有了一个整体的概念,而且笔记也是一个财富一部分。

总结就做到这里了,总体上讲偏向内心的想法,对技术这块还是比较模糊的。革命未成功,还需在努力!加油!加油!

下面是广告:

13号开新班(阿铭linux高级班),报名学费只需要2480. 那对比4080的课程有什么区别? 就是内容少了一部分,在我看来,学完这部分你找工作一点问题没有,因为23期好多同学就是学完这部分课程就找到了工作了,而且薪资不低,都上8k了。

shell习题-重启tomcat服务


在生产环境中,经常遇到tomcat无法彻底关闭,也就是说用tomcat自带shutdown.sh脚本无法将java进程完全关掉。所以,需要借助shell脚本,将进程杀死,然后再启动。

写一个shell脚本,实现上述功能。彻底杀死一个进程的命令是 kill -9 pid.

 

参考答案:

说明:以下脚本为猿课同学实际线上跑的shell脚本,考虑的方面比较多,大家可以学一学他的思路

#!/bin/bash

###功能: 重启 tomcat 进程
###要求:对于tomcat中的某些应用,使用shutdown.sh是无法完全停掉所有服务的 实际操作中都需要kill掉tomcat再重启
##
### root can not run this script.
##

if [ $USER = root ]
then
        echo "root cann't run this script!please run with other user!"
        exit 1
fi

##
### check the Parameter
##

if [[ $# -ne 1 ]]
then
        echo "Usage:$0 tomcatname"
        exit 1
fi

##
### only one process can run one time
##

TMP_FILE_U=/tmp/.tmp.ps.keyword.$USER.956327.txt
#echo $TMP_FILE_U
KEYWORD1="$0"
KEYWORD2="$1"

# 使用赋值会多fork出一个进程,所以要先重定向到一个文本,再统计.

ps ux |grep "$KEYWORD1"|grep "\<$KEYWORD2\>"|grep -v "grep" > $TMP_FILE_U
Pro_count=`cat $TMP_FILE_U |wc -l`
if [ $Pro_count -gt 1 ]
then
        echo "An other process already running ,exit now!"
        exit 1
fi

###################################################
#                                                 #
#               begin of the script               #
#                                                 #
###################################################

##
### set the Parameter
##

TOM=`echo $1|sed 's#/##g'`
TOMCAT_DIRECTORY=~/usr/local/$TOM
STARTUP_SCRIPT=$TOMCAT_DIRECTORY/bin/startup.sh
TOMCAT_LOG=$TOMCAT_DIRECTORY/logs/catalina.out
CONF_FILE=$TOMCAT_DIRECTORY/conf/server.xml
TEMPFILE=/tmp/.tmpfile.x.89342.c4r3.tmp

##
### check if the tomcat directory exist
##

if [ ! -d "$TOMCAT_DIRECTORY" ]
then
        echo "the tomcat \"$TOM\" not exist.check again!"
        exit 1
fi

##
### log roteta and delete log one week ago
##

rotate_log(){
TIME_FORMART=$(date +%Y%m%d%H%M%S)
LOG_DIR=$(dirname $TOMCAT_LOG)
mv $TOMCAT_LOG ${TOMCAT_LOG}_${TIME_FORMART}
find $LOG_DIR -type f -ctime +7 -exec rm -rf {} \;
}

##
### function start the tomcat
##

start_tomcat()
{
#echo start-tomcat-func
if [ -x  "$STARTUP_SCRIPT" ]
then
      
        rotate_log
        $STARTUP_SCRIPT
        sleep 1
        tail -f $TOMCAT_LOG
else
        if [ -e $STARTUP_SCRIPT ]
        then
                chmod +x $STARTUP_SCRIPT
#               echo "permition added!"
                if [ -x  "$STARTUP_SCRIPT" ]
                then
                      
                        rotate_log
                        $STARTUP_SCRIPT
                        sleep 1
                        tail -f $TOMCAT_LOG
                else
                        echo "The script not have excute permision,Couldn't add permision to Script!"
                        exit 1
                fi
        else
                echo "error,the script \"startup.sh\" not exist!"
                exit 1
        fi
fi
}

##
### function stop the tomcat
##

stop_tomcat()
{
rm -rf $TEMPFILE
ps ux |grep /$TOM/ |grep -v "grep /$TOM/"|grep java > $TEMPFILE
Pro_Count=`cat $TEMPFILE|wc -l`
PIDS=`cat $TEMPFILE|awk '{print $2}'`
rm -rf $TEMPFILE
#echo $Pro_Count

if [ $Pro_Count -eq 0 ]
then
        echo "The tomcat not running now!"
else
        if [ $Pro_Count -ne 1 ]
        then
                echo "The have $Pro_Count process running,killed!"
                kill -9 `echo $PIDS`
                WC=`ps aux | grep "/$TOM/" | grep -v "grep /$TOM/" | grep java |wc -l`
                [ $WC -ne 0 ] && (echo "kill process failed!";exit 1)
        else
                echo "Process killed!"
                kill -9 `echo $PIDS`
                WC=`ps aux | grep "/$TOM/" | grep -v "grep /$TOM/" | grep java |wc -l`
                [ $WC -ne 0 ] && (echo "kill process failed!";exit 1)
        fi
fi
}

###########################
####                   ####
####  The main script  ####
####                   ####
###########################

echo -e "are you sure restart $TOM?(y or n)"
read ANS
if [ "$ANS"a != ya ]
then
   echo -e "bye! \n"
   exit 1
fi

stop_tomcat
echo "start tomcat ..."
sleep 2
start_tomcat
# end

shell习题-关闭服务


在centos6系统里,我们可以使用ntsysv关闭不需要开机启动的服务,当然也可以使用chkconfig工具来实现。

写一个shell脚本,用chkconfig工具把不常用的服务关闭。脚本需要写成交互式的,需要我们给它提供关闭的服务名字。

 

参考答案:

#!/bin/bash

LANG=en
c="1"

while [ ! $c == "q" ]
do
    echo -e "\033[35mPlease chose a service to close from this list: \033[0m"
    chkconfig --list |awk '/3:on/ {print $1}'
    read -p "Which service to close: " s
    chkconfig $s off
    service $s stop
    read -p  "If you want's to quit this program, tab "q", or tab "Ctrl c": " c
done

千万别点进来,真的只是鸡汤


说明:本文为19期学员所写,薪资不高,但贵在转型成功。

由于本人的薪资在各位师兄面前相形见绌就不好意思提了,见谅!

我以前是在机械场画图的,但是I have a dream,我想要高工资,在机械厂虽然也可以凭借呆个5,6年混出一番成就,但是太慢了,在这个瞬息万变的世界,知识快速迭代,我的心躁动了,我不要等以后,我要现在。

电影【秘密】中有一句话,你心里想什么就会出现什么。由于学的是机械自动化,大概技术人员都是不太喜欢说话吧,当然大师兄就另说了,那口才比郭德纲还上瘾。还是决定走技术这条路,没错我们的大猿课闪亮登场了,简介的画风,简直就是培训界的一股泥石流,我的心被俘获了。

Shut up and take my money,真的,有好多人可能在花钱的时候可能比较谨慎,可是我是那种比较冲动型消费的人格,所以过了大概一个星期就买了。

在这,你需要笑一笑!因为,爱笑的人,运气都不会太差。

铭哥的课程从浅入深,都是实战方面的,自己跟着视频做一遍(当然要用心记好笔记,面试前还要大概看看重点的),也就差不多了,面试前一个月看了《面试宝典》。

学习过程中,印象最深的就是第一节课配置nat模式,配置了3天好像,简直要有种砸键盘的冲动,这样子下去多久才能学完啊。

不过好在万事开头难,不要怕难,就怕不去做!坚持下来的感觉真好!

后来就找工作了,按照曹师兄的简历改的,也给铭哥看了简历。

简历的通过率还是蛮高的,就拉钩上投了30份,收到了10份左右,只要是给我打电话的基本上都去了,毕竟没吃过猪肉,也得看看猪跑嘛,现在进行总结。

1 基本上没有做什么面试题

2 准备一份公司以前用的架构,我是直接参考铭哥55188的

3 会问你,以前主要工作是干什么的 参考面试宝典第10套

4 有没有用过阿里云的机,这点我有点不应该,回答的都是说用物理机,大家应该去看看阿里云的文档,还是比较详细的

最后,其实我个人来说是不太愿意麻烦别人的,后来有一次问了铭哥,铭哥给我解答之后就一发不可收拾了,经常QQ上问铭哥,但是铭哥从来没有不耐烦,尽量都给我解答,这里谢谢铭哥!

shell习题-统计并发量


需求背景:

需要统计网站的并发量,并绘图。

思路:

1 借助zabbix成图

2 通过统计访问日志每秒的日志条数来判定并发量

3 zabbix获取数据间隔30s

说明: 只需要写出shell脚本即可,不用关心zabbix配置。

 

参考答案:

假设日志路径 /data/logs/www.aaa.com_access.log 

日志格式如下
112.107.15.12 - [07/Nov/2017:09:59:01 +0800] www.aaa.com "/api/live.php" 200"-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)"

#!/bin/bash
log=/data/logs/www.aaa.com_access.log
t=`date -d "-1 second" +%Y:%H:%M:%S`
#可以大概分析一下每分钟日志的量级,比如说不超过3000
n=tail -3000 $log |grep -c "$t"
echo $n

我这算转型成功了吗


说明:本文为7期小林同学于2016年4月份所写。

各位猿课的同学,大家好!首先还是先来个自我介绍一下,我是7期的学员,性别男,来自广东广州。很抱歉,新公司入职一个半月后才来发帖,各位同学及铭哥有怪莫怪。

2011年毕业至今已有几个年头了,大学学的是计算机网络,刚毕业那一刻,还为自己学这个专业而庆幸(找工作基本没什么问题)。毕业的第一份工作是做桌面运维的,工作比较轻松也比较自由,月薪也就2K不到,工作内容基本与我大学学的东西不太匹配。后来随着时间的推移,我发现做这种桌面的运维工作并不是我想要的。

于是在13年我去参加了H3C的培训,拿了H3CSE的证书,并辞掉了桌面运维的工作,到了一家专做移动运维的公司做起来了网络运维的工作(月薪3.8K)。起初还是觉得不错的,最起码工作内容与我的专业匹配了。

在这家公司工作真的学到了很多网络的知识,各种网络协议的应用,理论知识在实际中得到验证的那种快感真的很爽,在这个公司为我积累到了足够的网络运维方面的知识。于是在2015年5月的时候我做了一个决定,辞去现在的工作去试水一下广州的网络运维市场。

结果大失所望,最高的也只给我开到5.5K。在同一时间我的同事也跟我一样辞职,而他是做系统运维的,新公司给他的待遇是9K,说实话对我的打击真的很大。

后来我也把自己的简历做了调整,面试的职位改成了系统工程师,出乎我的意料,收到的面试邀请真的很多,我去了5家公司面试,结果人家都需要有linux方面的运维经验,而且只要基础的经验就够的那种,而恰好这也是我欠缺的。毫无悬念的,我一家也都没有面试上,从那一刻开始我就铁了心要学linux。

于是乎在百度上搜索各种linux的培训机构,买了鸟哥的书,当翻看鸟哥的书的时候我就蒙了,心中千百只草泥马在奔跑。为什么这么多的命令,这么多的解释,看半天基本不懂(可能是我没有一点基础的原因)。后来感觉还是找个培训机构系统的学习比较好,于是又在百度上搜索一番,无意中猿课就进入了我的视线。

在当天刚好我收到了一份网管面试邀请,而且面试之后当场就确定了入职时间,虽然月薪只有4.5K,但是网管的时间还是比较多的,有自己的时间学习。2015年的6月在我办理入职的第三天我就报了猿课的课程,报名之后就知道自己已经没有退路了,要么好好学习linux,要么就当这么个小网管。就这样我从一个没有任何linux基础的小白踏上了linux的征途。

开始学习linux真的好难入手,讲到的概念基本不懂,学习进度慢得一塌糊涂,不过可能自己有计算机的基础,所以学习起来并不像其他专业的那么困难。在学习的过程中碰到了很多在我看来好难的问题(小白不懂而已),我都会在群里乱喊,会问铭哥,在这里真心感谢各位同学不厌其烦回答,真心谢谢铭哥的无限支持与指导。

通过了大半年的学习,我对linux有了初步的认识,很多命令、配置也都懂了,尽管只是粗浅的知道,尽管对shell还不懂,脚本也不会写。但是总比什么都不懂强,感觉这大半年的学习就是我的蜕变过程,于是在16年的1月份我开始试水系统运维市场,检验自己的学习成果。

面试了5家公司,收到了一家公司的offer,这个公司给我薪资为税前7K(对不起铭哥,我没有达到期望的起步8K)。当时也没想那么多,很快就答应了,毕竟自己什么相关的工作经验都没有,而且对方也是一家做与linux系统运维相关的公司。

在这里我想问下铭哥以及各位同学,我这算不算转型成功了

再次感谢猿课将我这个小白带入linux的世界,希望猿课越办越好,学员遍布世界各地,同学们都能找到自己满意的工作。谢谢!!!

shell习题-批量同步代码


需求背景是:

一个业务,有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具。有新的需求时,开发同事改完代码会把变更上传到其中一台服务器A上。但是其他2台服务器也需要做相同变更。

写一个shell脚本,把A服务器上的变更代码同步到B和C上。

其中,你需要考虑到不需要同步的目录(假如有tmp、upload、logs、caches)

 

参考答案:

#!/bin/bash

echo "该脚本将会把A机器上的/data/wwwroot/www.aaa.com目录同步到B,C机器上";
read -p "是否要继续?(y|n) "

rs() {
    rsync -azP \
    --exclude logs \
    --exclude upload \
    --exclude caches \
    --exclude tmp \
www.aaa.com/ $1:/data/wwwroot/www.aaa.com/

}

if [ $REPLY == 'y' -o $REPLY == 'Y' ]
then
    echo "即将同步……"
    sleep 2
    cd /data/wwwroot/
    rs B机器ip
    rs C机器ip
    echo "同步完成。"   
elif [ $REPLY == 'n' -o $REPLY == 'N' ]
then
    exit 1
else
    echo "请输入字母y或者n"
fi

学阿铭linux感想(没报名的可以参考看下)


在16年的5月18号报名了学阿铭linux,在之前就已经开始犹豫到底用不用学、因为怕学的东西没有想象的那么好。在学之前也看过之前铭哥客服分享的一些往期视频、总体感觉还不错、主要是有的知识点没有报名后的课程讲的详细。

在学之前也担心过会不会把钱白白扔了、因为毕竟自己的经济水平还不是很高。在学之前已经犹豫了一年、后来一咬牙还是报名了、因为我感觉我再不充实自己的话会被这个行业淘汰。报名参加学习之后发现有很多课程讲的挺详细、知识点也是分开来讲、会讲到在什么情况下应用、但是有个别部分课程感觉还需要再更优化一下(centos7已经在做了,这点铭哥做的很好,知道与时俱进)。

正如大多数同学一样、都是有三天的新鲜感、刚开始报名的我也是干劲十足、非常渴望学习花钱之后的知识,但是学了不超两个礼拜就感觉每天有点繁琐、日复一日的学习、毫无动力、也落下了不少课程、因为每天会安排进度、但是这个进度可以自己掌握。学习中会遇到很多问题、虽然有老师解答、可是总体感觉对于我来说是蒙逼的!自己理解和别人强加给你完全是两种不同的感觉。

后来我有点失去信心了、感觉学不学的无所谓、反正已经买完课程了、什么时候想学再学、本来以为自己也就这德性了、看着铭哥每次发表的找到工作的同学、都是感觉离自己太遥远、因为根本学不起来。

后来铭哥说知道有的同学懒、没有动力、于是根据每一期的学员情况来安排具体的直播答疑课、这点让我重新有了学习的动力!因为我是比较懒的那种、没有人监督是学不来的、通过根据新进度学习以前已经学过的视频、以前有些疑惑的地方豁然开朗。后来我想明白了,录播视频不是看一回就够了的,你得重复的去做实验,去回顾去复习,温故知新。

我也明白了一个道理、师父引进门、修行在个人、你自己都不愿意下功夫就别想有回报。本来以为有课程就足够、什么时候看都行、学慢学快都行。是铭哥的这个根据学员情况开的直播答疑课让我感到了这个培训课的负责、人性化、对每个学员尽责的态度、其实网络培训能做到这点已经很好了。这样的环境我感觉只要是稍微有点上进心的人、都会跟着进度走吧。我这么懒的人都感觉有动力坚持。

说这么多我就是把自己学习中遇到的问题说出来,让新学员有个底。

下面是广告:

双11快到了,猿课官方也出了一个性价比很高的课程(2480),虽然跟4080课程比起来内容少了,时效短了,但学完这部分找工作不是问题,等你找到工作再买剩余的部分也是可以的。

售后到运维,月薪2.5k到8k


2014年毕业后进入一家公司做售后,平常就是接电话或者就是熟悉业务,看了公司业务信息大概有一个星期左右,然后就被派去出差了,公司派我去了广东做资源核查(公司有一部分业务是工程),实际上的具体工作是开移动的井盖核查管线,其中的辛苦可想而知了,我明白派我出差主要原因是我的技术太差,我想从中走出去。当时虽然是计算机专业毕业。

但是对于Linux知道的不是太多(实际上只是大学里面学到的一点),然而就是在这濒临绝望的时候偶然得知 跟阿铭学Linux 这本书,说实话当时也不太相信,再后来就是阿铭老师分享的Linux视频,看了一部分视频对Linux有了进一步认识,但是有很多东西还是一知半解,可能是我的基础比较差缺少实践的问题。

出差结束,开始真正意义的维护,看着他们熟练的操作Linux系统对数据库的监控(那么帅),想着自己拿着这么那么一点工资(当时的工资是2500,那么失败),所以我在15年7月16号加入了阿铭老师的培训中,我感觉阿铭老师既然给我打开了Linux的大门,就一定能带我走的更远.

报名后利用自己在晚上和周末的时间去反复学习,慢慢熟悉了工作中的一些Linux的命令,工作更加得心应手。领导说你进步很快,而且被评为“月度之星”,心里美滋滋的。更加坚定了我要学下去的信心。到年底的时候发现,工作中涉及的技术很少,很想真正的转行做运维,所以准备16年三月份辞职跳槽。

啰嗦了那么多说说我找工作的心得吧,最重要的是简历,不然连面试的机会都没有,在刚开始的时候投简历的时候就如同石沉大海,后来把工作经验写成运维,工作内容写成我们学习的一些内容,如:处理一些监控告警信息,写一些shell脚本,分析一些日志,搭建lamp和lnmp。然后是个人技能,写一些关键性的如:负载均衡lvs,nginx,keeplived,MySQL的读写分离和主从。最后一定要写项目经验:你所搭建的服务,用到的技术(老师教的都可以写),我就是参考老师模板写的。

然后再说一下面试,我感觉面试最重要的就是自信。不要被面试官所吓倒。刚开始他会问一些Linux常用的命令。然后就会问你简历中的工作内容,你就按照简历上老师说的就行,例如:我平常处理一些监控告警信息,如:磁盘分区是否大于80%,系统是否长时间负载过大。shell脚本的书写,如分发脚本。然后问了一些MySQL的主从,还有几涉及到优化的问题不会,我感觉不会很正常,毕竟我们不是大牛,不要因此乱了分寸。面试官不仅考验我们的技术还有我们的心里素质。

经过几轮面试收到两个offer。最后决定去一家创业型公司,公司的服务需要从零搭建,对自己来说是一个不小的挑战。小伙伴们,让我们一起去加油吧!!!

附上当时这同学给我发offer截图的喜悦。