學習linux 的方法(個人總結)


     我想應該寫一篇這樣的文章, 網友包括現在的學生都在問這樣的一個問題。 可能你是剛剛接觸linux 操作系統, 方法應當是有的。
     04年我是第一次接觸linux 操作系統, 使用的版本是 redhat 7.0 , 一直在使用redhat 系列的操作系統, 包括 fedora  centos 以及suse linux 。 這時候就需要分類, 我想分類是大家很清楚的一種方式,很小的時候, 你就知道分類, 比如這個是白菜, 那個是黃瓜, 分類是對我們學習很重要的一個方面, 這有利於比較出其中的不同。  就是相同系列的版本的linux 也會有不同, 例如fedora  與redhat , 一種支持更新一種不支持更新, redhat 還是比較專業。 
     我第一次裝redhat 是在我的486 thinkpad的 390e筆記本上, 屬於上一個世紀的產品, 最初的驅動不全, 中文支持不好, 還是用的2.4 的內核, 但是已經順利的運行起來圖形界面, 這個圖形界面很龐大, 大部分的工作是切換到文本界面去完成, 所以現在使用shell 很順手。 首先你得解決現有的問題, 例如當第一次安裝redhat 的時候, 花了我12 個小時, 由於光驅太差勁, 而且是 7 張光盤。  不知道該安裝什麼不該安裝什麼, 索性全部安裝了。  運行起來就出問題, 一個是慢, 這個還能理解, 再有一個是沒有辦法上網, 雖然網卡已經可以驅動起來, 但是沒有adsl 的上網軟件。 也就是撥號軟件, 爲了能夠讓紅帽子上網, 諮詢了聯通公司的技術人員, linux ? redhat? 這是什麼東西沒有聽說過, 好傢伙, 04年linux 才進入中國三年, 並沒有多少人知道。  所以只能靠查找資料,  這些資料往往是英文的, 每天查找一點, 每天積累一點, 那些命令也就都會了, 後來終於找到了撥號的軟件, 安裝上去, 可以上網了。 
     首先你能讓你的linux 機器運行起來, 能夠工作這是最重要的, 現在的linux操作系統沒有那麼複雜, 安裝起來沒有那麼多步驟, 例如分區, 以前的linux操作系統分區是十分複雜的事情, 由於現在支持傻瓜的安裝, 所以估計大部分現在學習linux 的人都不知道有一個分區叫做swap 分區, 這個分區可以調整系統的性能, 主流的ubuntu 也是可以。   普遍的在虛擬機當中裝一個ubuntu 操作系統, 非常的慢, 但是你有沒有想法去改變這個狀況呢? 你需要採取一些設置, 禁止一些服務, 那麼這些你可以百度一下或者google 一下。  google 對於學習技術的人搜索到的資料還是比較靠譜的, 由於google 退出中國, 現在服務器不穩定, 所以只好忍痛割愛使用百度。 
    下面是讓linux 做一些事情的時候了, 你會學習到GCC G++ Java 或者Qt GTK 的編程。 有些事情我們不得不說, linux 上的包的依賴關係一直是頭疼的問題, 所以在安裝一些軟件之前最好讀一讀所謂的readme 文檔, 這些文檔一般都會放在源碼包中。  提起源碼包, 有時候你會發現,  當編譯的過程中會有很多錯誤出現, 因爲是依賴關係, 在編譯過程中會耗費很長時間。 舉個例子吧, 常用的嵌入式當中需要編譯內核,  這時候往往需要選擇支持的驅動, 有一種文本格式的, 效率很低, 但是需要的依賴庫很少, 有一種是xwindows 支持的, 如果不是人品問題, 那麼這種方式肯定能通過, 最後是需要一種圖形界面的, 需要Qt 的庫文件的支持, 所以需要安裝Qt 的底層庫, 這個你看它給你的提示就知道缺少什麼庫了。就是你安裝了Qt 的庫文件, 往往還有個 ncursor 的庫的支持, 這時候你就需要安裝ncursor 了。 你說我怎麼知道這個過程的, 我是因爲碰壁才知道這個過程的, 所以你需要多練習才能找到錯誤, 尋求到解決的方法。
    有一些朋友是做idc 業務的, 這個業務現在說起來是飽和的市場了。 基本上都是大喫小強吞弱, 不斷增加自己的實例。 idc 業務中服務器市場web 主要是apache 佔據, 如果需要很好的穩定性, 還需要linux 操作系統的支持。 有時候我們很陌生, 對於這些服務不知道是從什麼地方來的, 比如 samba 幹嗎的, nfs 幹嗎的, wu-ftp 是什麼軟件等, 還有一些其他的服務, 比如說你得使用mysql 作爲數據庫吧, 要用php 來作爲腳本吧, 包括一些加速的模塊。那麼你需要了解一下這些服務的具體配置, 其實不難, 困難的是, 由於不同的linux 操作系統的版本造成了配置有一些差異, 這時候你就需要跑到文章開頭, 給他們做一個分類。  apache 服務你需要了解到apache能夠做什麼, 它能夠支持什麼, 效率,併發, 跟一些網絡相關的東西, 這就遠了, 比如說什麼叫nat 映射, 比如說http 協議, 怎麼通過套接字傳輸的, 怎麼去建立虛擬主機, 怎樣才能讓自己的域名正確到解析到虛擬主機上。  總是感覺, 不要拿到一個東西就認爲功能簡單, 我們試圖要通過一連串的方式來學習, 對提升自己的技術水平非常有幫助。
    當你掌握了一部分技術之後, 最好保持一種好奇心, 或者壞小子的想法。 你嘗試一下我不這樣配置會發生什麼情況, 或者說測試一下軟件的極限, 讓他按照不可能異想天開的方式去運行。 這對於我們處理一些突發問題有幫助,軟件的編寫其實也是這樣 , 除了可以讓程序做一些事情, 也可以讓程序運行起來破壞一些事情。 很多公司不是要求內存檢測麼, 很多東西你需要自己去了解, 例如緩衝區溢出,爲什麼會存在緩衝區溢出, 爲什麼會有病毒, 病毒怎麼傳播的, 爲什麼一個無名的程序能夠拿到root 權限, 而不需要通知你, 也不需要知道你的密碼。  

   上面所說的可能已經帶你走回入魔了, 不過這對於你深刻了解你手頭上面的事情非常重要, 例如你的朋友開發了一個程序, 非要設置一個密碼, 你有沒有辦法破解他,例如你朋友設計了一個軟件, 你是否能夠通過你自己的知識讓這個程序不能運行起來, 當然有人回到說, 可以啊, 只要刪除了這個軟件它就不能運行了, 我還想說呢, 你關了機器什麼軟件都運行不起來。 軟件本身有自己的邏輯, 這種邏輯往往會讓人經脈錯亂, 因爲我們的頭腦總是希望能夠從一個時間一塊空間中完成所有的事情, 當代碼體積變大, 就變得沒有辦法調試。  所以我們借用一下孩提時代的想法, 程序本身就是拍積木, 劃分成幾個模塊使得思路更加清晰, 或者說你自己先將思路寫下來, 分析好結構後,  聲明跟是先做到彼此獨立。 這看上去會增加代碼的數量, 但是習慣的培養也就是從不辭辛苦開始的。 

   工科的學生髮現不夠人性化, 側重於功能的實現。 例如你開發的軟件需要讓人感覺到非常的美觀, 從第一眼看上去就愛上這個軟件, 我想這樣的要求是在太難了, 包括我在內, 因爲我們還是沒有讀過美學的人。  還是希望博覽羣書, 能夠在技術上找到點共性,所謂共性,也就是觸摸到藝術的一點了, 那麼你做的東西會有更多的人喜歡。 學習軟件設計的, 很少有是做ps 設計或者cowdraw 設計的, 所以軟件界面一塌糊塗。
   我們繼續往前走, 我在授課的時候, 碰到高級編程這部分, 實在叫人喫力, 因爲大部分的人並不是學過操作系統的原理, 起碼你該知道系統調用, 進程調度, 時間片分配這些內容吧,這有利於瞭解程序運行過程中的一些底層知識, 對於編程來說大有裨益。 我還是很推薦一個視頻叫做《操作系統的革命》 說的操作系統的過去跟未來, 所產生的影響。 
   大部分的時間還需要自己去摸索,  提出問題解決問題, 慢慢的你會跟linux感覺很親切, 只要在windows 上可以完成的事情linux 也可以完成。 甚至有更多的開源軟件可以使用。 開源軟件在教育方面, 尤其在啓蒙教育方面有很多。
   個人的一些想法跟感受, 希望對大家受用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章