作者告訴我們:到目前為止基礎已經搞定,可以將前邊所學結合shell變成進軍中等難度的任務了。激動的要哭了,終于看到本書結束的曙光了 T T 。碼字比碼代碼還辛苦。不過令人興奮的是立刻就學以致用了,花了一天半的時間處理了一個3.8G的服務器日志文件,你妹啊,破電腦內存才2G。不過切割化小然后寫了幾個awk文件和sh文件按規則處理合并,算是搞定了!
第十一章擴展實例:合并用戶數據庫
問題描述就是有兩臺UNIX的計算機系統,這兩個系統現在要合并,用戶群同樣需要合并。有許多用戶兩臺系統上都有帳號?,F在合并需要的功能是:
將兩個系統里的/etc/passwd文件合并,并確保來自這兩臺系統的所有用戶有唯一UID。
針對已存在的UID、但被用在不同用戶身上的情況,則將其所有文件的所有權變更為正確用戶。
解決這個問題,我們程序必須處理的情況可能有這些:
1、用戶在兩個系統都有用戶名和UID。
2、用戶的用戶名和UID只有一臺系統里有,另一臺沒有,這合并時不會有問題。
3、用戶在兩臺系統都有相同的用戶名但UID不同。
4、用戶在兩臺系統擁有相同UID但用戶名不同。
合并密碼文件幾個步驟:
1、直接物理合并文件,重復的username聚在一起,產生結果為下步輸入。
2、將合并文件分三分:具有相同username和UID的用戶放入unique,未重復的用戶username也放入。具有相同username但不同UID的放入dupusers,具有相同UID但不同username的放入dupids。
3、建立已使用中具有唯一性的UID編號列表??捎脕韺ふ倚碌奈词褂肬ID。
4、編寫另一個程序,搭配使用UID編號了解,尋找新的UID編號。
5、建立用以產生最后/etc/passwd記錄的三項組合(username、old UID、new UID)列表。還有最重要的:產生命令,以變更文件系統中文件的所有權。與此同時,針對原來就擁有數個UID的用戶以及同一UID擁有多個用戶,建立最后的密碼文件項目。
6、建立最終密碼文件。
7、建立變更文件所有權的命令列表,并執行,這部分要謹慎處理,小心規劃。
這里書中針對上述步驟書寫了程序,很大一部分代碼是處理UID的,個人感覺全部使用新的UID來重新映射username,不是很簡單就搞定一切了。只用把所有出現的username記錄出來,重復的干掉,再順序給出對應UID,很簡單幾步搞定了。至于之后根據old UID更改文件權限,完全可以做新舊UID的映射,直接改到新的里邊就OK了。這樣想來如果更改文件權限是程序主要耗時部分的話,書中原方法還是可取的,只是編碼復雜度較高。如果更改權限耗時能夠承受,還是選擇編碼復雜度低的來搞速度還快點,也方便。
這里更改文件權限使用chown命令,可以更改文件擁有用戶或用戶組。-R選項遞歸處理。但出現的問題是用戶擁有的文件未必只放在用戶根目錄里。所以更改用戶在每一個地方的文件需要使用find命令,從根目錄開始做。類似這樣:
新聞熱點
疑難解答