来源:公众号【编程珠玑】

作者:守望先生

网站:https://www.yanbinghu.com/2019/09/25/14472.html

前言

​我们常常听到很多人说要学学Linux或者被人告知说应该学学Linux,那么学Linux到底要学什么?

为什么要学Linux

在回答学什么之前,我们先看看为什么要学。首先我们需要认识到的是,很多服务器使用的是Linux系统,而作为服务器应用程序的开发者或者维护者,如果不了解Linux的基本使用,该如何进行开发或者维护呢?

当然,也有可能你听说Linux更高大上,或者是说Linux对开发者更加友好(Windows用户把刀放下),这都是题外话了。

在我看来,学习Linux主要有以下两点原因

  • 使用标准C/C++ 编写运行在Linux上的应用程序

  • 编写部署在Linux上的应用程序,如Python,Java web服务程序

  • 一探究竟。众所周知,Linux开源,windows并非如此。

而对于Python,它有Python解释器,Java有Java虚拟机,他们实际上对Linux的需求是没有C/C++来的高。即便如此,Linux也是值得Python/Java开发者去学习的。如果你是做C/C++开发,那么Linux是必备的,还记得当前被VC6支配的恐惧吗?

Linux学习方向

那么一般说的学Linux是要学什么呢?方向不同,要学习的内容也不同,可以大致分为这么几个方向:

  • 运维,维护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/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相关的学习内容和建议,实际上其他相关内容的同步学习也非常重要,包括相关数据结构与算法,系统编程,计算机网络等内容的学习,否则看到很多命令的结果仍然会一脸懵逼。

最后,建议实践再实践

总结

限于本人知识水平有限,以上属个人建议和看法,仅供参考,欢迎留言说说你为什么要学Linux,有什么学习方法?

推荐阅读:

linux常用命令--开发调试篇

Linux常用命令--文本查看篇

Linux常用命令--系统状态篇

Linux常用命令-解压缩篇

关注公众号【编程珠玑】,获取更多Linux/C/C++/Python/Go/算法/工具等原创技术文章。后台免费获取经典电子书和视频资源

学Linux到底学什么相关推荐

  1. 学Linux到底学什么?老司机来告诉你!

    (本文老生长谈,因为最近在B站录了个视频,所以顺便把文稿也发出来) 熟悉我的朋友应该知道,我是一名Linux工程师.那么我来问大家一个问题,提到Linux,你们第一时间想到的是这是一个怎样的岗位呢?我 ...

  2. 学Linux到底学什么?未来职业到底是怎么样的?

    作为一名Linux工程师.那么我来问大家一个问题,提到Linux,你们第一时间想到的是这是一个怎样的岗位呢?我相信会有很大一部分的朋友会想到两个字:运维. 听到大家这样的回答,我真的是很无奈,但也是非 ...

  3. 学Linux到底需要学什么

    学Linux到底学什么? 基本指令 常常有些朋友一接触Linux 就是希望构架网站(前期我也是这样),根本没有想着要先了解一下Linux 的基础.这是相当困难的.虽然Linux桌面应用发展很快,但是命 ...

  4. linux学到了什么技术,Linux到底学什么?如何学?

    Linux是一套免费使用和自由传播的类Unix操作系统,是多用户.多任务.支持多线程和多CPU的操作系统.Linux继承了Unix以网络为核心的设计思想,是一个出色的性能稳定的多用户网络操作系统. 现 ...

  5. 半年时间学linux,你学Linux入门用了多长时间?

    新兵小鬼 于 2016-09-11 00:38:39发表: 新手路过,凑数 幺幺Allen 于 2015-09-11 20:02:29发表: 会简单命令行~~~~~ zhulei1214 于 2009 ...

  6. 学Linux 学什么 ?

    很多在校大学生从身边或网上,会有意无意地感知到Linux的学习是多么重要的一件事,但是学linux到底学什么呢? 因为我完全经历过对linux好奇,想学,最后了解,然后开始学的过程经历. 学习linu ...

  7. python需要php吗-学python需要学linux吗

    不少Python新手经常问到学Python到底需不需要学习Linux? Python不是支持Windows和Linux操作系统吗?能在Windows下开发为什么还要学习Linux? 首选答案是肯定的, ...

  8. 【Linux】一步一步学Linux——init命令(138)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 init命令是Linux下的进程初始化工具,init进程是 ...

  9. 【Linux】一步一步学Linux——sudo命令(105)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 sudo - 以其他用户身份执行一条命令 sudo命令用来 ...

最新文章

  1. Ptyhon学习之元组
  2. MongoDB复制集与Raft协议异同点分析
  3. VC++简单实现工具软件随鼠标移动画线的功能
  4. 表变量和临时表的使用
  5. IllegalStateException: No WebApplicationContext found: no Co
  6. 3月8日云栖精选夜读:《云栖精选阿里巴巴技术实战2016年刊》重磅发布
  7. oracle时间间隔分钟数,如何掌握Oracle 中的时间间隔型数据
  8. PHP查看IP时候能ping通
  9. 视频教程-【思科CCNA理论专题:9】-- ACL理论-思科认证
  10. 将Python文件打包成so文件
  11. MTK7620A FLASH W25Q256学习
  12. 二、Kubernetes (k8s) 内网集群的搭建详细图解
  13. 虚拟化、文件系统、查找文件
  14. 15款最好用的腾讯短链接(url.cn接口)批量在线生成接口
  15. android 仿微信demo————注册功能实现(服务端)
  16. 职场情商比职场生存法则更重要!!!
  17. YII2 路由问题-摘自yii2官方文档
  18. 关于74HC4051的逻辑真值表及延时的重要性/在AD测量中的校准
  19. 深度学习文本识别之表格识别
  20. 最全BAT大型互联网公司面试题整理,没有之一

热门文章

  1. 全球及中国农药市场需求走势与十四五发展商机研究报告2022版
  2. 微信小程序上线缓存及解决办法
  3. adaboost.M1与adaboost.M2差别比较
  4. 模糊控制(二)模糊控制——模糊推理
  5. 员工评价系统第二天,项目功能模块图
  6. Problem K. Road Network - ACPC2015(求树的直径 dp)
  7. {typedir} {style} {tid} {aid} 分别是什么意思?
  8. android 十字架效果实现(水平和垂直滑动)
  9. 用R画出染色体修饰图谱--超详细版本
  10. Mobile(3)-攻防世界-APK逆向