写给 Linux 初学者的一封信

编程修养 等级 886 0 0

大家好,我是肖邦

这篇文章是写给 Linux 初学者的,我会分享一些作为初学者应该知道的一些东西,这些内容都是本人从事 Linux 开发工作多年的心得体会,相信会对初学者有所帮助。如果你是 Linux 老鸟,那可能就不需要再往下看了

写给 Linux 初学者的一封信

为啥要学Linux

作为从事 IT 工作的同学,对 Linux 系统一定不陌生。如今我们在各种领域都能看得到它的身影,比如,手机、服务器、嵌入式、电信设备、大型计算机,以及各种电子类产品都离不开 Linux,它已经渗透到互联网世界的方方面面了。

包括那些火热的技术,比如云计算、虚拟化、容器、大数据、人工智能,几乎都是基于 Linux 技术的,那些平台系统,电商、团购、社交、新闻、快递,都是部署在服务器端,也几乎都是基于 Linux 技术的。

在编程的世界中,Linux 就是主流,不会 Linux 你就可能会格格不入。如果你想进大公司,想学新技术,Linux 一定是一道绕不过去的砍,只有进入了 Linux 系统这扇大门,你才可能成为合格的软件工程师。

企业服务器环境绝大部分都是 Linux 系统,所以不管你是从事前端、后端、运维、测试中的哪一类工作,Linux 都是你必须掌握的基础知识,只是不同类型工作需要学习 Linux 的方向不同而已。

经验与建议

下边分享的内容是本人从事 Linux 开发多年的一些经验总结,相信对 Linux 初学者会有所帮助,当然如果有不准确的地方,还请指正。

  • 一定要自己搭建Linux环境。Linux 系统学习是很重实践的,仅学习理论知识是不能真正掌握 Linux 的。我推荐在个人电脑上安装虚拟机,虚拟机的方式非常灵活,既可以提供 Linux 环境,也不会影响宿主机的正常使用。对于虚拟机软件的选择,可以考虑使用 VMwareVirtualBox 。虚拟机的快照功能一定要用好,尤其是对新手来说,它可以将你不小心搞坏的环境恢复到初始化状态,就像是重新安装了操作系统一样,从此妈妈再也不用担心我 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 是一门实操性非常强的学科,初学者需要多敲命令,多实践和练习。与学习其它东西是一样的,大多时候我们不需要非得先将理论知识学的通透后才来实践动手,而是从实践中发现问题后再深度学习,这样效果可能会更好。
  • 有效的学习方式。说到学习方式,每个人学习的方式可能不太一样。我推荐 视频 + 看书 的方式,视频教程可以让你快速上手,快速了解相关的概念,而看书可以更加全面的学习具体的细节,会让你有更多的思考,看书可以作为视频的补充和扩展。
  • 思考,总结与归纳。不管以什么形式来学习,我们都需要对学习中的每个问题和概念认真思考,需要从 whathowwhy 三个角度进行学习,作为学习的问题模板。学习任何新技术,我们都需要知道这个技术知识点的应用场景,以及能够解决什么问题,是否有类似的解决方案,此技术点有什么优势
  • 输出是一种高效学习方法。在学习过程中,必不可少的一个环节就是归纳和总结,总结就要输出,可以是文档形式的笔记或者其它。我比较推荐写博客*,有条件的话一定要写,因为写博客可以帮助你更有效地、更系统的总结和学习。写博客是一种 *教 的形式,如果能够将自己学到的知识在博客上清晰的讲清楚,教会别人,那才说明你是真正的掌握了它。如果博客写的不错的话也能为自己够积累影响力,对自己将来的求职也会有帮助。另外如果别人从你博客学习到了东西而且觉着不错的话,会给你点赞、留言、赞赏,这都是对你写博客和学习的正反馈,同时也能够刺激你保持学习的兴奋和激情,呵呵。
  • 制定明确的学习目标。做任何事,有了目标才能够走的更远,少走弯路。我们学习 Linux 也一样,需要根据自己的实际情况,制定适合自己的学习目标。个人建议目标不要太大,时间周期也不要太长,要切合实际,比如制定三个月的学习目标。有了目标后,就要确定详细的学习计划,细化到每周需要完成的任务列表。注意,你需要为计划任务指定结果检验的方式,比如写一篇博客文章或是笔记,计划真实落地才是最困难的,因为执行力是一种稀缺资源。
  • 坚持与激情,获得正反馈。学习是一件逆人性的事情,大部分人在遇到诸多问题后就很容易会放弃。1. 合理的学习计划和结果输出,能够让你继续保持学习的激情;2. 写博客、讨论交流等方式也可以获得正向的反馈,从而激励着你继续向前;3. 坚持学习也能够帮你养成良好的习惯,无形中提高自己的执行力,个人认为这些收获可能远比具体的技术知识更加重要。
  • 如何解决问题。在学习 Linux 技术的时候,初学者肯定会遇到各种 奇怪 的问题,面对这些问题时,我们要学会分析错误信息,尝试以目前学习到的技术来思考找答案,如果解决不了,可以使用搜索引擎,对于初学者遇到的问题,百度一般都能够解决。如果实在解决不了,可以请教身边的高手,不过提问问题时,一定要描述清楚问题,带着谦虚请教的态度。

应该学习的基础知识

Linux 系统涉及的技术知识点非常广泛,学习者可以根据自己的实际情况,选择相应的主题方向进行学习,不可盲目的跟随他人的学习路线,有可能适得其反,学习效果事倍功半,得不偿失,所以选择适合自己的学习路线非常重要。

因为每个人将来从事的工作和方向不同,需要重点学习的内容也不一样,而且本文目标也只是分享给 Linux 初学者一些实用的经验心得,所以后边内容中只简单罗列了最通用和实用的一些技术,这些是学习 Linux 技术的所有同学都应该知道的技术知识点。

  • 学习 vim。在 Linux 系统下,基本没有什么可以与之竞争的编辑器(不接受反驳),你只需要花费 1-2 天的时间来熟悉 vim 的基本使用操作即可,无需研究那些高大上的各种插件使用技巧。要知道 vim 的学习是有难度的,不过一旦熟练使用后,就会得心应手,能极大提高编辑效率。这里推荐陈皓的《简明 vim 练级攻略》。
  • 简单的文件管理。这些都是一些非常基础的操作与文件的管理命令,如:lslessheadtaildudfln 等,当然 find 是查找文件的非常有用的命令,功能非常强大。
  • 基础的网络管理。常用的网络管理命令,一定要学会使用,这对平时工作或学习时的网络诊断和网络配置非常有用。比如 ipifconfig 等网络命令,还有网络诊断工具 netstatpingtraceroute 等。
  • 学些 shell 脚本编程。我们知道 Linux 特点之一就是命令行,上边我们说过,命令行就意味着可以自动化,自动化后就能够规模化。shell 脚本就是我们实现自动化的最有效的方式,因为 shell 程序是最擅长与 Linux 内核打交道的。我们可以利用 shell 脚本帮我们做很多重复性的工作,来释放我们工程师的双手去创造更大的价值。
  • 熟悉作业管理。我们需要经常在命令行终端上管理应用程序,启动或关闭程序。你需要知道这些概念,如:进程、进程组、会话、终端,学会使用 jobsfgbgkillCtrl-CCtrl-Z,以及信号的相关操作,需要知道 kill -9 到底是在干什么。
  • 学习使用软件包的管理。国内最常用的 Linux 发行版是 ubuntucentos,需要学会使用 apt-getyum 命令来查找和安装相关的软件包,当然也要学会试着从源码编译方式安装软件。
  • 学习简单的数据处理。我们在工作和学习中也会经常需要处理文本信息,Linux 在这方面提供了很多的工具,组合起来能够非常方便的实现强大的功能。常见的命令 sortuniqcutsplit,还有 Linux 经典的三剑客 sedawkgrep,这三个工具都是上古神器,功能非常强大,awk 还有专门的书籍来讲解它,可见功能之强大与复杂,我们初学者只需要熟练掌握一些常用的功能即可。
  • 学会看文档。虽然不是具体的技术知识,但它却非常重要,初学者在学习命令时总是希望能记住所有的参数和选项,其实这些参数我们不需要记忆(大脑是用来思考的而不是存储的),我们可以通过 Linux 手册来查看,通常使用 man ifconfig 就能够查看该命令的官方文档说明,既准确又清晰。当然在遇到问题时,也可以查看手册来确认命令的使用方法是否正确。

Linux 系统涉及的技术知识点非常复杂,上述所分享的仅是一些必学基础知识,如果能够认真学习并够掌握好,基本上算是入门 Linux(存活的级别)。

如果你是运维方向,至少需要更深入的学习:用户管理、磁盘管理、系统日常管理、常见服务的搭建、高可用集群、系统监控等运维知识。

如果你是后台开发方向,至少需要更深入学些 Linux 操作系统、进程与线程、进程间通信、信号、网络编程、系统调用、Linux 内核等知识。

如果你是嵌入式方向,你至少需要深入研究 Linux 内核源码、设备驱动程序了。

本篇文章到此结束,后边还会更新 Linux 系列文章,文章内容风格会尽量保持通俗易懂、重实践和实用性,尽可能地帮助到有需要的同学,如果感兴趣的话,可以继续关注后续 Linux 系列文章。

谢谢大家,我是肖邦,欢迎关注后续的精彩分享。

推荐阅读:


写给 Linux 初学者的一封信

收藏
评论区

相关推荐

Linux使用 常见经验和技巧总结
1.XShell连接远程Linux服务器并运行程序后关闭XShell继续执行XShell是用来连接远程Linux很好的工具,在连接之后并运行好需要运行的程序后,往往需要关闭XShell,但是直接运行比如运行python crawler.py运行一个Python爬虫程序后,并直接关闭XShell往往会同时杀掉正在运行的爬虫程序,因此需要使用sudo
Java程序员必须掌握的常用Linux命令。
点击上方蓝色文字关注↑↑↑↑↑ ![](https://oscimg.oschina.net/oscnet/2ab1caa1-208a-4204-9d64-b55b0b38f09f.jpg) Java程序员也是半个运维了,在日常开发中经常会接触到Linux环境操作。小公司的开发人员甚至是兼了全运维的工作,下面整理了一些常用的Linux操作命令。 *
28个企业运维岗经典面试题,你能回答多少?
![](https://oscimg.oschina.net/oscnet/dd3f36b3-da04-45a0-accd-f2a0059b5edb.gif) ![](https://oscimg.oschina.net/oscnet/a08b06e1-2f8d-40fb-b0a2-f7f0181f4d87.jpg) 作者:运维派 来源:http://
13款Linux运维比较实用的工具
![](https://six.club/image/show/attachments-2020-10-4YilKu1f5f98e0fdd7b33.png) 本文介绍几款Linux运维比较实用的工具,希望对Linux管理员有所帮助。 **1、查看进程占用带宽情况-Nethogs** Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占
Cocos Creator CI CD 策略
Cocos Creator本地构建 ----------------- 一般的ci, cd过程是在一个linux机器上执行。但Cocos Creator不对Linux进行官方维护和支持,而非官方的[Cocos Creator Linux镜像](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2F
Docker底层技术了解(3)
* Docker使用Go语言实现。 * Docker利用linux内核的几个特性来实现功能: * 利用linux的命名空间(Namespaces) * 利用linux控制组(Control Groups) * 利用linux的联合文件系统(Union File Systems) 这也就意味着Docker只能在
Linux 运维是做什么的
![](https://oscimg.oschina.net/oscnet/up-25a98115c12319b11895484bc9dd5ecd170.png) Linux在现在社会发展是非常受欢迎的一个行业,对于从事Linux方面工作的人来说,属于互联网背后的英雄,没有他们的付出,就没有如今的互联网时代。而在Linux从事岗位之中,Linux运维工程师
Linux云计算工程师
**一、[Linux运维基础](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2Fyxiaodao%2Fp%2F10275366.html)** **二、[Linux运维高级-核心知识提高](https://www.oschina.net/action/G
Linux日常运维小结
**1\. 如何看当前Linux系统有几颗物理CPU和每颗CPU的核数?** 物理cpu个数:cat /proc/cpuinfo |grep -c 'physical id' CPU一共有多少核:grep -c processor /proc/cpuinfo 将CPU的总核数除以物理CPU的个数,得到每颗CPU的核数。 **2\. 查看系统负载有两个常用的命
Linux菜鸟到老鸟的那些建议
相信很多同学对[Linux](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.linuxprobe.com%2Fchapter-00.html)的认识并不多,平常接触的也不多,对Linux的开发运维等也是一无所知。如今,如果要做一名优秀的程序猿,掌握Linux知识已经是一门必备技能了
Linux运维工程师需要掌握什么才能胜任工作呢
万丈高楼平地起,所有一切的高深的技术都离不开最基本的技术,那么作为运维工程师的你,什么是最基本的技术呢,毫无疑问是Linux,Linux 是你所有一切技术的根源,试想一下如果你连基础的操作命令都不知道,那么面对几十台,上百台,甚至上千台的服务器,你怎么去维护它本身的稳定性和在其应用的高可用性呢?所以重新温习linux,是你的最佳选择,我敢肯定也许你心里有过复
Linux运维常用命令详解
1、ls 文件属性:  -:普通文件  d:目录文件  b:块设备  c:字符设备文件  l:符号连接文件  p:命令管道  s:套接字文件  文件权限: 9位数字,每3位一组  文件硬链接次数  文件所属主(owner)  文件的属组(group)  文件大小(size),单位默认是字节  ls常用选项: -l:显示文件属性,ls -l=ll 
Linux运维常见故障排查和处理的技巧汇总
![](https://oscimg.oschina.net/oscnet/e1b447c0-2806-447a-9930-7351cd397e4f.gif) ![](https://oscimg.oschina.net/oscnet/02a88775-b9ed-430b-b43f-fba5122d45bf.jpg) 作为Linux运维,工作中多多少少会
Linux运维高级篇—CentOS 7下Postfix邮件服务器搭建
第一章 实验环境 1. 硬件环境: Linux服务器一台,IP地址:192.168.80.10; WIN7客户端一台,拥有OUTLOOK2013,测试用,与服务器在同一局域网内。 2. Linux系统环境,如下图: ![Linux运维高级篇—CentOS 7下Postfix邮件服务器搭建]