如何才能有效的學習linux開發(fā)
如何才能有效的學習linux開發(fā)
如何才能有效的學習linux開發(fā)?想了解更多的信息嗎,和學習啦小編一起看看吧! 以下是學習啦小編分享給大家的有效的學習linux開發(fā)的方法,希望可以幫到你!
有效的學習linux開發(fā)的方法
熟悉 Linux 系統(tǒng),基本命令
安裝 Linux 系統(tǒng),學會基本操作,熟悉文件系統(tǒng),shell 腳本以及常用命令。
了解程序開發(fā)過程
搭建開發(fā)環(huán)境,了解 Linux 上程序開發(fā)過程。
學會使用文本編輯工具 Vim,編譯工具 gcc, as, 連接工具 ld, 調(diào)試工具 gdb, make 工具,會寫 makefile。
用 C 語言實現(xiàn)并編譯自己的測試程序。
嘗試系統(tǒng)編程
試著在 Linux 上用 C 語言進行系統(tǒng)編程,
其中需要調(diào)用 Linux 系統(tǒng)庫函數(shù) (API)。
例如,實現(xiàn)一個需要進行網(wǎng)絡(luò)通信、操作文件的多線程/進程程序。
以此深入了解 Linux 系統(tǒng)運行機制。
學習內(nèi)核
上面學的差不多了,感興趣的同學可以接著學習 Linux 內(nèi)核。
Linux 內(nèi)核模塊如下圖
這一部分內(nèi)容比較深,能把它學透的基本就是大牛了,寫個 OS 就不在話下了。
驅(qū)動開發(fā)
從這里開始,就不是必須的了。
有興趣的朋友可以深入學習。
但是學習驅(qū)動開發(fā)無疑要把前面的都要學好。
嵌入式系統(tǒng)開發(fā)
學好 Linux 是嵌入式開發(fā)的基礎(chǔ)。
嵌入式系統(tǒng)開發(fā)包括很多方向,有硬件、軟件,以及系統(tǒng)級別。
硬件要學單片機,ARM、MIPS,DSP 等各種 MCU,具體就不多說了。
軟件的話,需要了解交叉編譯,以及嵌入式環(huán)境下 C 語言的特殊用法,例如 volatile、 位操作、寄存器操作、大小端、程序跳轉(zhuǎn)等。
系統(tǒng)級,要了解 Linux 內(nèi)核裁剪、移植、編譯、調(diào)試,還有 Bootloader 、設(shè)備驅(qū)動等。
學習Linux系統(tǒng)有用的忠告
1.包管理和編譯安裝混著用,手動解決一個個依賴包,裝個A發(fā)現(xiàn)少了B,裝個B發(fā)現(xiàn)少了C,裝個C發(fā)現(xiàn)少了D,裝到最后,都忘了自己一開始是為了解決什么問題,好煩
2.今天覺得這個發(fā)行版好,明天覺得這個發(fā)行版好,時間都用來裝不同的發(fā)行版和桌面了,后來發(fā)現(xiàn)學一種足矣
3.接觸的知識不系統(tǒng),卻亂折騰,一會就搞得進不了系統(tǒng),然后花大把時間去修復(fù),還樂在其中
4.永遠不要相信某某指導(dǎo)教程上的某某語句。因為先確定自己的SHELL版本是最首要的,其次是要找一份手冊,邊看邊學就是了,這樣,自己敲入SHELL語句的錯誤率會降到最低。不然還沒等學會,積極性就給打擊完了。然后就是在學會基礎(chǔ)以后反過來看看最新版本,比如RHEL7這個新遇到的坑,有些語句沒有資料,雖然man 和 --help 也不是吃素的,但還是在這里強烈推薦《Linux就該這么學》這本書,專為RHEL7編寫的開源在線書籍,書中基本無錯誤、內(nèi)容更是突出重點,如果您是想考RHCE認證那真的再好不過了,聯(lián)系劉遄老師就好,過來人的經(jīng)驗,他有自己的網(wǎng)站,百度一下就知道了。
5.往返于各種發(fā)行版之間,反復(fù)不斷地安裝、格式化系統(tǒng)、安裝、格式化系統(tǒng)---浪費時間!
6.編譯內(nèi)核:如果不是做底層開發(fā)的話,這真沒必要,既不改內(nèi)核代碼,又不看內(nèi)核代碼的話,編譯內(nèi)核沒有任何意義。
有效的學習linux開發(fā)的技巧
1、 登陸到服務(wù)器
在做任何操作之前,首先要登陸到目標服務(wù)器。簡單地,使用SSH命令。將SSH 密鑰存儲在 ~/.ssh/ 中,使用有意義的文件名,例如aws-keypair.pem。使用如下命令登陸EC2主機。2、 拷貝文件到服務(wù)器
使用SCP命令拷貝本地文件到服務(wù)器,例如將script.py 文件拷貝到EC2 服務(wù)器的命令如下:
scp -i ~/.ssh/aws-keypair.pem script.py 3、使腳本在服務(wù)器的后臺運行
在服務(wù)的后臺執(zhí)行腳本,可以忽略其他進行的信號量,忽略標準的輸入輸出,將所有的輸出和錯誤信息重定向到一個日志文件中。對于需要長時間運行的深度學習模型而言, 這是非常必要的。
> nohup python /home/ec2-user/script.py >/home/ec2-user/script.py.log &1 &
該命令中script.py 和 script.py.log 都位于 /home/ec2-user/ 目錄下。關(guān)于 nohup 和重定向 參考其他的詳細介紹(例如wikipedia中的介紹)。
4、在服務(wù)器的指定 GPU 上執(zhí)行腳本
如果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、監(jiān)測腳本的輸出
如果輸出結(jié)果中有項目評分或者一個算法的運行結(jié)果,實時監(jiān)控腳本的輸出是很有意義的。示例如:tail -f script.py.log
遺憾的是,當屏幕上在一段時間沒有輸出的時候,AWS 會關(guān)閉這個終端,所以最好使用:watch "tail script.py.log"
有的時候看不到python的標準輸出,不知道是python的問題還是EC2的問題。
6、監(jiān)測系統(tǒng)和進程的性能
監(jiān)測EC2系統(tǒng)的性能是有意義的,尤其是已經(jīng)使用了或還剩下多少內(nèi)存。例
如:top -M ?;蛘咧付ㄟM程標識PID:top -p PID -M
7、監(jiān)測GPU 性能
如果在GPU上同時執(zhí)行多個腳本,并行執(zhí)行的話,查看每個GPU 的性能和使用率是不錯的主意。例如:watch "nvidia-smi"
8、檢查腳本是否還在服務(wù)器上運行
一般地,會保持終端一直是開著的,watch "ps -ef | grep python"
9、在服務(wù)器上編輯文件
一般不建議在服務(wù)器直接修改,當然你熟知vi除外:vi ~/script.py,vi 的用法就不在這里贅述了。
10、從服務(wù)器上下載文件
與上傳文件相對,這是一個下個png文件的例子:scp -i ~/.ssh/aws-keypair.pem
猜你喜歡: