运维工程师都需要具备哪些好的技巧?

从当今的社会发展来看,我相信有很多人都会说运维工作是比较苦逼的,其实这也是我们都不能否定的事,有的时候我也是这样感觉的,但是总的来说,在工作的时候什么工作又不是苦的呢?不可能每个人都可以一边挣钱一边玩吧?看看那些在叙利亚前线的记者,在马路上的清洁工,在饭店一直忙碌的厨师,在理发店里两只胳膊永远呆在空中的理发师,不停讲课站立的老师们吧!

如果你现在做的这份工作是和运维、DBA相关的话,不管现状怎么样,是不是应该往好的方向发展呢,在苦逼,乏味,忙碌的工作中寻找一丝乐趣,才能感受到这其中的不一样。有句话说的好,当你做真正自己喜欢的事情时,你才不会感觉到身体的疲倦。

现在下面是我们凌阳教育的老师为大家整理的一些关于运维工程师日常运维工作中常用的技巧,说是技巧,其实无非是帮助你提高效率,简化操作。只整理了 一部分,分享给大家。

Linux
1. screen
screen是一个可以统一管理多个会话,并可在会话之间切换,共享会话的工作,更是DBA在执行DDL,大事务性工作的利器。

示例:

##新建一个screen
[[email protected] ~]$ screen -R lufei
##查看所有screen
[[email protected] ~]$ screen -lsThere is a screen on:14919.lufei(Attached)1 Socket in /var/run/screen/S-lufei.
##将指定的screen离线
[[email protected] ~]$ screen -D 14919
[14919.lufei power detached.]
##恢复一个screen
[[email protected] ~]$ screen -R 14919

2.Ctrl-Z/fg/bg/jobs
如果你正在前台正运行一个执行时间很长的任务,但又需要做其他的事情,这个时候你可以使用Ctrl-Z,将前台任务挂到后台。

常用:

CTRL+Z 挂起进程并放入后台。
jobs 显示当前暂停的进程。
bg %N 使第N个任务在后台运行,默认表示对最后一个进程操作。
fg %N 使第N个任务在前台运行,默认表示对最后一个进程操作。
示例:

##使用Ctrl-Z 将cp任务挂到后台

[[email protected] ~]$ cp dump.gz dump.gz2016
^Z[1]+ Stopped cp -i dump.gz dump.gz2016

##jobs 查看后台任务
[[email protected] ~]$ jobs
[1]+ Stopped cp -i dump.gz dump.gz2016

## fg 将最后一个后台任务拉到前台
[[email protected] ~]$ fg
cp -i dump.gz dump.gz2016

##可以再次使用Ctrl-Z 将cp任务挂到后台
^Z[1]+ Stopped cp -i dump.gz dump.gz2016

##使用bg,将最后一个任务放到后台执行
[[email protected] ~]$ bg
[1]+ cp -i dump.gz dump.gz2016 &

##使用jobs 可以看到cp在后台执行
[[email protected] ~]$ jobs
[1]+ Running cp -i dump.gz dump.gz2016 &

3. shell set 命令
set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值, [+ -]分别为打开和关闭这个参数,set 有很多参数,而set -x是我最常用的。 set -x ,显示shell脚本运行的冗余输出,每一条命令以及加载命令行中的任何参数都会显示出来,调试shell脚步非常方便。

[[email protected] ]$ cat set.sh
#!/bin/bash
set -x
echo -n "your name?"
read name
if [ $name = "lufei" ]then
echo "hello"else
echo "haha"
fi
[[email protected] ]$ bash set.sh
+ echo -n ‘your name?‘your name?
+ read name
lufei
+ ‘[‘ lufei = lufei ‘]‘+ echo hello
hello
另一中方式sh -x

[[email protected]]$ cat set.sh
#!/bin/bash
echo -n "your name?"
read name
if [ $name = "lufei" ]
then
echo "hello"
else
echo "haha"
fi

[[email protected]]$ sh -x set.sh
+ echo -n ‘your name?‘your name?
+ read name
lufei
+ ‘[‘ lufei = lufei ‘]‘
+ echo hello
hello

4. shell 日志记录
运维工作的同学编写shell脚步应该是硬技能,将一些复杂的操作编写成shell脚步,可以提高不少效率,shell脚步记录日志是必不可少的,日志可以用来排错,追溯等用途,下面提供一个记录shell脚步日志的方法。

LOGFILE=${BASEDIR}/logs/${DTTIME}.log
exec 3>&1 4>&2 1>>${LOGFILE} 2>&1

5. shell 并发
上面刚说到运维同学会使用shell是硬性要求,那么如何在shell中使用并发呢,见下面代码。

#!/bin/bash
cat ip.txt|while read info;
do
zn=`echo ${info}|awk ‘{print $1}‘`;
IP=`echo ${info}|awk ‘{print $2}‘`;
joblist=($(jobs -p)); --还可以根据ps -ef|grep 当前脚步名称|wc -l
while(( ${#joblist[*]} >= 10 ))--控制并发数,可以做为参数
do
sleep 40joblist=($(jobs -p));
done
scp ${IP}:/home/databak/*${zn}*2016050603* /home/lufei/dump/ &
done;

6. crt显示主机名
有时候在crt中打开多个窗口,太多了后,自己都分不清哪个是哪个,使用下面的方法,可以在打开crt时显示主机名

## 在/etc/profile 中增加以下,然后crt选择Xterm
echo -ne "\e]2;$(hostname)\a"
还有一些常用命令如下:

Ctrl+a 光标移动到命令行开始
Ctrl+e 光标移动到到命令行末尾
Ctrl+u 清除剪切光标之前的内容
Ctrl+w 清除光标前的一个单词
Ctrl+r 查找历史命令
Ctrl+l 清屏

MySQL
1.MySQL与shell交互
有些时候我们需要从MySQL中读出数据,然后传给shell,去做一些逻辑判断,下面是一个实例,目前我们使用beego框架开发了一套SQL上线平台,这个web平台主要控制审批流程,然后将审批过的信息存到MySQL中,后台我们使用以下脚本远程执行。

#!/bin/bash
while read id dbname dbip sqlfile;
do
echo $id $dbname $dbip $sqlfile
##mysql -h$dbip -utest -p‘test‘
-D $dbname --default-character-set=utf8 -vvv < ${SQLDIR}/$sqlfile
done < <(/usr/bin/mysql -utest -p"test"
-s --skip-column-names -e "use enndb;select id,n,d,e from aw where s=‘3‘")
还有一个经典的交互案例就是备份,我们都知道mysqldump备份是串行的,多个database,一个一个备份,同database中一个一个table去备份,如何可以并行使用mysqldump备份呢,写多个mysqldump,太low了吧。下面代码可以做到。

for db in $(mysql -e "show databases" -s --skip-column-names);
do
echo $db;
mysqldump ........ &
done

2.MySQL 解压恢复
使用mysqldump备份的时候,一般我们为了节省磁盘空间会使用以下方法进行压缩,

mysqldump -hlocalhost --default-character-set=utf8
--master-data=2 --single-transaction
-B a | gzip > ‘a‘`date +%Y%m%d%H%M`.sql.gz
在进行恢复/搭建从库时需要先解压,再去导入,需要两条命令,简洁的方法如下:

gunzip < a201612071131.sql.gz |mysql

3.MySQL loose_
当你在不同的MySQL版本中,或是不同的MySQL分支中切换my.conf配置文件时(少数),可能有些参数会不兼容,使用loose_参数,如果没有这个参数,将会忽略。

[[email protected] ~]# grep dodba /etc/my.cnf
dodba=1
[[email protected] ~]# /etc/init.d/mysql startStarting MySQL (Percona Server)......
ERROR! The server quit without updating PID file (/home/mysql/dodba.com.pid).
[[email protected] ~]# tail -f error.log
2016-12-19T10:08:31.875314Z 0 [ERROR] unknown variable ‘dodba=1‘
2016-12-19T10:08:31.875371Z 0 [ERROR] Aborting

##增加loose_前缀
[[email protected] ~]# grep dodba /etc/my.cnf
loose_dodba=1
[[email protected] ~]# /etc/init.d/mysql start
Starting MySQL (Percona Server).. SUCCESS!

4.MySQL 帮助
众多的MySQL命令,除了常用的,应该有很多都记不住,其实不用查文档,直接使用?+命令就会有很详细的帮助。

mysql> ? purge
Name: ‘PURGE BINARY LOGS‘Description:
Syntax:
PURGE { BINARY | MASTER } LOGS
{ TO ‘log_name‘ | BEFORE datetime_expr }

Examples:
PURGE BINARY LOGS TO ‘mysql-bin.010‘;
PURGE BINARY LOGS BEFORE ‘2008-04-02 22:46:26‘;

5.MySQL --initialize-insecure
相信大家都知道MySQL5.7版本的安装最重要的一个变化就是不在使用mysql_install_db,而是使用mysqld --initialize,其实还有一个参数是--initialize-insecure。

两个参数的区别就是前者生成一个临时密码在日志中,对于自动化安装脚步来讲还得处理,而直接使用后者,会生成一个空密码的账号,安装脚步就不需要再处理,但是登陆后为安全起见还是希望你能修改密码。

6.MySQL -vv
在mysql中使用-vv参数,可以返回更详细的信息,有详细的信息就会更容易排错。

##什么都不返回
[[email protected] ~]# mysql -e "use tdb;update t set name=444;"

##-v 显示语句本身
[[email protected] ~]# mysql -v -e "use tdb;update t set name=444;"
--------------update t set name=444--------------

##-vv 显示执行时间,结果
[[email protected] ~]# mysql -vv -e "use tdb;update t set name=444;"
--------------update t set name=444--------------
Query OK, 0 rows affected (0.02 sec)
Rows matched: 2 Changed: 0 Warnings: 0
Bye
7.MySQL 类型转换
有些时候,有同学在SQL的where条件中会直接写key=1278类似(值不加引号)的谓词条件,但如果这个key是varchar类型,就会发生隐式类型转换,导致全表扫描。其实你只需要记住一条,谓词条件中的值,都加引号就可以了。 下面是个实例:

mysql> desc t;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> alter table t add index ind_id(id);
Query OK, 0 rows affected (0.19 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table t add index ind_name(name);
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0

##隐式转换,全表扫描
select * from t where name=222;

##不会发生隐式类型转换,索引扫描
select * from t where name=‘222‘;
select * from t where id=1;
select * from t where id=‘1‘;

凌阳教育结合凌阳集团作为全球最大消费性芯片设计公司的产业资源,建立国内一流的“嵌入式\网络运维、HTML5、Java、PHP设计”五位一体的人才培养基地。为中国高校提供世界一流的实习、实训、培训等方面服务,提升大学生就业质量,促进中国电子产业发展。

凌阳教育是全国唯一“原厂嵌入式培训”机构,拥有完全自主知识产权“嵌入式\网络运维、HTML5、Java、PHP设计”实训体系。通过在凌阳教育的培训,使学员具备“专业化的职业素质,职业化的专业素质”。

时间: 2024-10-25 15:45:12

运维工程师都需要具备哪些好的技巧?的相关文章

运维工程师都在做什么?(转)

首先先看图: 下面是运维工程师至少要能做以下的工作: 1,网络工程师的工作 你至少要能配置CISCO 6509以下的设备,熟悉各种网络协议,否则网络出问题的时候你会傻掉. 2,系统工程师的工作 你至少要理解各种系统服务,在出问题的情况下要迅速解决问题,而不是等系统工程师来解决. 3,安全工程师的工作 我不要求你一定要会各种网络编程,但是在服务器收攻击的情况下,没有防火墙的情况下,做一些简单的处理工作. 4,存储工程师的工作 至少要熟悉各个厂商的设备,各种备份和还原的办法 5,测试工程师的工作 在

零基础转行Linux云计算运维工程师获得20万年薪的超级学习技巧

云计算概念一旦产生便一发不可收拾,成为移动互联网时代最为火热的行业之一.国内各大互联网公司例如阿里.腾讯.百度.网易等纷纷推出自己的云计算产品,3月10日,腾讯云0.01元投标时间更是让云计算在普罗大众中火热了一把! 随着云计算的产生,运维工程师也迎来了职业的升级.传统的运维工程师散布在各个企业,在可见的将来,运维工程师将会越来越集中于云计算平台.当然,各企业因为对服务器端内容需要维护,也会有运维工程师的需求. 随着云计算被捧上神坛,相应的人才待遇水涨船高.据拉勾统计,云计算相关岗位数量相比前一

Linux运维工程师面试-部分题库(答案版)

最近两个月有意跳槽,看到了一篇Linux运维工程师面试-部分题,就试着做了一下,感觉对Linux基础部分挺有帮助,在这里整理一份参考答案给大家,错误之处还望多多指出. 博文原地址 http://wgkgood.blog.51cto.com/1192594/1627684 一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块? 答: 常见的Linux发现版本有Redhat.Centos.Debian.Ubuntu.Suse 最擅长R

Linux运维工程师面试

一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块?   2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解?   3.企业中Linux服务器系统分区标准是什么?(硬盘为300G,内存16G)   4.某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤.   5.安装一台系统使用DVD光盘安装,如何安装50台Linux系统如何安装呢?思考一下.   6.用虚拟机安装了一台Linux系统,突然想克隆

Linux运维工程师面试-部分题库

Linux运维工程师面试-部分题库(免费分享) 一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块? 2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解? 3.企业中Linux服务器系统分区标准是什么?(硬盘为300G,内存16G) 4.某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤. 5.安装一台系统使用DVD光盘安装,如何安装50台Linux系统如何安装呢?思考一下. 6.用虚拟机安装了一

运维工程师总结

运维工程师对一个公司来说是非常重要的岗位,它本身所覆盖的运维职责就很重要,所以,运维对其它关联工种必须非常了解熟悉:网络.系统.系统开发.存储,安全,DB等.作为一个运维工程师我认为是集合网络.系统.开发工作于一身的"复合型人才",就如有些公司把一些合同采购都纳入了运维职责范围,还有如IDC网络规划也纳入运维职责. 一.运维工程师岗位职责 1.参与设计.审核.优化公司IT系统以及各应用系统的体系架构:2.全面负责公司运维项目的系统升级.扩容需求与资源落实,配合开发需求,测试.调整运维平

【有感而发】从中华武术谈运维工程师以及运维自动化

从中华武术谈运维工程师以及运维自动化 任何事物都没有完美一说,但是我们可以死磕自己,追求极致... 无论我们现在是搬砖呢,砌墙呢,还是在逗自己混日子,我们需要关注的是自己的方向在哪里,而不是过于在意自己当前的所站的位置,人生不能受限于自己的意识. 平时和小伙伴们聊人生谈理想的时候,我会经常和别人讲我所认为的专业化运维工程师和运维工作的方向,有认可的也有不认可的,认可的多在努力让自己的工作越来越轻松,自己的价值越来越能得到体现,不认可者多属于一天都很忙,而且认为运维就是帮开发人员打打杂,做大量重复

详解Linux运维工程师应具备的十大技能

Linux系统如果是学习可以选用Redhat或CentOS,特别是CentOS在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究一下SUSE,有些公司也喜欢用,例如我公司. 1.Linux系统基础 这个不用说了,是基础中的基础,连这个都不会就别干了,参考书籍,可以看鸟哥linux基础篇,至少要掌握这书60%内容,没必须全部掌握,但基本命令总得会吧. 2.网络服务 服务有很多种,每间公司都会用到不同的,但基础的服务肯定要掌握,

要做linux运维工程师的朋友,必须要掌握以下几个工具才行 ...

   本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具.我就大概列出这几方面,这样入门就基本没问题了.linux系统如果是学习可以选用redhat或centos,特别是centos在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究一下SUSE,有些公司也喜欢用,例如我公司 .....工具如下: 1.linux系统基础,这