个人总结的linux学习可分为以下几个阶段:
Linux基础运维学习阶段
这个阶段主要学习 Linux 运维技术,包括 Linux 基本操作、Bash 编程、应用服务部署、数据库服务部署、日志管理、系统监控等。
Linux基础
这部分要学习的内容包括 Linux 基本操作、用户与组、目录与文件、文件查找与打包、文件编辑、磁盘管理、系统备份与恢复、计划任务等基本的系统管理命令。
Shell编程与文本处理
这部分要学习 Bash 编程语言及文本处理,包括 Bash 下的特殊字符、变量与流程控制、运算、函数等语言基础,以及正则表达式、Sed 和 Awk 的基础用法。这些是 Linux 运维人员需要掌握的基础知识,实际运维工作中经常会用到。
应用服务运维
这部分内容围绕应用服务运维展开,包括 Web 服务器配置、HTTPS配置、负载均衡。其中 Web 服务器配置包括了 Apache 和 Nginx 两大市面上最流行的 Web 服务器,负载均衡的常用应用 Nginx、LVS 和 HAProxy 。
数据库服务运维
数据库知识是运维工程师必须要掌握的一项技能,除了能够完成安装、配置和性能优化等运维工作,还要能够执行基本的增删改查操作。这部分要学习目前市面上主流的三大数据库 MySQL、MongoDB 和 Redis,其中 MySQL 为关系型数据库,MongoDB 为文档型数据库,Redis 为 K-V 数据库,Redis 更多的时候是被当作缓存服务来使用。
日志与监控
日志和监控是用来追踪线上服务运行状态的两大重要手段。这部分要学习如何使用目前最流行的 ELK 开源软件栈来搭建日志分析平台,和多种服务运行状态监控方式,包括 Linux 命令、Python 脚本、Zabbix工具,以及这一领域炙手可热的新星 Prometheus。
Devops 与云计算运维学习阶段
这个阶段主要学习 Linux 自动化运维技术和云计算运维。首先学习 Python 基础,然后学习 Ansible 和 Saltstack 这两种 Python 自动化运维工具。接着学习 Docker 自动化运维,包括现在大火的 Kubernetes。紧接着学习 Jenkins 持续集成,包括 Jenkins 如何跟 Docker 和 Kubernetes 配合来实现持续部署。最后学习云计算运维,主要讲解阿里云各种云服务运维。
Python基础
Python 是运维工程师必须要掌握的一门语言,它提供了许多运维相关的库包和工具来辅助运维工程师完成工作。首先要学习 Python 基础语法、数据结构、函数式编程和面向对象编程等编程基础,不需要像专业的 Python 开发人员那样涉入太深。
Python自动化运维
这部分需要学习两大 Python 自动化运维(DevOps)工具(Ansible 和 Saltstack)的使用。它们都是用来批量管理服务器的工具,其中 Ansible 不需要在被管理的服务器上部署 Agent,但性能稍弱,Saltstack 正好相反,两者都具备良好的二次开发能力。
Docker自动化运维
Docker 通过将应用运行的依赖环境跟代码一起打包,解决了部署时令人头疼的环境差异问题,现在已经成为大多数公司应用部署的首选方式。这部分先学习 Docker的基础知识和各项工具的使用,然后学习 Docker 容器编排工具领域的绝对王者 Kubernetes。
Jenkins持续集成
Jenkins 是使用 Java 编写的持续集成工具,通过配置 Pipeline 可以实现应用代码自动测试、自动构建和自动部署。这部分首先学习 Jenkins 的安装、配置和管理,然后学习 Jenkins 如何跟 Docker 和 Kubernetes 结合来实现自动部署。
云计算运维学习阶段
现在越来越多的应用转向了“云原生”,云原生应用尽可能利用云计算平台提供的服务,包括计算、存储、数据库、缓存、消息队列等,来简化应用的部署和运维。这部分首先要学习云计算的底层技术“虚拟化”,然后学习阿里云提供的各种常用服务,包括 VPC、ECS、RDS、MongoDB、Redis、OSS 和 负载均衡等。
大数据技术栈学习阶段
提起大数据,不得不提由IBM提出的关于大数据的5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性),而对于大数据领域的从业人员的日常工作也与这5V密切相关。大数据技术在过去的几十年中取得非常迅速的发展,尤以Hadoop和Spark最为突出,已构建起庞大的技术生态体系圈。而目前大数据的应用也越来越广泛,越来越多的场景下海量数据处理都依赖大数据。这部分主要学习Hadoop相关技术栈,主要包含Hbase、hdfs、zookeeper、kafka等。
网络与安全学习阶段
网络与安全是传统 Linux 运维的重要组成部分,随着云计算的流行现在的运维人员已经很少接触。云计算流行起来后,网络也逐渐虚级化、复杂化,所以更需要扎实的网络知识,但由于多数公司都有专职的网络工程师活安全工程师,所以如果精力有限的话除网络安全部分其它的可以不用深入学习。
网络与安全
网络是不可信任的,所以在这里安全显得特别重要。首先要掌握 OSI 七层网络模型,以及常见的网络协议,包括 TCP/IP、HTTP 等,然后熟练掌握 iptables 防火墙工具的使用,最后再简单了解一下用得比较少的 SELinux。
网络服务部署
学习 Linux 服务器的搭建,包括 Linux 网络服务基础知识、DHCP、FTP、NFS、VPN、邮件服务、SSH、Samba、DNS 等常用服务的服务器部署。
Web安全实践
这部分需要了解web攻击相关知识,如跨站脚本XSS,SQL注入,文件包含等方式对有漏洞的 Web 服务进行攻击。
服务器安全实践
这部分需要了解服务区攻击相关的安全知识,如Nmap,Metasploit,NeXpose,Nmap,Nessus等安全工具对具有漏洞的靶机进行扫描和攻击。