学Linux到底学什么?

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

最后,建议实践再实践。

原文地址:https://www.cnblogs.com/heizui/p/11629598.html

时间: 2024-11-05 18:51:26

学Linux到底学什么?的相关文章

初学Linux到底怎么学才是正确的学习方法?

首先从行业的角度分析Linux运维工程师这个职位,随着互联网行业不断发展壮大,越来越多复杂系统应运而生,为了保证系统稳定运行,必须要有足够多的Linux运维工程师.毕竟维护是软件生命周期中非常重要一个阶段,但是据统计目前国内的运维工程师人才是相对稀缺,故在近几年,运维工程师是一个热门职业. 对于2019年上半年,马哥教育做了一个考察,Linux运维的职位数量和平均薪资水平仍然持续了去年的强劲增幅,比很多开发岗位涨的都快.从研究机构的数据来看,Linux职位数量和工资水平涨幅均在IT行业的前五之列

学linux,这篇就够了

目录 一. Linux介绍 1 Linux基本常识 1.1 Linux诞生的故事 1.2 Linux和Unix的关系 1.3 Linux的读音 1.4 Linux的吉祥物 1.5 Linux的主要发行版 1.6 Linux和Windows的比较 2.为啥要学Linux 2.1 Linux运维工程师 2.2 linux嵌入式开发工程师 2.3 项目维护及部署 3.怎么学Linux 二.VMware和Centos的安装 1.Windows,VMware和Centos三者的关系 2.VMware安装

开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试

前言表面看来,JMeter与本系列课程似乎关系不大,但实际上在后面的很多场景中起着重要作用:如何获知修改了某些代码或者设置之后系统性能是提升了还是下降了呢?商业的压力测试工具LoadRunner确实很高大上,但是据说费用也不便宜且体积也不小,而目前最高版本的开源免费压力测试工具JMeter3.2压缩包体积才不到53M,而且对于开发人员而非专业测试人员来说,JMeter提供的测试功能已经够强大了.要完整地介绍JMeter,即使把JMeter自带的文档翻译成中文就是一本厚厚的书了.但是在本篇只讲述如

开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube6.4

1.前言上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强调代码提交之前必须找团队中经验丰富的人来审核通过后方可提交,但这一条有时候不是所有时候都能得到满足,有没有依赖于机制而不是人来保证代码质量呢,我们知道计算机的缺点也是优点之一就是可以忠实执行指令.答案是有的,那就是SonarQube,其官方网址为:https://www.sonarqube.org/,目前最新版本为6.4.SonarQube是一个开源平台,用于管理源代码的质

十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见)

原文:十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见) 非常开心能够和大家一起分享这些,让我受益匪浅,感激之情也溢于言表,,code monkey的话少,没办法煽情了,,,,,,,冬天的风,吹得伤怀,倒叙往事,褪成空白~学校的人越来越少了,就像那年我们小年之后再回家的场景一样,到处荒芜,然而我们的激情却不褪去,依然狂躁在实验室凌晨两点半的星空里,也许今天又会是这样的一年,不一样的是身边的人变成学弟学妹了,而我们几个大三老家伙依然在,为自己喜欢的事情,为

Linux必学的60个命令【转载】

Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作.文件存  [转载地址]http://blog.chinaunix.net/uid-16728139-id-3154272.html 自己留着,用得着. Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统

跟老男孩学Linux运维:Web集群实战优惠预售中

跟老男孩学Linux运维:Web集群实战即将出版 感谢小伙们这么多年对老男孩的持续关注.支持和理解, 为此,我们特别组织预售活动,以网内最低价回馈小伙伴们, 为大家争取的特殊优惠加签名仅限前500名,优惠价预计7折左右! 还剩不到50个名额,大家抓紧了. 1.老男孩内部预售活动报名说明及缴费地址 http://www.huodongxing.com/event/8325097592500  2.京东商城预售地址: http://item.jd.com/11891124.html

Linux必学的60个命令

Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令. 要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统.不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个.这里把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍.◆ 安装和登录命令:login.shutdown.ha

跟马哥学linux (lesson 6)linux包管理程序rpm & yum

一.rpm 1.什么是RPM RPM 是 Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:在Fedora .Redhat.Mandriva.SuSE.YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用. 2.rpm语法格式 1)查询,验证           rpm {-q|--query} [select-options] [query-options] rpm {-V|--v