Ⅰ 關於linux 編程方面的書籍
假設你是計算機科班出身,計算機系的基本課程如數據結構、操作系統、體系結構、編譯原理、計算機網路你全修過
我想大概可以分為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設備驅動程序》第二版,第一版,第二版的譯者我都有很深的接觸,不過總體上來說,雖然第二版翻譯的有些不盡人意,但是相比第一版來說已經超出了一大截。要讀這一本書,至少應該先找一些《計算機原理》《計算機體系結構》的書來馬馬虎虎讀讀,至少應該對硬體和計算機的工作過程有一些了解。
Ⅱ 《unix環境高級編程》中的apue.h怎麼配置
能把程序還有頭文件粘下嗎?
其實我寫的時候直接自己寫頭文件就行了,那個頭文件里幾個函數看名字就知道是干什麼的,可以自己實現。
Ⅲ 學習linux看unix書可以嗎 最近剛剛看完鳥哥那本書再看《unix 環境高級編程》可以嗎
可以,如果要學編程的話。找本靠譜的書跟著學是有道理的,《UNIX環境 高級編程》不錯,只是內容大而全,要讀完要點時間,另外 《Linu就該這么學》對於初學者不錯,如果要找配套視頻,網上也有。
Ⅳ UNIX環境高級編程(第2版) UNIX網路編程(卷2):進程間通信(第2版)這兩本書哪個好
我把三本都買了
環境高級編程:講解unix api的,所以會涉及到其他兩本的一些api,但講解不多。
網路編程卷一:講解套接字socket編程的,重點講網路編程的方方面面,比如協議、伺服器架構、io使用。
網路編程卷二:講解進程間通信的,這是相對於卷一的,卷一是網路通信,而卷二是單台機子的進程、線程之間的通信。
=========================================================================
所以這三本都有不同側重,我一般以卷一卷二為主,高級編程為輔,這三本都是工作後常用的資料書,建議備齊。
另外如有興趣可以讀該作者的另外3本書:tcp/ip協議詳解卷一、二、三,尤其是卷一超級有用
Ⅳ 學習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`