1. linux網路工程師都需要掌握哪些技能
我是做LINUX的,給你講一下吧
分要不要無所謂,我也很喜歡LINUX,已知研究相關技術在。
第一,掌握好C語言,LINUX主要是C,這個是最基礎的,因為它自己是C寫的:)
學習C可以看譚浩強的綠皮C語言。然後把數據結構、操作系統原理學好。
第二,看LINUX下面的書,推薦一兩本經典的:《unix環境高級編程》、《LINUX程序設計》這兩本差不多,都是將LINUX下的編程技術。建議看書的時候把書上的例子編譯一下,哪怕是照著書敲進電腦。哦,忘了說,先要轉個LINUX,基本命令和操作要熟悉,GCC編譯器怎麼用熟悉一下。
第三,你說你想做網路編程,在二的基礎上,就可以學習為那網路編程了,其實二的書裡面就介紹了網路編程技術,基本應用因該是夠了,如果想深入學習的話,《LINUX網路編程》、《TCP/IP》卷一、卷二都應該看看。
第四,為了成為合格的LINUX軟體工程師,應該看看LINUX內核,推薦入門的《LINUX內核完全剖析》,深入一點《深入理解LINUX內核》。這個對你在LINUX下寫任何程序都有用。
第五,在這我想說LINUX下做什麼不重要,因為一般的項目涉及很多技術,不會僅僅是網路編程,所以你都應該做一下。比如,LINUX下通常的開發就是協議開發、驅動開發、應用軟體、甚至是開發內核等等,這些都需要對各個技術的了解。如果做應用,就需要用到QT、GTK等圖形庫了。
還有,不要怕,我用了兩年的學習就基本能做大項目了,最主要的就是C和LINUX內核。這也是區別一般程序員和高手的位置。
2. UNIX環境高級編程(第2版) UNIX網路編程(卷2):進程間通信(第2版)這兩本書哪個好
我把三本都買了
環境高級編程:講解unix api的,所以會涉及到其他兩本的一些api,但講解不多。
網路編程卷一:講解套接字socket編程的,重點講網路編程的方方面面,比如協議、伺服器架構、io使用。
網路編程卷二:講解進程間通信的,這是相對於卷一的,卷一是網路通信,而卷二是單台機子的進程、線程之間的通信。
=========================================================================
所以這三本都有不同側重,我一般以卷一卷二為主,高級編程為輔,這三本都是工作後常用的資料書,建議備齊。
另外如有興趣可以讀該作者的另外3本書:tcp/ip協議詳解卷一、二、三,尤其是卷一超級有用
3. 《UNIX環境高級編程》這本書怎麼看怎麼學習
W.Richard Stevens 先生所著之書比較適合有經驗的人進一步深入學習
W.Richard Stevens 先生所著的UNIX 環境高級編程、UNIX網路編程、TCP/IP詳解是難得的入門好書,但這里的入門指得是研究生級別的入門。Stevens 先生所著之書多半是為了給研究生上課時用做教材,因此 Stevens 先生假設閱讀這些書的人至少已經接受過了系統的計算機技術本科教育,已經擁有了比較系統的計算機相關基礎理論知識。在書中 Stevens 先生假設讀者擁有了最基礎的操作系統理論,網路技術理論,以及UNIX理論和實踐經驗,並擁有數種業界常用的UNIX系統作為學習環境(在國外的大學里很容易獲得),這樣才能體會書中所述的細節。因此這些書剛接觸時看似通俗易懂,但在閱讀細節上卻對讀者要求甚高,如果沒有足夠的專業理論和系統飢野實踐是很難真正讀進去的。
所以,對於沒有接受過系統的計算機專業教育的愛好者,或者主要以 linux 系統維護,或以linux 桌面應用為主的普通用戶,Stevens 先生的書並不是很合適的閱讀對象。
因此,就我個人的看法,掌握任何一種知識都是需要投入的。我們需要花費金錢去得知識來源(花錢買書,花錢上網,花錢培訓),需要花費寶貴的時間去閱讀(人生匆匆幾十年,沒多少時間可以給我們去浪費),需要花費精力去理解書中的內容(基礎知識越扎實,理解所學內容越快,但累積基礎同樣需要大量時間和精力),需要找到合適的環境(光看不實踐心裡是不會有底的)去驗證自己掌握的東西。因此,如果在決定投入之前,先要摸清楚自己到底想要達到什麼樣的目標,這個目標是否切合自己的實際(相信一個在流水線上辛苦勞作的普通工人,即使學會了計算機編程也是沒有用武之地的,除非他有機會離開流水線)。自己是否有足夠的資源承載自己的理想(如對於溫飽問題尚未解決之人,要他花上千上萬的錢去學MBA顯然是不現實的)。
同時,任何一本書都會對讀者提出一個基本的知識架構和程度上的要求,比方說即使是文學博士,讓他去讀高能物理學方面的書也會要他的命的。因此在選擇所讀之書前,先要對自己的實際能力做一次詳細的評估,看自己目前到了哪種階段,是否有能力帶此去掌握自己想要掌握的東西。千萬不要因為好高騖遠而勉力為之。選擇適合自己當前水平的書去閱讀並理解,遠好過拿著大師所著的神作乾瞪眼。
如果主要希望掌握UNIX下的編程技術,尤其是網路編程技術的話,可以有兩條路走:
1、以實際需要完善知識架構:為自己做一個項目,比方說自己寫個簡單的 Web 伺服器,因為現在 Web 應用非常豐富,既有成熟的客戶端如瀏覽器可以配合,又有足夠全的文檔如 RFC文檔可供參考,再加上最基本的 socket 編程經驗,就可以開始做自己的 Web 伺服器。一步一步的為 Web 伺服器添加流行的功能,如支持後台 FastCGI 介面,支持 WebDAV,支持流媒體等。在這個過程中不斷地學習和掌握相關的理論知識,有時在發覺設計上的不足時甚至需要推翻全盤重新架構。當最終一個完全符合自己心意且足夠實用的 Web 伺服器做成時,就擁有了可以由自己支配和修改的伺服器,同時也掌握了相關的專業理論。這種方式比較適合有一定專業基礎的人使用。優點是直觀,方向明確所以學習效率高。缺點是需求驅動,形成知識架構不容易完整。
2、系統掌握計算機專業理論:最好的書就是大學里的理論教科書,這些書不會去講解過於具體的計算機應用,而是從概念開始講起,力圖使學習者獲得一個完整的知識體系。只要以後碰到的工作和這個知識體系相關,自然就能很快學會。這種方式比較適合沒有基礎,或者希望深入學習的人使用蠢肢迅,優點是知識架構會逐漸趨於完整,理論功底扎實,後勁足。缺點是花費時間長,方向不明確所以學習效率低,初期會因缺少實踐而進展緩慢。
4. 如何閱讀《深入理解計算機系統》這本書
結構、操作系統、體系結構、編譯原理、計算機網路你全修過
我想大概可以分為4個階段,水平從低到高
從安裝使用=>linux常用命令=>linux系統編程=>內核開發閱讀內核源碼
其中學習linux常用命令時就要學會自己編譯內核,優化系統,調整參數
安裝和常用命令書太多了,找本稍微詳細點的就ok,其間需要學會正則表達式
系統編程推薦《高級unix環境編程》,黑話叫APUE
還有《unix網路編程》
這時候大概還需要看資料理解elf文件格式,連接器和載入器,cmu的一本教材中文名為《深入理解計算機系統》比較好
內核開發閱讀內核源碼階段,從寫驅動入手逐漸深入linux內核開發
參考書如下《linux device drivers》,黑話叫ldd
《linux kernel development》,黑話叫lkd
《understading the linux kernel》,黑話叫utlk
《linux源碼情景分析》
這四本書為搞內核的必讀書籍
最後,第三階段和第四階段最重動手,空言無益,光看書也不罩,不動手那些東西理解不了
學習linux/unix編程方法的建議
建議學習路徑:
首先先學學編輯器,vim, emacs什麼的都行。
然後學make file文件,只要知道一點就行,這樣就可以准備編程序了。
然後看看《C程序設計語言》K&R,這樣呢,基本上就可以進行一般的編程了,順便找本數據結構的書來看。
如果想學習UNIX/LINUX的編程,《APUE》絕對經典的教材,加深一下功底,學習《UNP》的第二卷。這樣基本上系統方面的就可以掌握了。
然後再看Douglus E. Comer的《用TCP/IP進行網際互連》第一卷,學習一下網路的知識,再看《UNP》的第一卷,不僅學習網路編程,而且對系統編程的一些常用的技巧就很熟悉了,如果繼續網路編程,建議看《TCP/IP進行網際互連》的第三卷,裡面有很多關於應用協議telnet、ftp等協議的編程。
如果想寫設備驅動程序,首先您的系統編程的介面比如文件、IPC等必須要熟知了,再學習《LDD》2。
對於幾本經典教材的評價:
《The C Programing Language》K&R 經典的C語言程序設計教材,作者是C語言的發明者,教材內容深入淺出。雖然有點老,但是必備的一本手冊,現在有時候我還常翻翻。篇幅比較小,但是每看一遍,就有一遍的收獲。另外也可用譚浩強的《C語言程序設計》代替。
《Advanced Programing in Unix Envirement》 W.Richard Stevens:也是非常經典的書(廢話,Stevens的書哪有不經典的!),雖然初學者就可以看,但是事實上它是《Unix Network Programing》的一本輔助資料。國內的翻譯的《UNIX環境高級編程》的水平不怎麼樣,現在有影印版,直接讀英文比讀中文來得容易。
《Unix Network Programing》W.Richard Stevens:第一卷講BSD Socket網路編程介面和另外一種網路編程介面的,不過現在一般都用BSD Socket,所以這本書只要看大約一半多就可以了。第二卷沒有設計到網路的東西,主要講進程間通訊和Posix線程。所以看了《APUE》以後,就可以看它了,基本上系統的東西就由《APUE》和《UNP》vol2概括了。看過《UNP》以後,您就會知道系統編程的絕大部分編程技巧,即使卷一是講網路編程的。國內是清華翻譯得《Unix網路編程》,翻譯者得功底也比較高,翻譯地比較好。所以建議還是看中文版。
《TCP/IP祥解》一共三卷,卷一講協議,卷二講實現,卷三講編程應用。我沒有怎麼看過。,但是據說也很經典的,因為我沒有時間看卷二,所以不便評價。
《用TCP/IP進行網際互連》Douglus.E.Comer 一共三卷,卷一講原理,卷二講實現,卷三講高級協議。感覺上這一套要比Stevens的那一套要好,就連Stevens也不得不承認它的第一卷非常經典。事實上,第一卷即使你沒有一點網路的知識,看完以後也會對網路的來龍去脈了如指掌。第一卷中還有很多習題也設計得經典和實用,因為作者本身就是一位教師,並且卷一是國外研究生的教材。習題並沒有答案,留給讀者思考,因為問題得答案可以讓你成為一個中級的Hacker,這些問題的答案可以象Douglus索取,不過只有他只給教師卷二我沒有怎麼看,卷三可以作為參考手冊,其中地例子也很經典。如果您看過Qterm的源代碼,就會知道Qterm的telnet 實現部分大多數就是從這本書的源代碼過來的。對於網路原理的書,我推薦它,而不是Stevens的《TCP/IP祥解》。
《Operating System - Design and Implement》這個是講操作系統的書,用Minix做的例子。作者母語不是英文,所以英文看起來比較晦澀。國內翻譯的是《操作系統設計與實現》,我沒看過中文版,因為翻譯者是尤晉元,他翻譯的《APUE》已經讓我失望頭頂了。讀了這本書,對操作系統的底層怎麼工作的就會
有一個清晰的認識。
《Linux Device Driver》2e ,為數不多的關於Linux設備驅動程序的好書。不過內容有些雜亂,如果您沒有一些寫驅動的經驗,初次看會有些摸不著南北。國內翻譯的是《Linux設備驅動程序》第二版,第一版,第二版的譯者我都有很深的接觸,不過總體上來說,雖然第二版翻譯的有些不盡人意,但是相比第一版來說已經超出了一大截。要讀這一本書,至少應該先找一些《計算機原理》《計算機體系結構》的書來馬馬虎虎讀讀,至少應該對硬體和計算機的工作過程有一些了解。
5. 學習linux系統,看那幾本書比較好
《鳥哥的Linux私房菜 基礎學習篇(第三版)》,鳥哥著
一本大而全的LINUX入門指點,主要講解Linux一些命令,Linux的實際操作及Linux基礎理論。很適合Linux初學者學習。
《嵌入式 Linux 應用開發完全手冊》,韋東山著
這本書綜合了常見的嵌入式開發經驗技巧,以及常見的嵌入式系統應用,系統移植,調試及異常處理等,內容非常豐富,是中文 Linux 領域難得的一本好書。嵌入式處理器種類繁多,韋老師著重講了目前國內最常用的ARM系統,實用性很強,是國內嵌入式程序員不容錯過的一本工具書。
《UNIX環境高級編程》(第2版),史蒂文斯著
《UNIX環境高級編程》是 Unix/ Linux 程序員案頭必備的一本書籍。可以說,Linux 程序員如果沒有讀過這本書,就好像基督教徒沒有讀過聖經一樣,是很難讓人理解的。這本書概括了 Linux 編程所需的一切理論框架、主要系統函數、多進程編程、乃至 Linux 網路通信。
《Linux設備驅動開發詳解:基於最新的Linux 4.0內核》,宋寶華著
隨著通信、電子行業的迅速發展,全世界每天都會生產大量晶元,設計大量新電路板,也因此,會有大量設備驅動需要開發。本書主要對驅動編程所涉及Linux內核最底層機理的講解。也是即Linux設備驅動開發詳解第二版暢銷後,作者又進行第三版的編著。
《Linux 設備驅動程序》,科波特著
《LINUX設備驅動程序》就是網上說的「LDD」,經典之作,必備書籍。國產經典《Linux驅動詳細解》也是一本非常不錯的書,很實用,書中源代碼分析比較多,基於2440的,對linux外圍驅動有很全面的講解。
《深入理解 Linux 內核》(第三版) ,博韋等著
學習 Linux ,就要學習 Linux 的精華。而 Linux 的精華,則在於 Linux 的內核。本書以 Linux 2.6 版架構為基礎,分門別類地向初學者介紹了 Linux 內核的架構、編程思想、以及功能模塊。在本書的指導下學習,對於你讀懂 Linux 操作系統的精華部分,會取得事半功倍的效果。
-------------------
學習linux shell 下的編程有什麼用?
我是剛開始學linux的,現在開始學了一些shell下的編程,是比較初步的,覺得不是很難,但是不知道學了到底能在那些方面運用?有誰能給指點一下
工作或者讀書等)需要學習linux的人,需要系統的學習一下,最好有一本好的書來學習。
linux是世界各地的黑客們寫出來的開源系統,對於熱愛學習計算機技術(演算法、數據結構、編程、操作系統……)的人來說,linux是一個天堂。
我個人就是完全因為興趣而搗鼓linux,和工作不沾邊。
有幾種不同的學習:
a)使用->需要學習linux的一些歷史、各種命令、桌面的操作、shell的知識
b)編程->學習linux的介面
c)系統管理->學習一些管理員需要掌握的命令
d)內核、源碼->先要學好操作系統原理,然後慢慢鑽研。
linux是一個很奇怪的東西,因為你知道的越多,你的問題就越多。
如果你將來用的上,那麼學習linux自然有用。
如果用不上,學習linux的作用在於折騰你的精力、開拓你的思維、視野、提高自學能力。從你付出的機會成本的角度來說,學習linux不合算,因為你應該把有限的時間用來學習對你更重要的東西,而不是不沾邊的linux。
除非把linux當作一種愛好。所謂「衣帶漸寬終不悔,為伊消得人憔悴」。自然是另一番感受。
當你用shell編寫個自己能用上的腳本 你就知道有用拉
而且還老有成就感拉
比如你需要搜索全盤文件,把大寫名字改為小寫,這樣的程序用幾行shell就能寫,但是無論C還是其它語言都非常麻煩,手工修改就更麻煩。
明白shell程序設計的用處嗎,任何一種語言都有他自己的適用領域
-------------------
linux shell 學習
分類:讀書筆記
首先恭喜你,看了這個文章,推薦兩本書,Linux shell 腳本攻略, shell腳本學習指南 ^_^ 。
shell腳本學習指南大概很多人都看過,但是看完之後對於shell能幹什麼,可能並不十分清楚,而linux shell 腳本攻略則以一個個任務的形式,用腳本解決。 而且有詳細的解釋。相當於cookbook。包含了各個方面,基礎的,網路的,系統管理的。但是對於基礎知識的介紹,可能需要讀者查看相關書籍,所以shell腳本學習指南可以拿來翻翻。
以下是個人的一點粗淺認識,不一定對。
關於shell
lilnux與windows不同之處在於提供了很多工具。而且多個命令之間用管道|連接,可以實現一系列任務,這在windows應用程序界限很明顯的地方是很難實現的。
linux的shell提供了很多工具。工具就相當於函數,但是與我們編程語言的函數不同在於,並不需要寫一個入口函數來調用它,而多個工具可以一起使用。
find,sed,awk,grep等命令都可以稱為工具。
find 查找
grep 也是查找
sed 可以實現一些替換等
awk 相當與編程語言,在awk ' '包含裡面進行簡單編碼,實現相應的功能
還有很多工具,具體要查看書籍。
而一行一行的命令不適合批處理,不適應管理自動化。所以需要腳本。
腳本就是把一堆命令寫在一起。在#!/bin/bash 指明這是個腳本。具體參見書籍。
關於linux shell 腳本攻略
前面幾章介紹基礎知識,以及應用。後面的對於網路的操作,引入了curl,wget,利用了服務提供商的rss feed。其它的與前面的編程一樣,都是文本替換啥的。(這里顯示出shell的好用之處,不必專門寫一個程序來操作,不用自己寫很多函數,且多個操作結合方便,靈活)。後面介紹了歸檔,壓縮,加密工具。最後兩章是一些系統運維的知識,查看系統磁碟狀態,查看進程使用cpu的情況等等。要用的時候細看。
看了很久了,有點忘記了,以後看書,再詳細記錄一些知識點。現在都忘光了。提供一個方向罷。
p130 pattern 用於匹配字元串
\1 代表匹配到的第一個子串 後向引用
對結果進行分組,利於後向引用
p26 使用反引用或者$()來存儲命令,如cmd_output =$(ls | cat -n) 或者 cmd_output=`ls | cat -n`
6. 學習linux驅動開發需要先學習UNIX環境高級編程這本書嗎
你連應用層都不懂就能搞底層嗎?而且《UNIX環境高級編程》講的不是真正意義上的應用層,它講的是操作系統API,也就是系統調用,你去看看有哪個應用程序會直接使用系統調用的。
系統調用是比C標准庫還底層的庫,由操作系統直接提供,都是一些非常基礎的功能。重要的是它講述了大量的系統級編程的概念與方法,這些概念是在其他很多地方都通用的,甚至在windows下都是非常有意義的。
系統調用是內核與應用層的介面,把握住了這一層上可以寫應用程序,下可以寫內核模塊,當然都需要深入學習。
《UNIX環境高級編程》是你學習操作系統非常好的方式(大學講的「操作系統」完全就是扯蛋 ),多寫幾次fork,把內核代碼中task_struct結構大概看一下,你就知道什麼是進程了,還要去背那些過時的甚至是錯誤的概念?以後你再看內核方面的書你就會知道這些有多重要,事實上沒有系統級編程的知識,你要直接看內核方面還是比較困難的(這些東西你終究還是要知道的)。
還是看你自己怎麼看了,《UNIX環境高級編程》確實不講述任何關於內核編程的東西。