初识Linux我就爱上了它
发布作者:微思网络 发布时间:2021-03-04 浏览量:0次
起始于 Linux、C++ 的技术进阶之路
本科时,我对 Linux 特别感兴趣,心中一直向往成为一名运维工程师,就开始没日没夜地看相关的书籍。
到了大约 2013 年前后,发现 DevOps 开始流行起来了,就开始学习 Python 希望成为一名 DevOps 工程师。但后来出去实习才发现,从事运维相关的工作并不是我的追求。
苦于在合肥这样的城市真的很难找到一份专职做 DevOps 的地方(当时在科大讯飞时,做的就是纯运维的工作,该公司的 DevOps 也才有个雏形)。
所以我萌生了考研的想法,希望在 Linux 内核这个层面做深造。最终,我选择了西安邮电大学,因为该校的陈莉君老师是我比较崇拜的对象,一直在拜读她的《深入理解 Linux 内核》一书。
后来上了研究生后,我开始专注 Linux 内核、C/C++ 服务端开发等工作。至于为何选择 C/C++,理由很简单 —— 大家都去学 Java 了,我要是也去学 Java,那么我的优势何在?而且,C/C++ 也更偏向底层,是我比较感兴趣的地方,所以最终选择了 C/C++。
我的研究生三年所有的心思都投入到了 C/C++ 以及 Linux 内核上,不敢说对 C/C++有什么独特的见解,至少我觉得自己的学习经历还是可以给大家作为一个参考。
Linux 从运维到 DevOps
先简单花一些篇幅介绍下我的这段学习经历。我的 Linux 启蒙老师,还是要源于培训,大学那会经常有一些培训公司会来我们学习做免费培训,想让我们花钱去培训。记得当时最流行的两个证书一个是 RHCE(RedHat 相关的认证),另外一个则是 CCNA培训、CCNP培训(思科网络相关的认证),彼时的我深深地被 Linux、OpenSource、Linux 那酷炫的黑框框吸引了。
我理想中的 Hacker 应该就是整天在黑框框中敲着一堆看不懂的字符。就这样,开始一头扎到 Linux 的世界中,我的第一本入门书是大学图书馆借的一本 Linux 用户指南,具体的书名已经记不起来了。
后来开始读鸟哥的私房菜,这本书在当时真的很好,我没有想太多,只知道疯狂地读完整本书,一遍、二遍……就这样我读了五遍,上面的实验不停地练习、命令不停地练习。
但入门后,我开始迷茫了,因为不知道下一步该学什么,便又疯狂地开始寻找下一个目标,也就有了带领着我进入到 Linux培训最神秘的世界。
在这里,我发现 Linux 能做很多很多有趣的事情,便开始搭建 Apache 服务器了,居然可以运行一个网站了。此外,我还学会了用 Linux 做 DHCP 服务器、DNS 服务器、VSFTP 服务器。一时间,我像是打开了一个新世界,后来,开始接触网络、搭建路由器、防火墙等等。
当时,觉得 Linux 真的很奇妙,我还利用 Linux 搭建了 HTTP 代理服务器,然后在宿舍通过学校实验室部署的 HTTP 代理服务器来免费上网。
后来开始出去实习,我就已经可以实现不看任何文档,从头源码编译 LNMP,并搭建 Discuz! 论坛,就靠这个本事我找到了第一份实习,工资是 1800 块。
不过我却发现工作了就没有心思学习,所以又回到了学校,再好好巩固自己的基础,并下定决心开始考研深入学习 Linux。在考研的期间,我发现了马哥 Linux,这又是我人生中另外一个起点。
宁老师讲课注重原理和实践,七分原理三分实践,通过他的课程我的 Linux 水平提升了一个很大的档次,他的全套课程我完整地听过三遍,每一个课程上的实验都做了至少五遍以上,这奠定了我的 Linux 和 Shell 脚本的基础。此后,在我的职业生涯中,Shell 脚本一直是我最强有力的助手,在研究生阶段我还专门做过 Shell 脚本相关的分享。
在 2013 到 2014 年这段时间开始流行自动化运维、Python,于是我开始学习 Python,还有现在比较流行的 Flask 框架,自认为应该是最早一批 Flask 框架的用户了。
当时国外人出的一本《Flask Web 开发:基于 Python 的 Web 应用开发实战》书,我也是第一时间从某宝上买到并阅读,只可惜后面转到 C++ 后就没再看过了,这期间用 Flask 做过一个博客。
在研究生阶段,还帮同学和一些朋友运维过一些网站,做一些简单的调优和加固。到此为止,我的 DevOps 之路终结了,从此走向了 Linux C/C++ 的路上。
通过上面我的这些经历,给大家简单地总结下 —— 我认为学好 Linux 运维需要做到以下几点:
多做实验,实验环境完全可以通过 VMware 来模拟,模拟私有网络,模拟多台机器,要搞懂 VMware 提供的集中网络模式的工作原理(桥接网络、宿主机网络、NAT 等),这对整个 Linux 后续的学习帮助都非常之大,还可以通过虚拟机模拟 Grub 损坏并进行修复、模拟忘记密码并通过单用户模式修改密码等等。
LNMP、DHCP、DNS、MySQL 等等这些网络服务需要完全基于源码来编译,这样更加有体感,对于编译的参数要理解,因为通过 Yum 安装的软件包都是上一个稳定版本,并不是最新稳定版本,还有另外一点就是编译安装可以通过编译参数对软件进行一定的优化。
Linux 基础要扎实,底层原理要理解,典型的文件系统的组成、inode 和数据存放的位置、Linux 进程是如何调度的、调度算法有哪些、磁盘调度算法有哪些、TCP/IP 的三次握手和四次挥手的过程是如何的,网络中的数据是如何流向的(参考《构建高性能 Web 站点》),iptables 的三表五链、Nginx 的网络 IO 模型(这个很重要,你要能讲清楚为什么 Nginx 要比 Apache 好),马哥 Linux 对于这个部分的内容讲解是我最喜欢的,我强力推荐大家都去听一听马哥的视频。
英文文档的阅读能力,阅读各类开源软件的官方文档是必经之路,这个也是了解一个开源软件最快的捷径,如果你没有一定的英文阅读能力,那么你只能等到有人把这些文章翻译成中文后你才能学习到。
写博客,很多时候,看了视频和书后,如果你不能讲这些知识用你的语言表达出来,那么很大可能,你并没有真正的理解这些知识,通过写博客的方式会逼迫你回忆知识,然后总结出来,博客被大量人访问也会在一定程度上激励你,让你有一定的成就感,促使你把博客写的更好。
Shell 脚本的要熟悉,运维这条路上脚本会帮我们省掉不少体力活,此外必须要学习一门编程语言 Python、Golang 等。