咱们经常听到不少人说要学学Linux或者被人告知说应该学学Linux,那么学Linux到底要学什么? |
为何要学Linux?html
在回答学什么以前,咱们先看看为何要学。首先咱们须要认识到的是,不少服务器使用的是Linux系统,而做为服务器应用程序的开发者或者维护者,若是不了解Linux的基本使用,该如何进行开发或者维护呢?linux
固然,也有可能你据说Linux更高大上,或者是说Linux对开发者更加友好(Windows用户把刀放下),这都是题外话了。ios
在我看来,学习Linux主要有如下两点缘由git
使用标准C/C++ 编写运行在Linux上的应用程序web
编写部署在Linux上的应用程序,如Python,Java web服务程序算法
一探究竟。众所周知,Linux开源,windows并不是如此。docker
而对于Python,它有Python解释器,Java有Java虚拟机,他们实际上对Linux的需求是没有C/C++来的高。即使如此,Linux也是值得Python/Java开发者去学习的。若是你是作C/C++开发,那么Linux是必备的,还记得当前被VC6支配的恐惧吗?shell
Linux学习方向编程
那么通常说的学Linux是要学什么呢?方向不一样,要学习的内容也不一样,能够大体分为这么几个方向:ubuntu
运维,维护Linux服务器
应用开发,开发Linux应用程序
底层开发
我本人是作Linux应用开发的,所以对于运维方向和底层方向不是很了解,这里仅简单说一下。
运维Linux主要须要学会对服务器的基本部署,监控,配置,管理等等, 你能够认为,这些机器归你管了,7*24小时保障它能正常提供服务(删库跑路就别作了),因此7月24日请对运维的朋友好点。也欢迎运维的朋友留言纠正或者补充个人说法。
底层开发须要了解uboot,文件系统,内核等底层相关内容,主要工做可能涉及文件系统裁剪,驱动开发,内核模块定制(如内存管理,进程调度)等等。底层开发整体来讲要求比较高。
应用开发天然是须要学习如何开发在Linux上运行的应用程序,如何定位Linux应用程序问题等等。
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/
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相关的学习内容和建议,实际上其余相关内容的同步学习也很是重要,包括相关数据结构与算法,系统编程,计算机网络等内容的学习,不然看到不少命令的结果仍然会一脸懵逼。
最后,建议实践再实践。
总结
限于本人知识水平有限,以上属我的建议和见解,仅供参考,欢迎留言说说你为何要学Linux,有什么学习方法?