写给 Linux 初学者的一封信
大家好,我是肖邦。
这篇文章是写给 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 是一门实操性非常强的学科,初学者需要多敲命令,多实践和练习。与学习其它东西是一样的,大多时候我们不需要非得先将理论知识学的通透后才来实践动手,而是从实践中发现问题后再深度学习,这样效果可能会更好。
- 有效的学习方式。说到学习方式,每个人学习的方式可能不太一样。我推荐 视频 看书 的方式,视频教程可以让你快速上手,快速了解相关的概念,而看书可以更加全面的学习具体的细节,会让你有更多的思考,看书可以作为视频的补充和扩展。
- 思考,总结与归纳。不管以什么形式来学习,我们都需要对学习中的每个问题和概念认真思考,需要从 what、how、why 三个角度进行学习,作为学习的问题模板。学习任何新技术,我们都需要知道这个技术知识点的应用场景,以及能够解决什么问题,是否有类似的解决方案,此技术点有什么优势。
- 输出是一种高效学习方法。在学习过程中,必不可少的一个环节就是归纳和总结,总结就要输出,可以是文档形式的笔记或者其它。我比较推荐写博客,有条件的话一定要写,因为写博客可以帮助你更有效地、更系统的总结和学习。写博客是一种 教 的形式,如果能够将自己学到的知识在博客上清晰的讲清楚,教会别人,那才说明你是真正的掌握了它。如果博客写的不错的话也能为自己够积累影响力,对自己将来的求职也会有帮助。另外如果别人从你博客学习到了东西而且觉着不错的话,会给你点赞、留言、赞赏,这都是对你写博客和学习的正反馈,同时也能够刺激你保持学习的兴奋和激情,呵呵。
- 制定明确的学习目标。做任何事,有了目标才能够走的更远,少走弯路。我们学习 Linux 也一样,需要根据自己的实际情况,制定适合自己的学习目标。个人建议目标不要太大,时间周期也不要太长,要切合实际,比如制定三个月的学习目标。有了目标后,就要确定详细的学习计划,细化到每周需要完成的任务列表。注意,你需要为计划任务指定结果检验的方式,比如写一篇博客文章或是笔记,计划真实落地才是最困难的,因为执行力是一种稀缺资源。
- 坚持与激情,获得正反馈。学习是一件逆人性的事情,大部分人在遇到诸多问题后就很容易会放弃。1.合理的学习计划和结果输出,能够让你继续保持学习的激情;2.写博客、讨论交流等方式也可以获得正向的反馈,从而激励着你继续向前;3.坚持学习也能够帮你养成良好的习惯,无形中提高自己的执行力,个人认为这些收获可能远比具体的技术知识更加重要。
- 如何解决问题。在学习 Linux 技术的时候,初学者肯定会遇到各种 奇怪 的问题,面对这些问题时,我们要学会分析错误信息,尝试以目前学习到的技术来思考找答案,如果解决不了,可以使用搜索引擎,对于初学者遇到的问题,百度一般都能够解决。如果实在解决不了,可以请教身边的高手,不过提问问题时,一定要描述清楚问题,带着谦虚请教的态度。
应该学习的基础知识
Linux 系统涉及的技术知识点非常广泛,学习者可以根据自己的实际情况,选择相应的主题方向进行学习,不可盲目的跟随他人的学习路线,有可能适得其反,学习效果事倍功半,得不偿失,所以选择适合自己的学习路线非常重要。
因为每个人将来从事的工作和方向不同,需要重点学习的内容也不一样,而且本文目标也只是分享给 Linux 初学者一些实用的经验心得,所以后边内容中只简单罗列了最通用和实用的一些技术,这些是学习 Linux 技术的所有同学都应该知道的技术知识点。
- 学习 vim。在 Linux 系统下,基本没有什么可以与之竞争的编辑器(不接受反驳),你只需要花费
1-2
天的时间来熟悉 vim 的基本使用操作即可,无需研究那些高大上的各种插件使用技巧。要知道 vim 的学习是有难度的,不过一旦熟练使用后,就会得心应手,能极大提高编辑效率。这里推荐陈皓的《简明 vim 练级攻略》。 - 简单的文件管理。这些都是一些非常基础的操作与文件的管理命令,如:
ls
、less
、head
、tail
、du
、df
、ln
等,当然find
是查找文件的非常有用的命令,功能非常强大。 - 基础的网络管理。常用的网络管理命令,一定要学会使用,这对平时工作或学习时的网络诊断和网络配置非常有用。比如
ip
或ifconfig
等网络命令,还有网络诊断工具netstat
、ping
、traceroute
等。 - 学些 shell 脚本编程。我们知道 Linux 特点之一就是命令行,上边我们说过,命令行就意味着可以自动化,自动化后就能够规模化。shell 脚本就是我们实现自动化的最有效的方式,因为 shell 程序是最擅长与 Linux 内核打交道的。我们可以利用 shell 脚本帮我们做很多重复性的工作,来释放我们工程师的双手去创造更大的价值。
- 熟悉作业管理。我们需要经常在命令行终端上管理应用程序,启动或关闭程序。你需要知道这些概念,如:进程、进程组、会话、终端,学会使用
jobs
、fg
、bg
、kill
、Ctrl-C
、Ctrl-Z
,以及信号的相关操作,需要知道kill -9
到底是在干什么。 - 学习使用软件包的管理。国内最常用的 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 系列文章。
谢谢大家,我是肖邦,欢迎关注后续的精彩分享。