首页 > 系统 > Linux > 正文

shell脚本学习指南[五](Arnold Robbins & Nelson H.F. Beebe著)

2019-10-26 18:39:26
字体:
来源:转载
供稿:网友

作者告诉我们:到目前为止基础已经搞定,可以将前边所学结合shell变成进军中等难度的任务了。激动的要哭了,终于看到本书结束的曙光了 T T 。码字比码代码还辛苦。不过令人兴奋的是立刻就学以致用了,花了一天半的时间处理了一个3.8G的服务器日志文件,你妹啊,破电脑内存才2G。不过切割化小然后写了几个awk文件和sh文件按规则处理合并,算是搞定了!


第十一章扩展实例:合并用户数据库


问题描述就是有两台UNIX的计算机系统,这两个系统现在要合并,用户群同样需要合并。有许多用户两台系统上都有帐号。现在合并需要的功能是:
将两个系统里的/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编号列表。可用来寻找新的未使用UID。
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命令,从根目录开始做。类似这样:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表