{eval=Array;=+count(Array);}
真正想學好linux系統,還是要研究linux內核源碼。
為什么這么說呢?
無論是使用linux里面的一些命令,還是做linux應用層的開發,其實都是在使用linux內核的功能,但是其實你對linux底層的機制并不了解。長遠來看,其實對你技術的提升不大。
比如:
1. 你天天使用linux里的docker命令,那你知道docker是如何做到這種隔離性的嗎?
2. 你寫linux應用程序,會看到入口是main()函數。那么,問題來了,為什么是main()呢?為什么不是hello()、不是fuck(),不是love()呢?
3. 你寫linux應用程序,也會用write()函數。這個write函數,我們代碼里并沒有實現它,那是誰實現了它?是c庫嗎?有可能。但是如果我是寫磁盤呢?c庫能做到嗎?
顯然不能!還是需要linux內核的功能。
4. 我們知道,在linux里,不同的應用程序可以共享一個動態鏈接庫,這又是怎么做到的?不是說進程是隔離的嗎?為什么對動態鏈接庫就不做隔離了?
5. linux應用層調用malloc是直接調用到內核嗎?
很顯然不是! c庫里也有內存管理,c庫里的內存管理單元會向內核批發內存(以page為單位),然后向應用程序零售內存(更小的粒度,可以是int大小,char大小等)
6. linux里進程和線程的共同點和差別究竟是什么?不要拿教科書里那一套來說教,從代碼里得到的才是真知。
....
問題太多了,難道你不好奇嗎?
如果你不好奇,那很顯然你不太適合做技術,在技術這條路上可能走不遠,應該早日轉行;如果你很好奇,那就從現在開始,研究linux內核吧。
歡迎關注"技術簡說",帶你由淺入深、一步一步學習linux內核源碼。
Linux畢竟只是個操作系統,只要掌握了正確的學習方法,不會有多難。今天咱們就好好看看,Linux到底怎么學才是正確的學習方法。轉自——馬哥linux運維
一、從命令開始從基礎開始
常常有些朋友一接觸Linux 就是希望構架網站,根本沒有想到要先了解一下Linux 的基礎。這是相當困難的。雖然Linux桌面應用發展很快,但是命令在Linux中依然有很強的生命力。Linux是一個命令行組成的操作系統,精髓在命令行,無論圖形界面發展到什么水平這個原理是不會變的,Linux命令有許多強大的功能:從簡單的磁盤操作、文件存取、到進行復雜的多媒體圖象和流媒體文件的制作。這里筆者把它們中比較重要的和使用頻率最多的命令,按照它們在系統中的作用分成幾個部分介紹給大家,通過這些基礎命令的學習我們可以進一步理解 Linux系統:
●安裝和登錄命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh
●文件處理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln
●系統管理相關命令: df、 top、 free、 quota 、at、 lp、 adduser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last
●網絡操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup
●系統安全相關命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho
二、選擇一本好的Linux書籍
在各個Linux論壇中,我們看到最多的問題往往是某個新手,在安裝或使用linux的過程中遇到一個具體的問題就開始提問,很多都是重復性的問題,甚至有不少人連基本的問題描述都不是很清楚。這說明很多初學linux的人還沒有掌握基本功。怎樣才能快速提高掌握linux的基本功呢? 最有效的方法莫過于學習權威的linux工具書,工具書對于學習者而言是相當重要的。一本錯誤觀念的工具書卻會讓新手整個誤入歧途。目前國內關于 linux的書籍有很多不過精品的不多,筆者強烈建議閱讀《鳥哥的Linux私房菜 基礎篇》,現在出到了第三版。新手最好能夠買一本紙版書來仔細研讀,并認真做好學習筆記。當然,如果習慣看電子書,也可以從這里 下載 PDF電子書。
三 、養成在命令行下工作的習慣
一定要養成在命令行下工作的習慣,要知道X-window只是運行在命令行模式下的一個應用程序。在命令行下學習雖然一開始進度較慢,但是熟悉后,您未來的學習之路將是以指數增加的方式增長的。從網管員來說,命令行實際上就是規則,它總是有效的,同時也是靈活的。即使是通過一條緩慢的調制解調器線路,它也能操縱幾千公里以外地遠程系統。
四、用Unix思維思考Linux
由于Linux是參照Unix的思想來設計的,理解和掌握它就必須以Unix的思維來進行,而不能以Windows思維。不可否認,windows 在市場上的成功很大一部分在于技術思想的獨到之處。可是這個創新是在面對個人用戶的前提下進行的,而面對著企業級的服務應用,它還是有些力不從心。多年來在計算機操作系統領域一直是二者獨大:unix在服務器領域,Windows在個人用戶領域。由此可見,用戶需求決定了所采用的操作系統。不管什么原因,如果要學習Linux,那么首先要將思維從Windows的“這個小河” 中拖出來,放入Unix的海洋。
五、學習shell
對于Shell(中文名稱殼),習慣Windows的讀者肯定是非常陌生的,因為Windows只有一個“Shell”(如果可以說是Shell的話),那就是Windows自己。用一句話容易理解的解釋就是,shell是用戶輸入命令與系統解釋命令之間的中介。最直觀的說法,一種Shell有一套自己的命令。舉一個容易理解的例子,Linux的標準Shel是Bash Shel;Solaris的shell是B shell;Linux的Shell是以命令行的方式表現出來的。讀者可能會不理解,Windows從命令行“進化”到了圖形界面,那么Linux現在還使用命令行豈不是一種倒退?
當初我剛剛接觸Linux時就曾有過這種想法。可是后來發現,如果使用圖形界面,那么分配給應用軟件的資源就少了,在價格昂貴的服務器上,能夠以較低的硬件配置實現同樣的功能是非常重要的。
下面舉例說明,一臺服務器有1GB內存,假設其中512MB用于處理圖形界面,若要安裝一個需要784MB內存的數據庫軟件,惟一的辦法就是擴大內存。但是如果使用命令行,系統可能只需要64MB內存,其它的內存就可以供數據庫軟件使用了。使用命令行,不僅是內存,而且CPU及硬盤等資源的占用都要節省很多。所以,作為服務器使用命令行是優點而不是缺點。既然Shell有這么多優點,就必須要學習它。
初學入門Linux的話,可以先安裝一個桌面版的Linux虛擬機(Ubuntu、CentOS7等都行),以熟悉常用命令為主,待基本掌握環境后,可以研究一下內核源碼及常用服務器的搭建,加深理解和應用,下面我簡單介紹一下Linux的學習過程,感興趣的朋友可以嘗試一下:
這里建議安裝一個桌面版的Linux虛擬機(Ubuntu、CentOS7等發行版本都行),初學入門的話,如果對Linux完全不熟悉,安裝迷你版會非常不適應,許多功能和包都需要自己適配下載,可以先使用桌面版,不至于完全手足無措,后期熟悉環境后,可以使用無界面版,操作起來也會非常容易:
Linux虛擬機安裝好后,就是Linux基礎入門,這里網上教程和資料非常多,像慕課網、菜鳥教程、B站等都有大量優質視頻和文檔,當然,你也可以找一本專業的Linux書籍,一邊學習一邊練習,《鳥哥的私房菜》就非常不錯,覆蓋面比較廣,講解的也非常細致,常見的基礎命令和配置等都要熟悉掌握,這些是使用Linux的基礎:
Linux基礎熟悉后,就是深入Linux的過程,這里可以學習和研究的東西就非常多了,基礎的Linux應用,包括服務器搭建、嵌入式開發等,都有非常光明的前景,當然,你也可以研究一下Linux內核,包括內存管理、進程管理、文件系統、驅動等,對于深入理解操作系統來說,可以說是大有裨益:
目前就分享這么多吧,Linux入門來說,其實非常容易,只要你多用多練,很快就能掌握的,后期深入Linux,可以研究一下常見服務器的搭建以及內核源碼,對于自身發展來說,非常有益,網上也有相關教程和資料,介紹的非常詳細,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。
簡單來說就是:興趣,堅持,方法。
對于任何事情,興趣在很大程度上會影響你做這件事的結果。去做一件自己很感興趣的事情,和做一件自己本來毫無興趣卻由于某種原因而不得不做的事情,其結果往往是天地之別。究其緣由,無非是對于自己感興趣的事情,是以一種享受其中樂趣的心態去做,在不自覺中就會投入更多的心思在上面,也會更加專注,更容易一直堅持下去。而對于毫無興趣的事情,往往是迫于某種壓力才不得不做,心里或多或少會有一定排斥拒絕,甚至會有煎熬的感覺,其結果也可想而知。
對于程序開發,也是一樣的。工作中,同樣是程序員,卻經常會有兩種不同的人。一種對程序開發真的是很感興趣,一天不寫代碼不看代碼就如坐針氈,感覺這一天總缺少點什么,往往這種人才能成為技術人口中的大神。另外一種人,則是相反,看代碼寫代碼完全是因為完成任務而不得不做,處理問題時能靠嘴忽悠過去的,絕不會看一眼代碼,所以這種人往往技術平庸。當然,這只是從技術角度說,如果單純看收入的話,第一種人卻不見得比第二種人收入高。
所以,首先要確定自己是否對程序開發感興趣,如果沒有興趣,那就自然不必繼續下去了,完全可以換一個職業選擇。然后再選擇一個自己最感興趣的方向,如內核開發,驅動開發,應用開發等等,選定方向后由淺入深,循序漸進。
在互聯網迅猛發展的今天,我們處在一個知識迅速爆發和更新更新時代,每一天都有各種各樣的新事物層出不窮,當然也會伴隨著各種老的舊的東西消失。計算機技術更是如此,從編程語言到開發工具,從設計模式到系統框架,每一天每個領域都會有新的技術出現,從也會有舊的技術被淘汰被丟棄被遺忘。
這就意味著,從成為程序員的那一天開始,就不可能停止學習的腳步,不得不面對各種技術的更新換代,因此,必須要持續學習,及時更新自己的知識結構,以適應各種業務需求的變化,否則,可能就不得不面對被淘汰的結果。
就像看電影一樣,同一部電影,有的人覺得精彩,有的人覺得無趣。每個人的習慣、個性、思維、背景、基礎不同,學習的方法也不同,沒有什么放之皆準的方法,適合自己的才是最好的。
對于入門,找到一本自己能看得懂適合自己的書。很多別人推薦的堪稱圣經的經典書籍,不妨嘗試一下,看自己是否能夠很容易的理解和消化。如果實在看不懂,果斷換一本,切忌過于勉強。剛入門時,如果長時間處于一種云里霧里的感覺,往往會對自己信心造成打擊,繼而一點點消耗掉繼續學下去的興趣。很多圣經級的書籍往往適合在有一定基礎之后再細細品讀的,卻并非入門首選。
入門之后就是逐步深入了。一般來說,在實際項目中進行學習是效果最好的。做項目過程中往往能夠鞏固已經學到的技能,同時發現自己的知識盲點,進而消滅盲點。
此外,多讀代碼,多寫代碼。
這臺linux主機可以是你公司的開發環境服務、可以是你本機生產力操作系統、可以是你的虛擬機。
擁有一個linux操作主機,且這臺主機是能夠讓你隨意操作命令的主機,這樣你才能大膽地敲任何命令,不會在學習過程中無所畏懼。
可以學習在linux上安裝mysql、nginx、tomcat 這些常用開發軟件。
安裝過程包含了各種linux的文件系統操作命令,過程中你會遇到各種問題,會學會如何下載文件、如何解壓文件、如何執行編譯,如何執行安裝
、如何使用yum、apt、apk 等命令,以及學會如何查看錯誤日志。
從0到1的購買1~2本linux操作系統相關的書籍,系統性地了解linux,這有利于你后續對至少的融會貫通,舉一反三。
只有融會貫通后才能后靈活的的組合使用各種命令,以及解決更復雜的問題,因為有的問題不是直接能從互聯網上找到直接的答案的,需要加入自己的理解和判斷,通過系統給出的反饋一步一步認真分析才能找到蛛絲馬跡,最終解決問題。
如果你在Linux上是一個小白請看下面的回答~
想學好Linux,先問自己幾個問題。
1. 你對計算機感興趣嗎?
2. 為什么學習Linux(他能給你帶來什么價值,這個價值點是否可以支持你一直堅持下去)
3.你每天可以在工作生活之余或者大學課余抽出多少時間去學習(任何的技能都是需要時間去練習+時間才能掌握的)
如果這三個問題的答案都是肯定的,那么請看下文:
我也是一個從0技術基礎的小白開始學習的
推薦你一個教程:【菜鳥教程】
http://www.runoob.com/linux/linux-tutorial.html
一定要有耐心、有恒心的堅持學完,這樣你對Linux才能有一定的理解
學習的中間需要您自己不斷的實操,自己去敲命令,去安裝,去驗證
linux系列有兩種發行版本
1).Red
Hat系,包括RHEL、fedora、centos等
2).Debian系,包括Debian、Ubuntu、Mint等
想要學習的話如果個人學習,推薦使用Ubuntu。如果是工作的話,則使用centos學習
1.學習Linux,首先就是安裝Linux系統,通過鏡像安裝,這個過程可以先大概的了解一下linux的啟動過程,對一些概念有個大致的印象
2.在安裝好的系統之上,學習一些基本命令的操作,比如ls . 列出當前文件夾下的子文件和子目錄,cd /root 切換到root的目錄下,top命令查看一些進程的cpu,內存等資源的使用情況,ps命令同樣也可以查看進程的內存等資源使用情況,pwd查看當前所在的路徑等等,將這一些命令熟練的掌握
3.在掌握了linux的一些基本命令之后,那么可以進行一些服務的安裝搭建練習,比如在Linux下安裝搭建DNS服務器,搭建nginx服務器等等
4.進階階段的話,可以嘗試進行內核參數的調優,比如tcp關閉連接之后保持高速通道,擴大linux系統的最大句柄打開數之類的內核參數的優化,sysctl -a可以查看目前已經加載的內核參數
5.學會了造句子,那么之后就可以寫作文了。同理學會了linux的命令之后,那么可以學習一下shell的基本語句,awk sed的學習,用shell實現一些特定功能的腳本,比如可以通過cat /proc/cpuinfo加上awk命令來實現對cpu相關信息的統計等
1.先安裝一個Linux
2.根據各個知識點一點一點練習
3.整理知識點
下面是我整個的Linux知識點和入門思維導圖
https://www.toutiao.com/i6856971506786763276/
作為1個過來人來說,有幾點可以分享給你:
1.先清除的了解你的發展方向是什么,Linux運維工程師其實是一個綜合性的技術崗位(網絡、系統、開發、數據庫、安全、存儲等等
2.作為一個剛入行的新人來說,買書自學無疑是很多人的首選,但最大的一個問題就是書買了,就在家中落灰了,能完完整整的把書全部看下來的人寥寥無幾,想起來了,翻看幾頁,想不起來就拋之腦后了,缺乏自制力的人不太適合這種方法,即便看完了書,你沒有參與過真實的項目,報錯都不知道怎么搞定,那也是沒有什么意義。
3.不建議你盲目的選擇培訓機構,線下學習的話大多都是脫產學習的,就是不能工作,全天學習差不多四五個月的樣子,這種情況而言,如果你的經濟能力夠強大也有這個時間,那建議你多對比一些再做決定,如果經濟上比較拮據,建議你先選擇在網上觀看一些基礎的視頻,把基礎部分的根基打穩了,再考慮該如何選擇。
我說說自己的經歷吧。
很小時候家里剛有電腦的時候還是XP時代(剛開始有Vista),我不知道那里看到了一本介紹各種系統安裝的電子書,里面包括了win95,win98,winXP,Red Hat,紅旗等等系統的安裝教程。
當時就很感興趣,就經常拿老爸的2G手機搜這些系統相關的資料,那時候還找到了Tiny Core Linux,號稱全世界最小的Linux。在這之后就對Linux很感興趣,玩過號稱最好看的openSUSE,玩過感覺最簡潔的Fedora,還有最容易上手的Ubuntu,當然還有國產的深度系統、StartOS,臺式機玩Android X86,還廢寢忘食爬了幾個月的遠景論壇,搞黑蘋果。確實興趣是最好的老師,在這個過程中自己慢慢學了很多Linux知識。
后來慢慢往碼農方向發展,慢慢熟悉shell,學習Linux更加深入的應用,學習搭建服務器,學習常用的軟件,工具使用,慢慢覺得Linux真的是個偉大的操作系統。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答