1. 程式人生 > >關於Linux和Shell的相關書籍

關於Linux和Shell的相關書籍

入門類 
    一直認為,在一個系統上學習開發之前,首先需要熟悉這個系統的使用。鑑於天朝的國情,絕大部分人第一個接觸的作業系統就是Windows,因此對於這絕大部分人來說,如果要學習Linux開發,學會使用這個系統都是必不可少的一個環節。
    現在的Linux初學者是幸福的,隨著Linux桌面環境越來越易用,入門一個新的系統是非常容易的事情。雖然命令列對於提高工作效率更加有效,但我們完 全可以把熟悉命令的過程放到日常使用中進行。無論學習什麼知識,在實踐中學習都是高效而且有趣的。在這個階段,我們也未必一定需要書籍。現在很多Linux發行版的Wiki寫得都非常詳細,在使用某一種發行版時找到相應的Wiki閱讀查詢就可以了。而且,桌面環境變化太快,關於桌面的介紹類書籍幾乎都沒有必要看,這類書籍大多剛一出版就過時了。
    那入門類書籍裡哪些比較有價值呢?我比較推薦涉及的技術相對比較穩定的書。比如,Linux基本的體系結構和命令一般都是經久不變的,甚至從上古時期的Unix開始就沒太多變化,這類書籍講解的知識也是以後大幅提高我們的生產力的基礎。比如

《鳥哥的Linux私房菜》 ,比如《UnixPower Tools》 (中譯名是“UNIX超級工具”),或者是為Linux+認證考試準備的《Linux+Study Guide》 。當然,這一類書籍其實都不必精讀,快速瀏覽之後作為工具書備查就可以了。

程式設計類
    類Unix系統的程式設計書籍裡,最經典的莫過於簡稱為APUE的《AdvancedProgramming in the UNIX Environment》 (中 譯名是“Unix環境高階程式設計”),這本書被廣大Unix程式設計師(包括Linux)捧為“聖經”。借用葛大爺的廣告詞:“這就像進館子一樣,一條街上,哪家人多我進哪家”。APUE對類Unix系統的程式設計介面講解的非常全面詳細,對於這本書,我們不僅要精讀,還應該放在案頭常備。
    但是,APUE對於Linux程式設計初學者似乎稍深了一點,而且很多細節在Linux中並不會用到。講述Linux程式設計的書籍裡,
《Advanced Linux Programming》
 應該更加適合初學者。不要被書名中的“Advanced”嚇到,書裡的內容還是很容易理解的。看完這本書再看APUE應該效果會更好。
    如果要開發GUI程式,上面兩本書就無能為力了。在Linux世界裡,最常用的GUIToolkit是GTK+和QT。
GTK+的書籍並不多,線上文件只適合查閱,並不是一個完整的學習體系。《Foundations of GTK+ Development》 是其中很不錯的一本書,喜歡GTK+的開發者可以拿來作為入門書籍。
    相對來說,QT的書籍就很豐富了,這和QT具有良好的跨平臺能力有很大關係,QT的書籍並不只是寫給Linux程式設計師看的,在Windows和MAC OSX下同樣可以使用QT開發程式。比較值得一看的QT類書籍有
《C++ GUI Programming with QT4》
 、《Foundations of QT Development 》、《TheArt of Building QT Applications》 ,這三本都比較適合QT初學者閱讀。另外,《Advanced Qt Programming 》會介紹到QT一些比較高階的用法,適合有一定QT基礎的讀者閱讀。

核心類
    對於Linux核心或者裝置驅動的開發者,最全面最直接的學習資料一定是Linux核心程式碼及其文件。Linux核心的釋出週期很短,相關書籍的出版完全跟不上腳步。但隨著核心程式碼的日益龐大,學習曲線越來越陡峭,入門者又非常需要書籍來作為指導,這確實是非常矛盾的事情。所幸,很多Linux核心技術作 家也是很勤奮的,經常會更新自己的作品。就像RobertLove,以2.6核心為藍本的《LinuxKernel Development 》已經更新到第三版了。LKD是非常適合核心初學者閱讀的一本好書,對它的評價可以引用陳莉君老師的譯者序:
    相對於Daniel P. Bovet 和Marco Cesati 的核心鉅著《Understand the Linux Kernel 》,它少了五分細節,相對於實踐經典《Linux Device Drivers 》,它多了五分說理。可以說,本書填補了Linux 核心理論和實踐之間的鴻溝,“一橋飛架南北,天塹變通途”。
    謝謝陳老師,她的譯者序幫我引出了另外要談到的兩本經典書籍,對,就是《Understanding the Linux Kernel》 和《LinuxDevice Drivers 》。對於這兩本書,如果要挑它們的缺點,我只能說,內容有點老,很多知識點都需要更新了,除此之外,我要說的是,是它們把我帶上了核心驅動開發這條路上來,當然,還有LKD。
    最近,我又發現一本分析Linux核心的優秀書籍,就是《ProfessionalLinux Kernel Architecture》 。這本書我目前正在讀,寫得非常好,而且因為此書相對較新(只是相對,2.6.24核心在現在看來也很老了),沒有看過ULK的同學可以直接看這本書。

工具類
    工欲善其事,必先利其器。進行Linux開發,相關工具還是需要熟練使用的。比如,GNU Tool Chain、自動構建工具、編輯器、版本控制工具等等。
    這裡有一本包羅永珍的書,叫做《Handbook of Open Source Tools 》,書中介紹了各種各樣的開源工具,可稱之為開源技術的總決式。這本書試圖面面俱到,因此並不深入,粗讀即可。
    GNU Tool Chain參考Redhat的《The GNUPro Toolkit 》已經足夠了,如果單獨把makefile拎出來,還可以參考《Managing Projects with GNU Make 》。
    自動構建工具可以參考《Autotools 》。如果您準備使用cmake,推薦cjacker的《Cmake實踐 》。《Mastering CMake 》據說是cmake的權威書籍,但一直無緣得見啊。
    說到編輯器,在Linux裡最著名的莫過於Vim和Emacs,關於這兩者的背景,可以去看看《為何Emacs和Vim被稱為兩大神器 》。我幾乎沒用過Emacs,曾經在噹噹做活動時花9塊錢買了一本《學習GNU Emacs 》,有這本書作為Emacs的入門我想應該夠了。Vim是我經常使用的編輯器之一(另一個是Kate,最初喜歡上Kate的原因之一就是它提供了Vim編輯模式),相關的書籍有兩本值得一讀:《AByte of Vim 》和《HackingVim 7.2 》,但是對於初學者,首先跟著Vim自帶的vimtutor練習效果會更好。
    Linux下的版本控制工具很多,有傳統的Subversion,也有現在非常流行分散式工具如Git等。Subversion可以參考這本《Version Control with Subversion 》,Git可以參考《VersionControl with Git 》或者《GitInternals 》或者《ProGit 》。

其它
    除了以上幾個類別,還有一些書籍值得推介。
    比如《The Art of Unix Programming 》,主要介紹了Unix系統領域中的設計開發哲學、思想文化體系以及社群文化等,覆蓋面非常廣。書中的一些內容和《Revolution OS 》有相似之處,大家可以自己印證一下。對於這本書,我們也完全可以把它當做小說或者歷史書來看,可以躺在床上看,也可以癱在沙發上看,或者像怪怪那樣坐在馬桶上看,總之,不必一定要端坐在書桌前。

   《Computer Systems:A Programmer's Perspective 》很多人都推薦過,這是一本非常經典的計算機體系方面的教材。CSAPP的內容基礎全面,講解簡明扼要,易於理解,仔細讀完之後對理清計算機體系結構甚至是Linux核心都非常有幫助的。雖然中文名被譯為《深入理解計算機系統》(這個譯名很不貼切),但相比之下,為什麼會讓人感覺國內的同類教材更加“深奧”呢?也許,這就是作者功力的差距吧。

作業系統
《Linux核心設計與實現(第2 版)》
《深入理解Linux核心(第二版)》
《Linux核心分析與程式設計》
Linux方面的好書最多。其中《Linux 核心設計與實現(第2版)》(RobertLove著,機械工業出版社出版譯
著)屬短小精悍之作,用作《作業系統概念》的配套正好。
《深入理解Li n u x 核心(第二版)》(Daniel Bovet著,中國電力出版社出版譯著)分析全面透徹,不過國外已經出版的最新版尚未引進。
此外,倪繼利的《Linux核心分析與程式設計》(電子工業出版社)是國人的經驗總結,趙炯的《Linux核心完全註釋》分析的是0.11版核心,適合初學者,都可以列入候選。

驅動程式開發
《Linux裝置驅動程式》(第三版)
驅動程式的開發和作業系統核心其實息息相關。所以本書的內容與前面的大類難免會有一些重疊。作為黑客世界的經典,本書實在不需要我多加推薦了。值得一提的是譯者(魏永明、耿嶽、鍾書毅)都是國內Linux界有數的頂尖人物。

系統程式設計
《UNIX環境高階程式設計》(英文影印版)(第2版)
R. Stevens也許是有史以來最偉大的技術圖書作家,雖然他辭世日久,但是人們對他的景仰反而因為其著作的少有褪色而與日俱增。如果本文的範圍擴大到網路程式設計,他的另外兩部“聖經級”著作《TCP/IP詳解》和《UNIX 網路程式設計》也絕對應該入選。本書的地位相當於甚至還超過了Richter著作在Windows世界的地位

入門篇
    《LINUX權威指南》書不錯,寫的很全面也比較廣,涉及的不深,做為入門書籍不錯,可以比較全面的瞭解linux。另外比較熱門的也可以看看《鳥哥的私房菜》等書,偏管理類的書。如果想做server方向的可以找來看看。 

驅動篇
    《LINUX裝置驅動程式 》就是網上說的“LDD”,經典之作,必備書籍。國產經典《Linux驅動詳細解》也是一本非常不錯的書,很實用,書中原始碼分析比較多,基於2440的,對linux外圍驅動有很全面的講解 

核心篇
    浙江大學的《LINUX核心原始碼情景分析》,外國鬼子的《萊昂氏UNIX原始碼分析》還有《深入理解linux核心》都是出名的經典鉅作。另外趙炯的《LINUX核心完全剖析--基於0.12核心》也非常不錯,對核心程式碼進行了詳細的註釋,非常有助於對核心的理解和程式碼的分析。 

Shell
    《LINUX與UNIX Shell程式設計指南》 

應用程式設計
    不用說了肯定是《unix環境高階程式設計》被稱為unix程式設計的聖經。 

TCP/IP
    《TCP/IP詳解》作者W.RichardStevens也是《unix環境高階程式設計》的作者,牛人出的書沒有一本不是經典的。但是英年早逝,默哀一下。 

C語言
    《The C Programming Language》正是作者造出來的c語言,書能垃圾就怪了 
    《c和指標》和《c缺陷和陷阱》兩本必備。包含了c語言最容易出錯的地方,加深c語言功力的好材料。 


演算法
    《演算法導論》

轉自:http://yuyunxin511.blog.163.com/blog/static/6137357201010122580223/

ABS,高階Bash指令碼程式設計指南,http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/

推薦看這本:《Learningthe bash shell》(http://book.douban.com/subject/3296982/)
內容清晰,提綱挈領
書不是很厚,可以很快看完,然後投入實踐

1. < < Advanced Bash-Scripting Guide > > ,即ABS,http://tldp.org/LDP/abs/html/。
經典的Online教程,內容全面,對每一個知識點都有相當多的例項,適合系統的學習。之前有翻譯的版本出到過3.9.1。

2. < < UNIX Shells by Example Fourth Edition > >
這本書適合用的時候查詢,結構很清晰,以語法為主。它的亮點在於將幾種常用的不同種類的Shell分開來描述。

3. < < Linux Command Line and Shell Scripting Bible > >

4. < < LINUX與UNIXShell程式設計指南> >

< < UNIX Shells by Example Fourth Edition > > 推薦這本,網上有中文版pdf。內容豐富,講解也不錯。每個例子都是cshell ,ksh,bash三種都有,最好著重學習一個,個人喜歡bash,簡練且緊湊。c shell的互動功能做的倒是不錯,不過要是用它寫指令碼你會想去撞牆。
其實學什麼教材倒是其次,堅持只用Linux做桌面環境才是關鍵,同時拔掉你的滑鼠。

相關推薦

關於LinuxShell相關書籍

入門類      一直認為,在一個系統上學習開發之前,首先需要熟悉這個系統的使用。鑑於天朝的國情,絕大部分人第一個接觸的作業系統就是Windows,因此對於這絕大部分人來說,如果要學習Linux開發,學會使用這個系統都是必不可少的一個環節。     現在的Linux初學者是

我與bug過日子二十餘年(linuxpython相關

1、cenos7安裝python3後pip install出現gcc failed安裝不成功(2018/9/8) 詳情:  用安裝python模組出現error: command 'gcc' failed with exit status 1 ,明明裝了g

linuxshell指令碼常用命令技巧

date :調配時間,可以用date命令完成很多需求,比如日誌資料夾,比如求前幾天等等,其他常用方法百度 date "+%Y%m%d" #輸出年月日 date -d last-day +%Y%m%d #輸出當然日期的前一天 #########################

瞭解linuxshell

1.linux是什麼? 嚴格來講,其本身表示的是linux核心(kernel)。 2.linux和UNIX的區別? linux的原始碼是開放的,可執行在多種硬體平臺上,硬體要求低,安裝簡單,自由度較高。 UNIX的原始碼是不公開的,大多是與硬體配套的,是對原始碼實行智慧財產權保護

Linuxshell腳本random相關應用批量修改建立練習

shell腳本random 批量創建用戶和文件一.三種取隨機數並加密的方法1.random的取數並加密取數的方法:取隨機數的方法:取隨機數的並加密的方法:加密後截取不同的位數:2.data時間取隨機數並加密3.openssl取隨機數並加密二.隨機數的應用1.批量創建以隨機數開頭的文件題目1:在/westos目

Linux網絡相關,firewalldnetfilter,netfilter5表5鏈介紹,iptables語法

iptables netfilter linux 筆記內容:l 10.11 Linux網絡相關l 10.12 firewalld和netfilterl 10.13 netfilter5表5鏈介紹l 10.14 iptables語法筆記時間: 10.11 Linux網絡相關ifconfig命令在Ce

Linuxshell腳本LvsDR模式啟動腳本模擬keepalived高可用腳本

lvsdr 啟動腳本 模擬keepalived高可用腳本一.腳本運行前模擬環境DR:server1:172.25.29.1 ipvsadm keepalivedRS:server2:172.25.29.2 arptables_jf httpdRS:server3:172.25.29.3 arptable

LinuxShell的知識用法

腳本用法Shell腳本顧名思義就是為了Shell編寫的腳本程序,只要有一個編寫文本編輯器和一個能執行腳本的解釋器就可以做到。Linux 的 Shell 種類眾多,我們可以打開文本編輯器(可以使用 vi/vim 命令來創建文件),新建一個文件 test.sh,擴展名為 sh(sh代表shell),擴展名並不影響

Linux日常管理技巧(3):Linux網絡相關防火墻

127.0.0.1 網絡 修改網卡 cal 網卡ip lis oot back col 一、Linux網絡相關 1. ifconfig 查看網卡IP ifconfig命令被用於配置和顯示Linux內核中網絡接口的網絡參數。用ifconfig命令配置的網卡信息,在網卡重啟後機

10.11 Linux網絡相關 10.12 firewalldnetfilter 10.13 ne

netfilter ext pre ble 分享圖片 linu routing wal 1.5 七周三次課10.11 Linux網絡相關10.12 firewalld和netfilter10.13 netfilter5表5鏈介紹10.14 iptables語法10.11 L

Linux網絡相關、firewalldnetfilter、netfilter5表5鏈介紹ipta

mct filter 是否 文件 line 目標 過濾 services sport ifconfig查看網卡-a 當網卡當機時或,無ip時不顯示ifup ens33 /ifdown ens33 啟動關閉網卡(ifup/ifdown後跟的是網卡名字,具體網卡名字需要用if

linuxshell腳本介紹、shell腳本結構執行、date命令用法、shell腳本中的變量

長度 自動 內置變量 開頭 ash number 邏輯 ply 應該 Shell腳本介紹 shell是一種腳本語言 可以使用邏輯判斷、循環等語法 可以自定義函數 shell是系統命令的集合 shell腳本可以實現自動化運維,能大大增加我們的運維效率 Shell腳本結構和

LINUX系統---初級相關操作知識

www mys apach lis -type cnblogs 管理 安裝linux系統 tomcat   LINUX系統的初級,從安裝LINUX開始,到處理簡單的運維問題、搭建各種服務、解決網路問題、緩解服務器壓力,寫簡單的shell腳本。   我們從基本的入門開始搞事情

LINUX系統---中級相關操作知識

div blog pos one 相關 inux 公司 -type 熱備   LINUX系統的中級,來搞一些LINUX安全相關的東西,還有在公司生成中長搞的集群。 RHCS集群 什麽是高可用 什麽是熱備 什麽是分布式 LINUX系統---中級相關操作和知識

LinuxShell命令的輸出信息同時顯示在屏幕保存到日誌文件中

blog inux -a 輸出 輸出內容 使用 col 文件中 信息 #直接覆蓋日誌文件 ls -l | tee ./t.log #將輸出內容附加到日誌文件 ls -l | tee -a ./t.log 使用的是tee命令Linux下She

三十一、Linux網絡相關、firewalldnetfilter、netfilter5表5鏈介紹、

Linux網絡 filewalld和netfilter netfilter5表5鏈 iptables語法 三十一、Linux網絡相關、firewalld和netfilter、netfilter5表5鏈介紹、iptables語法一、Linux網絡相關(一)ifconfig:查看網卡IP,若沒有該

Linux命令應用大詞典-第10章 Shell相關命令

shell腳本 10.10 控制 round hist 歷史 用戶 行程 史記 10.1 commond:抑制正常的Shell函數查找 10.2 exec:使用執行命令替換當前的shell進程 10.3 bash:GNU的Bourne-Again Shell解釋器 10.

Linux學習並不難》Linux常用操作命令(6):uname命令顯示計算機系統相關信息

Linux8.6 《Linux學習並不難》Linux常用操作命令(6):uname命令顯示計算機和系統相關信息 使用uname命令可以顯示計算機以及操作系統的相關信息,比如計算機硬件架構、內核發行號、操作系統名稱、計算機主機名等。 命令語法: uname [選項] 命令中各選項的

Linux網絡相關、firewalldnetfilter、netfilter5表5鏈介紹、ipta

LinuxLinux網絡相關 ifconfig查看網卡ip(需要安裝net-tools包)ip add也可以查看網卡ipyum install -y net-tools 當你的網卡沒有ip的時候是不顯示的,但是加上-a就可以查看到。ifconfig -a 關閉指定網卡(如果你正在連接這個網卡使用該命令會斷

linuxubuntu防火墻相關命令

enable chkconfig 關閉 tables sta pri 有效 stop pre 1.永久有效 開啟: chkconfig iptables on 關閉: chkconfig iptables off 2.即刻生效 開啟: service iptables s