來(lái)源:公眾號【編程珠璣】
作者:守望先生
網(wǎng)站:https://www.yanbinghu.com
我們常常聽(tīng)到很多人說(shuō)要學(xué)學(xué)Linux或者被人告知說(shuō)應該學(xué)學(xué)Linux,那么學(xué)Linux到底要學(xué)什么?
在回答學(xué)什么之前,我們先看看為什么要學(xué)。首先我們需要認識到的是,很多服務(wù)器使用的是Linux系統,而作為服務(wù)器應用程序的開(kāi)發(fā)者或者維護者,如果不了解Linux的基本使用,該如何進(jìn)行開(kāi)發(fā)或者維護呢?
當然,也有可能你聽(tīng)說(shuō)Linux更高大上,或者是說(shuō)Linux對開(kāi)發(fā)者更加友好(Windows用戶(hù)把刀放下),這都是題外話(huà)了。
在我看來(lái),學(xué)習Linux主要有以下兩點(diǎn)原因
使用標準C/C++ 編寫(xiě)運行在Linux上的應用程序
編寫(xiě)部署在Linux上的應用程序,如Python,Java web服務(wù)程序
一探究竟。眾所周知,Linux開(kāi)源,windows并非如此。
而對于Python,它有Python解釋器,Java有Java虛擬機,他們實(shí)際上對Linux的需求是沒(méi)有C/C++來(lái)的高。即便如此,Linux也是值得Python/Java開(kāi)發(fā)者去學(xué)習的。如果你是做C/C++開(kāi)發(fā),那么Linux是必備的,還記得當前被VC6支配的恐懼嗎?
那么一般說(shuō)的學(xué)Linux是要學(xué)什么呢?方向不同,要學(xué)習的內容也不同,可以大致分為這么幾個(gè)方向:
運維,維護Linux服務(wù)器
應用開(kāi)發(fā),開(kāi)發(fā)Linux應用程序
底層開(kāi)發(fā)
我本人是做Linux應用開(kāi)發(fā)的,因此對于運維方向和底層方向不是很了解,這里僅簡(jiǎn)單說(shuō)一下。
運維Linux主要需要學(xué)會(huì )對服務(wù)器的基本部署,監控,配置,管理等等, 你可以認為,這些機器歸你管了,7*24小時(shí)保障它能正常提供服務(wù)(刪庫跑路就別做了),所以7月24日請對運維的朋友好點(diǎn)。也歡迎運維的朋友留言糾正或者補充我的說(shuō)法。
底層開(kāi)發(fā)需要了解uboot,文件系統,內核等底層相關(guān)內容,主要工作可能涉及文件系統裁剪,驅動(dòng)開(kāi)發(fā),內核模塊定制(如內存管理,進(jìn)程調度)等等。底層開(kāi)發(fā)總體來(lái)說(shuō)要求比較高。
應用開(kāi)發(fā)自然是需要學(xué)習如何開(kāi)發(fā)在Linux上運行的應用程序,如何定位Linux應用程序問(wèn)題等等。
Linux的學(xué)習很多會(huì )以命令為主,因而初學(xué)會(huì )覺(jué)得枯燥甚至疑惑,鼠標點(diǎn)點(diǎn)點(diǎn)就能完成的事,為什么要劈里啪啦敲這么多?這里給出兩點(diǎn)理由,也歡迎你補充:
出于資源的考慮,絕大部分Linux服務(wù)器沒(méi)有圖形界面
命令行便于自動(dòng)化,將一系列操作寫(xiě)入腳本,可代替手動(dòng)操作
而它的學(xué)習我把它分為這么幾個(gè)階段:
基本使用
開(kāi)發(fā)調試
系統認識
這三個(gè)階段對知識積累的要求不一樣,但總體來(lái)說(shuō)并沒(méi)有嚴格的先后之分。
類(lèi)于windows,當年你學(xué)習windows的時(shí)候學(xué)了什么?
開(kāi)關(guān)機?
安裝卸載軟件?如安裝視頻播放器,音樂(lè )播放器(為啥要安這玩意?)。
如何打開(kāi)安裝的軟件?如打開(kāi)瀏覽器上網(wǎng),打開(kāi)編輯器寫(xiě)文檔
如何存放自己的資料?移動(dòng),創(chuàng )建,刪除等等
如何使用office 辦公軟件
……
是不是想想好像也沒(méi)有特意地去學(xué)習?
那么對于學(xué)習Linux來(lái)說(shuō)也是類(lèi)似的,就是學(xué)會(huì )這些最普通的使用,
如何開(kāi)關(guān)機
如何上網(wǎng)
如何打開(kāi)命令行
如何使用命令行安裝卸載軟件
如何編輯文本
如何創(chuàng )建,移動(dòng),刪除文件
如何查看文件內容,解壓縮文件
……
這個(gè)階段最難的就是從圖形界面到命令行的轉換。
那么第二階段呢,就需要學(xué)會(huì ):
如何編寫(xiě)Linux應用程序
如何編譯或者構建你的程序
如何運行你的程序
如何定位程序bug
而第三階段,則是一個(gè)需要漫長(cháng)的學(xué)習過(guò)程,但都是為開(kāi)發(fā)服務(wù),包括:
理解并踐行一切皆文件
ELF文件,Linux主要可執行文件格式
Linux各大機制的基本原理,如進(jìn)程調度,內存管理,虛擬內存,文件系統等,既然要寫(xiě)Linux應用程序,怎么能不了解它所在平臺的主要機制呢?
越是疑難問(wèn)題,越需要這些最基本的知識。
來(lái)到了大家最關(guān)心的問(wèn)題了,同樣的,每個(gè)人的情況不太一樣,這里只給出我的個(gè)人建議。
關(guān)于第一階段,你可以先定個(gè)小目標,例如一段時(shí)間內學(xué)會(huì )在Linux下進(jìn)行你的日?;顒?dòng)(玩游戲就算了),例如編寫(xiě)文檔,看視頻等等。同時(shí)建議:
選擇主流的發(fā)行版,如ubuntu,centos等,遇到問(wèn)題時(shí)比較容易解決
在window下安裝虛擬機,這樣Linux環(huán)境就隨你折騰了
在這期間,你可能需要了解
使用apt-get或者yum安裝或卸載軟件
了解運行環(huán)境,學(xué)會(huì )如何執行命令
這里的學(xué)習你可以通過(guò)網(wǎng)上搜索資料(包括文檔和視頻教程)或者購買(mǎi)相關(guān)書(shū)籍進(jìn)行操練。如果你不想安裝虛擬機或者docker,你可以通過(guò)一些在線(xiàn)的Linux來(lái)體驗。
第二階段也是主要的階段,這一階段要學(xué)習的東西非常多,多是命令的學(xué)習,這里同樣可以參考《鳥(niǎo)哥的Linux私房菜-基礎篇》。不過(guò)初期階段建議抱著(zhù)一個(gè)目的去學(xué)習,就是如何在Linux寫(xiě)一個(gè)完整的程序,為了達到這個(gè)目的你需要學(xué)習
cd touch cp mv rm ls,find,切換目錄,創(chuàng )建,復制,移動(dòng),刪除,查看,查找等等
vi/vim 編寫(xiě)代碼,這里有一個(gè)在線(xiàn)練習網(wǎng)站 https://www.openvim.com/
gcc編譯代碼,后期可能需要學(xué)習makefile,cmake等構建工具
版本管理,git也是當前必備的一個(gè)工具了,學(xué)習資料推薦pro git或者官方git教程
gdb調試,可以參考《GDB調試指南》
問(wèn)題定位,除了觀(guān)察最基本的打印之外,還需要知道,如何查看進(jìn)程信息(ps),如何查看網(wǎng)絡(luò )連接信息(ss,netstat),如何強制停止進(jìn)程(kill -9)如何查看進(jìn)程文件打開(kāi)情況(lsof),如何多種姿勢查看文本文件(cat,tail,more,less)等等。
腳本學(xué)習,學(xué)習Linux,就不得不學(xué)習shell腳本了,它在很多時(shí)候能毫無(wú)抱怨地幫你做事,前提是你會(huì )調教?!禠inux命令行與shell腳本編程大全》也是調教教程之一。這里也有一些《必備的shell知識》
這個(gè)過(guò)程涉及到的命令非常多,但是不建議每一個(gè)都去細學(xué),首先知道有這么一個(gè)命令即可,然后需要的時(shí)候能夠快速找到用法,如通過(guò)man命令查看手冊??傊?,記住你的目標就是流暢地進(jìn)行開(kāi)發(fā)調試,而在達成這個(gè)目標地過(guò)程中,你自己自然會(huì )慢慢接觸很多東西。
但是有必要說(shuō)明的是,開(kāi)發(fā)Linux應用程序并不一定要在Linux下編寫(xiě)代碼,你可以選擇利用samba等工具在windows和linux之間共享文件,然后再在windows下熟悉的工具中或者你認為比較強大合適的工具中編寫(xiě)代碼,在Linux下進(jìn)行編譯調試即可。當然你也可以選擇Linux下的IDE,或者將vim調教一下也是可以的。
第三階段要求是比較高的,這個(gè)時(shí)候你應該學(xué)習過(guò)操作系統的相關(guān)課程(如,《現代操作系統》,《操作系統原理》等),然后你可以通過(guò)諸如《Linux內核設計與實(shí)現》,《深入Linux內核架構》,《深入理解Linux內核》等書(shū)籍進(jìn)行相關(guān)概念學(xué)習,也可以通過(guò)閱讀源碼進(jìn)行深入學(xué)習,最終,你需要了解堆和棧,內存管理,進(jìn)程調度,虛擬內存,文件系統等相關(guān)知識。
當然相關(guān)命令學(xué)習也必不可少,例如readelf,nm,ipcs,iostat,objdump,free,chrt,pmap,uptime,top,pidstat等。
以上就是三個(gè)階段Linux相關(guān)的學(xué)習內容和建議,實(shí)際上其他相關(guān)內容的同步學(xué)習也非常重要,包括相關(guān)數據結構與算法,系統編程,計算機網(wǎng)絡(luò )等內容的學(xué)習,否則看到很多命令的結果仍然會(huì )一臉懵逼。
最后,建議實(shí)踐再實(shí)踐。
限于本人知識水平有限,以上屬個(gè)人建議和看法,僅供參考,歡迎留言說(shuō)說(shuō)你為什么要學(xué)Linux,有什么學(xué)習方法?
聯(lián)系客服