这篇文章是写给 Linux 初学者的,我会分享一些作为初学者应该知道的一些东西,这些内容都是本人从事 Linux 开发工作多年的心得体会,相信会对初学者有所帮助。如果你是 Linux 老鸟,那可能就不需要再往下看了
为啥要学Linux
作为从事 IT 工作的同学,对 Linux 系统一定不陌生。如今我们在各种领域都能看得到它的身影,比如,手机、服务器、嵌入式、电信设备、大型计算机,以及各种电子类产品都离不开 Linux,它已经渗透到互联网世界的方方面面了。
包括那些火热的技术,比如云计算、虚拟化、容器、大数据、人工智能,几乎都是基于 Linux 技术的,那些平台系统,电商、团购、社交、新闻、快递,都是部署在服务器端,也几乎都是基于 Linux 技术的。
在编程的世界中,Linux 就是主流,不会 Linux 你就可能会格格不入。如果你想进大公司,想学新技术,Linux 一定是一道绕不过去的砍,只有进入了 Linux 系统这扇大门,你才可能成为合格的软件工程师。
企业服务器环境绝大部分都是 Linux 系统,所以不管你是从事前端、后端、运维、测试中的哪一类工作,Linux 都是你必须掌握的基础知识,只是不同类型工作需要学习 Linux 的方向不同而已。
经验与建议
下边分享的内容是本人从事 Linux 开发多年的一些经验总结,相信对 Linux 初学者会有所帮助,当然如果有不准确的地方,还请指正。
一定要自己搭建Linux环境。Linux 系统学习是很重实践的,仅学习理论知识是不能真正掌握 Linux 的。我推荐在个人电脑上安装虚拟机,虚拟机的方式非常灵活,既可以提供 Linux 环境,也不会影响宿主机的正常使用。对于虚拟机软件的选择,可以考虑使用 VMware 或 VirtualBox 。虚拟机的快照功能一定要用好,尤其是对新手来说,它可以将你不小心搞坏的环境恢复到初始化状态,就像是重新安装了操作系统一样,从此妈妈再也不用担心我 rm -rf /* 了。
Linux发行版的选择。由于 Linux 的强大,目前存在太多的发行版本了,有些同学在选择上可能会有些纠结。这里我推荐选择使用 CentOS 就行,由于免费且稳定,国内企业服务器使用最多的就是 CentOS 了,使用上和 RedHat 几乎没有什么区别。当然你可以选择 Ubuntu 系统,国内服务器使用份额仅次于 CentOS。其实所有发行版都是基于 Linux 内核的,只是扩展了相关的系统组件和软件库,本质上都是 Linux 系统,学会了 CentOS 后就很容易上手其它版本的系统了,所以无需太关注和纠结这个问题。
一定要使用命令行。大部分初学者经常喜欢安装图形桌面,因为我们之前都习惯了 win 或 mac 的图形操作。但我强烈建议,安装系统时不要安装桌面,平时的操作和学习都坚持使用命令行。学习前期可能会比较痛苦,但熬过了阵痛期,熟练使用之后,就能享受到命令行带来的强大功能。命令行不仅功能强大,而且可以极大的提高效率,因为命令行就意味着能够自动化,自动化能为你释放很多重复性的工作,让你有充足的时间去学习更有价值的知识。另外,图形界面在 linux 系统上作为一个独立软件存在,会额外消耗服务器的资源,企业的服务器一定是不会安装图形的,所以需要你一定要在 Linux 世界中忘掉 windows 的思维方式。
Linux 是开源的。开源意味着你能够查看 Linux 源码,可以从代码层面理解系统实现的原理,这些可以让你达到一通百通、醍醐灌顶的效果,而不是简单的使用它。
养成安全严谨的良好习惯。对于初学者来说,虽然大部分时间是在虚拟机上操作,有快照的加持,可以毫无顾忌的进行各种实验性的操作。但我还是强烈建议初学者一定要养成良好的操作习惯:1.经常备份重要的数据;2.少用 root 用户进行各种操作;3.敲命令不是越快越好;4.服务器密码尽可能的复杂些,不要使用 123456 这类弱密码,服务器很可能被侵入当肉鸡;5.服务器密码不要简单记录在文档上或 U 盘之类的移动设备上;6.对生产环境一定要有敬畏心。
制定明确的学习目标。做任何事,有了目标才能够走的更远,少走弯路。我们学习 Linux 也一样,需要根据自己的实际情况,制定适合自己的学习目标。个人建议目标不要太大,时间周期也不要太长,要切合实际,比如制定三个月的学习目标。有了目标后,就要确定详细的学习计划,细化到每周需要完成的任务列表。注意,你需要为计划任务指定结果检验的方式,比如写一篇博客文章或是笔记,计划真实落地才是最困难的,因为执行力是一种稀缺资源。
如何解决问题。在学习 Linux 技术的时候,初学者肯定会遇到各种 奇怪 的问题,面对这些问题时,我们要学会分析错误信息,尝试以目前学习到的技术来思考找答案,如果解决不了,可以使用搜索引擎,对于初学者遇到的问题,百度一般都能够解决。如果实在解决不了,可以请教身边的高手,不过提问问题时,一定要描述清楚问题,带着谦虚请教的态度。
应该学习的基础知识
Linux 系统涉及的技术知识点非常广泛,学习者可以根据自己的实际情况,选择相应的主题方向进行学习,不可盲目的跟随他人的学习路线,有可能适得其反,学习效果事倍功半,得不偿失,所以选择适合自己的学习路线非常重要。
因为每个人将来从事的工作和方向不同,需要重点学习的内容也不一样,而且本文目标也只是分享给 Linux 初学者一些实用的经验心得,所以后边内容中只简单罗列了最通用和实用的一些技术,这些是学习 Linux 技术的所有同学都应该知道的技术知识点。
学习 vim。在 Linux 系统下,基本没有什么可以与之竞争的编辑器(不接受反驳),你只需要花费 1-2 天的时间来熟悉 vim 的基本使用操作即可,无需研究那些高大上的各种插件使用技巧。要知道 vim 的学习是有难度的,不过一旦熟练使用后,就会得心应手,能极大提高编辑效率。这里推荐陈皓的《简明 vim 练级攻略》。
学习使用软件包的管理。国内最常用的 Linux 发行版是 ubuntu、centos,需要学会使用 apt-get、yum 命令来查找和安装相关的软件包,当然也要学会试着从源码编译方式安装软件。
学习简单的数据处理。我们在工作和学习中也会经常需要处理文本信息,Linux 在这方面提供了很多的工具,组合起来能够非常方便的实现强大的功能。常见的命令 sort、uniq、cut、split,还有 Linux 经典的三剑客 sed、awk、grep,这三个工具都是上古神器,功能非常强大,awk 还有专门的书籍来讲解它,可见功能之强大与复杂,我们初学者只需要熟练掌握一些常用的功能即可。
学会看文档。虽然不是具体的技术知识,但它却非常重要,初学者在学习命令时总是希望能记住所有的参数和选项,其实这些参数我们不需要记忆(大脑是用来思考的而不是存储的),我们可以通过 Linux 手册来查看,通常使用 man ifconfig 就能够查看该命令的官方文档说明,既准确又清晰。当然在遇到问题时,也可以查看手册来确认命令的使用方法是否正确。
Linux 系统涉及的技术知识点非常复杂,上述所分享的仅是一些必学基础知识,如果能够认真学习并够掌握好,基本上算是入门 Linux(存活的级别)。如果你是运维方向,至少需要更深入的学习:用户管理、磁盘管理、系统日常管理、常见服务的搭建、高可用集群、系统监控等运维知识;如果你是后台开发方向,至少需要更深入学些 Linux 操作系统、进程与线程、进程间通信、信号、网络编程、系统调用、Linux 内核等知识;如果你是嵌入式方向,你至少需要深入研究 Linux 内核源码、设备驱动程序了。
本篇文章到此结束,后边还会更新 Linux 系列文章,文章内容风格会尽量保持通俗易懂、重实践和实用性,尽可能地帮助到有需要的同学,如果感兴趣的话,可以继续关注后续 Linux 系列文章。