-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

UNIX/Linux應用、編程與系統管理(第3版)

( 簡體 字)
作者:[美] Sumitabha Das 著 賈洪峰 李莉 譯類別:1. -> 作業系統 -> UNIX
   2. -> 作業系統 -> Linux
譯者:
出版社:清華大學出版社UNIX/Linux應用、編程與系統管理(第3版) 3dWoo書號: 38399
詢問書籍請說出此書號!

缺書
不接受訂購

出版日:4/16/2014
頁數:716
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
不接受訂購
ISBN:9787302355847
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

一門不能改變思維方式的語言是不值得掌握的。
—Larry Wall(Perl的發明者),Randal Schwartz

早在開始講授本課程之前,我就決定寫一本關于UNIX的書。我對當時市面上的相關書籍都不滿意,也幾乎沒有任何專家可以尋求幫助。在費盡千辛萬苦學完本課程之后,我決定寫本書,向大家介紹自己的經驗,但當時并沒有想清楚它應當面向什么樣的讀者對象。多年之后,在我開始講授這門課程時卻發現,學生們提出的一些問題都已經在我的書中做了解答。這時,我才知道自己做對了,這實際上是一本教科書。
UNIX經受住了時間的考驗,而且在今后一段時間內應當仍然如此。但在說起UNIX時,還是有很多人會說它“不夠友好”、“讓人撓頭”。初學者還是會因為它顯而易見的復雜性而備感打擊。即便是經驗豐富的計算機專業人士,也很難再樂于接受它的工作方式,不愿意觸碰它的命令行、無數的選項和復雜的語法。今天的所有UNIX和Linux系統都提供了圖形用戶界面,但命令行仍然是UNIX系統的主干。
UNIX令人激動之處在于它的許多功能都是隱藏的。UNIX并沒有把一切都擺在明面上;它鼓勵用戶去創造、去革新。對于UNIX愛好者來說,如何找出能夠完成一項復雜任務的命令組合或腳本,都是真正的挑戰。這就是UNIX,而且它最好繼續保持這種風格。如果你欣賞這樣一句話——“任何瘋狂背后皆有章法可循”,那你也就上道了,這本書就是為你準備的。
與眾不同
我最早接觸的計算機就是UNIX機,在UNIX系統中摸爬滾打很長一段時間后,我認識到,妨礙理解UNIX的絆腳石并不是人們認為的那些。UNIX之所以不容易理解,并不是因為它太難了,而是因為作者們缺乏足夠的想象力,沒有為它換一種表現方式。例如,書中經常會給出一條命令的20個選項,而其中可能只有一兩項是真正有用的。我在飽受挫折之后,決定自行編寫一本“真正”的UNIX書籍——一本知道用戶真正需要什么的UNIX書籍,一本用戶愿意隨身攜帶的UNIX書籍。
現實示例 UNIX的概念很簡單,但也很抽象,為什么要采用某一特定方式來處理某一特定功能,其原因往往不是那么明顯。要掌握這一操作系統,就需要全面理解這些概念。我確信已經足夠清晰地解釋了它的關鍵特性,既揭示了在設計時的考慮因素,也揭示了它們與現實世界的相關性。你會發現,本書中的許多例子都源于現實生活中的情景。
用戶指南與程序員指南 UNIX用戶主要有兩類,一類用戶使用UNIX的原生工具;另一類用戶則使用shell腳本和UNIX系統調用庫來開發工具。本書足夠詳細地討論了這兩方面的內容,又使篇幅保持在便于閱讀、攜帶的范圍內(在同類書籍中,可能只有本書能做到這一點)。
前11章為“用戶”服務,對于導論性的UNIX課程來說,這些內容就足夠了。“開發人員”是shell或系統程序員,他們還得知道工作機理,例如在創建或鏈接一個文件時,目錄會受到什么樣的影響。為他們著想,前面幾章包括了一些用于探究關鍵概念的特殊加框文字。這種安排應當不會對初學者造成影響,他們可以悄悄地忽略這些部分。第16~18章體現了UNIX的精華,要求系統程序員必須閱讀這些章節。
醒目的學習提示 教學提示是本書的一個突出特征。它們有各種不同的名稱,例如“注意”、“警告”和“提示”。我認為Linux是UNIX家庭中的一個重要成員,所以特別采用企鵝標記來突出顯示Linux特性。
許多作者都是在單獨一章中討論每種shell,我不太贊同這種做法。我主要使用Bash shell來討論關鍵概念,然后再分別討論C shell、Korn shell、Bourne shell的不同之處。
大量習題與練習 本書給出了大量問題,用來測驗讀者掌握的知識。其中有超過1/3是自測問題,其答案在附錄I中給出。這些問題都是面向初學者的,在繼續學習下一章之前,應當首先出色地回答這些問題。
難度更大、范圍更廣的問題留在“習題”部分。其中有一部分的難度很大,可能需要花費一些時間進行求解。這些習題會鞏固(往往還會豐富)你的UNIX知識,所以不要忽視它們。這些問題的答案在本書網站上提供:http://www.mhhe.com/das。
新增內容
一些評論者似乎對本書第2版非常滿意,他們警告說,再做改進可能不會有“太大收效”。我在牢記這一點的同時,在這一版中進行了以下修改:
● vi/vim一章得以保留,而emacs一章則被壓縮,轉為附錄。為使初學者更輕松地過渡到vi,第3章介紹了pico編輯器。
● bc計算器實用程序在這一版中又回歸了,但只是作為shell程序員的一個高效計算工具。
● 專門為討論C語言程序設計的基礎知識而增加了一章。盡管有些簡略,但有了這一章,就足以理解后面兩章的系統程序設計內容了。
● 現在的第15章包括了流行的并發版本系統(CVS),所有Linux系統中都可以找到它。SCCS和RCS在這一版中繼續保有一席之地,但在下一版,至少會刪除它們中的一項。
● 由于GNU調試程序(gdb)優于dbx,所以這一版中已經將gdb收納在內,不過后者依然得以保留。
這些變化使本書的篇幅稍有增加。盡管增加了對Linux和GNU工具的介紹,但本書的通用特性仍然保留下來;它沒有專門關注UNIX的任何具體分發版本,而是突出介紹了Solaris和Linux中的各種變型。
組織結構
這一版在邏輯上劃分為用戶部分和程序設計部分。UNIX基礎知識僅限于前11章,這部分內容在討論聯網工具時達到高潮。接下來的7章涵蓋了程序設計的相關資料,包括awk、shell程序設計、系統程序設計和perl。
UNIX簡介 第1章通過一個簡單的實踐練習揭示了UNIX的核心概念。接下來是UNIX的發展簡史及功能展示。這一章還向讀者介紹了kernel和shell,它們共同處理系統的工作負載。在為開發可移植應用程序而構建框架的過程中,一些標準機構(例如POSIX和The Open Group)扮演著重要角色,學習本章之后將會了解這些機構發揮的作用。
第2章介紹了UNIX命令行的結構。它還討論了使用man命令查詢聯機文檔的技巧。我們將學習使用電子郵件程序,改變密碼,并了解系統中發生了什么。我們可能會出錯,而且遲早會出錯,所以還要知道如何使用鍵盤進行糾正。
文件 文件是UNIX的兩大支柱之一,接下來的三章將討論文件。第3章討論了系統中各種類型的文件,以及處理這些文件的命令。我們將學習如何創建目錄、在目錄結構中導航定位、復制和刪除目錄中的文件。還將學習如何使用pico編輯器來編輯文件。UNIX還提供了許多壓縮實用工具,可以用來節省磁盤空間。
文件擁有屬性(特性),第4章介紹了文件的主要屬性,特別是用ls -l命令顯示的屬性。要知道,文件和目錄面對攻擊都是大門洞開的,所以要學會如何通過管理它們的權限來提供保護。利用鏈接,以多個名稱來訪問同一文件。我們可能還會忘記文件的存放位置,所以需要熟悉find命令。
一個人的工作效率還取決于他對編輯器功能的熟悉程度。第5章介紹了vi,它在任何工作環境下都是功能最強大的文本編輯器之一。程序員使用這一編輯器的次數可能比其他任何人都多,所以本章中的大多數例子都采用程序代碼段。附錄D中對vi的功能進行了總結。
shell和進程 現在需要理解一個非常重要的程序,我們總是和它打交道的,那就是shell。第6章介紹了shell的解釋功能,包括它的許多元字符。我們將學習使用通配符,用單個模式來匹配一組類似的文件名。使用重定向和管道來操控命令的輸入和輸出。shell也是一門編程語言,所以必須要等到第13章才能完全理解它。
第7章介紹了進程,它是UNIX系統的另一支柱。進程與文件類似,也擁有屬性。這一章將幫助讀者理解如何用fork-exec機制來創建進程,學習控制進程,在前臺和后臺之間移動它們,還將學習如何通過發送信號來終止進程。
UNIX shell為定制環境提供了很好的機會(第8章)。要理解和使用shell變量、創建命令別名。選擇一種提供所有這些功能的合適shell,并學習使用初始化腳本來保存對環境的修改。
過濾器 接下來的兩章討論過濾器——這是UNIX工具包中的一些特殊命令,負責所有文本處理任務。第9章介紹了一些簡單的過濾器,并說明它們在相互連接時,如何最為有效。專門有一個示例小節,其中給出了現實生活中的三個應用,它們都是在管道中使用這些過濾器加以解決的。
第10章討論了兩種功能強大的過濾器——grep和sed,它們共同處理所有的模式查找、編輯和替換操作。這里將介紹正則表達式,它是一種精心設計的模式匹配機制,通常會大幅簡化查找與替換任務。過濾器內容之后有一章討論聯網工具(第11章),本書第一部分到此結束。
程序設計 后面的7章討論了UNIX的大多數程序設計功能。在第12章中,awk命令表現得像是一個過濾器和一門程序設計語言。掌握了awk及其標準程序設計構造(例如if、for和while構造),應當就為shell程序設計、perl和C語言程序設計打好了基礎。
最后,我們會將所有命令和管道放到shell腳本中。利用第13章討論的shell程序設計功能,開發交互式與非交互式腳本。學習設計一種腳本,在以不同名字調用這種腳本時,其行為會發生相應變化。對shell程序員來說,本章給出的三個示例腳本是必讀內容。
下面4章與C程序設計有著直接或間接的關系。第14章介紹了C語言程序設計的入門知識,這是這一版新增的唯一一章。接下來是程序開發工具(第15章)。利用make實用工具和一種功能強大的調試程序(gdb)來管理和調試程序。另外,還要學習使用SCCS、RCS和CVS來維護一個程序的多個版本。
本書有兩章介紹了系統調用在C語言程序設計環境中的應用,第16章是其中的第一章,這一章討論了與文件和I/O相關的系統調用。編寫一些程序,執行面向目錄的功能,例如列出文件等,還要學習如何提取和處理存儲在inode中的文件屬性。
第17章討論了與進程有關的系統調用。學習使用系統調用中的fork和exec系列來創建進程。一旦理解了內核如何在內存中為已打開文件維護元數據,就能實現重定向和管道,以及如何在程序中處理信號。
我們在第18章遇到了perl,它是UNIX世界中功能最強大的過濾器和腳本設計語言。大多數UNIX概念都內嵌在perl的設計中,許多UNIX用戶離開它就什么也做不了,原因就在于此。盡管我們無法在單獨一章中充分欣賞perl,但第18章作為一個開端,應當是很有用的。
最后,每個用戶都必須了解與系統管理有關的例程任務,第19章討論了這一領域的基本問題。理解系統提供的重要安全功能。熟悉與系統啟動與關閉相關的活動,以及如何加載文件系統,并檢查一致性。還要學習如何進行基本的備份操作。
致謝
本書的每一版都使我有機會與新的團隊進行合作。本項目的主要推動者是Raghu Srinivasan(全球出版商),同他和Melissa Leick(項目經理)的合作非常愉快。他們在McGraw-Hill指導團隊的方式給我留下了深刻印象。我還必須感謝Brenda Rolwes(設計協調者)和Curt Reynolds(他負責營銷安排)。還要特別感謝Melinda Bilecki(策劃編輯),她一如既往地機敏。她是唯一一位從本書構思階段就一直參與的人,這種連續性使我受益良多。
還必須感謝審稿者,他們對于本版形式、內容的調整發揮了重要作用:
Ivan Bajic,圣地亞哥州立大學
Bruce Elenbogen,密西根大學迪爾本分校
Ziad Kobti,加拿大溫莎大學
Galina Piatnitskaia,密蘇里大學圣路易斯分校
Paul Piwowarski,肯塔基大學
Darren Provine,羅文大學
Quazi M. Rahman,加拿大西安大略大學
我要向Deepti Narwat表示最誠摯的謝意,他是負責Cenveo Publisher Services的項目經理,本書的整個生產流程都由他負責。還有其他許多人不能一一提及,但他們都為本書做出了同樣的貢獻。
最后的“至理名言”
大多數例子都已經在Solaris和Linux上進行了測試,但不能保證它們在所有系統上都可以無錯誤運行。由于UNIX的分化,實際上不可能在所有UNIX中進行全面測試。如果有一些命令無法以本書說明的方式正常工作,請不要得出系統有bug的結論。不過,這些例子中仍然可能存在bug,歡迎讀者指出。
在結束前言之前,應當給出一點提醒建議。許多人都因為思維混亂、受到誤導而錯過了UNIX班車,現在深以為憾。不要讓這件事再發生在你身上。一旦你決定探索UNIX,應當學習利用已有的功能,不要再去重復實現別人已經實現過的重要功能。你很快就會發現,一個充滿機會和激情的世界向你張開了懷抱。一定要充滿熱情和自信地探索這一領域,我與你同在。

Sumitabha Das
內容簡介:

 UNIX是計算機發展歷史上最成功的操作系統家族。它誕生于貝爾實驗室,爾后迅速成為世界上操作系統的主流并延續至今。Linux派生于UNIX,并且在小型機和桌面計算機領域成為和微軟的Windows并駕齊驅的操作系統家族。
  《UNIX/Linux應用、編程與系統管理(第3版)》兼顧用戶和程序員的思路來編寫,是終極的UNIX/Linux教材。本書既有教學工具又有詳盡的參考資料,非常適合于任何UNIX或Linux相關課程。與類似教材不同的是,本書設置了一個強大的教學框架,能夠使入門級的學生牢固地掌握基本概念,而高級主題章節能激發更有經驗的讀者超越基礎知識。書中提供了近千道練習和自測題,用于讓學生測試和鞏固他們對知識的理解。


目錄:

第I 部分 UNIX之用戶篇
第1章 UNIX簡介 3
1.1 操作系統 4
1.2 UNIX操作系統 5
1.3 了解你的計算機 5
1.4 系統管理員 7
1.5 登錄和注銷 7
1.5.1 登錄 7
1.5.2 注銷 8
1.6 實踐練習 9
1.6.1 用date和who查看
系統信息 9
1.6.2 用ps查看進程 10
1.6.3 處理文件 11
1.6.4 處理目錄 12
1.7 UNIX的成功之路 14
1.7.1 伯克利:第二學派 14
1.7.2 UNIX的分化 15
1.7.3 互聯網 15
1.7.4 Windows的威脅 15
1.8 POSIX和單一UNIX規范 16
1.9 Linux和GNU 16
1.10 UNIX體系結構 17
1.10.1 分工:Kernel和shell 17
1.10.2 文件和進程 18
1.10.3 系統調用 19
1.11 UNIX的功能 19
1.11.1 多用戶系統 19
1.11.2 多任務系統 20
1.11.3 應用程序庫 20
1.11.4 構建基塊方法 20
1.11.5 模式匹配 21
1.11.6 程序設計實用工具 21
1.11.7 文檔 21
1.12 小結 22
1.13 自測題 22
1.14 習題 23
第2章 熟悉UNIX命令 25
2.1 命令基礎 26
2.1.1 PATH:定位命令 26
2.1.2 命令的存放位置 27
2.2 命令結構 28
2.3 命令應用的靈活性 30
2.4 man:聯機幫助 31
2.4.1 導航與查找 33
2.4.2 用man -k和man -f
獲取更多幫助 33
2.5 man文檔 33
2.5.1 了解man頁 34
2.5.2 用man來理解man 35
2.6 echo:顯示消息 37
2.7 printf:echo的替代命令 39
2.8 script:記錄會話 39
2.9 以mailx命令使用電子郵件 40
2.9.1 發送郵件 40
2.9.2 接收郵件 41
2.9.3 mailx內部命令 42
2.10 passwd:改變密碼 43
2.11 uname:顯示計算機名和
操作系統 44

2.12 who:了解用戶 45
2.13 date:顯示系統日期 45
2.14 stty:在出錯時 46
2.15 X Window系統 48
2.15.1 終端模擬器 48
2.15.2 文件管理器 49
2.16 小結 50
2.17 自測題 51
2.18 習題 52
第3章 文件系統 55
3.1 文件 56
3.1.1 普通(常規)文件 56
3.1.2 目錄文件 56
3.1.3 設備文件 57
3.2 文件名中有什么 57
3.3 文件系統的層次結構 58
3.4 UNIX文件系統 59
3.5 隨命令一起使用絕對路徑名 60
3.6 HOME變量和~:主目錄 61
3.7 pwd和cd:在文件系統中
導航 61
3.8 相對路徑名(.和..) 63
3.9 mkdir:創建目錄 64
3.10 rmdir:刪除目錄 65
3.11 ls:列出文件 66
3.12 cp:復制文件 69
3.13 mv:重命名文件 70
3.14 rm:刪除文件 71
3.15 cat:顯示和串聯文件 73
3.16 more:UNIX分頁器 74
3.17 pico:基本文本編輯 76
3.17.1 導航 77
3.17.2 文本編輯 77
3.18 wc:計算行數、字數和
字符數 77
3.19 lp:打印文件 78
3.20 od:查看不可打印字符 80

3.21 dos2unix、unix2dos和
Tofrodos:在DOS和
UNIX之間轉換 80
3.22 tar:存檔程序 81
3.23 gzip:壓縮程序 82
3.24 zip:壓縮和存檔程序 84
3.25 使用這些命令的其他方式 85
3.26 小結 85
3.27 自測題 86
3.28 習題 86
第4章 文件屬性 89
4.1 重溫ls(-l):列出文件屬性 89
4.2 文件權限 91
4.3 chmod:改變文件權限 92
4.3.1 相對權限 93
4.3.2 絕對賦予權限 94
4.3.3 遞推操作(-R) 95
4.4 目錄 96
4.4.1 讀權限 96
4.4.2 寫權限 96
4.4.3 執行權限 98
4.5 umask:默認的文件與
目錄權限 98
4.6 文件系統和inode 99
4.7 ln:創建硬鏈接 101
4.8 再論ln:創建符號鏈接 103
4.9 文件所有權 105
4.9.1 chown:改變文件所有權 106
4.9.2 chgrp:改變用戶組
所有者 106
4.9.3 如何處理入侵者 107
4.10 修改時間與訪問時間 108
4.11 find:定位文件 108
4.11.1 選擇準則 110
4.11.2 find操作符(!,-o和-a) 112
4.11.3 操作部分的操作符 112
4.12 小結 113
4.13 自測題 113
4.14 習題 114
第5章 vi/vim編輯器 117
5.1 vi基礎 118
5.2 一些提示 120
5.3 輸入模式——輸入和
替換文本 121
5.3.1 插入和追加文本(i和a) 122
5.3.2 在行的兩端插入和追加
文本(I和A) 122
5.3.3 新建一行(o和O) 123
5.3.4 替換文本(r、s、R和S) 124
5.3.5 輸入控制字符([Ctrl-v]) 125
5.4 保存文本并退出——ex模式 126
5.4.1 保存工作(:w) 127
5.4.2 保存并退出(:x和:wq) 127
5.4.3 中止編輯(:q) 127
5.4.4 寫入選定行 128
5.4.5 退出到shell(:sh和
[Ctrl-z]) 129
5.5 從崩潰中恢復(:recover和-r) 129
5.6 導航 130
5.6.1 4個方向上的相對
移動(h、j、k和l) 131
5.6.2 滾動([Ctrl-f]、[Ctrl-b]、
[Ctrl-d]和[Ctrl-u]) 131
5.6.3 單詞導航(b、e和w) 132
5.6.4 移到行的末端(0、|和$) 132
5.6.5 絕對移動(G) 133
5.7 編輯文本,不使用操作符 133
5.7.1 刪除文本(x、X和dd) 133
5.7.2 移動文本(p) 134
5.7.3 合并行(J) 134
5.7.4 改變大小寫(~) 135
5.8 糾正C程序 135
5.9 用操作符編輯文本 136
5.9.1 刪除和移動文本
(d、p和P) 137
5.9.2 復制文本(y、p和P) 138
5.9.3 修改文本(c) 139
5.10 在文件之間復制和
移動文本 139
5.11 撤消之前的編輯
指令(u和U) 140
5.12 查找模式(/和?) 141
5.13 重復上一條命令(.) 142
5.14 替代-查找并替換(:s) 143
5.15 set:定制vi 144
5.16 map:映射鍵盤的按鍵 146
5.17 abbr:文本輸入的縮寫 147
5.18 小結 147
5.19 自測題 148
5.20 習題 149
第6章 shell 151
6.1 作為命令處理器的shell 152
6.2 shell提供的功能 152
6.3 模式匹配——通配符 153
6.3.1 *和? 154
6.3.2 字符類 155
6.3.3 匹配句點 156
6.3.4 綜述 157
6.4 轉義與引用 157
6.4.1 轉義 158
6.4.2 引用 159
6.4.3 在echo中進行轉義 159
6.5 重定向 160
6.5.1 標準輸入 160
6.5.2 標準輸出 162
6.5.3 文件描述符 163
6.5.4 標準錯誤 164
6.5.5 過濾器——使用標準
輸入與標準輸出 165
6.6 集體處理 165
6.6.1 復制描述符 166
6.6.2 命令分組 166
6.7 /dev/null和/dev/tty:兩個
獨立的文件 167
6.8 管道 168
6.9 tee:創建一個T型三通 170
6.10 命令替換 171
6.11 shell變量 172
6.11.1 引用和轉義的影響 173
6.11.2 使用shell變量的場合 174
6.12 shell腳本 175
6.13 shell對命令行的處理 175
6.14 有關通配符的更多信息 176
6.15 xargs:構建動態命令行 177
6.16 小結 177
6.17 自測題 178
6.18 習題 179
第7章 進程 181
7.1 進程基礎 182
7.2 shell和init 182
7.3 ps:顯示進程屬性 183
7.4 系統進程和init 184
7.5 進程創建機制 187
7.6 繼承的進程屬性 188
7.7 不能使用單獨進程的情景 190
7.8 進程狀態與僵尸
進程(Zombie) 190
7.9 信號處理 191
7.10 在后臺運行作業 193
7.10.1 &:不注銷 194
7.10.2 nohup:安全注銷 194
7.11 作業控制 195
7.12 at和batch:推后執行 198
7.12.1 at:一次執行 198
7.12.2 batch:在批隊列中
執行作業 199
7.12.3 限制at和batch的使用 199
7.13 cron和crontab:定期
運行作業 199
7.14 小結 202
7.15 自測題 203
7.16 習題 203
第8章 shell—定制環境 205
8.1 shell 205
8.2 環境變量 207
8.3 常見環境變量 208
8.4 別名 212
8.5 命令歷史記錄 213
8.5.1 訪問之前的命令 214
8.5.2 在先前命令中進行替換 215
8.5.3 使用上一條命令中的
參數($_) 215
8.5.4 歷史記錄變量 216
8.6 行內命令編輯 217
8.7 ~替換 218
8.8 使用set選項 219
8.9 初始化腳本 220
8.9.1 登錄腳本 221
8.9.2 rc文件 221
8.10 C shell 222
8.10.1 局部變量和環境變量 222
8.10.2 別名 224
8.10.3 歷史記錄 225
8.10.4 其他shell變量 225
8.10.5 初始化腳本 226
8.11 目錄棧操作 226
8.12 小結 228
8.13 自測題 229
8.14 習題 229
第9章 簡單過濾器 231
9.1 pr:對文件進行編頁 232
9.2 對比文件 233
9.3 cmp:逐字節對比 234
9.4 comm:哪些共同內容 235
9.5 diff:將一個文件轉換為
另一文件 236
9.6 head:顯示一個文件的開頭 236
9.7 tail:顯示文件的末尾 237
9.8 cut:垂直劃分文件 238
9.9 paste:粘貼文件 240
9.10 sort:對文件進行排序 240
9.11 uniq:定位重復行和
非重復行 244
9.12 tr:變換字符 245
9.13 應用過濾器 247
9.13.1 列出當前目錄中5個
最大的文件 248
9.13.2 創建一份單詞使用
情況列表 249
9.13.3 找出兩個密碼文件
之間的差別 249
9.14 小結 251
9.15 自測題 251
9.16 習題 252
第10章 使用正則表達式的
過濾器——grep和sed 255
10.1 示例數據庫 256
10.2 grep:查找模式 256
10.2.1 grep中的引用 257
10.2.2 grep失敗的場合 258
10.3 grep選項 258
10.4 基本正則表達式(BRE)
——簡介 260
10.4.1 字符類 262
10.4.2 * 262
10.4.3 句點 263
10.4.4 指定模式位置(^和$) 264
10.4.5 元字符失去其意義的
情景 265
10.5 擴展正則表達式(ERE)和
egrep 265
10.5.1 +和? 266
10.5.2 匹配多種模式(|、(和)) 266
10.6 sed:流編輯器 267
10.7 行尋址 269
10.8 sed選項 270
10.9 上下文尋址 271
10.10 將選定行寫入文件(w) 272
10.11 文本編輯 272
10.11.1 插入和改變行
(i、a、c) 272
10.11.2 刪除行(d) 273
10.12 替換(s) 274
10.12.1 在替換中使用正則
表達式 275
10.12.2 記憶模式(//) 275
10.13 基本正則表達式回顧 276
10.13.1 重復模式(&) 277
10.13.2 間隔正則表達式
(IRE) 277
10.13.3 標記正則表達式
(TRE) 277
10.14 應用IRE和TRE 278
10.14.1 處理電話簿 278
10.14.2 用POSIX兼容的函數
替換過時的函數 279
10.14.3 變換URL中的
路徑名 280
10.15 小結 281
10.16 自測題 281
10.17 習題 282
第11章 聯網工具 285
11.1 TCP/IP基礎知識 286
11.2 解析主機名和IP地址 287
11.2.1 /etc/hosts:主機文件 287
11.2.2 域名系統(DNS) 288
11.3 客戶端-服務器:網絡
應用程序如何通信 290
11.4 ping:檢查網絡 291
11.5 telnet:遠程登錄 292
11.6 ftp:文件傳輸協議 293
11.6.1 基本文件與目錄處理 293
11.6.2 傳送文件 294
11.6.3 匿名FTP 295
11.7 密碼學基礎 296
11.7.1 對稱密鑰算法 296
11.7.2 非對稱密鑰算法 297
11.8 SSH:安全shell 297
11.8.1 主機驗證 297
11.8.2 rhosts/shosts驗證機制 298
11.8.3 采用對稱算法的
用戶驗證 298
11.8.4 使用SSH代理進行
非交互式登錄 300
11.9 SSH協議 301
11.9.1 遠程登錄與執行
命令(ssh和slogin) 301
11.9.2 用sftp和scp進行
文件傳輸 302
11.10 互聯網郵件 303
11.11 MIME:處理郵件中的
二進制附件 305
11.12 在TCP/IP網絡上
使用X Window 306
11.12.1 顯示器 306
11.12.2 使用DISPLAY變量 307
11.12.3 使用-display選項 307
11.13 HTTP和萬維網 307
11.13.1 統一資源定位符
(URL) 308
11.13.2 HTTP:Web的協議 309
11.13.3 運行外部程序 309
11.13.4 HTML:網頁的語言 310
11.13.5 Web瀏覽器 311
11.14 Web上的多媒體:重溫
MIME 311
11.15 小結 312
11.16 自測題 313
11.17 習題 314
第II部分 UNIX之程序員篇
第12章 用awk進行過濾和
程序設計 317
12.1 awk預備知識 318
12.2 使用print和printf 320
12.3 數字處理 321
12.4 變量和表達式 322
12.5 比較與邏輯運算符 324
12.5.1 字符串和數值比較 324
12.5.2 ~和!~:正則表達式
運算符 325
12.5.3 邏輯運算符 327
12.6 -f選項:將awk程序
存儲在文件中 327
12.7 BEGIN和END節 328
12.8 位置參數 329
12.9 數組 329
12.9.1 關聯(哈希)數組 330
12.9.2 ENVIRON[ ]:環境
數組 331
12.10 內置變量 331
12.11 函數 333
12.12 控制流——if語句 335
12.13 for循環 336
12.14 while循環 338
12.15 結論 339
12.16 小結 340
12.17 自測題 340
12.18 習題 341
第13章 shell程序設計 345
13.1 shell腳本 346
13.1.1 script.sh:一個
簡單腳本 346
13.1.2 She-Bang行 347
13.2 read:使腳本變為
交互式的 348
13.3 使用命令行參數 348
13.4 exit和$?:命令的
退出狀態 350
13.5 邏輯運算符&&和||
——條件執行 351
13.6 if條件句 351
13.7 使用test和[ ]對表達式求值 353
13.7.1 數值比較 353
13.7.2 [ ]:test的快捷方式 354
13.7.3 字符串比較 355
13.7.4 文件屬性檢驗 355
13.7.5 使用復合條件 357
13.8 兩個重要的程序設計習慣 357
13.8.1 以交互式、非交互式
執行一項任務 357
13.8.2 用不同名稱調用
腳本($0) 359
13.9 case條件句 359
13.10 expr、bc和basename:
計算與字符串處理 361
13.10.1 用expr進行計算 362
13.10.2 用bc進行浮點計算 362
13.10.3 用expr處理字符串 363
13.10.4 basename:改變
文件名擴展 364
13.11 示例程序1:自動選擇
上一個C程序 365
13.12 for:用列表進行循環 366
13.12.1 列表的來源 366
13.12.2 使用for的重要應用 367
13.13 while:循環 367
13.13.1 在循環中處理重定向 368
13.13.2 使用while等待文件 369
13.13.3 找出用戶占用的空間 370
13.13.4 break和continue 371
13.14 示例腳本2:向備份文件
提供數字擴展名 371
13.15 用set和shift處理
位置參數 373
13.15.1 按名稱殺死進程 374
13.15.2 shift:左移位置參數 374
13.15.3 IFS變量:set的
默認分隔符 375
13.16 示例腳本3:已下載
文件的目錄 376
13.17 Here文檔(<<) 378
13.18 shell函數 379
13.19 trap:腳本如何處理信號 380
13.20 eval:兩次求值 381
13.21 exec語句 382
13.22 小結 382
13.23 自測題 383
13.24 習題 384
第14章 perl——高級操縱器 387
14.1 perl預備知識 388
14.2 變量和常數 389
14.3 運算符 391
14.3.1 比較與邏輯運算符 391
14.3.2 串聯運算符和重復
運算符(.和x) 392
14.4 標準條件句與循環 392
14.4.1 if條件句 393
14.4.2 while、do-while和
for循環 393
14.5 從命令行參數讀取文件 394
14.5.1 用單行代碼讀取文件 395
14.5.2 在腳本中讀取文件 395
14.6 當前行號($.)和范圍
運算符(..) 396
14.7 $_:默認變量 396
14.8 字符串處理函數 397
14.9 列表和數組 399
14.10 foreach:循環遍歷
一個列表 401
14.11 兩個重要的列表函數 402
14.11.1 split:分割到列表或
數組中 402
14.11.2 join:聯接列表 404
14.12 dec2bin.pl:將十進制數
變換為二進制 404
14.13 關聯數組 405
14.14 使用正則表達式 407
14.14.1 識別空白、數位和單詞 407
14.14.2 IRE的TRE功能 408
14.15 用s和tr函數替換 409
14.16 文件處理 411
14.17 文件測試 412
14.18 子例程 413
14.19 用perl進行CGI程序設計——概述 414
14.19.1 查詢字符串 414
14.19.2 GET和POST:
請求方法 415
14.20 小結 415
14.21 自測題 416
14.22 習題 417
第15章 C語言簡介 421
15.1 C語言 422
15.2 first_prog.c:理解我們的第一個C程序 423
15.2.1 預處理器部分 424
15.2.2 主體 424
15.2.3 main:獨一無二的函數 425
15.3 printf和scanf:兩個重要函數 426
15.3.1 printf:打印到終端 426
15.3.2 scanf:由鍵盤輸入 427
15.4 變量和常數 427
15.5 基本數據類型 428
15.5.1 整型 428
15.5.2 浮點類型 429
15.5.3 字符類型 430
15.6 sizeof.c:確定基本數據
類型的大小 431
15.7 符號常量:有名稱的常量 432
15.8 數組 432
15.9 arrays.c:打印數組元素 433
15.10 結構 434
15.11 運算符和表達式 435
15.11.1 位運算符 436
15.11.2 自動變換 436
15.11.3 隱式變換 437
15.12 type_conversion.c:演示類型變換 438
15.13 求值順序 440
15.13.1 運算符優先級 440
15.13.2 運算符結合性 441
15.14 控制流回顧 441
15.14.1 用switch進行決策 442
15.14.2 用do-while重復 443
15.14.3 break和continue 443
15.15 函數 444
15.16 first_func.c:兩個參數和
返回值 445
15.17 函數實參、形參和局部
變量 446
15.17.1 按值傳遞 447
15.17.2 swap_failure.c:形參與局部變量的可見性 448
15.17.3 以數組為函數實參 449
15.17.4 以結構作為函數實參 450
15.18 指針 450
15.19 pointers.c:指針的基本功能 452
15.20 指針屬性 453
15.20.1 指針運算 453
15.20.2 其他屬性 454
15.21 指針和函數 455
15.21.1 解決交換問題 455
15.21.2 用指針返回多個值 456
15.22 指針和其他數據類型 456
15.22.1 指針和數組 456
15.22.2 指針和字符串 457
15.22.3 字符串數組 458
15.22.4 指針和結構 458
15.23 小結 459
15.24 自測題 460
15.25 習題 461
第16章 程序開發工具 463
16.1 處理擁有多個源文件的C應用程序 463
16.1.1 包含多個源文件的應用程序 464
16.1.2 編譯和鏈接應用程序 466
16.1.3 為什么需要.o文件 467
16.2 make:使程序保持最新 468
16.2.1 刪除冗余 470
16.2.2 make的其他功能:清理與備份 470
16.2.3 宏 471
16.3 ar:生成庫(檔案) 472
16.3.1 使用庫 473
16.3.2 用make維護檔案 474
16.4 靜態庫和共享庫 474
16.5 用SCCS、RCS和CVS
實現版本控制 475
16.6 SCCS會話 476
16.6.1 admin:創建一個SCCS文件 477
16.6.2 get:簽出 477
16.6.3 delta:簽入 478
16.6.4 unget:如果改變主意 480
16.7 活動與歷史信息 481
16.7.1 sact:顯示活動狀態 481
16.7.2 prs:顯示SCCS歷史 481
16.8 繼續以SCCS編輯 482
16.8.1 get -r:改變默認的
編號順序 482
16.8.2 處理多個版本 483
16.8.3 rmdel和comb:刪除和
合并版本 484
16.8.4 使用標識關鍵字 485
16.9 控制對SCCS的訪問權限 486
16.9.1 控制用戶訪問 486
16.9.2 控制發布版本 486
16.10 版本控制系統(RCS) 487
16.10.1 用ci創建RCS文件 488
16.10.2 co和ci:簽出和簽入 488
16.10.3 指定修訂 489
16.10.4 rlog和rcs:其他
RCS功能 490
16.11 并發版本系統(CVS) 492
16.11.1 建立存儲庫 493
16.11.2 導入文件 493
16.11.3 簽出 494
16.11.4 編輯和簽入 494
16.11.5 合并和解決沖突 495
16.11.6 設置標記并導出
存儲庫 496
16.11.7 其他功能 496
16.12 用gdb調試程序 497
16.12.1 啟動gdb 500
16.12.2 使用斷點 501
16.12.3 單步執行程序 502
16.12.4 再賦值 503
16.12.5 設定觀察點 504
16.12.6 gdb的其他功能 505
16.13 小結 506
16.14 自測題 506
16.15 習題 507
第17章 系統程序設計I——文件 509
17.1 系統調用的基礎知識 510
17.1.1 系統調用剖析 510
17.1.2 系統調用與庫
函數的對比 510
17.2 errno和perror:處理錯誤 511
17.3 open:打開和創建文件 513
17.4 close:關閉文件 515
17.5 read:讀取文件 516
17.6 write:寫文件 516
17.7 ccp.c:復制文件 517
17.8 lseek:定位偏移指針 519
17.9 truncate和ftruncate:截短文件 521
17.10 umask:在創建期間修改文件權限 522
17.11 目錄導航 523
17.12 讀取目錄 524
17.13 修改目錄中的項目 526
17.13.1 mkdir和rmdir:創建和刪除目錄 526
17.13.2 link和symlink:創建硬鏈接和符號鏈接 526
17.13.3 unlink:刪除鏈接 527
17.13.4 rename:對文件、目錄或符號鏈接重命名 527
17.14 讀取Inode:struct stat和stat 528
17.14.1 attributes.c:顯示一些文件屬性 529
17.14.2 S_IFMT:處理st_mode成員 530
17.14.3 用S_ISxxx宏確定文件類型 530
17.14.4 訪問權限位 531
17.14.5 lsdir.c:僅列出目錄 531
17.15 access:檢查實際用戶的權限 533
17.16 修改文件屬性 534
17.16.1 chmod和fchmod:
改變文件權限 535
17.16.2 chown:改變所有權 535
17.16.3 utime:改變時間戳記 536
17.16.4 atimemtime.c:創建一個具有相同時間
戳記的文件 536
17.17 小結 537
17.18 自測題 538
17.19 習題 539

第18章 系統程序設計II
——進程控制 541
18.1 進程回顧 541
18.1.1 虛擬地址空間 542
18.1.2 進程表 543
18.2 進程環境 544
18.3 fork:復制當前進程 545
18.4 exec:進程創建的最終
步驟 547
18.4.1 execl和execv:關鍵
成員 548
18.4.2 其他exec成員 549
18.5 收集退出狀態 550
18.5.1 wait:當父進程等待時 550
18.5.2 waitpid:一種功能更
強大的等待機制 551
18.6 fork_exec_wait.c:使用
全部三個調用 552
18.7 文件共享 553
18.7.1 文件說明符表 554
18.7.2 文件表 554
18.7.3 vnode表 555
18.7.4 當鏈接發生變化時 555
18.8 文件說明符處理 556
18.8.1 dup和dup2:復制文件說明符 556
18.8.2 redirection.c:最后討論重定向 557
18.8.3 fcntl:對其推薦程度高于dup和dup2 559
18.9 信號處理 559
18.10 sigaction:安裝信號處理器 561
18.10.1 signal.c:捕獲SIGALRM信號 563
18.10.2 捕獲終端生成的信號 564
18.11 killprocess.c:使用fork-exec-wait和SIGCHLD 565
18.12 用未命名管道實現進程間通信 567
18.12.1 和fork一起使用pipe 568
18.12.2 pipe2.c:在管道中運行UNIX命令 569
18.13 小結 570
18.14 自測題 571
18.15 習題 572
第III部分 系 統 管 理
第19章 系統管理 577
19.1 root:系統管理員的登錄 578
19.2 管理員的特權 579
19.3 用戶管理 580
19.3.1 理解/etc/group 580
19.3.2 理解/etc/passwd 581
19.3.3 添加和修改用戶配置文件 582
19.4 維護安全 583
19.4.1 受限制的shell 583
19.4.2 Set-User-Id(SUID):臨時能力 584
19.4.3 粘著位 585
19.5 啟動與關機 585
19.5.1 啟動 585
19.5.2 關機 586
19.6 init如何控制系統 587
19.6.1 init如何創建shell 588
19.6.2 rc腳本 589
19.7 設備文件 590
19.7.1 塊設備和字符設備 590
19.7.2 主次設備號 591
19.8 文件系統 591
19.8.1 文件系統的組成部分 592
19.8.2 標準文件系統及其類型 592
19.9 加載和卸載文件系統 593
19.9.1 mount:加載文件系統 593
19.9.2 umount:卸載文件系統 594
19.10 fsck:文件系統檢查 595
19.11 管理磁盤空間 596
19.11.1 df:報告空閑空間 596
19.11.2 du:磁盤利用率 596
19.11.3 find回顧:管理員的工具 597
19.12 處理軟盤 597
19.12.1 format和fdformat:格式化磁盤 598
19.12.2 dd:復制磁盤 598
19.12.3 處理DOS磁盤 598
19.13 tar:備份文件 600
19.13.1 備份文件(-c) 600
19.13.2 恢復文件(-x) 601
19.13.3 顯示檔案(-t) 602
19.13.4 其他選項 602
19.14 用rpm安裝程序 603
19.14.1 安裝和升級包 603
19.14.2 刪除包 604
19.14.3 查詢包 604
19.15 小結 606
19.16 自測題 607
19.17 習題 607
附錄A C shell——程序設計構造 609
附錄B Korn和Bash shell
——獨有的程序設計構造 617
附錄C GNU emacs編輯器 625
附錄D vi/vim命令參考 653
附錄E 正則表達式超集 661
附錄F 常用操作指南 665
附錄G ASCII字符集 671
附錄H 術語表 677
附錄I 自測題解答 695

序: