亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: LINUX與UNIX SHELL編程指南 目錄和第一部分s h e l l [打印本頁]

作者: sd-feng    時間: 2006-05-25 11:19
標題: LINUX與UNIX SHELL編程指南 目錄和第一部分s h e l l
本書共分五部分,詳細介紹了shell編程技巧,各種UNIX命令及語法,還涉及了UNIX下的文字處理以及少量的系統(tǒng)管理問題。本書內(nèi)容全面、文字簡潔流暢,適合Shell編程人員學習、參考。

[ 本帖最后由 sd-feng 于 2006-5-25 11:21 編輯 ]
作者: sd-feng    時間: 2006-05-25 11:20
目      錄
譯者序
前言
第一部分   shell
第1章   文件安全與權(quán)限        1
1.1   文件        1
1.2   文件類型        2
1.3   權(quán)限        2
1.4   改變權(quán)限位        4
1.4.1   符號模式        4
1.4.2   chmod命令舉例        5
1.4.3   絕對模式        5
1.4.4   chmod命令的其他例子        6
1.4.5   可以選擇使用符號模式或絕對模式        7
1.5   目錄        7
1.6   suid/guid        7
1.6.1   為什么要使用suid/guid        8
1.6.2   設置suid/guid的例子        8
1.7   chown和chgrp        9
1.7.1   chown舉例        9
1.7.2   chgrp舉例        9
1.7.3   找出你所屬于的用戶組        9
1.7.4   找出其他用戶所屬于的組        10
1.8   umask        10
1.8.1   如何計算umask值        10
1.8.2   常用的umask值        11
1.9   符號鏈接        12
1.9.1   使用軟鏈接來保存文件的多個映像        12
1.9.2   符號鏈接舉例        12
1.10   小結(jié)        13
第2章   使用find和xargs        14
2.1   find命令選項        14
2.1.1   使用name選項        15
2.1.2   使用perm選項        16
2.1.3   忽略某個目錄        16
2.1.4   使用user和nouser選項        16
2.1.5   使用group和nogroup選項        16
2.1.6   按照更改時間查找文件        17
2.1.7   查找比某個文件新或舊的文件        17
2.1.8   使用type選項        17
2.1.9   使用size選項        18
2.1.10   使用depth選項        18
2.1.11   使用mount選項        18
2.1.12   使用cpio選項        18
2.1.13   使用exec或ok來執(zhí)行shell命令        19
2.1.14   find命令的例子        20
2.2   xargs        20
2.3   小結(jié)        21
第3章   后臺執(zhí)行命令        22
3.1   cron和crontab        22
3.1.1   crontab的域        22
3.1.2   crontab條目舉例        23
3.1.3   crontab命令選項        23
3.1.4   創(chuàng)建一個新的crontab文件        24
3.1.5   列出crontab文件        24
3.1.6   編輯crontab文件        24
3.1.7   刪除crontab文件        25
3.1.8   恢復丟失的crontab文件        25
3.2   at命令        25
3.2.1   使用at命令提交命令或腳本        26
3.2.2   列出所提交的作業(yè)        27
3.2.3    清除一個作業(yè)        27
3.3   &命令        27
3.3.1   向后臺提交命令        28
3.3.2   用ps命令查看進程        28
3.3.3   殺死后臺進程        28
3.4   nohup命令        29
3.4.1  使用nohup命令提交作業(yè)        29
3.4.2   一次提交幾個作業(yè)        29
3.5   小結(jié)        30
第4章   文件名置換        31
4.1   使用*        31
4.2   使用?        32
4.3   使用[...]和[!...]        32
4.4   小結(jié)        33
第5章   shell輸入與輸出        34
5.1   echo        34
5.2   read        35
5.3   cat        37
5.4   管道        38
5.5   tee        39
5.6   標準輸入、輸出和錯誤        40
5.6.1   標準輸入        40
5.6.2   標準輸出        40
5.6.3   標準錯誤        40
5.7   文件重定向        40
5.7.1   重定向標準輸出        41
5.7.2   重定向標準輸入        42
5.7.3   重定向標準錯誤        42
5.8   結(jié)合使用標準輸出和標準錯誤        43
5.9   合并標準輸出和標準錯誤        43
5.10   exec        44
5.11   使用文件描述符        44
5.12   小結(jié)        45
第6章   命令執(zhí)行順序        46
6.1   使用&&        46
6.2   使用||        46
6.3   用()和{ }將命令結(jié)合在一起        47
6.4   小結(jié)        48
第二部分   文本過濾
第7章  正則表達式介紹        49
7.1  使用句點匹配單字符        50
7.2   在行首以^匹配字符串或字符序列        50
7.3   在行尾以$匹配字符串或字符        51
7.4   使用*匹配字符串中的單字符或其重復
序列        51
7.5   使用\屏蔽一個特殊字符的含義        52
7.6   使用[]匹配一個范圍或集合        52
7.7   使用\{\}匹配模式結(jié)果出現(xiàn)的次數(shù)        53
7.8   小結(jié)        55
第8章   grep家族        56
8.1   grep        57
8.1.1   雙引號引用        57
8.1.2   grep選項        57
8.1.3   查詢多個文件        57
8.1.4   行匹配        57
8.1.5   行數(shù)        58
8.1.6   顯示非匹配行        58
8.1.7   精確匹配        58
8.1.8   大小寫敏感        58
8.2   grep和正則表達式        58
8.2.1   模式范圍        59
8.2.2   不匹配行首        59
8.2.3   設置大小寫        59
8.2.4   匹配任意字符        59
8.2.5   日期查詢        59
8.2.6   范圍組合        60
8.2.7   模式出現(xiàn)機率        60
8.2.8   使用grep匹配“與”或者“或”模式        61
8.2.9   空行        61
8.2.10   匹配特殊字符        61
8.2.11   查詢格式化文件名        61
8.2.12   查詢IP地址        61
8.3   類名        62
8.4   系統(tǒng)grep命令        62
8.4.1   目錄        63
8.4.2   passwd文件        63
8.4.3   使用ps命令        63
8.4.4   對一個字符串使用grep        64
8.5   egrep        64
8.6   小結(jié)        65
第9章   AWK介紹        66
9.1   調(diào)用awk        66
9.2   awk腳本        67
9.2.1   模式和動作        67
9.2.2   域和記錄        67
9.2.3   awk中正則表達式及其操作        70
9.2.4   元字符        70
9.2.5   條件操作符        70
9.2.6   awk內(nèi)置變量        73
9.2.7   NF、NR和FILENAME        74
9.2.8   awk操作符        75
9.2.9   內(nèi)置的字符串函數(shù)        78
9.2.10   字符串屏蔽序列        80
9.2.11   awk輸出函數(shù)printf        81
9.2.12   printf修飾符        81
9.2.13   awk數(shù)組        86
9.3   小結(jié)        88
第10章   sed 用法介紹        89
10.1   sed怎樣讀取數(shù)據(jù)        89
10.2   調(diào)用sed        89
10.2.1   保存sed輸出        90
10.2.2   使用sed在文件中查詢文本的方式        90
10.2.3   基本sed編輯命令        90
10.3   sed和正則表達式        91
10.4   基本sed編程舉例        91
10.4.1   使用p(rint)顯示行        91
10.4.2   打印范圍        91
10.4.3   打印模式        92
10.4.4   使用模式和行號進行查詢        92
10.4.5   匹配元字符        92
10.4.6   顯示整個文件        92
10.4.7   任意字符        92
10.4.8   首行        92
10.4.9   最后一行        93
10.4.10   打印行號        93
10.4.11   附加文本        93
10.4.12   創(chuàng)建sed腳本文件        94
10.4.13   插入文本        94
10.4.14   修改文本        95
10.4.15   刪除文本        96
10.4.16   替換文本        96
10.5   使用替換修改字符串        97
10.6   將sed結(jié)果寫入文件命令        97
10.7   從文件中讀文本        98
10.8   匹配后退出        98
10.9   顯示文件中的控制字符        99
10.10   使用系統(tǒng)sed        99
10.10.1   處理控制字符        99
10.10.2   處理報文輸出        101
10.10.3   去除行首數(shù)字        101
10.10.4   附加文本        102
10.10.5   從shell向sed傳值        102
10.10.6   從sed輸出中設置shell變量        102
10.11   快速一行命令        102
10.12   小結(jié)        103
第11章   合并與分割        104
11.1   sort用法        104
11.1.1   概述        104
11.1.2   sort選項        104
11.1.3   保存輸出        105
11.1.4   sort啟動方式        105
11.1.5   sort對域的參照方式        105
11.1.6   文件是否已分類        105
11.1.7   基本sort        106
11.1.8   sort分類求逆        106
11.1.9   按指定域分類        106
11.1.10   數(shù)值域分類        106
11.1.11   唯一性分類        107
11.1.12   使用k的其他sort方法        108
11.1.13   使用k做分類鍵排序        108
11.1.14   指定sort序列        108
11.1.15   pos用法        108
11.1.16   使用head和tail將輸出分類        109
11.1.17   awk使用sort輸出結(jié)果        109
11.1.18   將兩個分類文件合并        110
11.2   系統(tǒng)sort        110
11.3   uniq用法        111
11.4   join用法        112
11.5   cut用法        114
11.5.1   使用域分隔符        115
11.5.2   剪切指定域        115
11.6   paste用法        116
11.6.1    指定列        116
11.6.2   使用不同的域分隔符        116
11.6.3   paste命令管道輸入        117
11.7   split用法        117
11.8   小結(jié)        118
第12章   tr用法        119
12.1   關于tr        119
12.1.1   字符范圍        119
12.1.2   保存輸出        120
12.1.3   去除重復出現(xiàn)的字符        120
12.1.4   刪除空行        120
12.1.5   大寫到小寫        121
12.1.6   小寫到大寫        121
12.1.7   刪除指定字符        121
12.1.8   轉(zhuǎn)換控制字符        122
12.1.9   快速轉(zhuǎn)換        122
12.1.10   匹配多于一個字符        123
12.2   小結(jié)        123
第三部分   登錄環(huán)境
第13章   登錄環(huán)境        125
13.1   /etc/profile        125
13.2   用戶的$HOME.profile        128
13.3   stty用法        129
13.4   創(chuàng)建.logout文件        131
13.5   小結(jié)        131
第14章   環(huán)境和shell變量        132
14.1   什么是shell變量        132
14.2   本地變量        132
14.2.1    顯示變量        133
14.2.2   清除變量        133
14.2.3   顯示所有本地shell變量        133
14.2.4   結(jié)合變量值        134
14.2.5   測試變量是否已經(jīng)設置        134
14.2.6   使用變量來保存系統(tǒng)命令參數(shù)        135
14.2.7   設置只讀變量        135
14.3   環(huán)境變量        136
14.3.1   設置環(huán)境變量        136
14.3.2   顯示環(huán)境變量        136
14.3.3   清除環(huán)境變量        137
14.3.4   嵌入shell變量        137
14.3.5   其他環(huán)境變量        139
14.3.6   set命令        140
14.3.7   將變量導出到子進程        140
14.4   位置變量參數(shù)        141
14.4.1   在腳本中使用位置參數(shù)        142
14.4.2   向系統(tǒng)命令傳遞參數(shù)        142
14.4.3   特定變量參數(shù)        143
14.4.4   最后的退出狀態(tài)        144
14.5   小結(jié)        145
第15章   引號        146
15.1   引用必要性        146
15.2   雙引號        146
15.3   單引號        147
15.4   反引號        147
15.5   反斜線        148
15.6   小結(jié)        149
第四部分   基礎shell編程
第16章   shell腳本介紹        151
16.1   使用shell腳本的原因        151
16.2   腳本內(nèi)容        151
16.3   運行一段腳本        152
16.4   小結(jié)        153
第17章   條件測試        154
17.1   測試文件狀態(tài)        154
17.2   測試時使用邏輯操作符        155
17.3   字符串測試        155
17.4   測試數(shù)值        156
17.5   expr用法        157
17.5.1   增量計數(shù)        158
17.5.2   數(shù)值測試        158
17.5.3   模式匹配        158
17.6   小結(jié)        159
第18章   控制流結(jié)構(gòu)        160
18.1   退出狀態(tài)        160
18.2   控制結(jié)構(gòu)        160
18.2.1   流控制        161
18.2.2   循環(huán)        161
18.3   if then else語句        161
18.3.1   簡單的if語句        162
18.3.2   變量值測試        162
18.3.3   grep輸出檢查        163
18.3.4   用變量測試grep輸出        163
18.3.5   文件拷貝輸出檢查        164
18.3.6   當前目錄測試        164
18.3.7   文件權(quán)限測試        165
18.3.8   測試傳遞到腳本中的參數(shù)        165
18.3.9   決定腳本是否為交互模式        165
18.3.10   簡單的if else語句        166
18.3.11  變量設置測試        166
18.3.12   檢測運行腳本的用戶        166
18.3.13   將腳本參數(shù)傳入系統(tǒng)命令        167
18.3.14   null:命令用法        167
18.3.15   測試目錄創(chuàng)建結(jié)果        168
18.3.16   另一個拷貝實例        169
18.3.17   多個if語句        169
18.3.18   測試和設置環(huán)境變量        169
18.3.19   檢測最后命令狀態(tài)        170
18.3.20   增加和檢測整數(shù)值        171
18.3.21   簡單的安全登錄腳本        172
18.3.22   elif用法        173
18.3.23   使用elif進行多條件檢測        173
18.3.24   多文件位置檢測        174
18.4   case語句        175
18.4.1   簡單的case語句        175
18.4.2   對匹配模式使用|        176
18.4.3   提示鍵入y或n        177
18.4.4   case與命令參數(shù)傳遞        177
18.4.5   捕獲輸入并執(zhí)行空命令        178
18.4.6   缺省變量值        179
18.5   for循環(huán)        180
18.5.1   簡單的for循環(huán)        181
18.5.2   打印字符串列表        181
18.5.3   對for循環(huán)使用ls命令        181
18.5.4   對for循環(huán)使用參數(shù)        182
18.5.5   使用for循環(huán)連接服務器        183
18.5.6   使用for循環(huán)備份文件        183
18.5.7   多文件轉(zhuǎn)換        183
18.5.8   多sed刪除操作        184
18.5.9    循環(huán)計數(shù)        184
18.5.10   for循環(huán)和本地文檔        184
18.5.11   for循環(huán)嵌入        185
18.6   until循環(huán)        186
18.6.1   簡單的until循環(huán)        186
18.6.2   監(jiān)視文件        187
18.6.3   監(jiān)視磁盤空間        187
18.7   while循環(huán)        188
18.7.1   簡單的while循環(huán)        188
18.7.2   使用while循環(huán)讀鍵盤輸入        188
18.7.3   用while循環(huán)從文件中讀取數(shù)據(jù)        189
18.7.4   使用IFS讀文件        189
18.7.5   帶有測試條件的文件處理        190
18.7.6   掃描文件行來進行數(shù)目統(tǒng)計        191
18.7.7   每次讀一對記錄        193
18.7.8   忽略#字符        193
18.7.9   處理格式化報表        194
18.7.10   while循環(huán)和文件描述符        196
18.8   使用break和continue控制循環(huán)        197
18.8.1   break        197
18.8.2   跳出case語句        197
18.8.3   continue        197
18.8.4   瀏覽文件行        198
18.9   菜單        199
18.10   小結(jié)        201
第19章   shell函數(shù)        202
19.1   在腳本中定義函數(shù)        203
19.2   在腳本中使用函數(shù)        203
19.3   向函數(shù)傳遞參數(shù)        203
19.4   從調(diào)用函數(shù)中返回        203
19.5   函數(shù)返回值測試        204
19.6   在shell中使用函數(shù)        204
19.7   創(chuàng)建函數(shù)文件        204
19.8   定位文件        205
19.9   檢查載入函數(shù)        205
19.10   執(zhí)行shell函數(shù)        205
19.10.1   刪除shell函數(shù)        206
19.10.2   編輯shell函數(shù)        206
19.10.3   函數(shù)舉例        207
19.10.4   將函數(shù)集中在一起        219
19.11   函數(shù)調(diào)用        219
19.11.1   在腳本中調(diào)用函數(shù)        219
19.11.2   從函數(shù)文件中調(diào)用函數(shù)        220
19.12   定位文件不只用于函數(shù)        222
19.13   小結(jié)        223
第20章   向腳本傳遞參數(shù)        224
20.1   shift命令        225
20.1.1   shift命令簡單用法        225
20.1.2   命令行輸入的最后一個參數(shù)        225
20.1.3   使用shift處理文件轉(zhuǎn)換        226
20.2   getopts        229
20.2.1   getopts腳本實例        229
20.2.2   getopts使用方式        231
20.2.3   使用getopts指定變量取值        231
20.2.4   訪問取值方式        232
20.2.5   使用getopts處理文件轉(zhuǎn)換        233
20.3   小結(jié)        235
第21章   創(chuàng)建屏幕輸出        236
21.1   tput用法        236
21.1.1   字符串輸出        236
21.1.2   數(shù)字輸出        237
21.1.3   布爾輸出        237
21.2   tput用法        237
21.2.1   設置tput命令        237
21.2.2   使用布爾輸出        237
21.2.3   在腳本中使用tput        237
21.2.4   產(chǎn)生轉(zhuǎn)義序列        238
21.2.5   光標位置        239
21.2.6   在屏幕中心位置顯示文本        240
21.2.7   查找終端屬性        240
21.2.8   在腳本中使用功能鍵        241
21.2.9   使用顏色        242
21.2.10   產(chǎn)生顏色        243
21.2.11   創(chuàng)建精致菜單        246
21.3   小結(jié)        251
第22章   創(chuàng)建屏幕輸入        252
22.1   增加記錄        252
22.2   刪除記錄        262
22.3   修改記錄        266
22.4   查看記錄        270
22.5   小結(jié)        273
第23章   調(diào)試腳本        274
23.1   一般錯誤        274
23.1.1   循環(huán)錯誤        274
23.1.2   典型的漏寫引號        274
23.1.3   測試錯誤        274
23.1.4   字符大小寫        275
23.1.5   for循環(huán)        275
23.1.6   echo        275
23.2   set命令        275
23.3   小結(jié)        276
第24章   shell嵌入命令        277
24.1   shell嵌入命令完整列表        277
24.1.1   pwd        277
24.1.2   set        278
24.1.3   times        278
24.1.4   type        278
24.1.5   ulimit        279
24.1.6   wait        279
24.2   小結(jié)        279
第五部分   高級shell編程技巧
第25章   深入討論<<        281
25.1   快速創(chuàng)建一個文件        281
25.2   快速創(chuàng)建打印文檔        281
25.3   自動選擇菜單        282
25.4   自動ftp傳輸        283
25.5   訪問數(shù)據(jù)庫        286
25.6   小結(jié)        288
第26章   shell 工具        289
26.1   創(chuàng)建保存信息的文件        289
26.1.1   使用date命令創(chuàng)建日志文件        289
26.1.2   創(chuàng)建唯一的臨時文件        290
26.2   信號        291
26.2.1   殺死一個進程        292
26.2.2   檢測信號        293
26.3   trap        294
26.3.1   捕獲信號并采取相應的行動        294
26.3.2   捕獲信號并采取行動的另
一個例子        295
26.3.3   鎖住終端        297
26.3.4   忽略信號        298
26.4   eval        300
26.4.1   執(zhí)行含有字符串的命令        300
26.4.2   給每個值一個變量名        301
26.5   logger命令        302
26.5.1   使用logger命令        303
26.5.2   在腳本中使用logger命令        303
26.6   小結(jié)        305
第27章   幾個腳本例子        306
27.1   pingall        306
27.2   backup_gen        306
27.3   del.lines        312
27.4   access.deny        313
27.5   logroll        316
27.6   nfsdown        317
27.7   小結(jié)        317
第28章   運行級別腳本        318
28.1   怎么知道系統(tǒng)中是否含有運行
級別目錄        318
28.2   確定當前的運行級別        319
28.3   快速熟悉inittab        319
28.4   運行級別        320
28.4.1   各種運行級別        321
28.4.2   運行級別腳本的格式        321
28.4.3   安裝運行級別腳本        322
28.5   使用inittab來啟動應用程序        323
28.6   啟動和停止服務的其他方法        324
28.7   小結(jié)        324
第29章   cgi腳本        325
29.1   什么是Web頁面?        325
29.2   cgi        325
29.3   連接Web服務器        326
29.4    cgi和HTM腳本        326
29.4.1   基本cgi腳本        326
29.4.2   顯示shell命令輸出        328
29.4.3   使用SSI        330
29.4.4   訪問計數(shù)器        330
29.4.5   使用一個鏈接來顯示當前Web
環(huán)境變量        332
29.4.6   其他常用的環(huán)境變量        334
29.5   get和post方法簡介        335
29.5.1   get方法        335
29.5.2   post方法        340
29.5.3   填充列表項        347
29.5.4   自動刷新頁面        348
29.6   小結(jié)        349
附錄   常用shell命令        350
作者: 大螞蟻    時間: 2006-05-25 11:22
廣告嫌疑
這本書不錯,我看的第一本就是這本書了,錯誤不少,但都是很淺顯的錯誤。
作者: sd-feng    時間: 2006-05-25 11:24
第一部分s h e l l
第1章文件安全與權(quán)限

為了防止未授權(quán)用戶訪問你的文件,可以在文件和目錄上設置權(quán)限位。還可以設定文件
在創(chuàng)建時所具有的缺省權(quán)限:這些只是整個系統(tǒng)安全問題中的一小部分。在這里我們并不想
對系統(tǒng)安全問題的方方面面進行全面的探討,只是介紹一下有關文件和目錄的安全問題。

本章包含以下內(nèi)容:

. 文件和目錄的權(quán)限。
. setuid。
. chown和c h g r p。
. umask。
. 符號鏈接。
創(chuàng)建文件的用戶和他(她)所屬于的組擁有該文件。文件的屬主可以設定誰具有讀、寫、執(zhí)
行該文件的權(quán)限。當然,根用戶或系統(tǒng)管理員可以改變?nèi)魏纹胀ㄓ脩舻脑O置。一個文件一經(jīng)
創(chuàng)建,就具有三種訪問方式:

1) 讀,可以顯示該文件的內(nèi)容
。
2) 寫,可以編輯或刪除它
。
3) 執(zhí)行,如果該文件是一個s h e l l腳本或程序
。
按照所針對的用戶,文件的權(quán)限可分為三類

1) 文件屬主,創(chuàng)建該文件的用戶
。
2) 同組用戶,擁有該文件的用戶組中的任何用戶
。
3) 其他用戶,即不屬于擁有該文件的用戶組的某一用戶
。


1.1 文件
當你創(chuàng)建一個文件的時候,系統(tǒng)保存了有關該文件的全部信息,包括:

. 文件的位置。
. 文件類型。
. 文件長度。
. 哪位用戶擁有該文件,哪些用戶可以訪問該文件。
. i節(jié)點。
. 文件的修改時間。
. 文件的權(quán)限位
。
讓我們使用ls -l 命令,來看一個典型的文件


2 第一部分shell
下載
下面讓我們來分析一下該命令所得結(jié)果的前面兩行,看看都包含了哪些信息

total 4232:這一行告訴我們該目錄中所有文件所占的空間
。


- r w x r- x r- x:這是該文件的權(quán)限位。如果除去最前面的橫杠,這里一共是9個字符,他們
分別對應9個權(quán)限位。通過這些權(quán)限位,可以設定用戶對文件的訪問權(quán)限。這9個字符可以分
為三組:
r w x:文件屬主權(quán)限這是前面三位
r- x :同組用戶權(quán)限這是中間三位
r- x :其他用戶權(quán)限這是最后三位
后面我們還將對這些權(quán)限位作更詳細的介紹。出現(xiàn)在r、w、x位置上的橫杠表示相應的訪

問權(quán)限被禁止。
1 該文件硬鏈接的數(shù)目。
root 文件的屬主。
root 文件的屬主r o o t所在的缺省組(也叫做r o o t )。
3578 用字節(jié)來表示的文件長度,記住,不是K字節(jié)!
Oct 14 04:44 文件的更新時間。
dmesg 文件名。

1.2 文件類型
還記得前面一節(jié)所提到的文件權(quán)限位前面的那個字符嗎?我們現(xiàn)在就解釋一下這個橫杠
所代表的意思,文件類型有七種,它可以從ls -l命令所列出的結(jié)果的第一位看出,這七種類型
是:

d 目錄

l 符號鏈接(指向另一個文件)
。
s 套接字文件
。
b 塊設備文件
。
c 字符設備文件

p 命名管道文件
。


-普通文件,或者更準確地說,不屬于以上幾種類型的文件。
1.3 權(quán)限
讓我們用t o u c h命令創(chuàng)建一個文件:

$ touch myfile


現(xiàn)在對該目錄使用ls -l 命令:



第1章文件安全與權(quán)限3
下載
我們已經(jīng)創(chuàng)建了一個空文件,正如我們所希望的那樣,第一個橫杠告訴我們該文件是一
個普通文件。你將會發(fā)現(xiàn)所創(chuàng)建的文件絕大多數(shù)都是普通文件或符號鏈接文件(后面將會出現(xiàn)
更多的符號鏈接文件)。

文件屬主權(quán)限組用戶權(quán)限其他用戶權(quán)限

r w -r- -r—

接下來的三個權(quán)限位是文件屬主所具有的權(quán)限;再接下來的三位是與你同組用戶所具有
的權(quán)限,這里是a d m i n組;最后三位是其他用戶所具有的權(quán)限。在該命令的結(jié)果中,我所屬于
的缺省組也顯示了出來。下面是對該文件權(quán)限的精確描述:

表1-1 ls -l命令輸出的含義

(第一個字符) 普通文件
(接下來的三個字符) r w 文件屬主的權(quán)限
(再接下來的三個字符) r- 同組用戶的權(quán)限
(最后三個字符) r- 其他用戶的權(quán)限

因此,這三組字符(除了第一個字符)分別定義了

1) 文件屬主所擁有的權(quán)限
。
2) 文件屬主缺省組(一個用戶可以屬于很多的組)所擁有的權(quán)限

3) 系統(tǒng)中其他用戶的權(quán)限
。
在每一組字符中含有三個權(quán)限位

r 讀權(quán)

w 寫/更改權(quán)

x 執(zhí)行該腳本或程序的權(quán)

這里我們采用另外一種方式來表示剛才所列出m y f i l e的文件權(quán)限



-r w -r- -r--

文件類型為普通文件文件屬主可以讀、寫同組用戶可以讀其他用戶可以讀

你可能已經(jīng)注意到了,m y f i l e在創(chuàng)建的時候并未給屬主賦予執(zhí)行權(quán)限,在用戶創(chuàng)建文件時,
系統(tǒng)不會自動地設置執(zhí)行權(quán)限位。這是出于加強系統(tǒng)安全的考慮。必須手工修改這一權(quán)限位:
后面講到u m a s k命令時,你就會明白為什么沒有獲得執(zhí)行權(quán)限。然而,你可以針對目錄設置執(zhí)
行權(quán)限位,但這與文件執(zhí)行權(quán)限位的意義有所不同,這一點我們將在后面討論。

上面這段關于權(quán)限位的內(nèi)容可能不太好理解,讓我們來看幾個例子(見表1 - 2 )。

更令人迷惑的是,對于文件屬主來說,在只有讀權(quán)限位被置位的情況下,仍然可以通過
文件重定向的方法向該文件寫入。過一會兒我們就會看到,能否刪除一個文件還依賴于該文
件所在目錄權(quán)限位的設置。

表1-2 文件權(quán)限及含義

權(quán)限所代表的含義
r-- --- --文件屬主可讀,但不能寫或執(zhí)行
r-- r-- --文件屬主和同組用戶(一般來說,是文件屬主所在的缺省組)可讀
r-- r-- r- 任何用戶都可讀,但不能寫或執(zhí)行
rwx r-- r- 文件屬主可讀、寫、執(zhí)行,同組用戶和其他用戶只可讀
rwx r-x --文件屬主可讀、寫、執(zhí)行,同組用戶可讀、執(zhí)行


作者: sd-feng    時間: 2006-05-25 11:26
原帖由 大螞蟻 于 2006-5-25 11:22 發(fā)表
廣告嫌疑
這本書不錯,我看的第一本就是這本書了,錯誤不少,但都是很淺顯的錯誤。


靠!打擊俺發(fā)帖積極性!
有需要的就到我的ftp去下吧.

[ 本帖最后由 sd-feng 于 2006-5-25 11:32 編輯 ]
作者: sd-feng    時間: 2006-05-25 11:28
4 第一部分shell
下載
(續(xù))

權(quán)限所代表的含義
rwx r-x r- x 文件屬主可讀、寫、執(zhí)行,同組用戶和其他用戶可讀、執(zhí)行
rw- rw- --文件屬主和同組用戶可讀、寫
rw- rw- r- 文件屬主和同組用戶可讀、寫,其他用戶可讀
rw- rw- --文件屬主和同組用戶及其他用戶讀可以讀、寫,慎用這種權(quán)限
設置,因為任何用戶都可以寫入該文件

1.4 改變權(quán)限位
對于屬于你的文件,可以按照自己的需要改變其權(quán)限位的設置。在改變文件權(quán)限位設置
之前,要仔細地想一想有哪些用戶需要訪問你的文件(包括你的目錄)。可以使用c h m o d命令來
改變文件權(quán)限位的設置。這一命令有比較短的絕對模式和長一些的符號模式。我們先來看一
看符號模式。

1.4.1 符號模式
c h m o d命令的一般格式為:

chmod [who] operator [permission] filename


w h o的含義是:

u 文件屬主權(quán)限。

g 同組用戶權(quán)限。

o 其他用戶權(quán)限

a 所有用戶(文件屬主、同組用戶及其他用戶)
。
o p e r a t o r的含義:
+ 增加權(quán)限。
-取消權(quán)限
。
= 設定權(quán)限

p e r m i s s i o n的含義

r 讀權(quán)限
。
w 寫權(quán)限

x 執(zhí)行權(quán)限
。
s 文件屬主和組s e t - I D
。
t 粘性位*
。
l 給文件加鎖,使其他用戶無法訪問
。
u,g,o 針對文件屬主、同組用戶及其他用戶的操作
。
*在列文件或目錄時,有時會遇到“t”位!皌”代表了粘性位。如果在一個目錄上出現(xiàn)
“t”位,這就意味著該目錄中的文件只有其屬主才可以刪除,即使某個同組用戶具有和屬主
同等的權(quán)限。不過有的系統(tǒng)在這一規(guī)則上并不十分嚴格。
如果在文件列表時看到“t”,那么這就意味著該腳本或程序在執(zhí)行時會被放在交換區(qū)(虛
存)。不過由于當今的內(nèi)存價格如此之低,大可不必理會文件的“t”的使用。


第1章文件安全與權(quán)限5
下載
1.4.2 chmod命令舉例
現(xiàn)在讓我們來看一些使用c h m o d命令的例子。假定m y f i l e文件最初具有這樣的權(quán)限:r w x
rwx rwx


命令結(jié)果含義
chmod a-x myfile
chmod og-w myfile
chmod g+w myfile
chmod u+x myfile
chmod go+x myfile
rw- rw- rwrw- r-- r-
rw- rw- r-
rwx rw- r-
rwx rwx r- x
收回所有用戶的執(zhí)行權(quán)限
收回同組用戶和其他用戶的寫權(quán)限
賦予同組用戶寫權(quán)限
賦予文件屬主執(zhí)行權(quán)限
賦予同組用戶和其他用戶執(zhí)行權(quán)限

當創(chuàng)建m y f i l e文件時,它具有這樣的權(quán)限:

如果這是我寫的一個腳本,我希望能夠具有執(zhí)行權(quán)限,并取消其他用戶(所有其他用戶)
的寫權(quán)限,可以用:

$ chmod u+x o-w myfile


這樣,該文件的權(quán)限變?yōu)椋?br />
現(xiàn)在已經(jīng)使文件屬主對m y f i l e文件具有讀、寫執(zhí)行的權(quán)限,而a d m i n組的用戶對該文件具
有讀權(quán)限。
如果希望某個腳本文件對你自己來說可執(zhí)行,而且你對該文件的缺省權(quán)限很放心,那么
只要使它對你來說具有執(zhí)行權(quán)限即可。

$ chmod u+x dt


1.4.3 絕對模式
c h m o d命令絕對模式的一般形式為:

chmod [mode] file


其中m o d e是一個八進制數(shù)。
在絕對模式中,權(quán)限部分有著不同的含義。每一個權(quán)限位用一個八進制數(shù)來代表,如表
1 - 3所示。

表1-3 八進制目錄/文件權(quán)限表示


八進制數(shù)含義

0 4 0 0 文件屬主可讀
0 2 0 0 文件屬主可寫
0 1 0 0 文件屬主可執(zhí)行
0 0 4 0 同組用戶可讀
0 0 2 0 同組用戶可寫

八進制數(shù)含義

0 0 1 0 同組用戶可執(zhí)行
0 0 0 4 其他用戶可讀
0 0 0 2 其他用戶可寫
0 0 0 1 其他用戶可執(zhí)行

在設定權(quán)限的時候,只需按照表1 - 3查出與文件屬主、同組用戶和其他用戶所具有的權(quán)限
相對應的數(shù)字,并把它們加起來,就是相應的權(quán)限表示。

從表1 - 3中可以看出,文件屬主、同組用戶和其他用戶分別所能夠具有的最大權(quán)限值就是7。
作者: sd-feng    時間: 2006-05-25 11:28
6 第一部分shell
下載
再來看看前面舉的例子:


相應的權(quán)限表示應為6 4 4,它的意思就是:
0 4 0 0 + 0 2 0 0 (文件屬主可讀、寫) = 0 6 0 0
0 0 4 0 (同組用戶可讀) = 0 0 4 0
0 0 0 4 (其他用戶可讀) = 0 0 0 4

0 6 4 4
有一個計算八進制權(quán)限表示的更好辦法,如表1 - 4所示:

表1-4 計算權(quán)限值

文件屬主同組用戶其他用戶
r w x r w x r w x
4 + 2 + 1 4 + 2 + 1 4 + 2 + 1

使用表1 - 4,可以更容易地計算出相應的權(quán)限值,只要分別針對文件屬主、同組用戶和其

他用戶把相應權(quán)限下面的數(shù)字加在一起就可以了。
m y f i l e文件具有這樣的權(quán)限:
r w -r --r -
4 + 24 4
把相應權(quán)限位所對應的值加在一起,就是6 4 4。

1.4.4 chmod命令的其他例子
以下是一些c h m o d命令絕對模式的例子:

命令結(jié)果含義
chmod 666
chmod 644
chmod 744
chmod 664
chmod 700
chmod 444
rw- rw- rwrw- r-- r-
rwx r-- r-
rw- rw- r-
rwx --- --
r-- r-- r-
賦予所有用戶讀和寫的權(quán)限
賦予所有文件屬主讀和寫的權(quán)限,所有其他用戶讀權(quán)限
賦予文件屬主讀、寫和執(zhí)行的權(quán)限,所有其他用戶讀的權(quán)限
賦予文件屬主和同組用戶讀和寫的權(quán)限,其他用戶讀權(quán)限
賦予文件屬主讀、寫和執(zhí)行的權(quán)限
賦予所有用戶讀權(quán)限


下面舉一個例子,假定有一個名為y o a的文件,具有如下權(quán)限:
我現(xiàn)在希望使自己對該文件可讀、寫和執(zhí)行,a d m i n組用戶對該文件只讀,可以鍵入:


如果希望自己對該文件可讀、寫和執(zhí)行,對其他所有用戶只讀,我可以用:


如果希望一次設置目錄下所有文件的權(quán)限,可以用:

chmod 644*


這將使文件屬主和同組用戶都具有讀和寫的權(quán)限,其他用戶只具有讀權(quán)限。


第1章文件安全與權(quán)限7
下載
還可以通過使用- R選項連同子目錄下的文件一起設置:

chmod -R 664 /usr/local/home/dave/
*


這樣就可以一次將/ u s r / l o c a l / h o m e / d a v e目錄下的所有文件連同各個子目錄下的文件的權(quán)限
全部設置為文件屬主和同組用戶可讀和寫,其他用戶只讀。使用- R選項一定要謹慎,只有在
需要改變目錄樹下全部文件權(quán)限時才可以使用。

1.4.5 可以選擇使用符號模式或絕對模式
上面的例子中既有絕對模式的,也有符號模式的,我們可以從中看出,如果使用該命令
的符號模式,可以設置或取消個別權(quán)限位,而在絕對模式中則不然。我個人傾向于使用符號
模式,因為它比絕對模式方便快捷。

1.5 目錄
還記得在前面介紹c h m o d命令時講過,目錄的權(quán)限位和文件有所不同,F(xiàn)在我們來看看其
中的區(qū)別。目錄的讀權(quán)限位意味著可以列出其中的內(nèi)容。寫權(quán)限位意味著可以在該目錄中創(chuàng)
建文件,如果不希望其他用戶在你的目錄中創(chuàng)建文件,可以取消相應的寫權(quán)限位。執(zhí)行權(quán)限
位則意味著搜索和訪問該目錄(見表1 - 5、表1 - 6)。

表1-5 目錄權(quán)限

r w x
可以列出該目錄中的文件可以在該目錄中創(chuàng)建或刪除文件可以搜索或進入該目錄
表1-6 目錄權(quán)限舉例
權(quán)限文件屬主同組用戶其他用戶
drwx rwx r- x ( 7 7 5 ) 讀、寫、執(zhí)行讀、寫、執(zhí)行讀、執(zhí)行
drwx r-x r- - ( 7 5 4 ) 讀、寫、執(zhí)行讀、執(zhí)行讀
drwx r-x r- x ( 7 5 5 ) 讀、寫、執(zhí)行讀、執(zhí)行讀、執(zhí)行

如果把同組用戶或其他用戶針對某一目錄的權(quán)限設置為- - x,那么他們將無法列出該目錄
中的文件。如果該目錄中有一個執(zhí)行位置位的腳本或程序,只要用戶知道它的路徑和文件名,
仍然可以執(zhí)行它。用戶不能夠進入該目錄并不妨礙他的執(zhí)行。

目錄的權(quán)限將會覆蓋該目錄中文件的權(quán)限。例如,如果目錄d o c s具有如下的權(quán)限:

而其中的文件p a y的權(quán)限為:

那么a d m i n組的用戶將無法編輯該文件,因為它所屬的目錄不具有這樣的權(quán)限。

該文件對任何用戶都可讀,但由于它所在的目錄并未給a d m i n組的用戶賦予執(zhí)行權(quán)限,所
以該組的用戶都將無法訪問該目錄,他們將會得到“訪問受限”的錯誤消息。

1.6 suid/guid
我們在前面曾經(jīng)提到過s u i d和g u i d。這種權(quán)限位近年來成為一個棘手的問題。很多系統(tǒng)供



8 第一部分shell
下載
應商不允許實現(xiàn)這一位,或者即使它被置位,也完全忽略它的存在,因為它會帶來安全性風
險。那么人們?yōu)楹稳绱舜篌@小怪呢?

s u i d意味著如果某個用戶對屬于自己的s h e l l腳本設置了這種權(quán)限,那么其他用戶在執(zhí)行這
一腳本時也會具有其屬主的相應權(quán)限。于是,如果根用戶的某一個腳本設置了這樣的權(quán)限,
那么其他普通用戶在執(zhí)行它的期間也同樣具有根用戶的權(quán)限。同樣的原則也適用于g u i d,執(zhí)
行相應腳本的用戶將具有該文件所屬用戶組中用戶的權(quán)限。

1.6.1 為什么要使用suid/guid
為什么要使用這種類型的腳本?這里有一個很好的例子。我管理著幾個大型的數(shù)據(jù)庫系
統(tǒng),而對它們進行備份需要有系統(tǒng)管理權(quán)限。我寫了幾個腳本,并設置了它們的g u i d,這樣
我指定的一些用戶只要執(zhí)行這些腳本就能夠完成相應的工作,而無須以數(shù)據(jù)庫管理員的身份
登錄,以免不小心破壞了數(shù)據(jù)庫服務器。通過執(zhí)行這些腳本,他們可以完成數(shù)據(jù)庫備份及其
他管理任務,但是在這些腳本運行結(jié)束之后,他們就又回復到他們作為普通用戶的權(quán)限。

有相當一些U N I X命令也設置了s u i d和g u i d。如果想找出這些命令,可以進入/ b i n或/ s b i n目
錄,執(zhí)行下面的命令:

$ ls -l | grep '^...s'


上面的命令是用來查找s u i d文件的;

$ ls -l | grep '^...s..s'


上面的命令是用來查找s u i d和g u i d的。

現(xiàn)在我們明白了什么是s u i d,可是如何設置它呢?下面就來介紹這個問題。如果希望設置
s u i d,那么就將相應的權(quán)限位之前的那一位設置為4;如果希望設置g u i d,那么就將相應的權(quán)限
位之前的那一位設置為2;如果希望兩者都置位,那么將相應的權(quán)限位之前的那一位設置為4+2。

一旦設置了這一位,一個s將出現(xiàn)在x的位置上。記。涸谠O置s u i d或g u i d的同時,相應的
執(zhí)行權(quán)限位必須要被設置。例如,如果希望設置g u i d,那么必須要讓該用戶組具有執(zhí)行權(quán)限。

如果想要對文件l o g i n設置s u i d,它當前所具有的權(quán)限為rwx rw- r-- (741) ,需要在使用
c h m o d命令時在該權(quán)限數(shù)字的前面加上一個4,即chmod 4741,這將使該文件的權(quán)限變?yōu)閞 w s
rw- r- -。

$ chmod 4741 logit
作者: sd-feng    時間: 2006-05-25 11:29
1.6.2 設置suid/guid的例子
下面給出幾個例子:

表1-7 設置s u i d / g u i d

命令結(jié)果含義
chmod 4755
chmod 6711
chmod 4764
rws r-x r- x
rws --s --s
rws rw- r-
文件被設置了s u i d,文件屬主具有讀、寫和執(zhí)行的權(quán)限,所有其
他用戶具有讀和執(zhí)行的權(quán)限
文件被設置了s u i d和g u i d,文件屬主具有讀、寫和執(zhí)行的權(quán)限,
所有其他用戶具有執(zhí)行的權(quán)限
文件被設置了s u i d,文件屬主具有讀、寫和執(zhí)行的權(quán)限,同組用
戶具有讀和執(zhí)行的權(quán)限,其他用戶具有讀權(quán)限


第1章文件安全與權(quán)限9
下載
還可以使用符號方式來設置s u i d / g u i d。如果某個文件具有這樣的權(quán)限:rwx r-x r- x ,那么
可以這樣設置其s u i d:

chmod u+s <filename>


于是該文件的權(quán)限將變?yōu)椋簉ws r-x r-x

在查找設置了s u i d的文件時,沒準會看到具有這樣權(quán)限的文件:rwS r-x r- x ,其中S為大寫。
它表示相應的執(zhí)行權(quán)限位并未被設置,這是一種沒有什么用處的s u i d設置,可以忽略它的存在。

注意,c h m o d命令不進行必要的完整性檢查,可以給某一個沒用的文件賦予任何權(quán)限,但
chmod 命令并不會對所設置的權(quán)限組合做什么檢查。因此,不要看到一個文件具有執(zhí)行權(quán)限,
就認為它一定是一個程序或腳本。

1.7 chown和chgrp
當你創(chuàng)建一個文件時,你就是該文件的屬主。一旦你擁有某個文件,就可以改變它的所
有權(quán),把它的所有權(quán)交給另外一個/ e t c / p a s s w d文件中存在的合法用戶?梢允褂糜脩裘蛴
戶I D號來完成這一操作。在改變一個文件的所有權(quán)時,相應的s u i d也將被清除,這是出于安
全性的考慮。只有文件的屬主和系統(tǒng)管理員可以改變文件的所有權(quán)。一旦將文件的所有權(quán)交
給另外一個用戶,就無法再重新收回它的所有權(quán)。如果真的需要這樣做,那么就只有求助于
系統(tǒng)管理員了。

c h o w n命令的一般形式為:

chmod -R -h owner file


- R選項意味著對所有子目錄下的文件也都進行同樣的操作。- h選項意味著在改變符號鏈
接文件的屬主時不影響該鏈接所指向的目標文件。
1.7.1 chown舉例
這里給出幾個例子:


文件p r o j e c t的所有權(quán)現(xiàn)在由用戶l o u i s e交給了用戶p a u l i n e。

1.7.2 chgrp舉例
c h g r p命令和c h o w n命令的格式差不多,下面給出一個例子。


用戶p a u l i n e現(xiàn)在把該文件所屬的組由a d m i n變?yōu)閟 y b a d m i n(系統(tǒng)中的另外一個用戶組)。

1.7.3 找出你所屬于的用戶組
如果你希望知道自己屬于哪些用戶組,可以用如下的命令:


10 第一部分shell
下載
或者可以使用i d命令:


1.7.4 找出其他用戶所屬于的組
為了找出其他用戶所屬于的組,可以用如下的命令:


上面的命令告訴我們用戶m a t t y屬于s y b a d m i n、a p p s g e n和p o s t用戶組。

1.8 umask
當最初登錄到系統(tǒng)中時,u m a s k命令確定了你創(chuàng)建文件的缺省模式。這一命令實際上和
c h m o d命令正好相反。你的系統(tǒng)管理員必須要為你設置一個合理的u m a s k值,以確保你創(chuàng)建的
文件具有所希望的缺省權(quán)限,防止其他非同組用戶對你的文件具有寫權(quán)限。

在已經(jīng)登錄之后,可以按照個人的偏好使用u m a s k命令來改變文件創(chuàng)建的缺省權(quán)限。相應
的改變直到退出該s h e l l或使用另外的u m a s k命令之前一直有效。

一般來說,u m a s k命令是在/ e t c / p r o f i l e文件中設置的,每個用戶在登錄時都會引用這個文
件,所以如果希望改變所有用戶的u m a s k,可以在該文件中加入相應的條目。如果希望永久性
地設置自己的u m a s k值,那么就把它放在自己$ H O M E目錄下的. p r o f i l e或. b a s h _ p r o f i l e文件中。

1.8.1 如何計算umask值
u m a s k命令允許你設定文件創(chuàng)建時的缺省模式,對應每一類用戶(文件屬主、同組用戶、
其他用戶)存在一個相應的u m a s k值中的數(shù)字。對于文件來說,這一數(shù)字的最大值分別是6。系
統(tǒng)不允許你在創(chuàng)建一個文本文件時就賦予它執(zhí)行權(quán)限,必須在創(chuàng)建后用c h m o d命令增加這一
權(quán)限。目錄則允許設置執(zhí)行權(quán)限,這樣針對目錄來說,u m a s k中各個數(shù)字最大可以到7。

該命令的一般形式為:

umask nnn


其中n n n為u m a s k置0 0 0 - 7 7 7。

讓我們來看一些例子。

計算出你的u m a s k值:

可以有幾種計算u m a s k值的方法,通過設置u m a s k值,可以為新創(chuàng)建的文件和目錄設置缺
省權(quán)限。表1 - 8列出了與權(quán)限位相對應的u m a s k值。

在計算u m a s k值時,可以針對各類用戶分別在這張表中按照所需要的文件/目錄創(chuàng)建缺省
權(quán)限查找對應的u m a s k值。

例如,u m a s k值002 所對應的文件和目錄創(chuàng)建缺省權(quán)限分別為6 6 4和7 7 5。

還有另外一種計算u m a s k值的方法。我們只要記住u m a s k是從權(quán)限中“拿走”相應的位即
可。


第1章文件安全與權(quán)限11
下載
表1-8 umask值與權(quán)限

u m a s k 文件目錄
0 6 7
1 6 6
2 4 5
3 4 4
4 2 3
5 2 2
6 0 1
7 0 0

例如,對于u m a s k值0 0 2,相應的文件和目錄缺省創(chuàng)建權(quán)限是什么呢?
第一步,我們首先寫下具有全部權(quán)限的模式,即7 7 7 (所有用戶都具有讀、寫和執(zhí)行權(quán)限)。
第二步,在下面一行按照u m a s k值寫下相應的位,在本例中是0 0 2。
第三步,在接下來的一行中記下上面兩行中沒有匹配的位。這就是目錄的缺省創(chuàng)建權(quán)限。

稍加練習就能夠記住這種方法。

第四步,對于文件來說,在創(chuàng)建時不能具有文件權(quán)限,只要拿掉相應的執(zhí)行權(quán)限比特即
可。

這就是上面的例子,其中u m a s k值為0 0 2:

1) 文件的最大權(quán)限r(nóng)wx rwx rwx (777)
2) umask值為0 0 2 - - - - - - -w3) 目錄權(quán)限r(nóng)wx rwx r-x (775) 這就是目錄創(chuàng)建缺省權(quán)限
4) 文件權(quán)限r(nóng)w- rw- r-- (664) 這就是文件創(chuàng)建缺省權(quán)限
下面是另外一個例子,假設這次u m a s k值為0 2 2:
1) 文件的最大權(quán)限r(nóng)wx rwx rwx (777)
2 ) u m a s k 值為0 2 2 - - - -w- -w3) 目錄權(quán)限r(nóng)wx r-x r-x (755) 這就是目錄創(chuàng)建缺省權(quán)限
4) 文件權(quán)限r(nóng)w- r-- r-- (644) 這就是文件創(chuàng)建缺省權(quán)限

1.8.2 常用的umask值
表1 - 9列出了一些u m a s k值及它們所對應的目錄和文件權(quán)限。

表1-9 常用的u m a s k值及對應的文件和目錄權(quán)限

u m a s k值目錄文件
0 2 2
0 2 7
0 0 2
0 0 6
0 0 7
7 5 5
7 5 0
7 7 5
7 7 1
7 7 0
6 4 4
6 4 0
6 6 4
6 6 0
6 6 0

如果想知道當前的umask 值,可以使用u m a s k命令:
作者: sd-feng    時間: 2006-05-25 11:30
12 第一部分shell
下載
如果想要改變u m a s k值,只要使用u m a s k命令設置一個新的值即可:

$ umask 002


確認一下系統(tǒng)是否已經(jīng)接受了新的u m a s k值:


在使用u m a s k命令之前一定要弄清楚到底希望具有什么樣的文件/目錄創(chuàng)建缺省權(quán)限。否
則可能會得到一些非常奇怪的結(jié)果;例如,如果將u m a s k值設置為6 0 0,那么所創(chuàng)建的文件/目
錄的缺省權(quán)限就是0 6 6!

1.9 符號鏈接
存在兩種不同類型的鏈接,軟鏈接和硬鏈接,這里我們只討論軟鏈接。軟鏈接實際上就
是一個指向文件的指針。你將會發(fā)現(xiàn)這種軟鏈接使用起來非常方便。

1.9.1 使用軟鏈接來保存文件的多個映像
下面我們就解釋一下符號鏈接是怎么回事。比方說在/ u s r / l o c a l / a d m i n / s a l e s目錄下有一個
含有銷售信息的文件,銷售部門的每一個人都想看這份文件。你可以在每一位用戶的$ H O M E
目錄下建立一個指向該文件的鏈接,而不是在每個目錄下拷貝一份。這樣當需要更改這一文
件時,只需改變一個源文件即可。每個銷售$ H O M E目錄中的鏈接可以起任何名字,不必和源
文件一致。

如果有很多子目錄,而進入這些目錄很費時間,在這種情況下鏈接也非常有用?梢葬
對$ H O M E目錄下的一個很深的子目錄創(chuàng)建一個鏈接。還有,比如在安裝一個應用程序時,它
的日志被保存到/ u s r / o p t / a p p / l o g目錄下,如果想把它保存在另外一個你認為更方便目錄下,可
以建立一個指向該目錄的鏈接。

該命令的一般形式為:

ln [-s] source_path target_path


其中的路徑可以是目錄也可以是文件。讓我們來看幾個例子。

1.9.2 符號鏈接舉例
假如系統(tǒng)中有4 0個銷售和管理用戶,銷售用戶使用一個銷售應用程序,而管理用戶使用
一個管理應用程序。我作為系統(tǒng)管理員該怎么做呢?首先刪除它們各自$ H O M E目錄下的所
有. p r o f i l e文件。然后在/ u s r / l o c a l / m e n u s /目錄下創(chuàng)建兩個p r o f i l e文件,一個是s a l e s . p r o f i l e,一
個是a d m i n . p r o f i l e,它們分別為銷售和管理人員提供了所需的環(huán)境,并引導他們進入相應的應
用程序,F(xiàn)在我在所有銷售人員的$ H O M E目錄下分別創(chuàng)建一個指向s a l e s . p r o f i l e的鏈接,在所
有管理人員的$ H O M E目錄下分別創(chuàng)建一個指向a d m i n . p r o f i l e文件的鏈接。注意,不必在上面
命令格式中的t a rg e t _ p a t h端創(chuàng)建相應文件,如果不存在這樣一個文件,l n命令會自動創(chuàng)建該文


第1章文件安全與權(quán)限13
下載
件。下面就是我對銷售人員m a t t y所做的操作。


(你所看到的可能會與此稍有差別)。
這就是我所要做的全部工作;對于管理人員也是如此。而且如果需要作任何修改的話,
只要改變銷售和管理人員的p r o f i l e文件即可,而不必對4 0個用戶逐一進行修改。

下面是另外一個例子。我所管理的系統(tǒng)中有一個網(wǎng)絡監(jiān)視器,它將日志寫在/ u s r / o p t /
m o n i t o r / r e g s t a r目錄下,但其他所有的日志都保存在/ v a r / a d m / l o g s目錄下,這樣只需在該目錄
下建立一個指向原有文件的鏈接就可以在一個地方看所有的日志了,而不必花費很多時間分
別進入各個相應的目錄。下面就是所用的鏈接命令:

$ ln -s /usr/opt/monitor/regstar/reg.log /var/adm/logs/monitor.log


如果鏈接太多的話,可以刪掉一些,不過切記不要刪除源文件。

不管是否在同一個文件系統(tǒng)中,都可以創(chuàng)建鏈接。在創(chuàng)建鏈接的時候,不要忘記在原有
目錄設置執(zhí)行權(quán)限。鏈接一旦創(chuàng)建,鏈接目錄將具有權(quán)限7 7 7或rwx rwx rwx,但是實際的原
有文件的權(quán)限并未改變。

在新安裝的系統(tǒng)上,通常要進行這樣的操作,在/ v a r目錄中創(chuàng)建一個指向/ t m p目錄的鏈接,
因為有些應用程序認為存在/ v a r / t m p目錄(然而它實際上并不存在),有些應用程序在該目錄中
保存一些臨時文件。為了使所有的臨時文件都放在一個地方,可以使用l n命令在/ v a r目錄下建
立一個指向/ t m p目錄的鏈接。


現(xiàn)在如果我在/ v a r目錄中列文件,就能夠看到剛才建立的鏈接:


1.10 小結(jié)
本章介紹了一些有關文件安全的基本概念。如果這些命令能夠使用得當而且使用得比較
謹慎,應該不會有什么問題。手指輕輕一敲就有可能輸入chmod -R這樣的命令,它將改變整
個文件系統(tǒng)的權(quán)限,如果沒有做備份的話,沒有幾年的時間恐怕是無法恢復了,所以在輸入
這些命令時,千萬不要在手指上貼膏藥!

是否使用設置了s u i d的腳本完全取決于你自己。如果使用的話,一定要確保能夠監(jiān)控它的
使用,而且不要以根用戶身份設置s u i d。


作者: 大螞蟻    時間: 2006-05-25 11:30
置頂?shù)奈母颩M的基礎12篇,不知道是不是學習這本書的學習心得,相同的地方很多,都很不錯。
可以看的書很多,不過關鍵是看書的人
作者: sd-feng    時間: 2006-05-25 11:36
可以看的書很多,不過關鍵是看書的人

hao
gao
作者: sd-feng    時間: 2006-05-26 10:26
第2章使用find和xargs

有時可能需要在系統(tǒng)中查找具有某一特征的文件(例如文件權(quán)限、文件屬主、文件長度、
文件類型等等)。這樣做可能有很多原因?赡艹鲇诎踩缘目紤],或是一般性的系統(tǒng)管理任
務,或許只是為了找出一個不知保存在什么地方的文件。F i n d是一個非常有效的工具,它可
以遍歷當前目錄甚至于整個文件系統(tǒng)來查找某些文件或目錄。

在本章中,我們介紹以下內(nèi)容:

. find命令選項。
. 使用f i n d命令不同選項的例子。
. 配合f i n d使用x a rg s命令的例子。
由于f i n d具有如此強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間
來了解一下。即使系統(tǒng)中含有網(wǎng)絡文件系統(tǒng)( N F S ),f i n d命令在該文件系統(tǒng)中同樣有效,只要
你具有相應的權(quán)限。

在運行一個非常消耗資源的f i n d命令時,很多人都傾向于把它放在后臺執(zhí)行,因為遍歷一
個大的文件系統(tǒng)可能會花費很長的時間(這里是指3 0 G字節(jié)以上的文件系統(tǒng))。
F i n d命令的一般形式為:

find pathname -options [-print -exec -ok]


讓我們來看看該命令的參數(shù):
pathname find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統(tǒng)根目錄。
-print find命令將匹配的文件輸出到標準輸出。
-exec find命令對匹配的文件執(zhí)行該參數(shù)所給出的s h e l l命令。相應命令的形式為' c o m m

and' {} \;,注意{ }和\;之間的空格。

-ok 和- e x e c的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的s h e l l命令,
在執(zhí)行每一個命令之前,都會給出提示,讓用戶來確定是否執(zhí)行。

2.1 find命令選項
f i n d命令有很多選項或表達式,每一個選項前面跟隨一個橫杠-。讓我們先來看一下該命
令的主要選項,然后再給出一些例子。

-name 按照文件名查找文件。

-perm 按照文件權(quán)限來查找文件。

-prune 使用這一選項可以使f i n d命令不在當前指定的目錄中查找,如果同時使用了- d e p t h
選項,那么- p r u n e選項將被f i n d命令忽略。

-user 按照文件屬主來查找文件。

-group 按照文件所屬的組來查找文件。

-mtime -n +n 按照文件的更改時間來查找文件,- n表示文件更改時間距現(xiàn)在n天以內(nèi),+ n
表示文件更改時間距現(xiàn)在n天以前。F i n d命令還有- a t i m e和- c t i m e選項,但它們都和- m t i m e選項
作者: sd-feng    時間: 2006-05-26 10:28
相似,所以我們在這里只介紹- m t i m e選項。

-nogroup 查找無有效所屬組的文件,即該文件所屬的組在/ e t c / g r o u p s中不存在。

-nouser 查找無有效屬主的文件,即該文件的屬主在/ e t c / p a s s w d中不存在。

-newer file1 ! file2 查找更改時間比文件f i l e 1新但比文件f i l e 2舊的文件。

-type 查找某一類型的文件,諸如:

b -塊設備文件。

d -目錄。

c -字符設備文件。

p -管道文件。

l -符號鏈接文件。

f -普通文件。

-size n[c] 查找文件長度為n塊的文件,帶有c時表示文件長度以字節(jié)計。

-depth 在查找文件時,首先查找當前目錄中的文件,然后再在其子目錄中查找。

-fstype 查找位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通?梢栽谂渲梦募
/ e t c / f s t a b中找到,該配置文件中包含了本系統(tǒng)中有關文件系統(tǒng)的信息。

-mount 在查找文件時不跨越文件系統(tǒng)m o u n t點。

-follow 如果f i n d命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。

-cpio 對匹配的文件使用c p i o命令,將這些文件備份到磁帶設備中。

2.1.1 使用name選項
文件名選項是f i n d命令最常用的選項,要么單獨使用該選項,要么和其他選項一起使用。
可以使用某種文件名模式來匹配文件,記住要用引號將文件名模式引起來。
不管當前路徑是什么,如果想要在自己的根目錄$ H O M E中查找文件名符合* . t x t的文件,
使用~作為' p a t h n a m e參數(shù),波浪號~代表了你的$ H O M E目錄。

$ find ~ -name "*.txt" -print


想要在當前目錄及子目錄中查找所有的‘* . t x t’文件,可以用:

$ find . -name "*.txt" -print


想要的當前目錄及子目錄中查找文件名以一個大寫字母開頭的文件,可以用:

$ find . -name "[A-Z]*" -print


想要在/ e t c目錄中查找文件名以h o s t開頭的文件,可以用:

$ find /etc -name "host*" -print


想要查找$ H O M E目錄中的文件,可以用:

$ find ~ -name "*" -print


或find . -print
要想讓系統(tǒng)高負荷運行,就從根目錄開始查找所有的文件。如果希望在系統(tǒng)管理員那里
保留一個好印象的話,最好在這么做之前考慮清楚!

$ find / -name "*" -print


如果想在當前目錄查找文件名以兩個小寫字母開頭,跟著是兩個數(shù)字,最后是* . t x t的文
件,下面的命令就能夠返回名為a x 3 7 . t x t的文件:


$ find . -name "[a-z][a-z][0--9][0--9].txt" -print
作者: sd-feng    時間: 2006-05-26 10:29
2.1.2 使用perm選項
如果希望按照文件權(quán)限模式來查找文件的話,可以采用- p e r m選項。你可能需要找到所有
用戶都具有執(zhí)行權(quán)限的文件,或是希望查看某個用戶目錄下的文件權(quán)限類型。在使用這一選
項的時候,最好使用八進制的權(quán)限表示法。

為了在當前目錄下查找文件權(quán)限位為7 5 5的文件,即文件屬主可以讀、寫、執(zhí)行,其他用
戶可以讀、執(zhí)行的文件,可以用:

$ find . -perm 755 -print


如果希望在當前目錄下查找所有用戶都可讀、寫、執(zhí)行的文件(要小心這種情況),我們
可以使用f i n d命令的- p e r m選項。在八進制數(shù)字前面要加一個橫杠-。在下面的命令中- p e r m代
表按照文件權(quán)限查找,而‘0 0 7’和你在c h m o d命令的絕對模式中所采用的表示法完全相同。

$ find . -perm -007 -print


2.1.3 忽略某個目錄
如果在查找文件時希望忽略某個目錄,因為你知道那個目錄中沒有你所要查找的文件,
那么可以使用- p r u n e選項來指出需要忽略的目錄。在使用- p r u n e選項時要當心,因為如果你同
時使用了- d e p t h選項,那么- p r u n e選項就會被f i n d命令忽略。

如果希望在/ a p p s目錄下查找文件,但不希望在/ a p p s / b i n目錄下查找,可以用:

$ find /apps -name "/apps/bin" -prune -o -print


2.1.4 使用user和nouser選項
如果希望按照文件屬主查找文件,可以給出相應的用戶名。例如,在$ H O M E目錄中查找
文件屬主為d a v e的文件,可以用:

$ find ~ -user dave -print


在/ e t c目錄下查找文件屬主為u u c p的文件:

$ find /etc -user uucp -print


為了查找屬主帳戶已經(jīng)被刪除的文件,可以使用- n o u s e r選項。這樣就能夠找到那些屬主
在/ e t c / p a s s w d文件中沒有有效帳戶的文件。在使用- n o u s e r選項時,不必給出用戶名;f i n d命令
能夠為你完成相應的工作。例如,希望在/ h o m e目錄下查找所有的這類文件,可以用:

$ find /home -nouser -print


2.1.5 使用group和nogroup選項
就像u s e r和n o u s e r選項一樣,針對文件所屬于的用戶組,f i n d命令也具有同樣的選項,為
了在/ a p p s目錄下查找屬于a c c t s用戶組的文件,可以用:

$ find /apps -group accts -print


要查找沒有有效所屬用戶組的所有文件,可以使用n o g r o u p選項。下面的f i n d命令從文件
系統(tǒng)的根目錄處查找這樣的文件

$ fine/-nogroup-print
作者: sd-feng    時間: 2006-05-26 10:29
2.1.6 按照更改時間查找文件
如果希望按照更改時間來查找文件,可以使用m t i m e選項。如果系統(tǒng)突然沒有可用空間了,
很有可能某一個文件的長度在此期間增長迅速,這時就可以用m t i m e選項來查找這樣的文件。
用減號-來限定更改時間在距今n日以內(nèi)的文件,而用加號+來限定更改時間在距今n日以前的
文件。

希望在系統(tǒng)根目錄下查找更改時間在5日以內(nèi)的文件,可以用:

$ find / -mtime -5 -print


為了在/ v a r / a d m目錄下查找更改時間在3日以前的文件,可以用:

$ find /var/adm -mtime +3 -print


2.1.7 查找比某個文件新或舊的文件
如果希望查找更改時間比某個文件新但比另一個文件舊的所有文件,可以使用- n e w e r選
項。它的一般形式為:

newest_file_name ! oldest_file_name


其中,!是邏輯非符號。

這里有兩個文件,它們的更改時間大約相差兩天。


下面給出的f i n d命令能夠查找更改時間比文件a g e . a w k新但比文件b e l t s . a w k舊的文件:


如果想使用f i n d命令的這一選項來查找更改時間在兩個小時以內(nèi)的文件,除非有一個現(xiàn)成
的文件其更改時間恰好在兩個小時以前,否則就沒有可用來比較更改時間的文件。為了解決
這一問題,可以首先創(chuàng)建一個文件并將其日期和時間戳設置為所需要的時間。這可以用t o u c h
命令來實現(xiàn)。

假設現(xiàn)在的時間是2 3 : 4 0,希望查找更改時間在兩個小時以內(nèi)的文件,可以首先創(chuàng)建這樣
一個文件:


一個符合要求的文件已經(jīng)被創(chuàng)建;這里我們假設今天是五月四日,而該文件的更改時間
是2 1 : 4 0,比現(xiàn)在剛好早兩個小時。

現(xiàn)在我們就可以使用f i n d命令的- n e w e r選項在當前目錄下查找所有更改時間在兩個小時以
內(nèi)的文件:

$ find . -newer dstamp -print
作者: sd-feng    時間: 2006-05-26 10:30
2.1.8 使用type選項
U N I X或L I N U X系統(tǒng)中有若干種不同的文件類型,這部分內(nèi)容我們在前面的章節(jié)已經(jīng)做了


介紹,這里就不再贅述。如果要在/ e t c目錄下查找所有的目錄,可以用:

$ find /etc -type d -print


為了在當前目錄下查找除目錄以外的所有類型的文件,可以用:

$ find . ! -type d -print


為了在/ e t c目錄下查找所有的符號鏈接文件,可以用:

$ find /etc -type l -print


2.1.9 使用size選項
可以按照文件長度來查找文件,這里所指的文件長度既可以用塊(b l o c k)來計量,也可
以用字節(jié)來計量。以字節(jié)計量文件長度的表達形式為N c;以塊計量文件長度只用數(shù)字表示即
可。

就我個人而言,我總是使用以字節(jié)計的方式,在按照文件長度查找文件時,大多數(shù)人都
喜歡使用這種以字節(jié)表示的文件長度,而不用塊的數(shù)目來表示,除非是在查看文件系統(tǒng)的大
小,因為這時使用塊來計量更容易轉(zhuǎn)換。

為了在當前目錄下查找文件長度大于1 M字節(jié)的文件,可以用:

$ find . -size +1000000c -print


為了在/ h o m e / a p a c h e目錄下查找文件長度恰好為1 0 0字節(jié)的文件,可以用:

$ find /home/apache -size 100c -print


為了在當前目錄下查找長度超過1 0塊的文件(一塊等于5 1 2字節(jié)),可以用:

$ find . -size +10 -print


2.1.10 使用depth選項
在使用f i n d命令時,可能希望先匹配所有的文件,再在子目錄中查找。使用d e p t h選項就
可以使f i n d命令這樣做。這樣做的一個原因就是,當在使用f i n d命令向磁帶上備份文件系統(tǒng)時,
希望首先備份所有的文件,其次再備份子目錄中的文件。

在下面的例子中,f i n d命令從文件系統(tǒng)的根目錄開始,查找一個名為C O N . F I L E的文件。
它將首先匹配所有的文件然后再進入子目錄中查找。

$ find / -name "CON.FILE" -depth -print


2.1.11 使用mount選項
在當前的文件系統(tǒng)中查找文件(不進入其他文件系統(tǒng)),可以使用f i n d命令的m o u n t選項。
在下面的例子中,我們從當前目錄開始查找位于本文件系統(tǒng)中文件名以X C結(jié)尾的文件:

$ find . -name "*.XC" -mount -print
作者: sd-feng    時間: 2006-05-26 10:31
2.1.12 使用cpio選項
c p i o命令可以用來向磁帶設備備份文件或從中恢復文件?梢允褂胒 i n d命令在整個文件系
統(tǒng)中(更多的情況下是在部分文件系統(tǒng)中)查找文件,然后用c p i o命令將其備份到磁帶上。

如果希望使用c p i o命令備份/ e t c、/ h o m e和/ a p p s目錄中的文件,可以使用下面所給出的命
令,不過要記住你是在文件系統(tǒng)的根目錄下:



(在上面的例子中,第一行末尾的\告訴s h e l l命令還未結(jié)束,忽略\后面的回車。


在上面的例子中,應當注意到路徑中缺少/。這叫作相對路徑。之所以使用相對路徑,是

因為在從磁帶中恢復這些文件的時候,可以選擇恢復文件的路徑。例如,可以將這些文件先

恢復到另外一個目錄中,對它們進行某些操作后,再恢復到原始目錄中。如果在備份時使用

了絕對路徑,例如/ e t c,那么在恢復時,就只能恢復到/ e t c目錄中去,別無其他選擇。在上面

的例子中,我告訴f i n d命令首先進入/ e t c目錄,然后是/ h o m e和/ a p p s目錄,先匹配這些目錄下

的文件,然后再匹配其子目錄中的文件,所有這些結(jié)果將通過管道傳遞給c p i o命令進行備份。

順便說一下,在上面的例子中c p i o命令使用了C 6 5 5 3 6選項,我本可以使用B選項,不過這
樣每塊的大小只有5 1 2 字節(jié),而使用了C 6 5 5 3 6 選項后,塊的大小變成了6 4 K 字節(jié)
(6 5 5 3 6 / 1 0 2 4)。

2.1.13 使用exec或ok來執(zhí)行shell命令
當匹配到一些文件以后,可能希望對其進行某些操作,這時就可以使用- e x e c選項。一旦

f i n d命令匹配到了相應的文件,就可以用- e x e c選項中的命令對其進行操作(在有些操作系統(tǒng)

中只允許- e x e c選項執(zhí)行諸如l s或ls -l這樣的命令)。大多數(shù)用戶使用這一選項是為了查找舊文

件并刪除它們。這里我強烈地建議你在真正執(zhí)行r m命令刪除文件之前,最好先用l s命令看一

下,確認它們是所要刪除的文件。

e x e c選項后面跟隨著所要執(zhí)行的命令,然后是一對兒{ },一個空格和一個\,最后是一個

分號。

為了使用e x e c選項,必須要同時使用p r i n t選項。如果驗證一下f i n d命令,會發(fā)現(xiàn)該命令只

輸出從當前路徑起的相對路徑及文件名。

為了用ls -l 命令列出所匹配到的文件,可以把ls -l 命令放在f i n d命令的- e x e c選項中,例如:


上面的例子中,f i n d命令匹配到了當前目錄下的所有普通文件,并在- e x e c選項中使用ls -l
命令將它們列出。

為了在/ l o g s目錄中查找更改時間在5日以前的文件并刪除它們,可以用:

$ find logs -type f -mtime +5 -exec rm {} \
;


記住,在s h e l l中用任何方式刪除文件之前,應當先查看相應的文件,一定要小心!

當使用諸如m v或r m命令時,可以使用- e x e c選項的安全模式。它將在對每個匹配到的文件
進行操作之前提示你。在下面的例子中,f i n d命令在當前目錄中查找所有文件名以. L O G結(jié)尾、
更改時間在5日以上的文件,并刪除它們,只不過在刪除之前先給出提示。


按y鍵刪除文件,按n鍵不刪除。
任何形式的命令都可以在- e x e c選項中使用。在下面的例子中我們使用g r e p命令。f i n d命令

首先匹配所有文件名為“p a s s w d *”的文件,例如p a s s w d、p a s s w d . o l d、p a s s w d . b a k,然后執(zhí)
行g r e p命令看看在這些文件中是否存在一個r o u n d e r用戶。
作者: sd-feng    時間: 2006-05-26 10:32
2.1.14 find命令的例子
我們已經(jīng)介紹了f i n d命令的基本選項,下面給出f i n d命令的一些其他的例子
。
為了匹配$ H O M E目錄下的所有文件,下面兩種方法都可以使用



$ find $HOME -print
$ find ~ -print


為了在當前目錄中查找s u i d置位,文件屬主具有讀、寫、執(zhí)行權(quán)限,并且文件所屬組的用
戶和其他用戶具有讀和執(zhí)行的權(quán)限的文件,可以用:

$ find . -type f -perm 4755 -print


為了查找系統(tǒng)中所有文件長度為0的普通文件,并列出它們的完整路徑,可以用:

$ find / -type f -size 0 -exec ls -l {} \
;


為了查找/ v a r / l o g s目錄中更改時間在7日以前的普通文件,并刪除它們,可以用:

$ find /var/logs -type f -mtime +7 -exec rm {} \
;


為了查找系統(tǒng)中所有屬于a u d i t組的文件,可以用:

$find /-name -group audit -print


我們的一個審計系統(tǒng)每天創(chuàng)建一個審計日志文件。日志文件名的最后含有數(shù)字,這樣我
們一眼就可以看出哪個文件是最新的,哪個是最舊的。A d m i n . l o g 文件編上了序號:
a d m i n . l o g . 0 0 1、a d m i n . l o g . 0 0 2等等。下面的f i n d命令將刪除/ l o g s目錄中訪問時間在7日以前、
含有數(shù)字后綴的a d m i n . l o g文件。該命令只檢查三位數(shù)字,所以相應日志文件的后綴不要超過
9 9 9。

$ find /logs -name 'admin.log[0-9][0-9][0-9]


'-atime +7 -exec rm {} \
;


為了查找當前文件系統(tǒng)中的所有目錄并排序,可以用:

$ find . -type d -print -local -mount |sort


為了查找系統(tǒng)中所有的r m t磁帶設備,可以用:

$ find /dev/rmt -print


2.2 xargs
在使用f i n d命令的- e x e c選項處理匹配到的文件時,f i n d命令將所有匹配到的文件一起傳遞
給e x e c執(zhí)行。不幸的是,有些系統(tǒng)對能夠傳遞給e x e c的命令長度有限制,這樣在f i n d命令運行
幾分鐘之后,就會出現(xiàn)溢出錯誤。錯誤信息通常是“參數(shù)列太長”或“參數(shù)列溢出”。這就是
x a rg s命令的用處所在,特別是與f i n d命令一起使用。F i n d命令把匹配到的文件傳遞給x a rg s命
令,而x a rg s命令每次只獲取一部分文件而不是全部,不像- e x e c選項那樣。這樣它可以先處理
最先獲取的一部分文件,然后是下一批,并如此繼續(xù)下去。在有些系統(tǒng)中,使用- e x e c選項會
為處理每一個匹配到的文件而發(fā)起一個相應的進程,并非將匹配到的文件全部作為參數(shù)一次
執(zhí)行;這樣在有些情況下就會出現(xiàn)進程過多,系統(tǒng)性能下降的問題,因而效率不高;而使用


第2章使用f i n d和x a rg s 21
下載
x a rg s命令則只有一個進程。另外,在使用x a rg s命令時,究竟是一次獲取所有的參數(shù),還是分
批取得參數(shù),以及每一次獲取參數(shù)的數(shù)目都會根據(jù)該命令的選項及系統(tǒng)內(nèi)核中相應的可調(diào)參
數(shù)來確定。

讓我們來看看x a rg s命令是如何同f i n d命令一起使用的,并給出一些例子。

下面的例子查找系統(tǒng)中的每一個普通文件,然后使用x a rg s命令來測試它們分別屬于哪類
文件:


下面的例子在整個系統(tǒng)中查找內(nèi)存信息轉(zhuǎn)儲文件(core dump) ,然后把結(jié)果保存到
/tmp/core.log 文件中:

$ find . -name "core" -print | xargs echo "" >/tmp/core.log


下面的例子在/ a p p s / a u d i t目錄下查找所有用戶具有讀、寫和執(zhí)行權(quán)限的文件,并收回相應
的寫權(quán)限:

$ find /apps/audit -perm -7 -print | xargs chmod o-
w


在下面的例子中,我們用g r e p命令在所有的普通文件中搜索d e v i c e這個詞:

$ find / -type f -print | xargs grep "device"


在下面的例子中,我們用g r e p命令在當前目錄下的所有普通文件中搜索D B O這個詞:

$ find . -name
\


*-type f -print | xargs grep "DBO"

注意,在上面的例子中,\用來取消f i n d命令中的*在s h e l l中的特殊含義。

2.3 小結(jié)
f i n d命令是一個非常優(yōu)秀的工具,它可以按照用戶指定的準則來匹配文件。使用e x e c和
x a rg s可以使用戶對所匹配到的文件執(zhí)行幾乎所有的命令。
作者: 唐三葬    時間: 2006-05-28 22:25
頂,希望轉(zhuǎn)完。
作者: sd-feng    時間: 2006-05-29 10:24
第3章后臺執(zhí)行命令

當你在終端或控制臺工作時,可能不希望由于運行一個作業(yè)而占住了屏幕,因為可能還
有更重要的事情要做,比如閱讀電子郵件。對于密集訪問磁盤的進程,你可能希望它能夠在
每天的非負荷高峰時間段運行。為了使這些進程能夠在后臺運行,也就是說不在終端屏幕上
運行,有幾種選擇方法可供使用。

在本章中我們將討論:

. 設置c r o n t a b文件,并用它來提交作業(yè)。
. 使用a t命令來提交作業(yè)。
. 在后臺提交作業(yè)。
. 使用n o h u p命令提交作業(yè)。
名詞解釋:

cron 系統(tǒng)調(diào)度進程?梢允褂盟诿刻斓姆歉叻遑摵蓵r間段運行作業(yè),或在一周或一月
中的不同時段運行。

At at命令。使用它在一個特定的時間運行一些特殊的作業(yè),或在晚一些的非負荷高峰時
間段或高峰負荷時間段運行。

& 使用它在后臺運行一個占用時間不長的進程。

Nohup 使用它在后臺運行一個命令,即使在用戶退出時也不受影響。
作者: sd-feng    時間: 2006-05-29 10:27
3.1 cron和crontab
c r o n是系統(tǒng)主要的調(diào)度進程,可以在無需人工干預的情況下運行作業(yè)。有一個叫做
c r o n t a b的命令允許用戶提交、編輯或刪除相應的作業(yè)。每一個用戶都可以有一個c r o n t a b文件
來保存調(diào)度信息?梢允褂盟\行任意一個s h e l l腳本或某個命令,每小時運行一次,或一周
三次,這完全取決于你。每一個用戶都可以有自己的c r o n t a b文件,但在一個較大的系統(tǒng)中,
系統(tǒng)管理員一般會禁止這些文件,而只在整個系統(tǒng)保留一個這樣的文件。系統(tǒng)管理員是通過
c r o n . d e n y和c r o n . a l l o w這兩個文件來禁止或允許用戶擁有自己的c r o n t a b文件。

3.1.1 crontab的域
為了能夠在特定的時間運行作業(yè),需要了解c r o n t a b文件每個條目中各個域的意義和格式。
下面就是這些域:

第1列分鐘1~5 9
第2列小時1~2 3(0表示子夜)
第3列日1~3 1
第4列月1~1 2
第5列星期0~6(0表示星期天)
第6列要運行的命令



下面是c r o n t a b的格式:

分< >時< >日< >月< >星期< >要運行的命令

其中< >表示空格。

C r o n t a b文件的一個條目是從左邊讀起的,第一列是分,最后一列是要運行的命令,它位
于星期的后面。

在這些域中,可以用橫杠-來表示一個時間范圍,例如你希望星期一至星期五運行某個作
業(yè),那么可以在星期域使用1 - 5來表示。還可以在這些域中使用逗號“,”,例如你希望星期一
和星期四運行某個作業(yè),只需要使用1 , 4來表示?梢杂眯翘*來表示連續(xù)的時間段。如果你
對某個表示時間的域沒有特別的限定,也應該在該域填入*。該文件的每一個條目必須含有5
個時間域,而且每個域之間要用空格分隔。該文件中所有的注釋行要在行首用#來表示。
作者: sd-feng    時間: 2006-05-29 10:28
3.1.2 crontab條目舉例
這里有c r o n t a b文件條目的一些例子:

30 21* * * /apps/bin/cleanup.sh


上面的例子表示每晚的2 1 : 3 0運行/ a p p s / b i n目錄下的c l e a n u p . s h。

45 4 1,10,22 * * /apps/bin/backup.sh


上面的例子表示每月1、1 0、2 2日的4 : 4 5運行/ a p p s / b i n目錄下的b a c k u p . s h。

10 1 * * 6,0 /bin/find -name "core" -exec rm {} \
;


上面的例子表示每周六、周日的1 : 1 0運行一個f i n d命令。

0,30 18-23 * * * /apps/bin/dbcheck.sh


上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之間每隔3 0分鐘運行/ a p p s / b i n目錄下的d b c h e c k . s h。

0 23 * * 6 /apps/bin/qtrend.sh


上面的例子表示每星期六的11 : 0 0 p m 運行/ a p p s / b i n目錄下的q t r e n d . s h。

你可能已經(jīng)注意到上面的例子中,每個命令都給出了絕對路徑。當使用c r o n t a b運行s h e l l
腳本時,要由用戶來給出腳本的絕對路徑,設置相應的環(huán)境變量。記住,既然是用戶向c r o n
提交了這些作業(yè),就要向c r o n提供所需的全部環(huán)境。不要假定c r o n知道所需要的特殊環(huán)境,它
其實并不知道。所以你要保證在s h e l l腳本中提供所有必要的路徑和環(huán)境變量,除了一些自動
設置的全局變量。

如果c r o n不能運行相應的腳本,用戶將會收到一個郵件說明其中的原因。

3.1.3 crontab命令選項
c r o n t a b命令的一般形式為:

Crontab [-u user] -e -l -
r


其中:
-u 用戶名。
-e 編輯c r o n t a b文件。
-l 列出c r o n t a b文件中的內(nèi)容。
-r 刪除c r o n t a b文件。
如果使用自己的名字登錄,就不用使用- u選項,因為在執(zhí)行c r o n t a b命令時,該命令能夠



知道當前的用戶。
作者: sd-feng    時間: 2006-05-29 10:29
3.1.4 創(chuàng)建一個新的crontab文件
在考慮向c r o n進程提交一個c r o n t a b文件之前,首先要做的一件事情就是設置環(huán)境變量
E D I TO R。c r o n進程根據(jù)它來確定使用哪個編輯器編輯c r o n t a b文件。9 9 %的U N I X和L I N U X用
戶都使用v i,如果你也是這樣,那么你就編輯$ H O M E目錄下的. p r o f i l e文件,在其中加入這樣
一行:

EDITOR=vi; export EDITOR


然后保存并退出。
不妨創(chuàng)建一個名為< u s e r > c r o n的文件,其中< u s e r >是用戶名,例如,d a v e c r o n。在該文件
中加入如下的內(nèi)容。


保存并退出。確信前面5個域用空格分隔。

在上面的例子中,系統(tǒng)將每隔1 5分鐘向控制臺輸出一次當前時間。如果系統(tǒng)崩潰或掛起,
從最后所顯示的時間就可以一眼看出系統(tǒng)是什么時間停止工作的。在有些系統(tǒng)中,用t t y 1來表
示控制臺,可以根據(jù)實際情況對上面的例子進行相應的修改。

為了提交你剛剛創(chuàng)建的c r o n t a b文件,可以把這個新創(chuàng)建的文件作為c r o n命令的參數(shù):

$ crontab davecron


現(xiàn)在該文件已經(jīng)提交給c r o n進程,它將每隔1 5分鐘運行一次。

同時,新創(chuàng)建文件的一個副本已經(jīng)被放在/ v a r / s p o o l / c r o n目錄中,文件名就是用戶名(即,
d a v e)。

3.1.5 列出crontab文件
為了列出c r o n t a b文件,可以用:


你將會看到和上面類似的內(nèi)容?梢允褂眠@種方法在$ H O M E目錄中對c r o n t a b文件做一備
份:

$ crontab -l > $HOME/mycron


這樣,一旦不小心誤刪了c r o n t a b文件,可以用上一節(jié)所講述的方法迅速恢復。

3.1.6 編輯crontab文件
如果希望添加、刪除或編輯c r o n t a b文件中的條目,而E D I TO R環(huán)境變量又設置為v i,那么
就可以用v i來編輯c r o n t a b文件,相應的命令為:

$ crontab -
e


可以像使用v i編輯其他任何文件那樣修改c r o n t a b文件并退出。如果修改了某些條目或添



加了新的條目,那么在保存該文件時,c r o n會對其進行必要的完整性檢查。如果其中的某個
域出現(xiàn)了超出允許范圍的值,它會提示你。

我們在編輯c r o n t a b文件時,沒準會加入新的條目。例如,加入下面的一條:


現(xiàn)在保存并退出。最好在c r o n t a b文件的每一個條目之上加入一條注釋,這樣就可以知道
它的功能、運行時間,更為重要的是,知道這是哪位用戶的作業(yè)。
現(xiàn)在讓我們使用前面講過的crontab -l命令列出它的全部信息:


3.1.7 刪除crontab文件
為了刪除c r o n t a b文件,可以用:

$ crontab -
r


3.1.8 恢復丟失的crontab文件
如果不小心誤刪了c r o n t a b文件,假設你在自己的$ H O M E目錄下還有一個備份,那么可以
將其拷貝到/ v a r / s p o o l / c r o n / < u s e r n a m e >,其中< u s e r n a m e >是用戶名。如果由于權(quán)限問題無法完
成拷貝,可以用:

$ crontab <filename>


其中,< f i l e n a m e >是你在$ H O M E目錄中副本的文件名。

我建議你在自己的$ H O M E目錄中保存一個該文件的副本。我就有過類似的經(jīng)歷,有數(shù)次
誤刪了c r o n t a b文件(因為r鍵緊挨在e鍵的右邊.)。這就是為什么有些系統(tǒng)文檔建議不要直接
編輯c r o n t a b文件,而是編輯該文件的一個副本,然后重新提交新的文件。

有些c r o n t a b的變體有些怪異,所以在使用c r o n t a b命令時要格外小心。如果遺漏了任何選
項,c r o n t a b可能會打開一個空文件,或者看起來像是個空文件。這時敲d e l e t e鍵退出,不要按
< C t r l - D >,否則你將丟失c r o n t a b文件。
作者: sd-feng    時間: 2006-05-29 10:30
3.2 at命令
a t命令允許用戶向c r o n守護進程提交作業(yè),使其在稍后的時間運行。這里稍后的時間可能
是指1 0 m i n以后,也可能是指幾天以后。如果你希望在一個月或更長的時間以后運行,最好還
是使用c r o n t a b文件。

一旦一個作業(yè)被提交,a t命令將會保留所有當前的環(huán)境變量,包括路徑,不象c r o n t a b,
只提供缺省的環(huán)境。該作業(yè)的所有輸出都將以電子郵件的形式發(fā)送給用戶,除非你對其輸出
進行了重定向,絕大多數(shù)情況下是重定向到某個文件中。

和c r o n t a b一樣,根用戶可以通過/ e t c目錄下的a t . a l l o w和a t . d e n y文件來控制哪些用戶可以


使用a t命令,哪些用戶不行。不過一般來說,對a t命令的使用不如對c r o n t a b的使用限制那么嚴
格。

a t命令的基本形式為:

at [-f script] [-m -l -r] [time] [date]


其中,

-f script 是所要提交的腳本或命令。

-l 列出當前所有等待運行的作業(yè)。a t q命令具有相同的作用。

-r 清除作業(yè)。為了清除某個作業(yè),還要提供相應的作業(yè)標識(I D);有些U N I X變體只
接受a t r m作為清除命令。

-m 作業(yè)完成后給用戶發(fā)郵件。

time at命令的時間格式非常靈活;可以是H、H H . H H M M、H H : M M或H : M,其中H和M

分別是小時和分鐘。還可以使用a . m .或p . m .。
date 日期格式可以是月份數(shù)或日期數(shù),而且a t命令還能夠識別諸如t o d a y、t o m o r r o w這樣
的詞。
現(xiàn)在就讓我們來看看如何提交作業(yè)。
作者: sd-feng    時間: 2006-05-29 10:31
3.2.1 使用at命令提交命令或腳本
使用a t命令提交作業(yè)有幾種不同的形式,可以通過命令行方式,也可以使用a t命令提示符。
一般來說在提交若干行的系統(tǒng)命令時,我使用a t命令提示符方式,而在提交s h e l l腳本時,使用
命令行方式。

如果你想提交若干行的命令,可以在a t命令后面跟上日期/時間并回車。然后就進入了a t命
令提示符,這時只需逐條輸入相應的命令,然后按‘< C T R L - D >’退出。下面給出一個例子:


其中,< E O T >就是< C T R L - D >。在2 1 : 1 0系統(tǒng)將執(zhí)行一個簡單的f i n d命令。你應當已經(jīng)注
意到,我所提交的作業(yè)被分配了一個唯一標識job 1。該命令在完成以后會將全部結(jié)果以郵件
的形式發(fā)送給我。

下面就是我從這個郵件中截取的一部分:


下面這些日期/時間格式都是a t命令可以接受的:



如果希望向a t命令提交一個s h e l l腳本,使用其命令行方式即可。在提交腳本時使用- f選項。


在上面的例子中,一個叫做d b _ t a b l e . s h的腳本將在明天下午3 : 0 0運行。
還可以使用e c h o命令向a t命令提交作業(yè):

$ echo find /etc -name "passwd" -print | at now +1 minute
作者: sd-feng    時間: 2006-05-29 10:31
3.2.2 列出所提交的作業(yè)
一個作業(yè)被提交后,可以使用at -l 命令來列出所有的作業(yè):


其中,第一行是作業(yè)標識,后面是作業(yè)運行的日期/時間。最后一列a代表a t。還可以使用
a t q命令來完成同樣的功能,它是a t命令的一個鏈接。當提交一個作業(yè)后,它就被拷貝到
/ v a r / s p o o l / a t目錄中,準備在要求的時間運行。


3.2.3 清除一個作業(yè)
清除作業(yè)的命令格式為:

atrm [job no]或at -r [job no]

要清除某個作業(yè),首先要執(zhí)行at -l命令,以獲取相應的作業(yè)標識,然后對該作業(yè)標識使用
at -r 命令,清除該作業(yè)。


有些系統(tǒng)使用at-r [job no]命令清除作業(yè)。
作者: sd-feng    時間: 2006-05-29 10:32
3.3 &命令
當在前臺運行某個作業(yè)時,終端被該作業(yè)占據(jù);而在后臺運行作業(yè)時,它不會占據(jù)終端。


可以使用&命令把作業(yè)放到后臺執(zhí)行。

該命令的一般形式為:

命令&

為什么要在后臺執(zhí)行命令?因為當在后臺執(zhí)行命令時,可以繼續(xù)使用你的終端做其他事
情。適合在后臺運行的命令有f i n d、費時的打印作業(yè)、費時的排序及一些s h e l l腳本。在后臺運
行作業(yè)時要當心:需要用戶交互的命令不要放在后臺執(zhí)行,因為這樣你的機器就會在那里傻
等。

不過,作業(yè)在后臺運行一樣會將結(jié)果輸出到屏幕上,干擾你的工作。如果放在后臺運行
的作業(yè)會產(chǎn)生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:

command >out.file 2>&1
&


在上面的例子中,所有的標準輸出和錯誤輸出都將被重定向到一個叫做out.file 的文件中。
當你成功地提交進程以后,就會顯示出一個進程號,可以用它來監(jiān)控該進程,或殺死它。
作者: sd-feng    時間: 2006-05-29 10:32
3.3.1 向后臺提交命令
現(xiàn)在我們運行一個f i n d命令,查找名為“s r m . c o n f”的文件,并把所有標準輸出和錯誤輸
出重定向到一個叫作f i n d . d t的文件中:


在上面的例子中,在我們成功提交該命令之后,系統(tǒng)給出了它的進程號2 7 0 1 5

當該作業(yè)完成時,按任意鍵(一般是回車鍵)就會出現(xiàn)一個提示




這里還有另外一個例子,有一個叫做p s 1的腳本,它能夠截斷和清除所有的日志文件,我
把它放到后臺去執(zhí)行:


3.3.2 用ps命令查看進程
當一個命令在后臺執(zhí)行的時候,可以用提交命令時所得到的進程號來監(jiān)控它的運行。在
前面的例子中,我們可以按照提交p s 1時得到的進程號,用p s命令和g r e p命令列出這個進程:


如果系統(tǒng)不支持ps x命令,可以用:


記住,在用p s命令列出進程時,它無法確定該進程是運行在前臺還是后臺。

3.3.3 殺死后臺進程
如果想殺死后臺進程可以使用k i l l命令。當一個進程被放到后臺運行時,s h e l l會給出一個


進程號,我們可以根據(jù)這個進程號,用k i l l命令殺死該進程。該命令的基本形式為:

kill -signal [process_number]


現(xiàn)在暫且不要考慮其中的各種不同信號;我們會在后面的章節(jié)對這一問題進行介紹。
在殺進程的時候,執(zhí)行下面的命令(你的進程號可能會不同)并按回車鍵。系統(tǒng)將會給出相
應的信息告訴用戶進程已經(jīng)被殺死。


如果系統(tǒng)沒有給出任何信息,告訴你進程已經(jīng)被殺死,那么不妨等一會兒,也許系統(tǒng)正
在殺該進程,如果還沒有回應,就再執(zhí)行另外一個k i l l命令,這次帶上一個信號選項:


如果用上述方法提交了一個后臺進程,那么在退出時該進程將會被終止。為了使后臺進
程能夠在退出后繼續(xù)運行,可以使用n o h u p命令,下面我們就介紹這一命令。
作者: sd-feng    時間: 2006-05-29 10:33
3.4 nohup命令
如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結(jié)束,那么可以使用
n o h u p命令。該命令可以在你退出帳戶之后繼續(xù)運行相應的進程。N o h u p就是不掛起的意思( n o
hang up)。

該命令的一般形式為:

nohup command
&


3.4.1 使用nohup命令提交作業(yè)
如果使用n o h u p命令提交作業(yè),那么在缺省情況下該作業(yè)的所有輸出都被重定向到一個名
為n o h u p . o u t的文件中,除非另外指定了輸出文件:

nohup command > myout.file 2>&
1


在上面的例子中,輸出被重定向到m y o u t . f i l e文件中。
讓我們來看一個例子,驗證一下在退出帳戶后相應的作業(yè)是否能夠繼續(xù)運行。我們先提
交一個名為p s 1的日志清除進程:


現(xiàn)在退出該s h e l l,再重新登錄,然后執(zhí)行下面的命令:


我們看到,該腳本還在運行。如果系統(tǒng)不支持ps x命令,使用ps -ef|grep ps1命令。

3.4.2 一次提交幾個作業(yè)
如果希望一次提交幾個命令,最好能夠把它們寫入到一個s h e l l腳本文件中,并用n o h u p命
令來執(zhí)行它。例如,下面的所有命令都用管道符號連接在一起;我們可以把這些命令存入一


個文件,并使該文件可執(zhí)行。


現(xiàn)在讓它可執(zhí)行:

$ chmod 744 quarterend


我們還將該腳本的所有輸出都重定向到一個名為q t r. o u t的文件中。


3.5 小結(jié)
本章中所討論的工具主要是有關后臺運行作業(yè)的。有時我們必須要對大文件進行大量更
改,或執(zhí)行一些復雜的查找,這些工作最好能夠在系統(tǒng)負荷較低時執(zhí)行。

創(chuàng)建一個定時清理日志文件或完成其他特殊工作的腳本,這樣只要提交一次,就可以每
天晚上運行,而且無需你干預,只要看看相應的腳本日志就可以了。C r o n和其他工具可以使
系統(tǒng)管理任務變得更輕松。
作者: 大大狗    時間: 2006-05-29 12:51
好東東,有時間去下來學習,先頂.
作者: linux_admin    時間: 2006-05-29 15:27
謝謝了。我已經(jīng)下載完畢!
作者: sd-feng    時間: 2006-05-29 16:27
不客氣.
對大家有用就行.
作者: alangC    時間: 2006-05-29 23:25
樓主能否列貼完后,將文件做成一個.rar文件,以利于大家下載研讀?
作者: sd-feng    時間: 2006-05-30 15:11
原帖由 alangC 于 2006-5-29 23:25 發(fā)表
樓主能否列貼完后,將文件做成一個.rar文件,以利于大家下載研讀?

可以到我的FTP下載,
作者: 60133056    時間: 2006-05-31 01:22
樓主你的。疲裕小∵M不去啊 ?  謝謝熱情好心的樓主   請發(fā)到我的郵箱中吧  謝謝 萬分感謝 
llljj19821229@yahoo.com.cn

極度的期待中......
作者: cguang    時間: 2006-12-07 10:30
好是好.不過都是基礎的!!我要難一點兒的!!
作者: letwave    時間: 2006-12-07 11:59
標題: 回復 29樓 sd-feng 的帖子
樓主,能否做成PDF,直接提供下載呢,這樣你帖就容易,我們下載也方便




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2