Linux应用开发_linux 应用开发-程序员宅基地

技术标签: 经验分享  linux  bash  

1、为什么要学Linux?

使用标准C/C++ 编写运行在Linux上的应用程序
编写部署在Linux上的应用程序,如Python,Java web服务程序

2、Linux学习方向

2.1 学习路线

熟悉 Linux 系统,基本命令
安装 Linux 系统,学会基本操作,熟悉文件系统,shell 脚本以及常用命令。

了解程序开发过程
搭建开发环境,了解 Linux 上程序开发过程。
学会使用文本编辑工具 Vim,编译工具 gcc, as, 连接工具 ld, 调试工具 gdb, make 工具,会写 makefile。
用 C 语言实现并编译自己的测试程序。

尝试系统编程
试着在 Linux 上用 C 语言进行系统编程,
其中需要调用 Linux 系统库函数 (API)。
例如,实现一个需要进行网络通信、操作文件的多线程/进程程序。
以此深入了解 Linux 系统运行机制。

2.1 从事方向

运维,维护Linux服务器
应用开发,开发Linux应用程序
底层开发

应用开发自然是需要学习如何开发在Linux上运行的应用程序,如何定位Linux应用程序问题等等。

3、Linux应用开发学什么

Linux的学习很多会以命令为主,因而初学会觉得枯燥甚至疑惑
出于资源的考虑,绝大部分Linux服务器没有图形界面
命令行便于自动化,将一系列操作写入脚本,可代替手动操作

学习阶段:基本使用、开发调试、系统认识

第一阶段:基本使用

如何开关机、如何上网、如何打开命令行
如何使用命令行安装卸载软件、如何编辑文本
如何创建,移动,删除文件
如何查看文件内容,解压缩文件
……
这个阶段最难的就是从图形界面到命令行的转换。

第二阶段:开发调试

如何编写Linux应用程序、如何编译或者构建你的程序、如何运行你的程序、如何定位程序bug

第三阶段:系统认识

理解并践行一切皆文件
ELF文件,Linux主要可执行文件格式
Linux各大机制的基本原理,如进程调度,内存管理,虚拟内存,文件系统等,既然要写Linux应用程序,怎么能不了解它所在平台的主要机制呢?

4、怎么学?

关于第一阶段,你可以先定个小目标,例如一段时间内学会在Linux下进行你的日常活动(玩游戏就算了),例如编写文档,看视频等等。同时建议:
选择主流的发行版,如ubuntu,centos等,遇到问题时比较容易解决
在window下安装虚拟机,这样Linux环境就随你折腾了

使用apt-get或者yum安装或卸载软件
使用tar,unzip,zip,gz等解压缩命令安装包
了解运行环境,学会如何执行命令

**不过初期阶段建议抱着一个目的去学习,就是如何在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知识》

5、书籍推荐

注意事项

开发Linux应用程序并不一定要在Linux下编写代码,你可以选择利用samba等工具在windows和linux之间共享文件,然后再在windows下熟悉的工具中或者你认为比较强大合适的工具中编写代码,在Linux下进行编译调试即可。当然你也可以选择Linux下的IDE,或者将vim调教一下也是可以的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Dream19961996/article/details/123795196

智能推荐

亲测可用Centos7搭建vsftp服务器_centos7.8 vsftp搭建-程序员宅基地

文章浏览阅读679次。Centos7搭建vsftp服务器一、安装vsftpd组件yum -y install vsftpd二、添加一个ftp用户此用户就是用来登录ftp服务器用的。命令如下:useradd ftpuser这样一个用户建完,可以用这个登录,记得用普通登录不要用匿名了。登录后默认的路径为/home/ftpuser三、 给ftp用户添加密码执行以下命令,设置密码。命令如下:..._centos7.8 vsftp搭建

scp出现Permission denied,please try again的解决办法-程序员宅基地

文章浏览阅读3.7k次。当scp的时候我们发现错误,被拒绝,是因为ssh的权限问题,需要修改权限,进入到/etc/ssh文件夹下,用root用户修改文件sshd_config将PermitRootLogin no / without-password 改为 PermitRootLogin yes,然后重启sshd服务。PS:如有疑问,请留言,未经允许不得私自转载,转载请注明出处:http://w..._scp permission denied, please try again 的

jQuery中mousedown\mouseup\click事件关系_jquery mousedown mouseup click-程序员宅基地

文章浏览阅读2.2k次。mousedown()当鼠标按下即出发该事件click()当鼠标按下并松开鼠标触发该事件_jquery mousedown mouseup click

1 Framework inner error (expect END descriptor with depth 1 but get another_framework inner error (expect start descriptor wit-程序员宅基地

文章浏览阅读8.9k次。1 Framework inner error (expect END descriptor with depth 1 but get another小程序在用组件进行深层嵌套复用时突然报错首先说一下引用的组件结构:shopDesc页面和comment页面——》引用 detailFooter组件——》引用addToCart组件——》引用productSpec组件这个是商品详情页面引用了d..._framework inner error (expect start descriptor with depth 3 but get flow_dep

python中整数类型一定不会出现小数点-Python中常用数字类型-程序员宅基地

文章浏览阅读3.4k次。1、python中提供了:整数,浮点数,十六进制,八进制,二进制整数,复数,还提供了精度无穷大的整数2、在python2.6中 0177八进制 0x177十六进制 0b101010二进制而在python3.0中oo177八进制,0x177十六进制,0b1010二进制3、在python2.6中有两种类型的整数:一般整数和长整数,一个整数可以在末尾加上l或者L,将其强制转化为长整数,当长度超过32时,..._整数类型的数值一定不会出现小数点吗

Spring Cloud 学习笔记:1.使用IDEA创建maven父子工程项目_idea创建maveanspring parent-程序员宅基地

文章浏览阅读1.6k次。Spring Cloud 学习笔记:使用IDEA创建maven父子工程项目_idea创建maveanspring parent

随便推点

minor GC、major GC、与full GC都在什么时候触发_full gc什么时候触发-程序员宅基地

文章浏览阅读2.3k次。minor GC、major GC、与full GC都在什么时候触发_full gc什么时候触发

(iOS-基本知识)Category VS Extension 原理详解_extension vs ca-程序员宅基地

文章浏览阅读336次。1、什么是Category?category是Objective-C 2.0之后添加的语言特性,别人口中的分类、类别其实都是指的category。category的主要作用是为已经存在的类添加方法。除此之外,apple还推荐了category的另外两个使用场景。可以把类的实现分开在几个不同的文件里面。这样做有几个显而易见的好处。可以减少单个文件的体积 可以把不同的功能组织到不同的c..._extension vs ca

java中init()和clinit()方法的区别_java类的init方法-程序员宅基地

文章浏览阅读2.8w次,点赞12次,收藏22次。:在jvm第一次加载class文件时调用,包括静态变量初始化语句和静态块的执行:在实例创建出来的时候调用,包括调用new操作符;调用Class或java.lang.reflect.Constructor对象的newInstance()方法;调用任何现有对象的clone()方法;通过java.io.ObjectInputStream类的getObject()方法反序列化。(1)(_java类的init方法

# scala----隐式转换、隐式参数的使用,implicit关键字的使用、隐式转换的时机、获取列表元素平均值_定义avg()方法,用于获取列 表元素的平均值-程序员宅基地

文章浏览阅读763次。隐式转换和隐式参数是Scala中非常有特色的功能,也是Java等其他编程语言没有的功能。我们可以很方便地利用隐式转换来丰富现有类的功能_定义avg()方法,用于获取列 表元素的平均值

MFC中DLL动态库创建时报错error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”_mfc c2664错误-程序员宅基地

文章浏览阅读1.2k次。在使用VS2010编写运行时动态链接dll文件时出现的一个问题,问题解决得益于此文章:http://blog.sina.com.cn/s/blog_6a2236590100xbgl.html通过调用这个函数:LoadLibrary出现的该问题。原因 :工程只支持UNICODE字符解决方法:1、在解决方案资源管理器中的工程上右键属性->配置属性-->常规--->字符集----&gt..._mfc c2664错误

【开源分享】深入研究 kvm,ceph,fuse特性,包含开源项目,代码案例,文章,视频,架构脑图等_linux/torvalds/fs/ceph github-程序员宅基地

文章浏览阅读815次。一、KVM文档官方文档:官方网址:https://www.linux-kvm.org/page/Main_PageAvi Kivity 在Linux 内核中的邮件: http://lkml.iu.edu/hypermail/linux/kernel/0610.2/1369.htmlKVM 博客:http://planet.virt-tools.org/KVM 论坛:https://events.linuxfoundation.org/kvm-forum/其他文档:Linux_2_6_20_linux/torvalds/fs/ceph github

推荐文章

热门文章

相关标签