七月网

linux运维最佳实践(linux运维实战)

七月网4330

一、Linux Shell 脚本编程最佳实践

与其它的编码规范一样,这里所讨论的不仅仅是编码格式美不美观的问题,同时也讨论一些约定及编码标准。这份文档主要侧重于我们所普遍遵循的规则,对于那些不是明确强制要求的,我们尽量避免提供意见。

linux运维最佳实践(linux运维实战)

编码规范对于程序员而言尤为重要,有以下几个原因:

本文档中的准则致力于最大限度达到以下原则:

尽管本文档涵盖了许多基础知识,但应注意的是,没有编码规范可以为我们回答所有问题,开发人员始终需要再编写完代码后,对上述原则做出正确的判断。

注:未明确指明的则默认为必须(Mandatory)

仅建议Shell用作相对简单的实用工具或者包装脚本。因此单个shell脚本内容不宜太过复杂。

在选择何时使用shell脚本时时应遵循以下原则:

可执行文件不建议有扩展名,库文件必须使用.sh作为扩展名,且应是不可执行的。

执行一个程序时,无需知道其编写语言,且shell脚本并不要求具有扩展名,所以更倾向可执行文件没有扩展名。

而库文件知道其编写语言十分重要,使用.sh作为特定语言后缀的扩展名,可以和其他语言编写的库文件加以区分。

文件名要求全部小写,可以包含下划线_或连字符-,建议可执行文件使用连字符,库文件使用下划线。

源文件编码格式为UTF-8。避免不同操作系统对文件换行处理的方式不同,一律使用 LF。

每行最多不超过120个字符。每行代码最大长度限制的根本原因是过长的行会导致阅读障碍,使得缩进失效。

如出现长度必须超过120个字符的字符串,应尽量使用here document或者嵌入的换行符等合适的方法使其变短。

除了在行结束使用换行符,空格是源文件中唯一允许出现的空白字符。

对从来没有用到的或者被注释的方法、变量等要坚决从代码中清理出去,避免过多垃圾造成干扰。

Bash是唯一被允许使用的可执行脚本shell。

可执行文件必须以#!/bin/bash开始。请使用 set来设置shell的选项,使得用 bash echo"Process$: Done making$$$."

#示例7:命令参数及路径不需要引号 grep-li Hugo/dev/"$1"

#示例8:常规变量用双引号,ccs可能为空的特殊情况可不用引号 git send-email--to"${reviewers}"${ccs:+"--cc""${ccs}"}

#示例9:正则用单引号,$1可能为空的特殊情况可不用引号 grep-cP'([Ss]pecial||?characters*)${1:+"$1"}

#示例10:位置参数传递推荐带引号的"$@",所有参数作为单字符串传递用带引号的"$*"# content of t.sh func_t{ echo num:$# echo args: 1:$1 2:$2 3:$3}

func_t"$@" func_t"$*"#当执行./t.sh a b c时输出如下: num: 3 args: 1:a 2:b 3:c num: 1 args: 1:a b c 2: 3:

因反引号如果要嵌套则要求用反斜杠转义内部的反引号。而$(command)形式的嵌套无需转义,且可读性更高。

使用[[...]],而不是[, test,和/usr/bin/[。

因为在[[和]]之间不会出现路径扩展或单词切分,所以使用[[...]]能够减少犯错。且[[...]]支持正则表达式匹配,而[...]不支持。参考以下示例:

尽可能使用变量引用,而非字符串过滤。

Bash可以很好的处理空字符串测试,请使用空/非空字符串测试方法,而不是过滤字符,让代码具有更高的可读性。正例:

当进行文件名的通配符扩展时,请指定明确的路径。

当目录中有特殊文件名如以-开头的文件时,使用带路径的扩展通配符./*比不带路径的*要安全很多。

Eval在用于分配变量时会修改输入内容,但设置变量的同时并不能检查这些变量是什么。反例:

请使用进程替换或者for循环,而不是通过管道连接while循环。

这是因为在管道之后的while循环中,命令是在一个子shell中运行的,因此对变量的修改是不能传递给父shell的。

这种管道连接while循环中的隐式子shell使得bug定位非常困难。反例:

如果你确定输入中不包含空格或者其他特殊符号(通常不是来自用户输入),则可以用for循环代替。例如:

使用进程替换可实现重定向输出,但是请将命令放入显式子 shell,而非 while循环创建的隐式子 shell。例如:

总是检查返回值,且提供有用的返回值。

对于非管道命令,使用$?或直接通过 if语句来检查以保持其简洁。

当内建命令可以完成相同的任务时,在shell内建命令和调用外部命令之间,应尽量选择内建命令。

因内建命令相比外部命令而言会产生更少的依赖,且多数情况调用内建命令比调用外部命令可以获得更好的性能(通常外部命令会产生额外的进程开销)。

加载外部库文件不建议用使用.,建议使用source,已提升可阅读性。正例:

除非必要情况,尽量使用单个命令及其参数组合来完成一项任务,而非多个命令加上管道的不必要组合。常见的不建议的用法例如:cat和grep连用过滤字符串; cat和wc连用统计行数; grep和wc连用统计行数等。

除特殊情况外,几乎所有函数都不应该使用exit直接退出脚本,而应该使用return进行返回,以便后续逻辑中可以对错误进行处理。正例:

推荐以下工具帮助我们进行代码的规范:

原文链接:http://itxx00.github.io/blog/2020/01/03/shell-standards/

获取更多的面试题、脚本等运维资料点击:运维知识社区获取

ansible---一键搭建redis5.0.5集群

二、《Linux运维最佳实践》pdf下载在线阅读,求百度网盘云资源

《Linux运维最佳实践》(胥峰)电子书网盘下载免费在线阅读

链接:https://pan.baidu.com/s/17OBBR2R68PAPwdeHHs990Q密码:tdr9

内容简介:本书是运维领域的璀璨明珠,是一本有思想的运维技术干货集!

技术层面,作者从高性能网站架构、服务器安全和监控、网络分析、自动化运维和游戏运维4个方向,梳理和总结了105个棘手的运维难题,结合自己10余年的工作经验,对这些问题给出了经过实践检验的解决方案,可直接应用到生产环境中。除解决方案外,还详细讲解了每个问题背后涉及的技术原理(共涉及21种技术)。

思想层面,本书不仅有作者对运维服务体系的深度思考,而且还有作者的主动运维思维和宏观的运维格局,更有作者解决具体运维问题的思维方法。

通过本书,不仅能解决具体的技术难题,提高工作效率,而且还能增强技术功底,提升工作能力。更重要的是,它能让我们明白,技术不是运维的终*追求,思想才是运维人员应该毕生修炼的目标!

具体内容方面,本书分为四大部分:

第一篇(第1-9章),高性能网站构建。这部分对构建高性能网站所需要的各个技术方面做详尽说明,涵盖域名、CDN、负载均衡、网站部署和数据库技术等的*佳实践。

第二篇(第10-13章),服务器安全和监控。业务架构起来了,如何保证它的安全性和稳定性,成为我们需要关注的焦点。这部分解决2个问题,一是加固服务器,使其避免轻易成为黑客的肉鸡;二是监控,使故障在成为有重大影响的事件前就被预警和处理。

第三篇(第14-16章),网络分析技术。这部分给出在Linux运维领域中的网络分析方法论。通过这部分的学习,我们将在遇到未知的网络服务问题时,能够参照本书中的方法论实施分析,从而解决问题。

第四篇(第17-21章),运维自动化和游戏运维。随着服务器规模的剧增,再使用一台台登录服务器的方法来管理运维将成为效率的瓶颈。这一部分给出我们的运维自动化实践方案,从开源实现到自主开发,互相补充,互相提升,真正实现适合自己的运维自动化体系。游戏运维部分将对端游和手游这两大目前*热点的游戏运维主题进行说明

作者简介:胥峰,2006年毕业于南京大学,2011年加入盛大游戏。十年运维经验,曾参与盛大游戏多款大型端游和手游的运维,主导运维自动化平台的功能设计和实施。通过公众号“运维技术实践”发布“网络分析技术实践”系列主题技术文章,引发万人阅读转发。拥有工信部认证高级信息系统项目管理师资格。

杨俊俊,资深Linux系统专家,《深度实践KVM》作者之一,目前就职于盛大游戏,担任盛大游戏“G云”运维负责人。具有多年Linux运维开发经验,精通KVM虚拟化、Linux监控及运维自动化管理。

三、it运维需要学什么

1、运维已经成为企业运营的基石之一。无论是在大型企业还是创业公司,运维工作都至关重要。如果你对IT运维感兴趣,想要开启一段充满挑战和机遇的职业旅程,那么这篇文章将为你详细介绍IT运维领域需要学习哪些技能。

2、IT运维的日常工作中需要用到很多基础性的工具及语言,这些是工作的基础,是必须要掌握的技能。IT运维需要掌握的基础知识有:操作系统、网络知识、数据库、编程语言、版本控制等。

3、操作系统:Windows、Linux、Unix等。了解基本操作、命令行界面以及系统管理。

4、网络知识:TCP/IP协议、OSI模型等。理解网络拓扑结构、网络设备(路由器、交换机等)以及网络安全。

5、数据库:SQL语言、关系型数据库(如MySQL、Oracle等)和非关系型数据库(如MongoDB、Cassandra等)。掌握数据库的基本概念、查询语句以及优化。

6、编程语言:Python、Java、Shell等。了解编程基础、常用库和框架以及脚本编写。

7、版本控制:Git、SVN等。掌握版本控制系统的基本概念、使用方法和团队协作。

8、随着时代的发展,仅仅掌握一些基础知识已经不能满足公司及日常工作的需要,所以,想要做好一个IT运维还需要掌握一些进阶的技能,包括:自动化运维、容器化部署、云计算知识、大数据处理等。

9、自动化运维:Ansible、Chef、Puppet等。学习自动化工具,实现配置管理和系统部署的自动化。

10、容器化部署:Docker、Kubernetes等。理解容器化技术,实现应用容器化的部署和管理。

11、云计算:AWS、Azure、Google Cloud等。了解云计算的基本概念、服务模式和主流云平台。掌握网络安全的基本概念和防范措施。

12、大数据处理:Hadoop、Spark等。了解大数据处理的基本概念、技术和工具。

13、作为一个IT运维,不但需要具备知识方面的储备,自身的能力也是需要提升的,我们称之为软技能。IT运维日常需要具备的软技能包括问题解决能力、团队协作能力、学习能力等。

14、问题解决能力:遇到问题时,能够迅速定位和解决问题。这需要你具备较强的问题敏感性、逻辑思维和沟通能力。

15、团队协作:与其他团队成员有效协作,共同完成项目。这需要你具备较高的组织协调能力和团队合作精神。这需要你具备项目管理的基本知识和实践经验。

16、学习能力:IT行业变化迅速,你需要保持持续学习,掌握新技术和工具。

17、理论学习固然重要,但实践经验同样不可或缺。通过参与实际项目、实习或开源社区,你可以将理论知识运用到实际场景中,从而更好地理解和掌握这些技能。

18、关注行业动态和趋势,了解最新的技术、标准和最佳实践。通过参加行业会议、订阅专业博客和加入技术社区,你可以与同行交流,拓展视野,提升自己的职业竞争力。

19、总之,IT运维领域涉及的技能十分广泛,你需要不断学习和实践,逐步提升自己的技术水平和职业能力。在这个充满挑战和机遇的领域,希望你能够取得成功!

如果你还想了解更多这方面的信息,记得收藏关注本站。