首页 - 数据 - linux学习之路(学习linux必读)

linux学习之路(学习linux必读)

2023-10-10 02:11

很多同学接触Linux很少,对Linux平台的开发一无所知。而现在的趋势越来越表明,作为一名优秀的软件开发人员,或者说是计算机IT行业的人,掌握Linux是一种非常重要的资源和谋生手段。

接下来我会结合我几年的个人开发经验、Linux、类UNIX系统以及开源软件文化来谈谈Linux的学习方法以及学习时应该注意的一些事情。

刚才提到,很多同学以前可能甚至不知道Linux是什么,对UNIX更是一无所知。那么让我们从最基本的开始。我们不会过多介绍Linux和UNIX的历史,直接进入入门学习。

Linux 入门非常简单。问题是你是否有耐心,是否喜欢乱搞,是否不反对重装等大修。可以说,不费劲就学不好Linux。鸟哥说,要真正了解Linux的分区机制,并且要相当熟练地使用LVM。你不可能积累超过20次的Linux安装经验,所以不要害怕挣扎。

由于大家都用过Windows,所以我尽量照顾这些“新手”。如果您是 Linux 新手,我的建议是首先在虚拟机中尝试。我推荐 Virtual Box 作为虚拟机。我不提倡使用VM,因为VM是闭源的,而且是收费的,我也不想宣扬盗版。当然,如果你有足够的钱,你可以尝试VM,但我想说的是,即使是VM也不一定好。

付费软件不一定好。

首先,Virtual Box 非常小。 Windows平台下的安装包约为80MB,而VM往往为600MB。虽然功能强大,但是消耗的资源也不少,更何况Virtual Box完全可以满足你的需求。所以,这是你的选择。

如何使用虚拟机是您的事。我不会教你这个,因为它很简单。如果您不知道如何操作,可以使用谷歌或百度。如果你英文不错,可以直接阅读官方文档。现在介绍一下Linux发行版的知识。

如您所见,Linux 发行版并不是 Linux。 Linux仅指操作系统的内核。作为专业人士,不要让我解释。我没有时间。

我推荐的发行版如下:

  • UBUNTU 适合纯粹的新手、追求稳定的官方支持、对系统稳定性要求不高、喜欢最新的应用、相对不爱折腾的开发者。
  • Debian 是一个比 UBUNTU 困难得多的发行版。其突出特点是其稳定且易于使用的包管理系统。其缺点是缺乏企业支持,靠社区发展驱动。
  • Arch是追求时尚的开发者的首选。优点是包更新非常快,而且升级无缝。一旦安装,基本上可以永久运行。没有像UBUNTU那样的版本概念。专业来说叫滚动升级,让你的系统必须是最新的。缺点显然很容易看出并且不稳定。同时,安装配置也比Debian麻烦。
  • Gentoo 比 Arch 更难。考验用户的综合水平。从系统安装到微调,内核编译都是亲自完成。是专家和黑客展示技术技能、配置符合自己要求的系统的首选。
  • Slackware 与 Gentoo 类似。
  • CentOS 是社区维护的 RedHat 的分支版本,完全使用 RedHat 源代码重新编译。与RedHat的兼容性理论上是最好的。如果您专注于Linux服务器,例如网络管理和网站建立,那么CentOS是您的选择。
  • LFS,终极黑客炫耀工具,完全从源代码安装和编译系统。安装之前您得到的只是一个文档。您所要做的就是按照文档中的说明,一步一步、一个命令一个命令、一个包一个包地进行操作。它完全在你的控制之下。你可以得到任何你想要的。 。如果你做了LFS,证明你的Linux技术相当不错。如果你能学习并使用LFS文档,然后将Linux从源代码移植到嵌入式系统,我敢说你在中国公司也能做得很好。好的。

1.Linux基础知识

您必须选择一个适合您的系统,然后将其安装在虚拟机上并开始使用。如果你想快速学习 Linux,我的一个建议是忘记图形界面。不要考虑图形界面是否可以为您的问题提供答案。相反,搜索世界各地并询问如何使用命令行来解决您的问题。

在这个过程中,你最好熟练掌握Linux命令,至少知道常用的命令,同时建立自己的知识库,里面有你积累的各种知识。

2. Linux平台上的C/C++开发,以及Bash脚本编程[JAVA]

下一阶段需要学习Linux平台上的C/C++开发,以及Bash脚本编程。如果你对Java很感兴趣,还有Java。同样,建议您放弃图形界面IDE并开始使用VIM。为什么选择 VIM 而不是 Emacs?我无意掀起编辑器战争,但我认为 VIM 适合初学者和手笨手笨脑的开发者。 。 Emacs的按键太多,太复杂,让我感到害怕。然后是 GCC、Make、Eclipse(Java、C++ 或)。

虽然Eclipse中列出了C++,但我不建议使用IDE来开发C++,因为这不是Linux的文化,而且很容易让你忽略一些应该注意的问题。 IDE让你变得懒惰,像猪一样懒。如果你对程序调试和测试感兴趣,你也必须学好GDB。如果你没有GDB,这也是必修课。这是发展的第一步。请注意,我没有提到任何有关 Linux 系统 API 的内容,所以现阶段不必担心。你所要做的就是积累Linux平台的经验和开发经验。

我推荐的书有:C语言编程。 C语言,有白皮书当然更好。 C++ 推荐 C++ Primer Plus。我不喜欢Java,所以我不会推荐它。这里列出了别人的书籍:Java入门书籍。工具方面,推荐VIM的官方手册、GCC中文文档、GDB中文文档、GNU开源软件开发指南(电子书)、汇编语言编程(让你初步了解库、链接、内联汇编、和编译器优化选项。无需深入)。

如果你过不了这个阶段,就没有必要继续。这是底线,最基本的基础。否则,就离开,不要开发Linux。不专业的 Linux 开发人员创建的程序与 Linux 文化或 UNIX 文化背道而驰。这些程序不会走得太远,不能像 Bash 和 VIM 那样。所以,如果你做不好,那就离开吧。

3.UNIX环境下的高级编程(作者英年早逝,第三版即将出版,敬请期待)

《UNIX环境高级编程》是一部杰作,经典中的经典。

接下来进入Linux系统编程。最好的选择是APUE,UNIX环境下的高级编程。一遍又一遍地阅读。即使读10遍也太少了。如果你在大学能把这本书读透,就可以练习里面的所有内容。但如果你有作品,口语表达能力足够强,面试时就能说服所有考官。

(可能有点夸张,但APUE绝对是一本圣经般的读物,连Windows程序员都从中汲取营养,Google创始人的案头书,Zalberk的床头读物。)

读完本书,你将对Linux系统编程有一个很好的了解。 Linux和Windows平台开发有什么区别?它们的优点和缺点是什么?我的总结如下: Windows平台开发非常辛苦。微软的系统API一直在扩展。如果你想使用最新、最高效的功能,就必须时刻学习最适合当前流行系统的功能。 Linux则不然。 Linux系统中只有大约100个核心API。如果你记忆力好,你就能记住它们。并且长期保持不变。为什么它保持不变?因为它必须兼容UNIX并符合POSIX标准。因此,Linux平台的大部分开发都集中在底层或服务器编程上。

这就是它的优点。当然,图形是Linux的弱点,但从开发者的角度来看,我不在乎,因为我也可以适应命令行。如果有更好的图形界面,我将视之为礼物。另外,Windows是闭源的,你不知道系统是做什么的,你永远都会被微软牵着鼻子走。想想看,如果微软说Win8不支持QQ,那腾讯就要哭死了。 Linux 是完全开源的。如果你不喜欢它,你可以自己改变它,只要你有足够的技巧。

另外,虽然Windows使用的人很多,但它的使用仅限于桌面。 Linux在各方面都有发展,特别是在云计算、服务器软件、嵌入式领域,在企业级应用方面具有广阔的前景,并且具有一流的兼容性。由于它支持POSIX,因此可以无缝运行在UNIX系统上,无论是Apple的Mac还是IBM的AS400系列都完全支持。另外,Linux的开发环境支持绝对是一流的,无论是C/C++、Java、Bash、Python、PHP还是Javascript。 。 。 。 。 。甚至支持 C#。除了Visual Stdio套件之外,微软不太友好,是吗?

如果你读完APUE有很多感想,想要验证自己的一些想法或者经验,我推荐《UNIX编程的艺术》。世界顶级黑客将与您分享他的观点。

4.选择方向:网络、图形、嵌入式、设备驱动

网络方向:服务器软件编写和高性能并发程序编写

现在是时候进行分类了。总体来说我分为四个方向:网络、图形、嵌入式、设备驱动。

如果选择网络再细分的话,其他的我就不熟悉了。我只讲服务器软件编写和高性能并发程序编写。相对来说,这是网络编程中技术含量最高、层次最低的。它需要大量的经验、阅读大量的书籍、做大量的项目。

我的看法是按以下顺序看书:

  1. 了解有关 APUE 的更多信息 – 特别是进程、线程、IPC、套接字
  2. 多核编程——Pthread你一定要吃透,你太棒了
  3. UNIX 网络编程 – 第 1 卷、第 2 卷
  4. TCP/IP网络详解-第一卷 是时候再看一遍以上两本书了
  5. 5. TCP/IP网络详解-第2卷 我觉得读完第2卷就够了,当然第3卷更好,努力读下去吧
  6. 6.Lighttpd源码 - 这个服务器也很有名
  7. 7. Nginx 源代码 – 与 Apache 相比,Nginx 的源代码较少。如果你能粗略地看一下,那就很酷了。看源码主要是学习里面的socket编程和并发控制,光是想想就兴奋不已。如果你有这些技能,你可以尝试向暴雪提交简历,并为他们编写服务器后端。想想看,全世界所有的魔兽世界都是在你的服务器上运行的软件。
  8. Linux 内核 TCP/IP 协议栈 – 深入了解 TCP/IP 实现

如果你还是喜欢驱动设计,可以看看底层协议,比如链路层,写路由器、网卡、网络设备驱动和嵌入式系统软件应该不成问题。

当然,普通的互联网公司,哪怕是百度级别的公司,都应该毫不犹豫地录用你。只是读后面这些书需要时间和经验,所以在35岁之前读吧!跳到一个给你未来的地方!

图形学方向,我觉得图形学方向也很有前途,有以下几个方面。

  1. Opengl的工业和游戏开发在国外比较成熟。
  2. 影视动画特效,比如皮克斯,国外也比较成熟。
  3. GPU计算技术可应用于浏览器网页渲染和GPU计算资源利用。由于开源,有很多文档程序可供参考。如果您能从事 Firefox 开发或 Google 浏览器开发,那就太好了。

嵌入式方向:嵌入式方向没有提到,Linux很重要。

要掌握多种架构,你不仅要了解X86、ARM和微控制器。如果你不懂硬件,我预见你会死在半路上。我也想往嵌入式方向走,但是我觉得用学校里教的嵌入式方法,我连电子学的学生都比不过。建议大家在做之前先了解一下硬件。如果你去嵌入式应用开发,我只能祝你好运,不要碰到诺基亚、惠普这样的公司,不然你就惨了。

驱动程序设计:软件开发周期很长,硬件不同,速度很快。每个月都有如此多的新硬件发布,您的工作就是让它们在 Linux 上运行。由于Linux的兼容性很好,如果驱动程序不是太底层的话,基本的C语言就可以使用。系统架构的影响并不大。由于有系统支持,您可能会进行一些更改以在ARM上使用PC硬件。因此,硬件驱动开发不像嵌入式开发,需要很高的硬件知识。

可以做的方向有很多,比如家电,尤其是索尼、日立、希捷、富士康这样的厂家,非常稀缺。