如何才能有效的学习linux开发
如何才能有效的学习linux开发?想了解更多的信息吗,和学习啦小编一起看看吧! 以下是学习啦小编分享给大家的有效的学习linux开发的方法,希望可以帮到你!
有效的学习linux开发的方法
熟悉 Linux 系统,基本命令
安装 Linux 系统,学会基本操作,熟悉文件系统,shell 脚本以及常用命令。
了解程序开发过程
搭建开发环境,了解 Linux 上程序开发过程。
学会使用文本编辑工具 Vim,编译工具 gcc, as, 连接工具 ld, 调试工具 gdb, make 工具,会写 makefile。
用 C 语言实现并编译自己的测试程序。
尝试系统编程
试着在 Linux 上用 C 语言进行系统编程,
其中需要调用 Linux 系统库函数 (API)。
例如,实现一个需要进行网络通信、操作文件的多线程/进程程序。
以此深入了解 Linux 系统运行机制。
学习内核
上面学的差不多了,感兴趣的同学可以接着学习 Linux 内核。
Linux 内核模块如下图
这一部分内容比较深,能把它学透的基本就是大牛了,写个 OS 就不在话下了。
驱动开发
从这里开始,就不是必须的了。
有兴趣的朋友可以深入学习。
但是学习驱动开发无疑要把前面的都要学好。
嵌入式系统开发
学好 Linux 是嵌入式开发的基础。
嵌入式系统开发包括很多方向,有硬件、软件,以及系统级别。
硬件要学单片机,ARM、MIPS,DSP 等各种 MCU,具体就不多说了。
软件的话,需要了解交叉编译,以及嵌入式环境下 C 语言的特殊用法,例如 volatile、 位操作、寄存器操作、大小端、程序跳转等。
系统级,要了解 Linux 内核裁剪、移植、编译、调试,还有 Bootloader 、设备驱动等。
学习Linux系统有用的忠告
1.包管理和编译安装混着用,手动解决一个个依赖包,装个A发现少了B,装个B发现少了C,装个C发现少了D,装到最后,都忘了自己一开始是为了解决什么问题,好烦
2.今天觉得这个发行版好,明天觉得这个发行版好,时间都用来装不同的发行版和桌面了,后来发现学一种足矣
3.接触的知识不系统,却乱折腾,一会就搞得进不了系统,然后花大把时间去修复,还乐在其中
4.永远不要相信某某指导教程上的某某语句。因为先确定自己的SHELL版本是最首要的,其次是要找一份手册,边看边学就是了,这样,自己敲入SHELL语句的错误率会降到最低。不然还没等学会,积极性就给打击完了。然后就是在学会基础以后反过来看看最新版本,比如RHEL7这个新遇到的坑,有些语句没有资料,虽然man 和 --help 也不是吃素的,但还是在这里强烈推荐《Linux就该这么学》这本书,专为RHEL7编写的开源在线书籍,书中基本无错误、内容更是突出重点,如果您是想考RHCE认证那真的再好不过了,联系刘遄老师就好,过来人的经验,他有自己的网站,百度一下就知道了。
5.往返于各种发行版之间,反复不断地安装、格式化系统、安装、格式化系统---浪费时间!
6.编译内核:如果不是做底层开发的话,这真没必要,既不改内核代码,又不看内核代码的话,编译内核没有任何意义。
有效的学习linux开发的技巧
1、 登陆到服务器
在做任何操作之前,首先要登陆到目标服务器。简单地,使用SSH命令。将SSH 密钥存储在 ~/.ssh/ 中,使用有意义的文件名,例如aws-keypair.pem。使用如下命令登陆EC2主机。2、 拷贝文件到服务器
使用SCP命令拷贝本地文件到服务器,例如将script.py 文件拷贝到EC2 服务器的命令如下:
scp -i ~/.ssh/aws-keypair.pem script.py 3、使脚本在服务器的后台运行
在服务的后台执行脚本,可以忽略其他进行的信号量,忽略标准的输入输出,将所有的输出和错误信息重定向到一个日志文件中。对于需要长时间运行的深度学习模型而言, 这是非常必要的。
> nohup python /home/ec2-user/script.py >/home/ec2-user/script.py.log &1 &
该命令中script.py 和 script.py.log 都位于 /home/ec2-user/ 目录下。关于 nohup 和重定向 参考其他的详细介绍(例如wikipedia中的介绍)。
4、在服务器的指定 GPU 上执行脚本
如果EC2 支持的话,推荐在同时运行多个脚本。例如,EC2有4个GPU的话, 可以在每个GPU上单独运行一个脚本,示例代码如下:
CUDA_VISIBLE_DEVICES=0 nohup python /home/ec2-user/script.py >/home/ec2-user/script.py.log &1 &
如果有4个GPU的话,可以指定CUDA_VISIBLE_DEVICES从0到3。这在TF做后台的Keras上是可行的,在Theano 没有测试过。
5、监测脚本的输出
如果输出结果中有项目评分或者一个算法的运行结果,实时监控脚本的输出是很有意义的。示例如:tail -f script.py.log
遗憾的是,当屏幕上在一段时间没有输出的时候,AWS 会关闭这个终端,所以最好使用:watch "tail script.py.log"
有的时候看不到python的标准输出,不知道是python的问题还是EC2的问题。
6、监测系统和进程的性能
监测EC2系统的性能是有意义的,尤其是已经使用了或还剩下多少内存。例
如:top -M 。或者指定进程标识PID:top -p PID -M
7、监测GPU 性能
如果在GPU上同时执行多个脚本,并行执行的话,查看每个GPU 的性能和使用率是不错的主意。例如:watch "nvidia-smi"
8、检查脚本是否还在服务器上运行
一般地,会保持终端一直是开着的,watch "ps -ef | grep python"
9、在服务器上编辑文件
一般不建议在服务器直接修改,当然你熟知vi除外:vi ~/script.py,vi 的用法就不在这里赘述了。
10、从服务器上下载文件
与上传文件相对,这是一个下个png文件的例子:scp -i ~/.ssh/aws-keypair.pem
猜你喜欢: