学Linux到底学什么

更新时间:2019-10-11 15:40:39点击次数:310次
Linux应用开发学什么
Linux的学习很多会以命令为主,因而初学会觉得枯燥甚至疑惑,鼠标点点点就能完成的事,为什么要劈里啪啦敲这么多?这里给出两点理由,也欢迎你补充:

出于资源的考虑,绝大部分Linux服务器没有图形界面

命令行便于自动化,将一系列操作写入脚本,可代替手动操作

而它的学习我把它分为这么几个阶段:

基本使用

开发调试

系统认识

这三个阶段对知识积累的要求不一样,但总体来说并没有严格的先后之分。

类于windows,当年你学习windows的时候学了什么?

开关机?

安装卸载软件?如安装视频播放器,音乐播放器(为啥要安这玩意?)。

如何打开安装的软件?如打开浏览器上网,打开编辑器写文档

如何存放自己的资料?移动,创建,删除等等

如何使用office 办公软件

……

是不是想想好像也没有特意地去学习?

那么对于学习Linux来说也是类似的,就是学会这些最普通的使用,

如何开关机

如何上网

如何打开命令行

如何使用命令行安装卸载软件

如何编辑文本

如何创建,移动,删除文件

如何查看文件内容,解压缩文件

……

这个阶段最难的就是从图形界面到命令行的转换。

那么第二阶段呢,就需要学会:

如何编写Linux应用程序

如何编译或者构建你的程序

如何运行你的程序

如何定位程序bug

而第三阶段,则是一个需要漫长的学习过程,但都是为开发服务,包括:

理解并践行一切皆文件

ELF文件,Linux主要可执行文件格式

Linux各大机制的基本原理,如进程调度,内存管理,虚拟内存,文件系统等,既然要写Linux应用程序,怎么能不了解它所在平台的主要机制呢?

越是疑难问题,越需要这些最基本的知识。

怎么学?
来到了大家最关心的问题了,同样的,每个人的情况不太一样,这里只给出我的个人建议。

关于第一阶段,你可以先定个小目标,例如一段时间内学会在Linux下进行你的日常活动(玩游戏就算了),例如编写文档,看视频等等。同时建议:

选择主流的发行版,如ubuntu,centos等,遇到问题时比较容易解决

在window下安装虚拟机,这样Linux环境就随你折腾了

在这期间,你可能需要了解

使用apt-get或者yum安装或卸载软件

使用tar,unzip,zip,gz等解压缩命令安装包

了解运行环境,学会如何执行命令

这里的学习你可以通过网上搜索资料或者购买相关书籍进行操练。如果你不想安装虚拟机或者docker,你可以通过一些在线的Linux来体验。

第二阶段也是主要的阶段,这一阶段要学习的东西非常多,多是命令的学习,这里同样可以参考《鸟哥的Linux私房菜》。不过初期阶段建议抱着一个目的去学习,就是如何在Linux写一个完整的程序,为了达到这个目的你需要学习

cd touch cp mv rm ls,find,切换目录,创建,复制,移动,删除,查看,查找等等

vi/vim 编写代码,这里有一个在线练习网站 https://www.openvim.com/s

gcc编译代码,后期可能需要学习makefile,cmake等构建工具

版本管理,git也是当前必备的一个工具了,学习资料推荐pro git或者官方git教程

gdb调试,可以参考《GDB调试指南》

问题定位,除了观察最基本的打印之外,还需要知道,如何查看进程信息(ps),如何查看网络连接信息(ss,netstat),如何强制停止进程(kill -9)如何查看进程文件打开情况(lsof),如何多种姿势查看文本文件(cat,tail,more,less)等等。

脚本学习,学习Linux,就不得不学习shell脚本了,它在很多时候能毫无抱怨地帮你做事,前提是你会调教。《Linux命令行与shell脚本编程大全》也是调教教程之一。这里也有一些《必备的shell知识》

这个过程涉及到的命令非常多,但是不建议每一个都去细学,首先知道有这么一个命令即可,然后需要的时候能够快速找到用法,如通过man命令查看手册。总之,记住你的目标就是流畅地进行开发调试,而在达成这个目标地过程中,你自己自然会慢慢接触很多东西。

但是有必要说明的是,开发Linux应用程序并不一定要在Linux下编写代码,你可以选择利用samba等工具在windows和linux之间共享文件,然后再在windows下熟悉的工具中或者你认为比较强大合适的工具中编写代码,在Linux下进行编译调试即可。当然你也可以选择Linux下的IDE,或者将vim调教一下也是可以的。

第三阶段要求是比较高的,这个时候你应该学习过操作系统的相关课程(如,《现代操作系统》,《操作系统原理》等),然后你可以通过诸如《Linux内核设计与实现》,《深入Linux内核架构》,《深入理解Linux内核》等书籍进行相关概念学习,也可以通过阅读源码进行深入学习,最终,你需要了解堆和栈,内存管理,进程调度,虚拟内存,文件系统等相关知识。
当然相关命令学习也必不可少,例如readelf,nm,ipcs,iostat,objdump,free,chrt,pmap,uptime,top,pidstat等。

以上就是三个阶段Linux相关的学习内容和建议,实际上其他相关内容的同步学习也非常重要,包括相关数据结构与算法,系统编程,计算机网络等内容的学习,否则看到很多命令的结果仍然会一脸懵逼。

最后,建议实践再实践。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息