作者:程序员良许
链接:https://www.zhihu.com/question/23564190/answer/757891495
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如何入门并深入学习Linux

1. Linux学习路径

Linux应用开发自学之路这篇文章介绍了我从零开始自学转行Linux的完整过程,被很多大号转载,并且影响了很多人,大家可以参考。

自学简单编程可行吗?这篇文章更详细介绍了我是如何自学转行的,包括心路历程,转行过程,转行中需要注意的地方,以及更高效转行成功的方法。

Linux 思维导图整理(建议收藏)这是一个技术大佬整理的Linux思维导图,包括:Linux学习路径,Linux基础入门,Linux内核学习路线,Linux命令参考,Linux命令速查等等。这份导图虽然不是100%全面,但如果能够将里面全部内容掌握下来,你也是个高手了。

2. Linux环境搭建

2.1 虚拟机安装与配置

既然要学习Linux那肯定需要一个Linux环境。那么环境搭建有两个选择:1. 安装虚拟机;2. 直接在实体机上安装。对于这两个选择,我更倾向于第1个,因为前期学习一些命令及基础知识,直接在虚拟机上进行就可以了。

手把手教你安装Linux虚拟机

手把手教你配置Linux虚拟机

虚拟机常用的有两种:Vmware,VirtualBox。Vmware功能更强大,但是是收费的。而VirtualBox虽然功能不及Vmware,但对于新手完全够用了。这两篇文章所使用的是Wmare,手把手教你安装并配置虚拟机,图文并茂,一路跟下来就可以安装并配置好虚拟机,完成最基本的搭建。

<img src="https://pic2.zhimg.com/50/v2-3954a57d6da0010613e71455504dff5a_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="761" data-rawheight="559" data-default-watermark-src="https://pic2.zhimg.com/50/v2-48d19a94113217d2105112682c9979c8_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="761" data-original="https://pic2.zhimg.com/v2-3954a57d6da0010613e71455504dff5a_r.jpg?source=1940ef5c"/>

2.2 主机与虚拟机文件共享

虚拟机安装好之后,还有一项很重要的工作要做,那就是实现虚拟机与主机的互通,也就是互相共享文件。实现文件共享有很多方式,一般而言有以下几种:

特别地,对于Vmware有一套自己的专属文件共享方式,VirtualBox应该也有,但我没去研究过。对于Windows与Linux之间的文件共享,我们一般会用到一款很强大的共享工具——WinSCP,当然还有很多类似工具,比如Xftp,FileZilla。这些工具其实都是基于FTP协议,使用起来也大同小异,都非常方便。

<img src="https://pic4.zhimg.com/50/v2-ccd703bc3c97c546a80eb0d10a33e4d6_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="622" data-rawheight="463" data-default-watermark-src="https://pic1.zhimg.com/50/v2-f5490695907009786857dcba6d09f81a_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="622" data-original="https://pic1.zhimg.com/v2-ccd703bc3c97c546a80eb0d10a33e4d6_r.jpg?source=1940ef5c"/>

2.3 终端工具

作为一名Linux工程师,不管是运维还是开发,我们很多时间会是在命令行下工作。我一般是把虚拟机打开着,然后使用终端工具远程到虚拟机进行操作。这里推荐一款很强大的终端工具——MobaXterm,它的功能十分强大,界面也非常友好,我用上一次就爱不释手。

当然还有很多好用的终端工具,比如XShell、secureCRT、Putty、telnet等,选择一个自己最喜欢的工具即可。

<img src="https://pic2.zhimg.com/50/v2-d595795f56eb88d06d91323d8ca0f3f3_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="690" data-rawheight="534" data-default-watermark-src="https://pic2.zhimg.com/50/v2-dada1c18917602f0c04da8cd1b72e045_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="690" data-original="https://pic1.zhimg.com/v2-d595795f56eb88d06d91323d8ca0f3f3_r.jpg?source=1940ef5c"/>

2.4 编程工具

如果你是一名Linux开发人员,那你的工作肯定少不了编程。我一般的作法是,在Window上使用代码编辑工具编好代码,然后在Linux下编译。我经常使用两个工具:Notepad++Sourceinsight

使用notepad++远程编辑虚拟机文档

代码阅读神器——Sourceinsight

当然我们也可以直接在Linux下写代码,在Linux下编译。Linux下写代码也有很多软件,常用的比如最性感的编辑器——Sublime Text。

<img src="https://pic4.zhimg.com/50/v2-434653935e3df99619c70ff49271f52e_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="759" data-rawheight="597" data-default-watermark-src="https://pic1.zhimg.com/50/v2-a64440ae2248eaa1fab271cf71f665fc_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="759" data-original="https://pic4.zhimg.com/v2-434653935e3df99619c70ff49271f52e_r.jpg?source=1940ef5c"/>

3. Linux基础知识

Linux环境搭建完毕之后,我们就可以正式进入到Linux的学习中来。

3.1 Linux系统架构

学习Linux,我们肯定要知道Linux的系统架构是怎样的。一般而言,Linux是由以下几部分构成:

  • 内核
  • bootloader
  • 文件系统
  • Shell
  • 应用程序

内核是Linux系统的核心,它往下直接与硬件打交道,向上连接应用程序。它是由Linux社区来共同维护,其中Linus是核心人物。内核主要是由C语言及少量汇编语言编写而成,是最著名的一个开源项目之一。内核的源码在这里,但对于初学者,就别指望能把它看懂。

初学者只要了解一些内核的基本架构即可,后期可以再进一步深入学习。网络上有一张非常经典的内核架构图,可以借助来理解内核。

<img src="https://pic1.zhimg.com/50/v2-b357050fa6421fef364884752c581fa8_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="720" data-rawheight="726" data-default-watermark-src="https://pic4.zhimg.com/50/v2-1509c7961e8527e9e67b979f112e0bd7_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="720" data-original="https://pic3.zhimg.com/v2-b357050fa6421fef364884752c581fa8_r.jpg?source=1940ef5c"/>

Bootloader就是一个单片机程序,用来引导系统启动。这个程序比较简单,有些高手甚至自己手写了bootloader程序。

Linux文件系统有ext3、ext4等,而windows 有 fat32 、ntfs等。做底层开发的工程师需要深入了解,在此不赘述。

3.2 Shell

Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器)。它的基本作用如下图示:

<img src="https://pic2.zhimg.com/50/v2-cde440d195ada12bdfa46b55d0945e90_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="761" data-rawheight="367" data-default-watermark-src="https://pic4.zhimg.com/50/v2-d2d4bde203ee34624e2e11928fa3ef5f_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="761" data-original="https://pic4.zhimg.com/v2-cde440d195ada12bdfa46b55d0945e90_r.jpg?source=1940ef5c"/>

对于Shell的使用,有非常多坑,初学者一定要规避。在此,我也找了两篇Shell面试题,以帮助大家学习进步:

必会的 24 道 Shell 脚本面试题

10 个实战与面试【常用 Shell 脚本】编写

3.3 Vim

Vim是Linux里非常重要的一个编辑器,但是,它比较难,对于初学者非常不友好,号称上古神器。Vim有很多命令,所以我们首先要学习Vim的基本命令

如果你觉得Vim不好学,那么我介绍一款提高Vim水平的游戏。这款游戏灵感来自PacMan,让你使用Vim的命令去控制主角躲避怪物。把这款游戏玩熟练了,你的Vim水平也上了很大一个台阶。

<img src="https://pic2.zhimg.com/50/v2-852c4d9e83419c7b21afa59271cb04b0_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="520" data-rawheight="440" data-default-watermark-src="https://pic1.zhimg.com/50/v2-61984078ab433b4aa89167c7db0fcf45_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="520" data-original="https://pic1.zhimg.com/v2-852c4d9e83419c7b21afa59271cb04b0_r.jpg?source=1940ef5c"/>

当然如果是官方标配版的Vim,那其实还是非常不好用的。好在Vim社区有很多大神,他们开发了很多实用的插件,让Vim用起来不再那么难用,比如以下三款非常实用的插件:

Vim的三款实用插件

3.4 其它

除了以上3点,Linux系统还有很多基础知识,这些知识很多很细,没办法一篇文章讲完,需要在实践中慢慢学习。

比如Linux系统的目录结构,它是一个树状结构,跟Windows系统有本质的区别。

<img src="https://pic1.zhimg.com/50/v2-7128ae5e02b177655bf1938fdac631b2_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="675" data-rawheight="392" data-default-watermark-src="https://pic1.zhimg.com/50/v2-241300b51a00c9277259cf889fdb5700_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="675" data-original="https://pic1.zhimg.com/v2-7128ae5e02b177655bf1938fdac631b2_r.jpg?source=1940ef5c"/>

还有,Linux有很多快捷键,掌握了这些快捷键会为我们提高不少效率。

虚拟终端快捷键

4. Linux命令

众所周知,Linux有非常多命令,但是,刚开始学Linux千万别贪多,别想着一口吃成大胖子。对于普通人而言,先学会一些最基本的命令,再去拓展其它更高阶的命令。

Linux命令基本格式及目录处理命令

超好用的Unix/Linux 命令技巧 大神为你详细解读

给Linux小白看的命令行极简教程

Linux的10个最危险的命令

常用的命令可能就二三十个,当你把这二三十个命令都用得非常熟之后,你才算刚入门。当然,你别小看这些基础命令,很多基础命令有着自己的高级用法,当你把高级用法都玩透了,你就开始慢慢脱离小白了。

5分钟 more 命令从入门到精通

Linux下 ls 命令的高级用法8例

Linux 下你所不知道的 7 个 SSH 命令用法

<img src="https://pic2.zhimg.com/50/v2-b5e7c87f135421390159d7bcc27999df_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="920" data-rawheight="1301" data-default-watermark-src="https://pic1.zhimg.com/50/v2-e614d8df80eb659d218a2da8bec0f568_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="920" data-original="https://pic2.zhimg.com/v2-b5e7c87f135421390159d7bcc27999df_r.jpg?source=1940ef5c"/>

5. Linux神器

在 Linux 下工作,有一些工具可能大大提高你的工作效率。有些工具大家可能耳熟能详,但还有更多神器可能连听都没听说过。

比如我们程序员经常需要绘制一些流程图,我们可以使用一些诸如EA之类的绘图工具,但这类工具很多都很庞大,而且比较难学。在Linux下其实我们可以使用dot工具简单高效绘图!

程序员轻松绘图神器

<img src="https://pic4.zhimg.com/50/v2-00c7ebe99d96cc48c0d6a04e6a066533_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="299" data-rawheight="577" data-default-watermark-src="https://pic2.zhimg.com/50/v2-ec8dc6a843aa7a241d9a5b5ee598d41b_hd.jpg?source=1940ef5c" class="content_image" width="299"/>

再如,我们如果和同事协作开发,想要把自己的操作过程录制下来,发给同事然后同事继续你的工作。或者,别人使用你的电脑,你想把他的操作记录下来,以免后期争议。这时,Script命令就派上用场了。

Linux终端里的记录器

当然还有很多非常实用的神器,限于篇幅就不一一列举了。

如何高效回退到特定层级目录?

Linux任务的前后台管理

Linux下如何高效切换目录?

6. Linux趣应用

工作都是乏味的,我们要在工作中找到一些乐趣。作为一个免费的操作系统,大量的爱好者为 Linux 写了很多很有趣的应用,不仅可以帮助我们提高工作效率,而且还可以给我们枯燥的生活带来乐趣。

Linux 终端给人的感觉就是黑漆漆一片,里面只能显示一些字符,而从来没见过显示图片的,但是,实际上,Linux 终端除了显示字符外,当然也可以显示图片(然后就可以用来看女神照片)。那是怎么实现的呢?这篇文章有答案:

什么?Linux 终端也可以用来看女神照片?

<img src="https://pic4.zhimg.com/50/v2-811a558a6cc6c99b9ea2f28ca669bffa_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="555" data-rawheight="316" data-default-watermark-src="https://pic4.zhimg.com/50/v2-e919dfd9f9a0d7d749e3cd23bfc95beb_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="555" data-original="https://pic1.zhimg.com/v2-811a558a6cc6c99b9ea2f28ca669bffa_r.jpg?source=1940ef5c"/>

人这一辈子,真的是非常不容易:读书时,被老师、同学嘲笑,工作时,被老板、同事嘲笑,就连出去撸个串儿,还可能被朋友嘲笑……这些也就算了,毕竟大家还都是同类,都是活生生的人。但是,你如果被 Linux 终端给嘲笑了,你的内心会是什么感受?

说出来也许你不信,我被 Linux 终端嘲笑了…….

[alvin@VM_0_16_centos ~]$ sldkf

  Why are you doing this to me?!

-bash: sldkf: command not found
[alvin@VM_0_16_centos ~]$ iehf You are not as bad as people say, you are much, much worse. -bash: iehf: command not found
[alvin@VM_0_16_centos ~]$ sdfas How many times do I have to flush before you go away? -bash: sdfas: command not found

Git 是用来做啥的?想必码农朋友都知道,Git 是版本控制软件,是软件开发过程中团队协作不可或缺的软件。但是,作为版本控制软件的 Git ,能跟聊天工具扯上关系吗?这二者似乎毫无关系,但脑洞大开的外国朋友活生生将 Git 改造成了一个聊天工具!

Git 居然可以用来跟女神聊天?

<img src="https://pic1.zhimg.com/50/v2-055cbf74a28697288a94c8ac5adf59aa_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="646" data-rawheight="423" data-default-watermark-src="https://pic1.zhimg.com/50/v2-146953ac62926cb15a61f270bf2dec06_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="646" data-original="https://pic3.zhimg.com/v2-055cbf74a28697288a94c8ac5adf59aa_r.jpg?source=1940ef5c"/>

等等类似于此类的应用,这些应用虽然不是学习过程中的必需品,但却可以给我们的学习生活带来很多乐趣!

7. Git

作为程序员,肯定不是离开Git。Git是版本控制软件,是软件开发过程中团队协作不可或缺的软件。但可悲的是,在学校里很少会有Git相关课程,所以很多大学生都不知道有Git这个东西。

对于Git的入门,建议看 Pro Git 这本书,它是一本免费开源书,在它的官网上就可以直接在线阅读。

https://git-scm.com/book/zh/v2

<img src="https://pic1.zhimg.com/50/v2-a650341e29ac2d17b2ceb4fcda59a6de_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="500" data-rawheight="660" data-default-watermark-src="https://pic1.zhimg.com/50/v2-510f25dd6acabee2d78364351e117c54_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="500" data-original="https://pic2.zhimg.com/v2-a650341e29ac2d17b2ceb4fcda59a6de_r.jpg?source=1940ef5c"/>

Git虽然命令也很多,但基本的常用的也没几个。在使用Git的过程中,我们也要注意一些 Git 提交规范

如何高效的使用 Git

学会这两件事,让你成为 Git 老司机

你可能不太会用的 10 个 Git 命令

使用Git,就不得不提到GitHub。GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。由于开发人员多为男性,故又名GayHub……

很多小伙伴知道使用Git,却不知道如何在GitHub上与其他小伙伴一起协作,为此我特地写了一篇文章来介绍GitHub的协作方法

如何在GitHub上大显身手?

除此之外,还有你必须收藏的 GitHub 技巧

<img src="https://pic1.zhimg.com/50/v2-006450ed3774781ba97557dbb201ef92_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="427" data-rawheight="369" data-default-watermark-src="https://pic4.zhimg.com/50/v2-c0c9a161cf6b57eca5731112a2557198_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="427" data-original="https://pic2.zhimg.com/v2-006450ed3774781ba97557dbb201ef92_r.jpg?source=1940ef5c"/>

后记

Linux博大精深,绝非一篇文章就能讲透的。本文根据自己的一些经验,介绍了一些方向性的东西。大家如果按着这些方向去学习,也一定会成为大神!

如何入门并深入学习Linux-九五小庞的更多相关文章

  1. LINUX系统新增及自动挂载硬盘-九五小庞

    Linux系统下,添加新硬盘后,自动挂载的方法   1,列出所有硬盘,找到需要挂载的硬盘,例如/dev/vdb.输入: fdisk -l   2,查看硬盘是不是已经被挂载.一个硬盘不能重复挂载,已经挂 ...

  2. VMware安装Centos7 -九五小庞

    VMware安装Centos7超详细过程(图文) https://blog.csdn.net/babyxue/article/details/80970526 安装centos7的时候 启动会提示Pl ...

  3. WinMTR 网络测试工具-九五小庞

    WinMTR(建议优先使用) 百度下载工具 链接:https://pan.baidu.com/s/19ArKSTA2amsa4p6vHegDIQ 提取码:cy4y WinMTR是mtr工具在Windo ...

  4. centos7制作U盘启动盘-九五小庞

    一.准备相关软件 1.8G以上U盘 2.UltraISO虚拟光驱(试用版即可)最新版 下载地址:https://cn.ultraiso.net/xiazai.html  点击下载试用 3.CentOS ...

  5. JAVA基础-11-Java Number 类--九五小庞

    问题:一直有疑惑,为什么java中学习了基本数据类型,而不使用,使用的是封装的对象. 解答: 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等. ...

  6. Oracle 11G R2安装说明 -九五小庞

    教程版本Oracle 11.2.0.1.0

  7. 什么是Nginx -九五小庞

  8. Oracle错误 ora-12514 解决方法-九五小庞

    成功连到数据库上之后,查看listener状态:lsnrctl status status READY 状态,需要由非归档转为归档模式,故操作如下: 1.关闭数据库shutdown immediate ...

  9. oracle创建/删除 用户,表空间-九五小庞

    以下红色标示的都是可以修改的字段 可以按照如下顺序来创建表空间,创建用户,以及删除表空间,删除用户 查看oracle数据库已有的表空间路径 select name from v$datafile; 1 ...

  10. ORA-01033错误解决方案-九五小庞

    Microsoft Windows [版本 6.3.9600](c) 2013 Microsoft Corporation.保留所有权利. C:\Users\Administrator>sqlp ...

随机推荐

  1. termux安装vim

    pkg install vim 解决乱码问题 在家⽬录( ~ )下,新建 .vimrc ⽂件 vim .vimrc 添加内容如下: set fileencodings=utf-8,gb2312,gb1 ...

  2. 【经验】C++|利用 Windows API,通过文件句柄获取文件路径的两种方式

    方法一 主要参考博客:根据文件句柄获得文件名(这篇超级清晰,就是有一点点小问题) 通过文件句柄获得文件路径(这篇不是很好用,但是思路大体是一致的) 主要思路: 根据HANDLE 创建映射文件,调用Ge ...

  3. Axure RP仿抖音短视频APP交互原型图模板

    Axure RP仿抖音短视频APP高保真交互原型模板,原型图设计灵感来自于抖音段视频APP,在预览里你可以看到抖音的影子.本素材包含登录.首页推荐.同城.直播间.消息.朋友.发布.我的.搜索等主要模块 ...

  4. java代码发起POST请求,并封装条件

    一.场景 不同的系统采用调用,这里我们是定时任务调用其他系统的接口获取数据并返回处理 二.代码 技术点: 发起Post请求 封装接口所需条件<key,vlaue> 将返回的{"c ...

  5. 自己搭建一个https的dns,让不同的浏览器使用不同的DNS,使用相同的域名访问到不同的主机上

    我有一个web项目,使用域名访问,需要同时运行线上环境和测试环境,为了防止一些css.js缓存影响,在不同的浏览器里分别访问线上环境和测试环境,比如Chrome浏览器访问测试环境,而Safari浏览器 ...

  6. golang 接口按需获取资源

    场景 爬虫业务场景,我们需要调用三方接口获取代理ip地址,每个ip地址可以使用的时间有限和价格的,本着不浪费资源,我们在这里做一层封装. 当有其他业务调用我们接口的时候,会拉起定时任务,这个定时任务的 ...

  7. ✨生物大语言模型Evo2——解码基因密码的AI革命🚀

    2025:生物AI的"DeepSeek时刻" 当整个中文互联网为国产大语言模型DeepSeek欢呼时,生命科学界正悄然掀起一场静默革命--由Arc Institute领衔,斯坦福. ...

  8. 第二次blog作业

    1.前言 这是第二次接触 Java 编程语言大题.相比第一次的电梯调度问题,这次面对航空货运管理系统时我不再迷茫.反复读题后,我很快确定了代码编辑方向,并一步步完成代码编写.航空货运管理系统难度不大但 ...

  9. 利用Word制作Kindle用的6寸PDF电纸书

      在word中以自己喜好的字体.字形和行间距等排版,完成后设置布局: 页面(纸张)大小自定义为宽X高=9cm X 12cm 页边距设为4个0.5cm 不要插入页码,占空间 另存为PDF 导入kind ...

  10. 启智树提高组day1T1 3436 : A:Doughnut

    启智树提高组day1T1 3436 : A:Doughnut 原题传送门 题目描述 Aloisia有很多很多甜甜圈.有一天,她在地上画了n+1个格子,想从第1个格子跳到第n+1个格子.规则是,Aloi ...