《linux shell腳本攻略》這本書不僅適合shell 編程的新手,也適合那些對這一領域相當熟悉的專業(yè)人士。對新手而言,本書的內容由淺入深且緊貼實踐,使得他們能夠快速地學以致用,而專業(yè)人士也能從本書中發(fā)現(xiàn)一些新鮮的東西,使自己的技巧更加純熟。
作品簡介:
《linux shell腳本攻略》是linux shell 編程的實戰(zhàn)秘籍。它集合了眾多適合于實戰(zhàn)的命令行腳本攻略,并輔以大量案例以及細致的講解。這本書是sarath lakshman在其二十歲的時候所寫,sarath lakshman在印度出生并成長,目前是印度科欽科技大學模范工程學院的 學生。2004年,他就開發(fā)了名為slynux的gnu/linux發(fā)布版。另外,他還為linux for you月刊撰寫文章。在fedora、pardus linux、pitivi、ubuntu 以及google summer of code等項目中,他都作出了顯著的貢獻。
門佳 linux/unix shell、perl、正則表達式愛好者。2001年開始接觸linux,并喜歡上了這個系統(tǒng),從此發(fā)現(xiàn)了另一個不同的世界。同時對網絡協(xié)議分析、web技術以及社會心理學也頗有興趣。除此之外,還是一位輕度宅男、豆瓣控。
譯者序:
計算機技術類的書大致可以分為兩類:入門類和實戰(zhàn)類。入門類的書,多是從最基礎、最簡單的內容開始,循序漸進、由淺入深地展開,旨在引導讀者完成一個從“無”到“有”的過程;而實戰(zhàn)類的書,則是假定讀者已經具備相關的背景知識,將重點放在特定情境下的實踐以及技巧上,幫助讀者實現(xiàn)從“有”到“精”的轉變。得益于開源社區(qū)以及愛好者們的無私貢獻,任何一位初學者都可以在Internet上輕松獲取各種Linux/Unix shell相關的基礎教程。而就如何運用shell來解決現(xiàn)實世界中的問題,相關的知識與技巧多是散落在論壇、博客之中,要么不夠全面系統(tǒng),要么不易查找。如果你也有此煩惱,那么不妨看看本書。從英文書名中采用的cookbook一詞便可知道這本書的風格如同居家菜譜(cookbook)一樣直截了當:列出菜名(待解決的問題),然后給出做法(具體的命令或腳本)。市面上類似風格的書不單此一本,O’Reilly公司出版的Unix Powertools、Bash Cookbook也都采用了這種寫法。從內容上看,本書并非是簡單的重復,而更像是對兩位“前輩”的補充,它加入了系統(tǒng)管理自動化、Web頁面的抓取與解析、編寫Gmail與twitter客戶端、利用Git進行備份、結構化文本處理等較新的技巧。即便是已經看過Unix Powertools和Bash Cookbook的讀者,我相信他們也能夠在這本書中發(fā)現(xiàn)一些新東西。
本書作者是一位21歲的在校大學生,除了編寫此書之外,他還是SLYNUX GNU/Linux發(fā)行版的研發(fā)人員。聯(lián)想21歲時的自己,實在有些慚愧。
在翻譯的過程中,除了修正代碼或文字中出現(xiàn)的邏輯或印刷錯誤之外,對于原文的某些部分,譯者并沒有嚴格地依照字面含義翻譯,而是根據原書內容,在不更改作者原意同時保證技術正確的前提下,進行了適當的調整,使其便于理解。
在豆瓣上看書評的時候,經常會看到對于某些中文版書翻譯質量的抱怨,有時我也忍不住要牢騷幾句。正因為如此,在翻譯的過程中,我會竭力確保譯文的正確性與流暢性,希望自己不會成為日后被抱怨的對象。不過和不存在沒有bug的代碼一樣,本書中也難免有錯,對此,我愿負全責。
從2011年4月接手這份翻譯工作,到7月交出譯稿,前后3個月的時間里少了很多陪伴家人的時間。在此要感謝我的父母和我的未婚妻姍姍,感謝你們對我的理解與支持。
目錄:
第1 章 小試牛刀 1
1.1 簡介 1
1.2 終端打印 3
1.2.1 實戰(zhàn)演練 3
1.2.2 補充內容 4
1.3 玩轉變量和環(huán)境變量 5
1.3.1 預備知識 5
1.3.2 實戰(zhàn)演練 6
1.3.3 補充內容 7
1.4 通過shell 進行數學運算 8
1.4.1 預備知識 9
1.4.2 實戰(zhàn)演練 9
1.5 玩轉文件描述符和重定向 10
1.5.1 預備知識 10
1.5.2 實戰(zhàn)演練 11
1.5.3 補充內容 13
1.6 數組和關聯(lián)數組 15
1.6.1 預備知識 15
1.6.2 實戰(zhàn)演練 15
.1.6.3 補充內容 16
1.7 使用別名 17
1.7.1 預備知識 17
1.7.2 實戰(zhàn)演練 17
1.7.3 補充內容 18
1.8 獲取終端信息 18
1.8.1 預備知識 18
1.8.2 實戰(zhàn)演練 18
1.9 獲取、設置日期和延時 19
1.9.1 預備知識 19
1.9.2 實戰(zhàn)演練 19
1.9.3 補充內容 21
1.10 調試腳本 22
1.10.1 預備知識 22
1.10.2 實戰(zhàn)演練 22
1.10.3 補充內容 23
1.11 函數和參數 23
1.11.1 實戰(zhàn)演練 23
1.11.2 補充內容 24
1.12 讀取命令序列輸出 25
1.12.1 預備知識 26
1.12.2 實戰(zhàn)演練 26
1.12.3 補充內容 26
1.13 以不按回車鍵的方式讀取字符“n” 27
1.13.1 預備知識 27
1.13.2 實戰(zhàn)演練 27
1.14 字段分隔符和迭代器 28
1.14.1 預備知識 28
1.14.2 實戰(zhàn)演練 29
1.15 比較與測試 30
1.15.1 預備知識 30
1.15.2 實戰(zhàn)演練 30
第2 章 命令之樂 34
2.1 簡介 34
2.2 用cat 進行拼接 34
2.2.1 預備知識 34
2.2.2 實戰(zhàn)演練 35
2.2.3 工作原理 35
2.2.4 補充內容 35
2.3 錄制與回放終端會話 37
2.3.1 預備知識 37
2.3.2 實戰(zhàn)演練 37
2.3.3 工作原理 37
2.4 文件查找與文件列表 38
2.4.1 預備知識 38
2.4.2 實戰(zhàn)演練 38
2.4.3 補充內容 39
2.5 玩轉xargs 45
2.5.1 預備知識 45
2.5.2 實戰(zhàn)演練 45
2.5.3 工作原理 46
2.5.4 補充內容 46
2.6 用tr 進行轉換 49
2.6.1 預備知識 49
2.6.2 實戰(zhàn)演練 49
2.6.3 工作原理 49
2.6.4 補充內容 50
2.7 校驗和與核實 52
2.7.1 預備知識 52
2.7.2 實戰(zhàn)演練 52
2.7.3 工作原理 52
2.7.4 補充內容 53
2.8 排序、單一與重復 53
2.8.1 預備知識 54
2.8.2 實戰(zhàn)演練 54
2.8.3 工作原理 54
2.8.4 補充內容 55
2.9 臨時文件命名與隨機數 58
2.9.1 實戰(zhàn)演練 58
2.9.2 工作原理 58
2.10 分割文件和數據 59
2.10.1 工作原理 59
2.10.2 補充內容 59
2.11 根據擴展名切分文件名 61
2.11.1 實戰(zhàn)演練 61
2.11.2 工作原理 61
2.12 批量重命名和移動 63
2.12.1 預備知識 63
2.12.2 實戰(zhàn)演練 63
2.12.3 工作原理 64
2.13 拼寫檢查與詞典操作 65
2.13.1 實戰(zhàn)演練 65
2.13.2 工作原理 65
2.14 交互輸入自動化 66
2.14.1 預備知識 66
2.14.2 實戰(zhàn)演練 66
2.14.3 工作原理 67
2.14.4 補充內容 67
第3 章 以文件之名 69
3.1 簡介 69
3.2 生成任意大小的文件 69
3.3 文本文件的交集與差集 70
3.3.1 預備知識 71
3.3.2 實戰(zhàn)演練 71
3.4 查找并刪除重復文件 73
3.4.1 預備知識 73
3.4.2 實戰(zhàn)演練 73
3.4.3 工作原理 74
3.4.4 參考 75
3.5 創(chuàng)建長路徑目錄 75
3.5.1 預備知識 75
3.5.2 實戰(zhàn)演練 76
3.6 文件權限、所有權和粘滯位 76
3.6.1 預備知識 76
3.6.2 實戰(zhàn)演練 78
3.6.3 補充內容 79
3.7 創(chuàng)建不可修改文件 80
3.7.1 預備知識 80
3.7.2 實戰(zhàn)演練 80
3.8 批量生成空白文件 80
3.8.1 預備知識 81
3.8.2 實戰(zhàn)演練 81
3.9 查找符號鏈接及其指向目標 81
3.9.1 預備知識 81
3.9.2 實戰(zhàn)演練 81
3.10 列舉文件類型統(tǒng)計信息 82
3.10.1 預備知識 83
3.10.2 實戰(zhàn)演練 83
3.10.3 工作原理 84
3.11 環(huán)回文件與掛載 84
3.11.1 預備知識 85
3.11.2 實戰(zhàn)演練 85
3.11.3 補充內容 86
3.12 生成iso 文件及混合iso 87
3.12.1 預備知識 87
3.12.2 實戰(zhàn)演練 87
3.12.3 補充內容 87
3.13 查找文件差異并進行修補 89
3.13.1 實戰(zhàn)演練 89
3.13.2 補充內容 90
3.14 head 與tail —— 打印文件的前10 行和后10 行 90
3.15 只列出目錄的其他方法 92
3.15.1 預備知識 93
3.15.2 實戰(zhàn)演練 93
3.16 在命令行中用pushd 和popd快速定位 93
3.16.1 預備知識 93
3.16.2 實戰(zhàn)演練 93
3.16.3 補充內容 94
3.17 統(tǒng)計文件的行數、單詞數和字符數 95
3.17.1 預備知識 95
3.17.2 實戰(zhàn)演練 95
3.17.3 補充知識 95
3.18 打印目錄樹 96
3.18.1 預備知識 96
3.18.2 實戰(zhàn)演練 96
3.18.3 補充內容 97
第4 章 讓文本飛 98
4.1 簡介 98
4.2 正則表達式入門 99
4.2.1 預備知識 99
4.2.2 實戰(zhàn)演練 99
4.2.3 工作原理 100
4.2.4 補充內容 101
4.3 用grep 在文件中搜索文本 101
4.3.1 預備知識 101
4.3.2 實戰(zhàn)演練 101
4.3.3 補充內容 103
4.4 用cut 按列切分文件 107
4.4.1 預備知識 107
4.4.2 實戰(zhàn)演練 107
4.4.3 補充內容 108
4.5 統(tǒng)計特定文件中的詞頻 109
4.5.1 預備知識 109
4.5.2 實戰(zhàn)演練 109
4.5.3 工作原理 110
4.5.4 參考 110
4.6 sed 入門 110
4.6.1 實戰(zhàn)演練 111
4.6.2 補充內容 111
4.7 awk 入門 113
4.7.1 實戰(zhàn)演練 113
4.7.2 工作原理 113
4.7.3 補充內容 114
4.8 替換文本或文件中的字符串 117
4.8.1 預備知識 117
4.8.2 實戰(zhàn)演練 118
4.8.3 補充內容 118
4.8.4 參考 118
4.9 壓縮或解壓縮javascript 119
4.9.1 預備知識 119
4.9.2 工作原理 119
4.9.3 工作原理 120
4.9.4 參考 121
4.10 對文件中的行、單詞和字符進行迭代 121
4.10.1 預備知識 121
4.10.2 實戰(zhàn)演練 121
4.10.3 工作原理 122
4.10.4 參考 122
4.11 按列合并文件 122
4.11.1 工作原理 122
4.11.2 參考 123
4.12 打印文件或行中的第n 個單詞或列 123
4.12.1 預備知識 123
4.12.2 實戰(zhàn)演練 123
4.12.3 參考 124
4.13 打印不同行或樣式之間的文本 124
4.13.1 預備知識 124
4.13.2 實戰(zhàn)演練 124
4.13.3 參考 125
4.14 用腳本檢驗回文字符串 125
4.14.1 預備知識 125
4.14.2 工作原理 125
4.14.3 工作原理 126
4.14.4 補充內容 127
4.14.5 參考 128
4.15 以逆序形式打印行 128
4.15.1 預備知識 128
4.15.2 實戰(zhàn)演練 128
4.15.3 工作原理 129
4.15.4 參考 129
4.16 解析文本中的電子郵件地址和url 129
4.16.1 預備知識 129
4.16.2 實戰(zhàn)演練 129
4.16.3 工作原理 130
4.16.4 參考 130
4.17 打印文件中某個樣式之前或之后的n 行 130
4.17.1 預備知識 131
4.17.2 實戰(zhàn)演練 131
4.17.3 參考 132
4.18 在文件中移除包含某個單詞的句子 132
4.18.1 預備知識 132
4.18.2 實戰(zhàn)演練 132
4.18.3 工作原理 133
4.18.4 參考 133
4.19 用awk 實現(xiàn)head、tail 和tac 133
4.19.1 預備知識 133
4.19.2 實戰(zhàn)演練 133
4.19.3 工作原理 134
4.19.4 參考 134
4.20 文本切片與參數操作 134
4.20.1 實戰(zhàn)演練 134
4.20.2 參考 135
第5 章 一團亂麻?沒這回事 136
5.1 入門 136
5.2 網站下載 136
5.2.1 預備知識 136
5.2.2 實戰(zhàn)演練 136
5.2.3 補充內容 137
5.3 以格式化純文本形式下載網頁 138
5.4 curl 入門 139
5.4.1 預備知識 139
5.4.2 實戰(zhàn)演練 139
5.4.3 補充內容 140
5.4.4 參考 142
5.5 從命令行訪問gmail 142
5.5.1 實戰(zhàn)演練 142
5.5.2 工作原理 143
5.5.3 參考 144
5.6 解析網站數據 144
5.6.1 實戰(zhàn)演練 144
5.6.2 工作原理 144
5.6.3 參考 145
5.7 制作圖片抓取器及下載工具 145
5.7.1 實戰(zhàn)演練 145
5.7.2 工作原理 146
5.7.3 參考 147
5.8 網頁相冊生成器 147
5.8.1 預備知識 147
5.8.2 實戰(zhàn)演練 147
5.8.3 工作原理 148
5.8.4 參考 149
5.9 twitter 命令行客戶端 149
5.9.1 預備知識 149
5.9.2 實戰(zhàn)演練 149
5.9.3 工作原理 150
5.9.4 參考 150
5.10 基于web 后端的定義查詢工具 151
5.10.1 預備知識 151
5.10.2 實戰(zhàn)演練 151
5.10.3 工作原理 152
5.10.4 參考 152
5.11 查找網站中的無效鏈接 152
5.11.1 預備知識 152
5.11.2 實戰(zhàn)演練 153
5.11.3 工作原理 153
5.11.4 參考 153
5.12 跟蹤網站變更 154
5.12.1 預備知識 154
5.12.2 實戰(zhàn)演練 154
5.12.3 工作原理 155
5.12.4 參考 155
5.13 以post 方式發(fā)送網頁并讀取響應 155
5.13.1 預備知識 156
5.13.2 實戰(zhàn)演練 156
5.13.3 補充內容 157
5.13.4 參考 157
第6 章 b 計劃 158
6.1 簡介 158
6.2 用tar 歸檔 158
6.2.1 預備知識 158
6.2.2 實戰(zhàn)演練 159
6.2.3 補充知識 159
6.2.4 參考 163
6.3 用cpio 歸檔 163
6.4 用gunzip 或gzip 壓縮 164
6.4.1 實戰(zhàn)演練 164
6.4.2 補充內容 164
6.4.3 參考 166
6.5 用bunzip 或bzip 壓縮 166
6.5.1 實戰(zhàn)演練 166
6.5.2 補充內容 167
6.5.3 參考 168
6.6 用lzma 壓縮 168
6.6.1 實戰(zhàn)演練 168
6.6.2 補充內容 169
6.6.3 參考 169
6.7 用zip 歸檔和壓縮 169
6.8 超高壓縮率的squashfs 文件系統(tǒng) 170
6.8.1 預備知識 171
6.8.2 實戰(zhàn)演練 171
6.8.3 補充內容 171
6.9 加密工具與散列 172
6.10 用raync 備份系統(tǒng)快照 174
6.10.1 實戰(zhàn)演練 174
6.10.2 補充內容 175
6.11 用git 備份版本控制 176
6.11.1 預備知識 176
6.11.2 實戰(zhàn)演練 176
6.12 用dd 克隆磁盤 178
6.12.1 預備知識 179
6.12.2 實戰(zhàn)演練 179
6.12.3 補充內容 180
6.12.4 參考 180
第7 章 無網不利 181
7.1 簡介 181
7.2 聯(lián)網知識入門 181
7.2.1 新手上路 181
7.2.2 實戰(zhàn)演練 182
7.2.3 補充內容 182
7.2.4 參考 186
7.3 使用ping 186
7.3.1 實戰(zhàn)演練 186
7.3.2 補充內容 187
7.4 列出網絡上所有的活動主機 188
7.4.1 新手上路 188
7.4.2 實戰(zhàn)演練 188
7.4.3 工作原理 189
7.4.4 補充內容 191
7.4.5 參考 191
7.5 傳輸文件 191
7.5.1 新手上路 191
7.5.2 實戰(zhàn)演練 191
7.5.3 補充內容 192
7.5.4 參考 194
7.6 用腳本設置以太網與無線lan 194
7.6.1 新手上路 194
7.6.2 實戰(zhàn)演練 194
7.6.3 工作原理 196
7.6.4 參考 196
7.7 用ssh 實現(xiàn)無密碼自動登錄 196
7.8 用ssh 在遠程主機上運行命令 198
7.8.1 新手上路 198
7.8.2 實戰(zhàn)演練 198
7.8.3 補充內容 200
7.8.4 參考 200
7.9 在本地掛載點上掛載遠程驅動器 201
7.9.1 新手上路 201
7.9.2 實戰(zhàn)演練 201
7.9.3 參考 201
7.10 在網絡上發(fā)送多播式窗口消息 201
7.10.1 新手上路 201
7.10.2 實戰(zhàn)演練 201
7.10.3 工作原理 202
7.10.4 參考 203
7.11 網絡流量與端口分析 203
7.11.1 新手上路 203
7.11.2 實戰(zhàn)演練 203
7.11.3 補充內容 204
第8 章 當個好管家 205
8.1 簡介 205
8.2 統(tǒng)計磁盤的使用情況 205
8.2.1 新手上路 206
8.2.2 實戰(zhàn)演練 206
8.2.3 補充內容 206
8.3 計算命令執(zhí)行時間 210
8.4 與當前登錄用戶、啟動日志及啟動故障的相關信息 212
8.4.1 新手上路 212
8.4.2 實戰(zhàn)演練 212
8.5 打印出10 條最常使用的命令 214
8.5.1 新手上路 214
8.5.2 實戰(zhàn)演練 214
8.5.3 工作原理 215
8.6 列出1 小時內占用cpu 最多的10 個進程 215
8.6.1 新手上路 215
8.6.2 實戰(zhàn)演練 215
8.6.3 工作原理 216
8.6.4 參考 217
8.7 用watch 監(jiān)視命令輸出 217
8.7.1 實戰(zhàn)演練 217
8.7.2 補充內容 217
8.8 對文件及目錄訪問進行記錄 218
8.8.1 新手上路 218
8.8.2 實戰(zhàn)演練 218
8.8.3 工作原理 218
8.9 用logrotate 管理日志文件 219
8.9.1 新手上路 219
8.9.2 實戰(zhàn)演練 219
8.10 用syslog 記錄日志 220
8.10.1 新手上路 220
8.10.2 實戰(zhàn)演練 221
8.10.3 參考 221
8.11 通過監(jiān)視用戶登錄找出入侵者 221
8.11.1 新手上路 222
8.11.2 實戰(zhàn)演練 222
8.11.3 工作原理 223
8.12 監(jiān)視遠程磁盤的健康情況 224
8.12.1 新手上路 224
8.12.2 實戰(zhàn)演練 224
8.12.3 工作原理 225
8.12.4 參考 226
8.13 找出系統(tǒng)中用戶的活動時段 226
8.13.1 新手上路 226
8.13.2 實戰(zhàn)演練 226
8.13.3 工作原理 227
第9 章 管理重任 228
9.1 簡介 228
9.2 收集進程信息 228
9.2.1 新手上路 228
9.2.2 實戰(zhàn)演練 229
9.2.3 補充內容 231
9.2.4 參考 234
9.3 殺死進程以及發(fā)送或響應信號 234
9.3.1 新手上路 235
9.3.2 實戰(zhàn)演練 235
9.3.3 補充內容 235
9.4 which、whereis、file、whatis 與平均負載 237
9.5 向用戶終端發(fā)送消息 238
9.5.1 新手上路 239
9.5.2 實戰(zhàn)演練 239
9.5.3 工作原理 240
9.6 收集系統(tǒng)信息 240
9.7 用/proc 收集信息 241
9.8 用cron 進行調度 242
9.8.1 新手上路 242
9.8.2 實戰(zhàn)演練 242
9.8.3 補充內容 243
9.9 從bash 中讀寫mysql 數據庫 244
9.9.1 新手上路 244
9.9.2 實戰(zhàn)演練 244
9.9.3 工作原理 247
9.10 用戶管理腳本 248
9.10.1 實戰(zhàn)演練 248
9.10.2 工作原理 249
9.11 圖像文件的批量縮放及格式轉換 251
9.11.1 新手上路 251
9.11.2 實戰(zhàn)演練 251
9.11.3 工作原理 253
9.11.4 參考 254