我们常常听到很多人说要学学Linux或者被人告知说应该学学Linux,那么学Linux到底要学什么?
在回答学什么之前,我们先看看为什么要学。首先我们需要认识到的是,很多服务器使用的是Linux系统,而作为服务器应用程序的开发者或者维护者,如果不了解Linux的基本使用,该如何进行开发或者维护呢?
当然,也有可能你听说Linux更高大上,或者是说Linux对开发者更加友好(Windows用户把刀放下),这都是题外话了。
在我看来,学习Linux主要有以下两点原因
而对于Python,它有Python解释器,Java有Java虚拟机,他们实际上对Linux的需求是没有C/C++来的高。即便如此,Linux也是值得Python/Java开发者去学习的。
那么一般说的学Linux是要学什么呢?方向不同,要学习的内容也不同,可以大致分为这么几个方向:
我本人是做Linux应用开发的,因此对于运维方向和底层方向不是很了解,这里仅简单说一下。
运维Linux主要需要学会对服务器的基本部署,监控,配置,管理等等, 你可以认为,这些机器归你管了,7*24小时保障它能正常提供服务(删库跑路就别做了),所以7月24日请对运维的朋友好点。也欢迎运维的朋友留言纠正或者补充我的说法。
底层开发需要了解uboot,文件系统,内核等底层相关内容,主要工作可能涉及文件系统裁剪,驱动开发,内核模块定制(如内存管理,进程调度)等等。底层开发总体来说要求比较高。
应用开发自然是需要学习如何开发在Linux上运行的应用程序,如何定位Linux应用程序问题等等。
Linux的学习很多会以命令为主,因而初学会觉得枯燥甚至疑惑,鼠标点点点就能完成的事,为什么要噼里啪啦敲这么多?这里给出两点理由,也欢迎你补充:
而它的学习我把它分为这么几个阶段:
这三个阶段对知识积累的要求不一样,但总体来说并没有严格的先后之分。
类于windows,当年你学习windows的时候学了什么?
是不是想想好像也没有特意地去学习?
那么对于学习Linux来说也是类似的,就是学会这些最普通的使用,
这个阶段最难的就是从图形界面到命令行的转换。
那么第二阶段呢,就需要学会:
而第三阶段,则是一个需要漫长的学习过程,但都是为开发服务,包括:
越是疑难问题,越需要这些最基本的知识。
来到了大家最关心的问题了,同样的,每个人的情况不太一样,这里只给出我的个人建议。
关于第一阶段,你可以先定个小目标,例如一段时间内学会在Linux下进行你的日常活动(玩游戏就算了),例如编写文档,看视频等等。同时建议:
在这期间,你可能需要了解
这里的学习你可以通过网上搜索资料(视频教程或者博客文章)或者购买相关书籍进行操练。如果你不想安装虚拟机或者docker,你可以通过一些在线的Linux来体验。
第二阶段也是主要的阶段,这一阶段要学习的东西非常多,多是命令的学习,这里同样可以参考《鸟哥的Linux私房菜-基础篇》。不过初期阶段建议抱着一个目的去学习,就是如何在Linux写一个完整的程序,为了达到这个目的你需要学习
这个过程涉及到的命令非常多,但是不建议每一个都去细学,首先知道有这么一个命令即可,然后需要的时候能够快速找到用法,记住你的目标就是流畅地进行开发调试,而在达成这个目标地过程中,你自己也会慢慢接触到更多。
但是有必要说明的是,开发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相关的学习内容和建议,实际上C/C++相关的同步学习也非常重要,包括相关数据结构与算法,系统编程,网络编程等内容的学习,否则看到很多命令的结果仍然会一脸懵逼。
最后,建议实践再实践。
如果你不想安装虚拟机,这里提供几个在线就能把玩Linux的网站,他们不需要注册用户,可以直接使用。
Unix Terminal Online
地址:
https://www.tutorialspoint.com/unix_terminal_online.php
这个网站也支持代码的编译运行,而且速度还可以。
JS/UIX - Terminal
地址:
https://www.masswerk.at/jsuix/index.htm
进入后,点击open terminal即可。它提供非常简单的终端环境,而且没有自带gcc等编译套件,不过练习基本命令和shell脚本还是可以的。整体使用起来也比较流畅。
cb.vu
地址:
http://cb.vu
它使用的是 FreeBSD,整体也是非常流畅,不过同样不支持代码编译运行。
copy.sh
地址:
https://copy.sh/v86/?profile=linux2
它可以全屏体验,让你感觉就是在一台真的Linux上玩耍,同时还支持多种发行版,想体验不同系统的可以试试。
jsLinux
地址:
https://bellard.org/jslinux/
它提供多种系统选择,你也可以在上面编译运行代码。
不过整体感觉不是很流畅。
Bash Shell
地址:
https://www.jdoodle.com/test-bash-shell-script-online/
这里可以专门用来练习shell编程
paiza
地址:
https://paiza.io/en/projects/new?language=bash
同上,可以用来学习shell脚本。
ShellCheck
地址:
https://www.shellcheck.net/
就像它的名字一样,它是用来检查你的脚本可能存在的问题的。
写好的脚本就是没有如预期一样运行?不如shellcheck一下?
DispatcherServlet作用 DispatcherServlet是前端控制器设计模式的实现,提供Spri...
因此上网查了许多资料,没有说怎么做的,都是自己改好一个包上传。我研究了一个...
初学C语言01记录我个人的理解 (欢迎各位大佬在评论区指正不足) 1.数据类型 数据...
之前活动抽奖获得的几个树莓派,手痒自己玩了下,觉得这个东西确实很香,比一般...
??我们在上篇文章开始介绍 MySQL经典的面试题 我们接着上篇文章进行介绍剩下的25...
最近两天被HttpStates404这个错误折腾的够呛,在网上查了很多文章,基本上都是说...
在ANSI C的实现中存在2种环境 翻译环境 和 运行环境 。 翻译环境 在翻译环境下程...
这里尊托云数小编参考了几篇文章特为大家整理下,用到的朋友多支持一下了。 进行...
在使用phpstorm作为开发软件时,会遇到编辑当前文件当时左侧列表定位不到源文件...
% MovURL=Request("MovURL") % body style="BACKGROUND-COLOR: white; MARGIN: 0...