您可以通过使用一些受支持的 AIX 实用工具更改系统文件来避免很多由编辑错误引起的问题。AIX 提供了一些用户友好的命令来更新一些关键的系统文件。在熟悉了这些命令后,您就会意识到,与直接编辑相比,使用实用工具更改这些文件要安全的多(和简单得多)。而且,直接编辑某些文件,比如 /etc/inittab,是不受支持的,所以了解如何使用这些量身定制的命令或通过 SMIT 实现更改就显得十分必要。
您可能习惯于编辑系统文件,但有时的确会出错,如编辑会话被中断、关键文件被错误覆盖等等。您可能会想,在编辑系统文件之前做好备份,不就安全了么。即便如此,在您意识到需要恢复到备份版本时往往已经为时过晚。因为只有在出现问题时您才会想到要恢复之前的版本。
编辑系统文件的另一个挑战是要确保您使用的是正确的格式。一个文件与另一个文件的语法会有所不同。比如,/etc/passwd 和 /etc/inittab 文件中的字段用冒号(:)作为分隔符,而 /etc/services 和 /etc/hosts 文件中的字段则使用空白作为分隔符。在 /etc/inittab 文件中,冒号还可充当注释符,而不是您通常认为的井字符(#)。但是在 /etc/filesystems 文件中,注释符却是星号(*)。如果有一个实用工具能在更新文件之前 先检查语法,那将比您自己保存文件副本方法得到更高程度的保护。预防通常都胜于治疗。
如今,您可能已具有多年使用 UNIX® 系统的经验,并且对于系统文件的语法也已稔熟于心。您可能还是一个使用编辑器的奇才。非常好,但是您可以试想一下,培训那些在编辑器和配置文件标准方面经验不多的人将是一件多么困难的事。即便是在编辑 /etc/passwd 中发生的一个小小的疏忽(只是一个字符的丢失)就可以导致生产系统不可用。对于其他文件,您可能在很长一段时间都不会意识到错误的存在。比如,如果 /etc/inittab 或 /etc/filesystems 中出错了,要在下一次重新启动时才能发现这个错误,可能在您进行更改后数月之后才能发现。而确定哪个配置引起问题也十分棘手和耗时。接着,您还必须精确地找出究竟是哪个拼写或语法错误造成的损害。如果能有一个简单的命令可供您为至少其中的一些关键文件运行,岂不是方便了您和所有在您系统上工作的人么?
本文提供的这些技巧并不能让您的系统永不出错,但它们至少可以帮助您在对关键的操作系统文件进行更改时实现检查和平衡。所以,在您发现自己选择采用像 vi /etc/passwd 这样的简单命令的艰难道路并不总是能指向积极的职业方向之前,请先来了解一些更为安全的选项。
有很多命令可用来对最常见的 AIX 系统配置文件进行更改。这些命令提供了许多合理的检查,它们通常在出现语法错误时,阻止您(或至少对您提出警告)。即便不是每次更改这些系统文件时都使用这些命令,但知道它们的存在也是很有帮助的,特别是在对不熟悉的系统文件进行更改的时候,更是如此。
您可以使用 SMIT 更改更多关键的 AIX 系统文件。使用 SMIT 的一个好处是它能保存更改日志(位于用户的 home 目录中的 smit.log)以及所有已运行的命令的脚本 (smit.script)。当您在 SMIT 中按下 Enter 运行一个命令时,您可以通过按下 F6 或 Esc-6 来查看此命令的语法。这是一种很好的方式。它通常会显示一个简短的脚本,可帮助您编写自己的脚本。
有关使用 SMIT 的更多信息,请参见 参考资料。
除了 SMIT,还有其他的 AIX 实用工具可用来更改系统文件。与使用编辑器相比,运行一个定制的命令具有很多的优势。使用定制命令更改文件可以:
- 节省时间,因为您可以将命令编写成脚本并运行它,最大限度地减少用户的介入。
- 改进一致性,因为您可在对等的虚拟服务器上运行完全相同的更改。
- 部分文件更改时进行语法检查。
- 让您可以保存成功和故障的日志。
- 维持系统文件的正确权限。
- 简化文件更改的文档说明。
如果想要在几个 AIX 虚拟服务器上对相同文件进行更改,可以运行一个命令更新每个使用 Distributed Shell (DSH) 的服务器上的此文件(参见 参考资料)。
AIX 具有很多系统配置文件,这些系统配置文件对系统的良好运行发挥着关键的作用。如下所列的只是其中几个系统管理员常常编辑的配置文件:
- 用户 (/etc/passwd)
- 用户组 (/etc/group)
- 文件系统 (/etc/filesystems)
- NFS 加载(也在 /etc/filesystems 中)
- NFS 导出 (/etc/exports)
- 主机名和别名 (/etc/hosts)
- 域名服务 (/etc/resolv.conf)
- TCP/IP 服务 (/etc/services)
- inetd 守护程序配置文件 (/etc/inetd.conf)
- 初始化表 (/etc/inittab)
还有一些替代方法可供您自己动手编辑这些文件,而且在某些情况下,使用命令所耗费的精力要比打开文件以搜索想要更改的部分少许多。这里所列的所有命令都有相应的文档可用(参见 参考资料)。
passwd 文件包含了一个用户列表以及有关这些用户的有价值的信息集。它对登录进程、管理权限以及指定 home 目录十分关键。由于 /etc/passwd 文件在所有 UNIX 系统中十分常见,因此经常对其进行编辑并应用于打印测试。但它是一个关键文件,如果遭到损坏或覆盖,就需要从备份中恢复,或至少引导进入维护模式进行修复。
我曾见过,某人本来是要打印 /etc/passwd,却不小心将打印命令重定向至 该文件,而导致系统崩溃的情景。我还见到过某些站点,其中 /etc/passwd 可通过 Samba 共享供普通用户使用,这些用户可以对其进行查看,甚至有可能将其覆盖。
系统管理员通常只是为了查看信息,或是更改某个用户的一些细节而编辑 /etc/passwd 文件。这也有风险。相反,您可以使用 lsuser 命令来查看信息。使用 chuser 命令来更改用户细节,比如 GECOS 字段(用户的全名)。如果您喜欢,您也可以使用 smit user 快捷途径来查看用户信息或进行更改。
用户组的列表编辑起来尤其问题多多。简单的一行就可以跨越数百个字符,因为每个组都包含了其所有成员用户的用户名。可以使用下面 表 1 所列的命令来管理 /etc/group 文件。
表 1. 用来管理 /etc/group 文件的命令
| 命令 | 描述 |
|---|---|
chgroup | 更改组的属性,比如用户。 |
chgrpmem | 更改某个组的成员。 |
chuser | 更改某个用户的组成员身份。 |
lsgroup | 列出这个组。 |
mkgroup | 创建一个新组。 |
mkuser | 创建一个新用户。 |
rmgroup | 删除一个组。确保先删除此组的所有用户。 |
smit group 快捷途径可提供菜单供您列出 UNIX 组的细节或对其进行更改。
这个文件对加载文件系统十分重要。如果在 /etc/filesystems 中发生错误,那么要到下一次重新引导时方能发现这个错误。可能在编辑文件后长达数月之久才能发现其错误,并且您有可能没加载一个或多个文件系统。而这又可能会导致数据库和应用程序不能正确启动。
如果想要更改某个文件系统的加载点,可以使用 chfs -m 命令。还可以使用 chfs 命令来更改加载选项,比如 Concurrent I/O (CIO)。 要在 SMIT 中更改文件系统,可以使用 smit chfs 快捷途径。
对于网络文件系统 (NFS) 加载,可以使用 smit nfs
快捷途径,或下面 表 2 中所列的命令。
表 2. 用来管理 /etc/filesystems 文件中的 NFS 加载的命令
| 命令 | 描述 |
|---|---|
mknfsmnt | 创建一次加载。 |
chnfsmnt | 更改加载选项。 |
rmnfsmnt | 删除一次加载。 |
/etc/exports 文件包含了可导出至 NFS 客户机的目录的列表。不用直接编辑导出文件,再运行 exportfs 命令,您可以使用 smit nfs 快捷途径,或运行下面 表 3 中所列命令。
表 3. 用来管理 /etc/exports 文件的命令
| 命令 | 描述 |
|---|---|
mknfsexp | 导出目录以便其他的虚拟服务器可以加载这些目录。 |
exportfs | 更改导出。 |
rmnfsexp | 取消导出 (Unexport) 目录。 |
大多数人都会使用编辑器来更新本地的主机文件,与之相反,您可以使用 hostent 命令。其优势是它能查看您是否在添加一个重复的主机名或 IP 地址。下列 清单 1 显示了如何添加一个主机。
清单 1. 使用
hostent 添加一个主机hostent -a 10.1.1.10 -h lpar10 |
之后,您还可以使用 hostent -s 来显示这个主机,如 清单 2 所示。
清单 2. 显示主机条目
hostent -s lpar10 10.1.1.10 lpar10 |
正如之前提到的,hostent 命令可阻止您添加重复的 IP 地址或主机名,如 清单 3 所示。
清单 3.
hostent 命令检查有无重复项hostent -a 10.1.1.10 -h lpar11 hostent: 0822-041 The IP address 10.1.1.10 already exists. |
如果需要对若干个虚拟服务器的主机数据库进行更改,那么可以选用 hostent 命令,它比直接编辑 /etc/hosts 文件更简单也更安全。
要想在 SMIT 中对主机进行更改,可以使用 smit namerslv 快捷途径。
namerslv 命令可用来管理 Domain Name System (DNS) 服务器的列表。使用这个命令,可以添加一个域、添加或删除名称服务器以及更改搜索列表。也可以使用 smit namerslv 快捷途径。
可以使用 chservices 命令更改此服务文件。这个命令可用来添加、更改或去激活 /etc/services 文件中的项。
inetd 守护程序配置文件 (/etc/inetd.conf)
可以使用 chsubserver 命令更改 /etc/inetd.conf 文件。这个命令可用来添加、删除或更改项。它还可以发送一个信号来刷新此 inetd 守护程序。更改 /etc/inetd.conf 文件的 SMIT 快捷途径是 smit inetdconf。
可以使用下面 表 4 中所列命令来更改 /etc/inittab 文件。
表 4. 用来更改 /etc/inittab 文件的命令
| 命令 | 描述 |
|---|---|
lsitab | 列出 /etc/inittab 中的项。要列出除了解除注释的项之外的所有项,可以使用 lsitab -a。也可以用其惟一标识符来指定某个具体的项。 |
chitab | 对现有的某项进行更改。但是,不能用这个命令解除某个项的注释。 |
mkitab | 创建一个新项。 |
rmitab | 删除一项。 |
无论您对编辑关键系统文件有多自信,意外还是有可能发生。在撤销造成的神秘功能损失或准确检测其原因时,文件之间的语法差异使得此操作变得十分困难。
当您想要更改任何的系统配置文件时,请先查看是否已经有了量身定制的命令,或者 SMIT 中的菜单选项是否可用。内置的命令可以使您的系统更好地免受人为错误的干扰,此外,即便真的在更改过程中遇到了困难,也能非常容易地跟踪命令历史并逆转更改。
学习
- “SMIT 入门”(developerWorks,2006 年 9 月)提供了 SMIT 的简介。
- 阅读 “DSH Simplifies the Task of Managing Multiple Systems”(IBM System Magazine,2008 年 10 月)了解如何使用 DSH 跨多个 AIX 系统执行命令。
- 了解关于 AIX Version 7.1 中的 系统文件 的更多信息。
- 查阅 AIX 7.1 命令文档。
- 访问我在 IBM developerWorks 上的博客 AIX
Down Under,其中包含许多针对 AIX 管理员的技巧和实际案例,以及针对初学者的技巧和一些高级主题。
-
在 Twitter上关注我,及时查看我的博客更新。
- developerWorks 技术活动和网络广播:随时关注 developerWorks 技术活动和网络广播。
- 关注 Twitter 上的 developerWorks。
- 观看 developerWorks 演示中心,包括面向初学者的产品安装和设置演示,以及为经验丰富的开发人员提供的高级功能。
获得产品和技术
- 以最适合您的方式
IBM 产品评估试用版软件:下载产品试用版本,在线试用产品,在云环境中使用产品,或者在 IBM SOA 人员沙箱 中花费几个小时来学习如何高效实现面向服务架构。
讨论
- 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和 wikis,并与其他 developerWorks 用户交流。
-
访问 developerWorks 博客 并加入 developerWorks 社区。
-
参与 AIX 和 AIX and UNIX® 论坛:

Anthony English 是来自澳大利亚悉尼市的一名独立承包人。他从 1991 年开始就一直在 AIX 系统上工作,他还撰写 IBM developerWorks 博客 AIX Down Under。