死磕 Linux !

简介: Linux 系统

大家好,我是小林。

在知乎看到一个问题:为什么计算机专业的学生要学习使用 Linux 系统?

16.png

在这里,也同步分享下我的想法。

很简单,也很直接一个原因:很多互联网大公司都有大量的服务器运行在基于 Linux 的操作系统。因此,我们工作不可避免会接触 Linux 系统。

不过,也要看岗位:

  • 后端开发岗、运维岗工作都会涉及 Linux 系统;
  • 客户端、前端开发涉及就比较少;

之所以服务器选择用 Linux 操作系统,原因有很多:

  1. 自由开源:Linux 操作系统完全免费且可用作开源软件,通过开源方式,您可以轻松查看用于创建 Linux 内核的可用代码,还可以修改代码以修复任何错误等。只要你做够厉害,你完全可以按照自己的方式构建和自定义服务器。这些是在 windows 上无法实现的。
  2. 稳定性:在 windows 上,我们进程看到系统崩溃或者卡死,但是在 Linux 上,这种情况发生的几率极小,Linux 系统以其最终的稳定性而闻名。
  3. 成本低:Linux 是免费的,如果你想在其中一台服务器上安装 Windows,则需要支付激活费用,这意味着你需要多花一笔钱。
  4. 操作方便:对于普通人来说,Windows 操作更为快捷,但是对计算机专业人士来讲,Linux 操作比 Windows 快捷的多,几条命令就可以执行很多的操作。

接下来,跟大家聊下 Linux 怎么学习?

Linux 学习主要有三个方向:

  • Linux 命令:Linux 系统都是命令式操作的,就是比如你要创建一个文件、查看一个文件、删除一个文件等,都是需要输入命令, 所以要熟练用起 Linux 系统,命令的熟悉是必不可少的。
  • Linux 脚本:熟悉了基本 Linux 命令后,就可以去学习 Linux 脚本,其实很简单,就是把各种命令写在一个脚本文件里,执行脚本的时候就会把所有命令执行一遍,用于自动部署一些项目。
  • Linux 编程(系统编程/网络编程):如果走 C/C++ 开发,这一块就需要学习,因为 Linux 系统是由 C 语言开发的,所以系统调用接口,都是 C 式编程开发的。

我们可以在自己的 Windows 电脑装一个虚拟机,然后装一个 centos 或 ubuntu 发行版本的 Linux,网上的安装资源很多的,自己搜一搜跟着搭建就行。有条件可以买一个云服务器,使用起来会更方便一些,因为有公网 ip 地址,任何时候都可以远程登录使用。


Linux 命令学习


我当初学习 Linux 命令的时候,看的是《鸟哥私房菜Linux基础学习篇》,这本书讲的还是很通俗易懂的。


21.png


对于初学者可以先掌握这些基本 Linux 命令:

  • 文件/文件夹的查看、创建、删除、移动、复制、修改权限;
  • 文件内容的编辑、保存;
  • 系统内存、硬盘、cpu、网络流量的查看;
  • 软件的安装、删除;
  • ….


Linux 脚本学习


Linux 脚本常用使用就是 bash 环境,脚本编程其实跟 C 语言编程类似,也有变量定义、函数声明、控制语句,但是他不会很复杂,学起来还是很快的。

这里推荐阮一峰老师写的 Bash 编程教程。

20.png

地址:https://wangdoc.com/bash/grammar.html


Linux 编程(系统编程/网络编程)学习


Linux 系统编程,可以看《Linux 程序设计》这本书,学 Linux 编程一定要在多敲代码,并且在 Linux 跑起来。

18.png

接下来说说我学 Linux 网络编程的心得。

当初在学网络编程的时候,看见网上的人都说 UNP(Unix 网络编程)、APUE(Unix 高级环境编程)这两本书是网络编程圣经的书,那么好学的小林,那肯定毫无犹豫买了。

书到货后,我瞬间就懵逼了,这两本书是我买过最厚的书,这尼玛怎么学?

17.jpg

跟着书本的节奏,学了一段的时间,是懂了些 Linux 网络和系统 API 的用法,摸索来摸索去都是各个 API 的细节,始终不知道高并发网络框架是如何实现的。

后面我又重新找了一波关于网络编程的书,找到了这两本:《TCP/IP 网络编程》和《Linux高性能服务器编程》。

  • 《TCP/IP 网络编程》绝对是新手村级别的书,书里的内容不会有过多的术语,作者都用大白话来表达,配图也很清晰,也有介绍我想知道的网络框架,虽然是比较基础的多进程服务端模型、多线程服务端模型、异步 IO 模型。而且最后一章实现了简单的 HTTP 服务端,让我知道了从代码角度是怎么解析 HTTP 报文的,以及状态机是如何实现和运转的。
  • 《Linux高性能服务器编程》这本书主要是网络框架为主,前几章关于网络基础知识对于掌握了计算机网络知识的同学可以直接跳过的,你看,很多知识是想通的,当我们知道掌握了这块知识后,在学习新一本书的时候,就可以跳过重叠的内容。在这本书我学到了,Reactor、Proactor、信号、定时器、多进程编程、多线程编程、进程池和线程池等。
    这两本书让我大概知道了如果一个服务端要服务多个客户端时,不是就简单写个 socket 编程就完事,而是还要结合 IO 多路复用 + 多线程的思想,也就是 Reactor 的设计理念,知道了这些事情后,后面我在看很多开源框架的网络模型时候,发现大多数基于 Reactor 的思想来实现的。

有了网络编程总体的视角后,在需要深入理解 socket api 中各种属性设置(超时、非阻塞 IO、阻塞 IO 等)和异常处理就要回归 APUE 这本书。

到这里我才知道 UNP 和 APUE 为什么会被称为网络编程圣经级别的书,原因是书里各种细节和异常都写的很全,也很细致,可以应对工作中很多问题。

但是事实证明,它并不是个入门级的书,所以 UNP 和 APUE 的用途比较像字典,在需要的时候去查阅就好。


最后,列一下,我自己看过和在豆瓣高分的 Linux 的书籍,给大家供个参考。


命令学习


  • 《鸟哥的Linux私房菜 : 基础学习篇》,豆瓣评分9.1


系统编程


  • 《Linux程序设计》,豆瓣评分8.3
  • 《UNIX环境编程》,豆瓣评分9.4


网络编程


  • 《TCP/IP网络编程》韩国的,豆瓣评分8.6
  • 《Linux高性能服务器编程》,豆瓣评分7.9
  • 《Linux多线程服务端编程》,豆瓣评分8.8
  • 《UNIX网络编程》,豆瓣评分9.5


内核源码


《Linux内核设计与实现》,豆瓣评分8.6

《深入Linux内核架构》,豆瓣评分9.0


相关文章
|
11月前
|
网络协议 Linux API
解锁你对Linux内核的疑惑,让你成为一个更好的程序员!(下)
解锁你对Linux内核的疑惑,让你成为一个更好的程序员!
|
12月前
|
Linux 数据库 索引
Linux文件查找新姿势:总有一种你没见过
本文介绍了Linux系统中常用的四种文件查找工具:which、find、locate、grep和whereis。对于初学者或是刚接触Linux的新手有着很大帮助,本文为转载后改编,完善了原文的不足之处。
|
缓存 Unix Linux
女朋友:不跟我解释清楚 Linux I/O 今晚你就睡沙发吧!
女朋友:不跟我解释清楚 Linux I/O 今晚你就睡沙发吧!
|
缓存 Linux Serverless
讲讲Linux中加法器的那些趣事
导读读了此文能得到什么缘起环形缓冲区研究起加法器在Linux中的应用是因为最近从研究了环形缓冲区,其中对环形缓冲区优化的时候去看了Linux内核源码中的kfifo.c代码。这里简单提一嘴什么是环形缓冲区,英文名RingBuffer或者CyclicBuffer,是一个先进先出的队列,多用作网络编程缓存区等。 环形缓冲区可以看成是一个手尾相接的环,但其实他在内存中并不是一个环,而是一个连续的内存空间,
241 0
讲讲Linux中加法器的那些趣事
|
运维 监控 前端开发
好记性不如烂笔头——Linux篇
好记性不如烂笔头——Linux篇
好记性不如烂笔头——Linux篇
|
存储 IDE Unix
用了这么久 Linux ,才知道这些概念。。。
我们大家应该知道,Linux 和 UNIX 中的文件系统是一个以 / 为根的树状式文件结构,/ 是 Linux 和 UNIX 中的根目录,同样它也是文件系统的起点。所有的文件和目录都位于 / 路径下,包括我们经常听到的 /usr、/etc、/bin、/home 等。在早期的 UNIX 系统中,各个厂家都定义了自己文件系统的命名构成,比较混乱,而且难以区分。
用了这么久 Linux ,才知道这些概念。。。
|
Unix Java Linux
聊了聊宏内核和微内核,并吹了一波 Linux
内核是操作系统非常重要的组成部分,同时也是操作系统的核心。内核管理着系统资源,内核向上连接着应用程序,向下连接着硬件,它是应用程序和硬件的桥梁。
聊了聊宏内核和微内核,并吹了一波 Linux
|
监控 Unix Linux
8 个出没在 Linux 终端的诡异家伙
这篇文章,我们一起来到 Linux 的诡异的一面…… 你知道吗?在我们日常使用的 Unix(和 Linux )及其各种各样的分支系统中,存在着一些诡异的命令或进程,它们让人毛骨悚然,有些确实是有害,但也有些却是有益的。下面就来简单介绍一下这些家伙吧。
121 0
8 个出没在 Linux 终端的诡异家伙
|
Linux
说出来也许你不信,我被 Linux 终端嘲笑了…….
说出来也许你不信,我被 Linux 终端嘲笑了…….
107 0
说出来也许你不信,我被 Linux 终端嘲笑了…….
|
Linux 应用服务中间件 nginx
乖,答应阿粉,这些 Linux 命令你一定要常用
想要玩转 Linux 系统的话,平时就要多实践,多用,暖暖的阿粉都替你想到了,赶紧来总结一篇,照着多实践,跟着阿粉不会翻车
乖,答应阿粉,这些 Linux 命令你一定要常用