学Linux到底学什么
来源:公众号【编程珠玑】
作者:守望先生
网站: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到底学什么相关推荐
- 学Linux到底学什么?老司机来告诉你!
(本文老生长谈,因为最近在B站录了个视频,所以顺便把文稿也发出来) 熟悉我的朋友应该知道,我是一名Linux工程师.那么我来问大家一个问题,提到Linux,你们第一时间想到的是这是一个怎样的岗位呢?我 ...
- 学Linux到底学什么?未来职业到底是怎么样的?
作为一名Linux工程师.那么我来问大家一个问题,提到Linux,你们第一时间想到的是这是一个怎样的岗位呢?我相信会有很大一部分的朋友会想到两个字:运维. 听到大家这样的回答,我真的是很无奈,但也是非 ...
- 学Linux到底需要学什么
学Linux到底学什么? 基本指令 常常有些朋友一接触Linux 就是希望构架网站(前期我也是这样),根本没有想着要先了解一下Linux 的基础.这是相当困难的.虽然Linux桌面应用发展很快,但是命 ...
- linux学到了什么技术,Linux到底学什么?如何学?
Linux是一套免费使用和自由传播的类Unix操作系统,是多用户.多任务.支持多线程和多CPU的操作系统.Linux继承了Unix以网络为核心的设计思想,是一个出色的性能稳定的多用户网络操作系统. 现 ...
- 半年时间学linux,你学Linux入门用了多长时间?
新兵小鬼 于 2016-09-11 00:38:39发表: 新手路过,凑数 幺幺Allen 于 2015-09-11 20:02:29发表: 会简单命令行~~~~~ zhulei1214 于 2009 ...
- 学Linux 学什么 ?
很多在校大学生从身边或网上,会有意无意地感知到Linux的学习是多么重要的一件事,但是学linux到底学什么呢? 因为我完全经历过对linux好奇,想学,最后了解,然后开始学的过程经历. 学习linu ...
- python需要php吗-学python需要学linux吗
不少Python新手经常问到学Python到底需不需要学习Linux? Python不是支持Windows和Linux操作系统吗?能在Windows下开发为什么还要学习Linux? 首选答案是肯定的, ...
- 【Linux】一步一步学Linux——init命令(138)
00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 init命令是Linux下的进程初始化工具,init进程是 ...
- 【Linux】一步一步学Linux——sudo命令(105)
00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 sudo - 以其他用户身份执行一条命令 sudo命令用来 ...
最新文章
- Ptyhon学习之元组
- MongoDB复制集与Raft协议异同点分析
- VC++简单实现工具软件随鼠标移动画线的功能
- 表变量和临时表的使用
- IllegalStateException: No WebApplicationContext found: no Co
- 3月8日云栖精选夜读:《云栖精选阿里巴巴技术实战2016年刊》重磅发布
- oracle时间间隔分钟数,如何掌握Oracle 中的时间间隔型数据
- PHP查看IP时候能ping通
- 视频教程-【思科CCNA理论专题:9】-- ACL理论-思科认证
- 将Python文件打包成so文件
- MTK7620A FLASH W25Q256学习
- 二、Kubernetes (k8s) 内网集群的搭建详细图解
- 虚拟化、文件系统、查找文件
- 15款最好用的腾讯短链接(url.cn接口)批量在线生成接口
- android 仿微信demo————注册功能实现(服务端)
- 职场情商比职场生存法则更重要!!!
- YII2 路由问题-摘自yii2官方文档
- 关于74HC4051的逻辑真值表及延时的重要性/在AD测量中的校准
- 深度学习文本识别之表格识别
- 最全BAT大型互联网公司面试题整理,没有之一
热门文章
- 全球及中国农药市场需求走势与十四五发展商机研究报告2022版
- 微信小程序上线缓存及解决办法
- adaboost.M1与adaboost.M2差别比较
- 模糊控制(二)模糊控制——模糊推理
- 员工评价系统第二天,项目功能模块图
- Problem K. Road Network - ACPC2015(求树的直径 dp)
- {typedir} {style} {tid} {aid} 分别是什么意思?
- android 十字架效果实现(水平和垂直滑动)
- 用R画出染色体修饰图谱--超详细版本
- Mobile(3)-攻防世界-APK逆向