Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2071208
  • 博文数量: 326
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3485
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-10 22:49
文章存档

2011年(1)

2009年(1)

2008年(6)

2007年(5)

2006年(154)

2005年(159)

我的朋友

分类:

2006-02-09 12:10:42

Solaris高级系统管理员指南

目 录
第1章、前言
1.1了解超级用户状态
1.1.1成为超级用户(su)
1.1.2退出超级用户状态
1.1.3以root注册
1.2与用户通信
1.2.1在注册时显示系统专用信息
1.2.2将信息发送给单个用户
1.2.2.1发送一个短消息给一个单独的用户
1.2.2.2将作为一个文件的消息发给个别用户
1.2.3将消息发送给一个系统或网络中的所有用户
1.2.4通过电子邮件发送消息
1.3启动和关闭系统
1.3.1选择init状态
1.3.1.1查看系统运行级
1.3.1.2使用掉电状态,运行级0
1.3.1.3使用系统管理员状态,运行级1
1.3.1.4使用多用户状态,运行级2
1.3.1.5使用远程资源共享状态,运行级3
1.3.1.6使用替换多用户状态,运行级4
1.3.1.7使用交互重引导状态,运行级5
1.3.1.8使用重引导状态,运行级6
1.3.1.9使用单用户状态,运行级s或S
1.3.1.10改变运行级
1.3.2选择所用的关闭命令
1.3.2.1 shutdown
1.3.2.2 telinit和init
1.3.2.3 halt
1.3.2.4 reboot
1.3.3 引导系统
1.3.3.1 引导到多用户状态
1.3.3.2 引导到单用户状态
1.3.3.3交互式引导
1.3.3.4查看引导信息
1.3.3.5增加新的硬件后引导系统
1.3.3.6退回引导进程
1.3.4关闭系统
1.3.4.1关闭一个多用户系统
1.3.4.2关闭系统:可选方式
1.4监视进程
1.4.1 ps命令报告的内容
1.4.2使用ps报告
1.4.3杀死进程
1.5基本管理工具
1.5.1经常使用的命令
1.5.1.1在文件系统中移动
1.5.1.2查看在文件系统中所处的位置
1.5.1.3改变目录
1.5.1.4查看文件的有关信息
1.5.1.5显示文件信息
1.5.1.6查找一个文件
1.5.1.7查看一个文件的类型
1.5.1.8查看文件中的信息
1.5.1.9查找文件中的字符串
1.5.1.10查看文件
1.5.1.11浏览文件
1.5.1.12查看文件尾
1.5.1.13查看文件头
1.5.1.14改变文件的所有权和许可权
1.5.1.15改变文件组
1.5.1.16设置或显示系统环境
1.5.1.17定义Bourne和Korn shell环境变量
1.5.1.18定义C shell环境变量
1.5.1.19显示环境变量的设置
1.5.1.20使用PATH变量
1.5.1.21设置Bourne和Korn shell路径
1.5.1.22设置C shell路径
1.5.2使用管理工具
第2章、基本OS命令
2.1查找用户信息
2.1.1确定系统中有谁注册
2.1.1.1使用who命令
2.1.1.2使用finger命令
2.1.1.3使用rusers -1命令
2.1.1.4使用whodo命令
2.1.2检查用户的用户号和组号(id命令)
2.2查寻环境信息
2.3创建和编辑文件
2.3.1使用cat命令
2.3.2使用touch命令
2.3.3文件拷贝(cp)或改名(mv)
2.3.4文本编辑器的使用
2.3.5 vi的使用
2.4命令组合及输出重新定向
2.4.1在同一命令行里键入多个命令
2.4.2输出重新定向(<>
2.4.3组合命令(|)
2.5使用手册
2.5.1显示手册(man)
2.5.2找命令节号(whatis、man)
2.6查阅磁盘信息
2.6.1显示磁盘空间的信息(df -k)
2.6.2判别某文件系统是否为本地文件系统(df)
2.6.3找出某种类型已安装的文件系统(df -F)
第3章、设备管理
3.1磁带的使用
3.1.1磁带设备的命名习惯
3.1.1.1使用缺省密度规定驱动器号
3.1.1.2为磁带机指定密度
3.1.1.3指定"不倒带"选项
3.1.1.4不同磁带控制器和介质的设备名缩写
3.1.1.5 1/2英寸卷绕式非SCSI内接(Rack mounted)磁带机
3.1.1.6 1/4英寸SCSI盒式和1/2英寸前部装入的卷绕式磁带机
3.1.1.7 螺线扫描磁带机
3.1.2读写磁带的命令
3.1.2.1拉紧磁带
3.1.2.2倒带
3.1.2.3列出磁带机状态
3.2 磁带与软盘操作
3.2.1 tar命令
3.2.1.1向磁带写文件(tar)
3.2.1.2列出磁带上的文件(tar)
3.2.1.3向磁带上增加文件(tar)
3.2.1.4从磁带中析取文件(tar)
3.2.2cpio命令
3.2.2.1将某目录下的所有文件拷入磁带(cpio)
3.2.2.2列出磁带上的文件(cpio)
3.2.2.3析取磁带上所有文件(cpio)
3.2.2.4自磁带中析取个别文件(cpio)
3.2.2.5软盘的使用
3.2.3软驱设备名
3.2.4ufs文件系统的软盘
3.2.4.1格式化ufs软盘
3.2.4.2自软驱中取出软盘
3.2.4.3将ufs文件拷入单张格式化过软盘
3.2.4.4列出软盘上的文件
3.2.4.5向一个格式化好的软盘上附加文件(tar)
3.2.4.6从软盘上拷出文件(tar)
3.2.4.7自软盘上拷出bar格式的文件(cpio)
3.2.5使用多张软盘存档
3.2.5.1在软盘上创建一个ufs文件系统(newfs /dev/rdiskette)
3.2.6pcfs(DOS)文件系统的软盘
3.2.6.1 格式化pcfs(DOS)文件系统软盘
3.2.6.2安装pcfs软盘
3.2.6.3卸下pcfs软盘
3.3硬盘命名管理
3.3.1硬盘命名习惯
3.3.1.1带有总线控制器的硬盘的使用
3.3.1.2带有直接驱动器的硬盘的使用
3.3.2检查硬盘使用状况
3.3.3检查硬盘信息(Prtvtoc)
3.3.3.1将文件存档
3.3.3.2将硬盘上文件拷出
3.3.3.3修复坏块
3.3.3.4重新格式化硬盘
3.3.3.5换下旧硬盘
3.3.3.6加入错误表对硬盘进行格式化、分区及标记
3.3.3.7重建文件系统(newfs)
3.3.3.8在临时安装点安装文件系统(mount)
3.3.3.9向文件系统转储文件(ufsrestore)
3.3.3.10自临时装入点拆卸文件系统(umount)其方法如下:
3.3.3.11检查文件系统的不一致性(fsck)
3.3.3.12对恢复文件系统做0级备份
3.3.3.13在永久安装点安装文件系统(mount)
第4章、文件系统管理
4.1文件系统类型
4.1.1磁盘文件系统
4.1.2网络文件系统
4.1.3伪文件系统
4.1.3.1临时文件系统(tmpfs)
4.1.3.2循环文件系统(lofs)
4.1.3.3进程文件系统(procfs)
4.1.3.4别的伪文件系统
4.2 SunOS 5.x缺省的文件系统
4.3虚拟文件系统表(/etc/vfstab)
4.3.1 文件系统表项的建立
4.4文件管理命令
4.4.1普通命令语法规则
4.4.2普通文件系统命令和特别文件系统命令手册
4.4.3利用文件系统命令确定文件系统类型
4.4.4文件系统类型
4.5如何使文件系统有效
4.5.1安装与拆卸
4.5.1.1安装与拆卸文件系统命令
4.5.1.2查找已安装的文件系统
4.5.1.3安装/etc/vfstab文件中的全部文件系统
4.5.1.4安装特定类型的文件系统
4.5.1.5安装单个文件系统(mount)
4.5.1.6拆卸所有的远程文件系统(umountall -F nfs)
4.5.1.7拆卸个别的文件系统(umount)
4.5.2自动安装程序
4.5.3共享服务器文件
4.6检查文件系统的数据一致性(fsck)
4.6.1决定文件系统是否需检测
4.6.2以交互方式检测文件系统
4.7备份和恢复文件系统
4.7.1用QIC-150盒式磁带备份文件系统(ufsdump)
4.7.1.1实现增量备份
4.7.2恢复备份文件系统
4.7.2.1决定使用哪一备份带
4.7.2.2恢复全部备份
4.7.2.3交互式恢复文件
4.7.2.4从备份带中恢复单个文件( ufsrestore)
第5章、管理网络服务
5.1检查远程系统状态
5.1.1确定一个远程系统已运行了多长时间
5.1.2确定一个远程系统是否在运行(ping\rup\rpcinfo-p)
5.2注册到一个远程系统(rlogin)
5.3系统之间传送文件(rcp、ftp)
5.3.1使用RCP命令
5.3.2使用文件传送程序(ftp)
第6章、管理用户帐号和用户组
6.1增加和管理用户帐号
6.1.1增加用户帐号
6.1.1.1编辑Passwd数据库
6.1.1.2定义用户组
6.1.1.3建立主目录(home director)
6.1.1.4自动安装目录
6.1.1.5用nfs安装主目录
6.1.1.7定义初化文件
6.1.1.8建立用户的邮件帐号
6.1.1.9建立口令
6.1.2管理用户帐号
6.1.2.1修改用户帐号
6.1.2.2取消用户帐号
6.1.2.3冻结用户帐号
6.2设置和管理用户组
6.2.1设置Group数据库中的域值
6.2.1.1设置组名(Group Name)域
6.2.1.2设置Group ID域
6.2.1.3设置成员表域
6.2.2建立缺省的UNIX用户组
6.2.3建立新的组
6.2.4修改或删除用户组
6.2.4.1修改某个组
6.2.4.2删除某个组
第7章、UNIX的shell命令
7.1各种shell的公共命令
7.1.1设置某种缺省shell
7.1.2在命令行中改变shell类型(sh,csh,ksh)
7.1.3从shell解释器中退出(exit)
7.1.4清除一个shell窗口(clear)
7.2标准shell
7.2.1标准shell的初始文件
7.2.2定义标准shell的环境变量
7.3 C shell
7.3.1C shell的初始文件
7.3.2C shell环境变量的定义
7.3.3建立C shell的别名
7.3.4设置C shell的历史功能
7.3.5使用C shell历史功能
7.3.6设置C shell的退格键(stty erase)
7.3.7新命令的嵌入
7.3.8Cshell历史命令的编辑
7.4 Korn shell
7.4.1Korn shell的初始化文件
7.4.2Korn shell的选择项
7.4.3创建Korn shell的别名
7.4.4用Korn shell的联机编辑器编辑命令
7.4.5设置Korn shell的历史
7.4.6显示Korn shell的历史命令
7.4.7使用Korn shell的历史命令
7.4.8编辑Korn shell的历史命令
第8章、管理系统
8.1显示系统专有信息
8.1.1确定主机ID号(sysdef -h)
8.1.2确定硬件类型(uname -m)
8.1.3确定处理机类型(uname -p)
8.1.4确定OS版本号(uname -r)
8.1.5显示系统配置信息(prtconf)
8.1.6确定系统已经运行了多长时间
8.1.7确定系统的日期和时间(date)
8.1.8设置系统的日期和时间
8.1.9改变系统的时区(/etc/TIMEZONE)
8.2配置附加的交换空间(mkfile,swap)
8.3创建一个本地邮件别名(/etc/mail/aliases)
第9章、文件存取问题分析
9.1 诊断与查找路径有关的问题
9.1.1显示当前查找路径
9.1.2为Bourne和Korn shells设置路径
9.1.3Source Bourne和Korn shell的初始化文件
9.1.4为C shell设置路径
9.1.5Source C shell初始化文件
9.1.6检查当前的查找路径
9.1.7执行一个命令
9.2分析与权限和所有权有关的问题
9.2.1改变文件的所有权
9.2.2改变文件的权限
9.2.3改变文件组的所有权


第1章、前言
本手册主要供Solaris系统管理员使用,所提供的内容包含SUN OS操作系统系统的安装、环境的建立及重要文件的创建,以及系统管理员在网络系统环境下如何建立、维护、管理网络系统下的工作环境,还包括系统管理的日常使用命令、主要命令、文件的索引等。
本章将介绍:系统管理员的职责、了解超级用户状态、如何与用户通信、启动和关闭系统、进程管理、基本管理工具。
SunOS 5.x操作系统,是Sun公司所推出的Solaris 2.x软件系统环境的主要组成部份,Solaris 2.x可运行于SPARC和Intel硬件平台,是一个支持对称式多处理机的UNIX系统环境。
系统管理员的职责
系统管理员的职责是确保一个独立(Standalone)系统或网络上的一组系统能正常运行(主要指软件)。 不同领域的系统管理员,其责任也不相同,一个系统管理员可能在一个或多个领域是专家,而在别的领域却显生疏。
下面列出本手册所描述的系统管理员的工作:
1、 管理设备
*磁带机的使用
*格式化磁盘
*监视盘的使用
2、 了解服务访问机制
*建立一个双向调制解调器(modem)
3、 管理文件系统
*安装或拆卸文件系统
*备份和恢复文件或文件系统
4、 管理网络服务
*查找网络信息
*系统间传送文件
*管理NIS+数据库
5、 管理打印服务
*设置一个打印客户和打印服务器
*使用打印命令
6、 管理用户和用户组
*增加用户
*删除用户
*改变用户信息
*建立新组帐号
7、 了解shell
*使用Generic shell命令
*使用Bourne shell命令
*使用C Shell命令
*使用Korn shell命令
8、 管理系统
*查找系统信息
*建立局部邮件别名
*配置额外的交换空间(swap space)
*管理系统日期和时间
*识别文件存取故障
*搜索路径的问题
*存取权和所有权问题
*网络存取问题
*获得存取全部文件系统和资源的权限
*与用户通信
*关闭和启动系统
*监视进程

本手册的章节按照以上给出的标题顺序安排,你还必须了解何时及如何进行如下管理工作: (本手册不包含如下系统管理工作:安装系统软件、安装第三厂家软件、建立和管理网络服务、建立和管理邮件服务、扩充和删除硬件、管理安全性和记帐、监视系 统和网络性能。)这章其余部分将描述如何完成系统管理员的工作,并介绍一些基本命令和管理工具。
1.1了解超级用户状态
超级用户是一个具有特权的用户,它可不受任何限制地使用全部文件和命令,超级用户有一个特定的UID(=0),这个帐号的用户名为root(其实只要是 UID为0的用户就是超级用户)。许多系统管理任务都必须在超级用户下完成,如安装和拆卸文件系统、改变文件和目录的存取权和所有权、备份和恢复文件系 统、创建设备文件,以及关闭系统。
我们可以用如下办法进入超级用户:
1、 在其它用户状态下,用不带任何参数的su命令,并按需要键入root的口令。
2、 在login提示下,键入root及其口令。
在入进超级用户后,shell将给出一个特殊的提示符“#”,提醒你对系统有着至高无上的存取权,做任何事情都要小心,通过查询记录文件/var/adm/sulog,可以跟踪谁正在使用超级用户帐号。
最好在必要时才进入超级用户,应该避免在超级用户下做一般的事情。如果某项任务需要你是超级用户,它会提示你应该进入超级用户。当你完成必要的工作后,应立即回到一般用户状态。
由于超级用户非保护的存取权限严重威胁系统的安全,所以root帐号总是设有一个口令,而且为了增加安全性,要经常更换口令。
1.1.1成为超级用户(su)
仅当需要使用root权限完成一定的工作时,你才进入超级用户,下面是从普通用户成为root的方法:
1、 在Shell的$或%提示符下,输入su。如果root帐号有口令的话,系统会提示你键入口令。
2、 键入超级用户口令,如果口令正确,你就具有了超级用户权限,系统显示“#”提示符。
gtxa%su
Password:
#
如果想使用root本身的环境变量,键入su -。
1.1.2退出超级用户状态
要退出超级用户状态,就简单地键入exit。
#exit
gtxa%
1.1.3以root注册
要直接注册成root,必须在login提示下完成:
1、 在login提示下,输入root,于是系统提示你输入root口令。
2、 输入root的口令,如果口令正确,系统将出现root提示符#:
login: root
Password:
#
1.2与用户通信
系统管理员工作的一个重要部分是与用户通信,使用户了解管理员所做的事情对系统功能所造成的影响,要让用户及时知道你所做的管理工作(如:重新引导系统,安装新的软件,或以某种方式改变系统环境)何时将对它们产生影响。
管理员可以口头与用户通讯,但最普遍的方式是:
;在注册时显示当前系统专用信息.
;用write命令直接将消息发送到某个用户终端上.
;用wall使用将消息发送给一个系统上的所有用户.
;用rwall命令将消息发送给网络上的所有用户.
;通过电子邮件将消息发送一个或一组用户.
1.2.1在注册时显示系统专用信息
每次用户注册进系统,屏幕上都会显示当天的系统消息,这个消息存贮在文件/etc/motd中。已经注册进系统和正在使用系统的用户看不见此信息,可使用 motd命令查看此消息,这些信息包括:操作系统版本号,系统软件的变化,新安装(或删除)的第三厂家文件的名称,或系统的调度时间表。必须确保motd 文件是最新的,如果motd显示的是过时的消息,用户会因此而失掉一个关键信息,消息应尽量简短,如果其长度超过一屏,用户就读不到开头部分。 /etc/motd文件所在者应该是root, 而且root应是唯一对此文件具有写权限的用户。
gtxa% ls -1 /etc/motd
-rw-r--r-- root sys 49 Jan 1 1970 /etc/motd
gtxa%
注意:系统软件安装后,有几个文件(包括/etc/motd 在内)的更新时间为“Jan 1 1970”这个日期是UNIX的起始日期,当你对这些文件编辑后,这个时间会随之改变。
1.2.1.1建立日期消息
用如下步骤建立日期消息:
1、 成为超级用户
2、 用编辑工具(如vi)编辑/etc/motd文件
3、 删除不用的消息,输入新的消息
4、 保存修改后的文件,这些消息在用户下次登录进系统时显示
1.2.2将信息发送给单个用户
可以使用write命令将信息发送到用户的终端上,当使用窗口系统(如Open Windows)时,每个窗口都有一个独立的帐号,如果用户登录多次,则信息会直接显示在控制台窗口中。
1.2.2.1发送一个短消息给一个单独的用户
用以下步骤将一个一次性的短消息发送给单个用户:
1、 键入write username,username是用户的注册名。
2、 键入要发送的消息。
3、 输完消息后,键入Control-D. 则在username用户的控制台窗口中显示你键入的内容。
下面给出系统管理员发送消息的例子:
gtxa% write ignatz@elm
I'll come by at 12:00 to look at your problem.
gtxa%
下面是在用户控制台窗口显示的消息:
Message from fred@gtxa on ttypl 11:20...
I'll come by at 12:00 to look at your problem.
EOF
1.2.2.2将作为一个文件的消息发给个别用户
如果你想发送消息给一些用户,建立一个消息文件,再使用带参数的write命令来实现,其中的一个参数是消息文件名。
建立一个文件,此文件含有想要发送的消息。 键入write username < filename
在下面的例子中,管理员用cat命令建立消息文件:
gtxa% cat >; message
I'll come by at 12:00 to look at your problem.
gtxa% write ignatz@elm < message
write: ignatz logged in more than once...
writing to console
gtxa%
如果用户进入了多个窗口系统,消息就显示在用户的控制台窗口中。下面是显示在控制台上的消息格式:
Message from fred@gtxa on ttypl at 11:20...
I'll come by at 12:00 to look at your problem.
象以上显示的那样,键入的消息与显示的消息是相同,用户可以用write命令响应并初始化一个双向对话,但这种对话不是真的交互式的。有两条打开的write 路径,两个方向各一条,详细介绍见write(1)说明。
1.2.3将消息发送给一个系统或网络中的所有用户
可以使用wall命令(write all)将消息同时发送给系统中的每个用户,用rwall(remote write all)命令将消息同时发送给网络中的所有用户。
要将消息发送给系统中的所有用户:
1、 键入wall
2、 键入想要发送的消息
3、 输入完消息后,键入control-D, 消息就会显示在系统中每个用户的控制台窗口中。
下面是一个实例:
gtxa% wall
System will be rebooted at 12:00
gtxa%
显示在用户控制台窗口的消息:
Broadcast message from root on console...
System will be rebooted at 12:00
EOF
注意:使用rwall命令要非常小心, 因此此命令消耗大量的系统和网络资源,要将消息发送给网络上的所有用户:
1、 键入rwall-n
2、 键入要发送的消息
3、 消息输入完后,键入Control-D, 消息就显示在网络系统各个用户的控制台窗口中。
下面是一个实例:
gtxa%rwall-n Eng
System gtxa will be rebooted at 12:00
gtxa%
显示在用户控制台窗口中的消息是:
Broadcast message from root on console...
System will be rebooted at 12:00
也可以用rwall命令将消息发送给某个系统中的所有用户, 其命令格式为:rwall hostname
1.2.4通过电子邮件发送消息
E-mail是传播某些系统管理信息的一种有效方式,但本手册不介绍如何使用电子邮件,有关邮件信息的详细说明见mail(1)、mailtool(1)和mailx(1)。
1.3启动和关闭系统
启动及关闭系统是系统管理工作的一个组成部分,这一节描述正常启动和关闭系统的过程,如果系统启动出现错误,参阅系统文档中有关如何诊断引导问题。
SunOS 5.x系统软件总处于连续运行状态,这样电子邮件和网络软件能正常地工作,但在以下几种情况下,系统却必须关闭或停止。
;切断系统电源
;安装一个新版本的操作系统
;电源老化
;系统扩充硬件
;进行文件系统维护
1.3.1选择init状态
Solaris系统软件有八个init状态: 缺省init状态/etc/inittab 中确定。Solaris系统软件的缺省init状态是运行级3。表1.1列出了7个可能的运行级别和系统在每级上的状态。
表1.1 系统初始状态
初始状态功能
0掉电状态
1.S.s系统管理员状态(单用户)
2多用户状态(不输出资源,没有启动NFS)
3多用户状态(输出资源,启动NFS进程)
4替换多用户状态(目前不用)
5软件重引状态(目前不用)
6系统重引导状态
/sbin/init 程序负责确保系统正常地运行,也可以用它来改变init 状态的命令,还可以用init 状态(带用-i选择项)作为shutdown命令的参数。以下是四种系统状态类型:
1、 掉电(运行级0)
2、 单用户(运行级1和s或S)
3、 多用户(运行级2和3)
4、 重引导(运行级5和6)
若准备做系统管理工作,必须确定对系统及所需要做的工作来说哪种init状态是合适的。
1.3.1.1查看系统运行级
要查看某系统的运行级,键入who -r:即显示出运行级、日期及时间、进程终止状态、进程id、进程退出状态。
在下面的例子中,系统gtxa处在缺省多用户运行级(3),日期和时间是在Feb 6 15:46,进程终状态是3,进程id是0, 进程退出状态是S:
gtxa%who -r
run-level 3 Feb 6 15:46 3 0 S
gtxa%
下面描述如何使用每个init状态。
1.3.1.2使用掉电状态,运行级0
用此级关闭系统以便安全切断电源。
1.3.1.3使用系统管理员状态,运行级1
当某项管理任务需要你是系统的唯一用户时,使用这一级,在这级状态下,只安装了root和/usr文件系统,只允许使用最少的核心实用程序,发出该命令的终端成为控制台,没有其它用户登录。
1.3.1.4使用多用户状态,运行级2
一般操作都在此状态下进行,在这级状态下多个用户可以访问系统和整个文件系统,除了nfs服务器、syslog和远程共享进程之外,所有的系统管理进程都在运行。
1.3.1.5使用远程资源共享状态,运行级3
此状态一般操作和nfs资源共享一起有效。
1.3.1.6使用替换多用户状态,运行级4
此运行级目前不用。
1.3.1.7使用交互重引导状态,运行级5
要从非缺省引导设备引导系统时,用此级。也可以用reboot -a 命令进入这个状态级。
1.3.1.8使用重引导状态,运行级6
使用此运行级关闭系统,使系统状态为运行级0, 然后重引导到多用户级(或到inittab文件中指定的缺省运行级)。
1.3.1.9使用单用户状态,运行级s或S
使用这一级使系统处于单用户状态,而所有的文件系统被安装且可访问。
1.3.1.10改变运行级
用telinit或init命令改变运行级,telinit命令需要一个单字符参数,此参数为init指定使用的运行级,尽管用户可以直接用init命令,但最好使用telinit命令去改变系统运行级。
1、 变成超级用户
2、 键入telinit n。参数n是要使用的init状态号。
要关闭系统
gtxa% su
Password:
# telinit 0
变成单用户状态:
gtxa% su
Password:
# telinit 1
要变成无nfs服务器系统管理进程运行的多用户状态:
gtxa% su
Password:
# telinit 2
要变到具有nfs服务器系统管理进程的多用户状态:
gtxa% su
Password:
# telinit 3
要关闭且重引导系统到运行级3:
gtxa% su
Password:
# telinit 6
1.3.2选择所用的关闭命令
准备做系统管理工作时,需要确定合适的关闭命令,下面介绍如何使用系统提供的关闭使命。
/usr/sbin/shutdown
/etc/telinit and /sbin/init
/usr/sbin/halt
/usr/sbin/reboot
以上命令皆完成:初始关闭过程,杀死所有的运行进程,将新数据写入硬盘将Solaris系统关闭为适当的运行级。
1.3.2.1 shutdown
在多用户状态下关闭系统,使用shutdown命令,此命令将警告消息发送给注册到此系统的所用用户,等待60秒钟(缺省)后将系统关闭为单用户状态,可以选择不同的缺省等待时间。
1.3.2.2 telinit和init
用telinit或init 命令可以关闭一个单用户系统或改变此系统的运行级,init命令改变系统的运行级,telinit命令init 你想要的运行级,两者可交替使用,但telinit命令更好,可用telinit将系统置成掉电状态(init 0)或进入单用户状态(init)。
注意:telinit/init和shutdown命令是改变系统运行状态的好方法,由于它们是用一级rc shell程序来杀死行进程, 因此用这些程序来关闭系统是最可靠的方式。
1.3.2.3 halt
当系统必须马上停止且不必警告任何用户时,用halt命令。halt命令在关闭系统时没有任何延时也不给系统中的用户以任何警告。halt命令不运行任何 rc shell程序,所以不是一个关闭系统的好方法。
1.3.2.4 reboot
系统不在多用户状态下,用reboot命令关闭系统并重新引导到多用户状态,reboot命令不警告系统中的用户,不运行rc shell程序,所以不是一个关闭系统的好方法。
1.3.3 引导系统
如果系统电源被切断,则开启电源就开始了多用户引导过程。下面说明从ok PROM提示下引导系统到不同状态下的方法。如果PROM 提示是>;,键入n即显示出ok提示。
1.3.3.1 引导到多用户状态
要引导系统到多用户状态,在ok提示符下,键入boot,则在缺省驱动器上启动自动引导过程,显示一系列启动信息,最后系统进入多用户状态。
1.3.3.2 引导到单用户状态
要引导系统到单用户状态,在ok提示符下,键入boot -s,系统引导到单用户状态且提示输入root口令:
ok boot -s

INIT: SINGLE USER MODE
Type Ctrl-d proceed with normal start-up
(or give boot password for system maintenance)
键入root口令,注意要继续将系统引导到多用户状态,则键入Control-D。
1.3.3.3交互式引导
如果想对系统文件或核心作暂时改动,可以采用交互式引导,在这种情况下,可以测试所作的改动,且当出现问题时很容易恢复。
1、 在ok>;的PROM提示下,键入boot-a,引导过程会按交互式方式提示你。
2、 若响应回车,即缺省/kernel/unix核心引导,若不用缺省核心,则键入要用的核心名称。
3、 若响应回车,即用缺省/etc/system文件,否则键入所用的系统文件名。
4、 若响应回车,即用缺省模块目录路径,否则键入模块目录路径名。
5、 若响应回车,即用缺省root文件系统,也可键入ufs从本地盘引导,或者键入ufs无盘客户。
6、 若响应回车用root设备的缺省物理名,否则键入想使用的设备名。
7、 若响应回车则用缺省交换文件系统类型swapfs(注意:swapfs是唯一允许的交换文件系统类型)。
以下例子中,接受的是缺省选择:
ok boot -a
(Hardware configuration messages)
rebooting from -a
Boot device: /sbus/esp@0,800000/sd@0,0 File and args:-a
Enter[/kernel/unix]:
(Copyright notice)
Name of system file [/etc/system]:
Name of default directory for modules [ ]:
root filesytem type [ufs]
Enter physical name of root device[/sbus@1, f8000000/esp@0,800000/sd@0,0]:
Swap filesystem type [swapfs]
configuring network interfaces: leo
Hostname: gtxa
(fsck messages)
The system is coming up. Please wait.
(More messages)
gtxa login:
1.3.3.4查看引导信息
引导信息存贮在/var/adm/messages文件中,引导完系统后若要查看这些信息,键入/usr/sbin/dmesg或more /var/adm/messages,则显示引导信息。
gtxa% /usr/sbin/dmesg
Jan 13 11:22 SunOS Release 5.0 Version [UNIX(R) System V Release 4.0]
system file (etc/system) error: readline error on line 1.
root nexus=Sun 4-60
mem=16384K (0x4000000)
avail mem =14688256
Ethernet address=8:0:20:7:83:17
sbuso at obio 0xf8000000
dma0 at SBus slot 0 0x400000
exp0 at SBus slot 0 0x800000 SBus level 3(sparc ipl 3)
sdl at sep0 target 1 lun 0
/sbua@1, f8000000/esp@0,800000/sd@1,0(sd1):
sd3 at esp0 target 3 lun 0
/sbus@1, f8000000/esp@0,800000/sd@3,0(sd3):
root on /sbus@ 1, f8000000/esp@0,800000/sd@3,0:a fstype ufs swap on swapfs fstype swapfs size 1348K
le0 at SBus slot 0 0xc00000 SBus level 4 (sparc ipl 5)
zs0 at obio 0xf1000000 sparc ipl 12
zs1 at obio 0xf0000000 sparc ipl 12
dump on /dev/dsk/c0t3d0sl size 32748K
Dec 24 12:30:01 sendmail[82]:alias database out of date
Dec 24 12:30:01 sendmail[82}: AA00082: message- in=<9112242030. AA00082@gtxa. Eng. Sun. COM>;
Dec 24 12:30:01 sendmail[82]: AA00082: from=root, size=592, class=0, received form local
Dec 24 12:30:02, stat=Sent
Dec 24 12:30:58 sendmail[153]: network daemon starting
Dec 31 15:20:24 rlogind[734]: pcktread: suspeet zero len fdo at obio 0xf7200000 spare ipl 11
cgsix0 at SBus slot 1 0x0 SBus level 5(spare ipl 7)
cgsix0: screen 1152x900, single buffered, IM
mappable 1 gtxa%
1.3.3.5增加新的硬件后引导系统
当系统中增加新的硬件后,boot命令必须使用-r选择项,以便使操作系统在引导过程中查看并装入新的设备驱动程序。
1、 按硬件中的说明装入新的设备驱动程序。
2、 关闭系统且安装新的硬件。
3、 键入boot -r并回车,则运行重配置shell程序,装入在模块目录中的所有的设备驱动程序且建立相应的硬件结点(nodes)。
1.3.3.6退回引导进程
在有些情况下,你也许想退出或中断引导过程,具体的中断键依键盘类型不同而有所不同,例如,可键入stop -A或L1 -A。在tty 终端上,键入Break键。要中断引导过程,键入系统对应的中断键,当中断引导过程后,监视器将显示ok PROM提示k
键入boot重新启动引导过程,或键入help显示一组帮助信息。如果终端示出>;提示,键入n获得ok提示。
1.3.4关闭系统
下面介绍如何用shutdown和init命令关闭系统。
1.3.4.1关闭一个多用户系统
在关闭一个多用户系统之前,要通知系统中的用户,给用户完成一些处理过程的时间。
1、 键入who,显示出注册的所有用户清单。
2、 键入ps-ef,显示出系统活动进程表,如果系统进程允许关闭,转到下一步。
3、 变成超级用户。
4、 键入cd /,必须在根目录下运行关闭命令。
5、 键入shutdown,系统要你确认是否要关闭系统。
6、 键入y,所有的用户将接收到一个消息,等待60秒后,系统关闭,进入单用户状态且提示键入root口令。
7、 键入root口令,系统处于单用户状态,这时可以进行维护工作。
8、 键入Control-D返回到缺省运行系统级。
# cd /
# shutdown
Shutdown started Fri Aug 6 10:50:35 EDT 1993
Broadcast message from root(console) on earth Fri Aug 9 10:59:35
THE SYSTEM IS BEING SHUT DOWN NOW!!!
LOG OFF NOW OR RISK YOUR FILES BEING DAMAGED
Do you want to continue?(y or n): y

The system is down.
Changing to init state s-please wait.

INIT: New run level S
INIT: SINGLE USER MODE
Type: Ctrl-d to proceed with normal start-up,
(or give root password for system maintenance):
1.3.4.2关闭系统:可选方式
如果想改变shutdown命令的缺省功能,选择以下所述的六种方式之一来完成。
1、 在不确认的情况下关闭系统:
*变成超级用户
*键入cd /,必须在root目录下运行shutdown命令。
*键入shutdown等待时间(Grace Period)
2、 为了改变shutdown等待时间(Grace Period),用以下几步:
*变成超级用户。
*键入cd /,必须在root目录下运行shutdown命令。
*键入shutdown -t .系统在等待用户确定的秒数后关闭。
*下面是改变等待时间(Grace Period)例子:
# cd /
# shutdown -g 120
3、 关闭且重新引导多用户系统
*变成超级用户。
*键入cd /, 必须在root目录下运行shutdown命令。
*键入shutdown -i6 将一条消息发送给所有的用户且执行re6 shell程序;系统关闭为掉电状态,然后恢复到多用户状态。
4、 关闭单用户系统
要关闭一个单用户系统,键入telinit 0(或init 0)命令运行shell程序使系统很快地关闭,没有警告信息。
5、 关闭且重新引导单用户系统
要关闭且重新引导单用户系统,键入telinit 6 (或init 6)。此时系统信息写到硬盘上,杀死所有的活动进程且系统回到掉电状态。系统再重新引导到缺省级(通常是多用户级)。
6、 紧急关闭系统
要紧急关闭一个系统,键入uadmin 2 0. 将系统信息写到硬盘上,系统回到掉电状态,且显示PROM提示。
1.4监视进程
某一时刻在系统中运行的程序称为进程。用户可以监视进程的状态,控制一个进程获得的CPU时间,挂起或终止一个进程的执行。
ps命令是获得进程信息的主要工具。可以用ps和grep命令查寻所需要的信息,可以确定哪些进程正在(或没有)运行,而且可以获得一个进程的详细信息,这些信息包括:
*PID<进程ID>;
*UID<用户ID>;
*优先级
*控制终端
*存贮器的使用
*CPU时间
*当前状态
ps命令反映的是命令被键入时的系统状态,因此当你正在监视系统时间的活动情况时,必须明白当你读结果时它们已经有点过时,表1.2列出了ps(1)手册。
表1.2 ps 命令最常用的选择项目
可选项说明
-e 报告所有的进程
-l 生成一个长报告,此报告中包括除STIME之外的所有域。
-f 显示进程启动程序的全路径名
1.4.1 ps命令报告的内容
当键入ps-e时,可获得如下所示的信息
gtxa% /usr/bin/ps -e
PID TTY TIME COMD
0 ? 0:02 sched
1 ? 0:01 init
2 ? 0:00 pageout
192 ? 0:00 sac
79 ? 0:10 inetd
75 ? 0:01 in route
136 ? 0:04 automoun
143 ? 0:01 crom
123 ? 0:01 statd
104 ? 0:01 rpcbind
106 ? 0:01 rpc. rwal
108 ? 0:01 rpc. ruse
110 ? 0:01 rpc. spra
113 ? 0:01 ypbind
115 ? 0:00 keyserv
117 ? 0:01 kerbd
127 ? 0:02 lockd
251 pts/0 0:00 ps
165 ? 0:00 scndmail
193 ? 0:01 ttymon
174 ? 0:03 sysylogd
156 ? 0:01 lpsched
209 ? 0:02 in rlogi
211 pts/0 0:03 csh
164 ? 0:00 lpNet
gtxa%
各栏内容说明如下:
*PID: 进程标识号
*TTY: 启动此进程(或其父进程)的终端。如果进程没有控制终端这一栏显示一个问号<?>;──显示问号的进程常常是系统进程。
*TIME: 进程所用的CPU时间
*COMD: 产生此进程的命令名,注意:ps-e 命令仅显示出文件名的头八个字符。
当键入ps -el时,可看到如下的显示内容:
gtxa% /usr/bin/ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME COMD
19 T 0 0 0 80 O SY f010f1c8 0 ? 0:02 sched
8 S 0 1 0 251 0 20 fflad800 48 fflad9c4 ? 0:01 init
19 S 0 2 0 0 0 SY fflad000 0 fflad07d ? 0:00 pageout
8 S 0 192 1 49 1 20 ff1f7000 238 ff2de348 ? 0:00 sac
8 S 0 79 1 80 1 20 ff232800 258 f010fla4 ? 0:10 inetd
8 S 0 75 1 80 1 20 ff249000 327 ff2de448 ? 0:01 in route
8 S 0 136 1 80 1 20 ff2c3000 287 f010fla4 ? 0:04 automoun
8 S 0 143 1 80 1 20 ff293000 270 f010fla4 ? 0:01 cron
8 S 0 123 1 49 1 20 ff28e800 258 f010fia4 ? 0:01 statd
8 S 0 104 1 80 1 20 ff25a000 301 f010fla8 ? 0:01 rpcbind
8 S 0 106 1 77 1 20 ff258800 272 f010fia4 ? 0:01 rpc.rwal
8 S 0 108 1 80 1 20 ff260800 272 f010dla4 ? 0:01 rpc.ruse
8 S 0 110 1 78 1 20 ff266800 272 f010fla4 ? 0: 01 rpc. spra

表1.3是ps -el长报告中各域的说明表
域说明
F 十六进制标示,加在一起表示进程目前的状态
     00进程已经终止,它对应的进程表项已空
     01此进程是一个进程且总是在内存中
     02此进程正被它的父进程跟踪
     04此进程在被它的父进程跟踪,且已经停止运行
     08此进程不能用信号激活
     10进程正在内存中且在一个文件完成之前被锁住
     20此进程不可换出
S 进程的当前状态,由下列字母之一表示:
     O正在处理器上运行
     S睡眠;等待IO事件完成
     R运行就绪。
     I空闲状态,进程正在创建
     Z僵尸状态;进程已经终止且父进程不再等待,但此死进程仍留在进程表中。
     T因父进程正在跟踪它而停止执行
     X等待获得更多的内存
UID 进程所有者的用户ID号
PID 进程标识号
PPID 父进程的标识号
C 进程所用的CPU时间(该进程所用CPU时间的百分比估计值)
PRI 进程调度优先级,数字越大表示优先级越低
NI 进程的nice数,影响其调度优先级,提高进程的nice数意味着降低其优先级、使用更少的CPU时间
SZ 进程所需虚存数量,它很好地表示出进程对系统存贮器的要求。
TTY 启动此进程(或父进程)的终端,或者是“?”表示无控制终端(通常表示系统进程)。
TIME 进程从启始到目前所使用的CPU时间总和
COMD 产生此进程的命令。
1.4.2使用ps报告
当需要哪些进程或系统管理进程正在运行时,使用ps -e选择项,如果还想得到过程的更详细信息,用ps -el选择项。各选择项的详细说明参考ps(1)命令手册。
下面是如何发现潜在问题的指南:
*查看有没有由同一用户所有的相同作业,若有,这可能是由于某用户运行了启动一组后台作业的shell程序,但没有等待作业终止,找用户谈谈,看是否是这种情况,如果必要,用kill命令杀死其中一些进程,有关杀死一个进程的详细介绍参见后面几节。
*查看TIME域,看哪些进程占用了大量的CPU时间,这样的进程可能导致死循环。
*查看C域,找出占用大量CPU时间且不重要的进程,如果认为此进程确实不值占用如此多的CPU时间,可以用priocntl命令降低它的优先级,有关priocntl命令的详细信息,参考prioentl(1)手册。
*查看SZ域,找出占用太大内存的进程。如果某个进程占用了过于大的内存,将它杀死,如果系统中有许多进程都需要大量内存,则可能需要扩充内存。
*查找占用CPU时间越来越多的失控进程,可以用带-f可选项的ps命令查看其超始时间(STIME),也可直接看其TIME域所指的CPU累计时间。
1.4.3杀死进程
有时用户需要彻底地消除一个进程,这时用kill命令,kill命令的格式为kill-,此处是一个数或一个名称。
注意:仅当进程不能正常退出时用kill命令。
有时用kill命令后进程仍未死掉,最常见的三种情况:
;进程退出前正在等待一个设备(如磁带机)完成某种操作。
;进程正在等待由于nfs出现问题而无效的资源,在这种情况应该用kill-QUIT命令来杀死一个进程。
;进程处于僵尸态,正如ps报告的消息所显示,僵尸进程已经释放了它所占资源,但还没有接收到父进程的回应,一般接收到回应后删除对应的进程表项,在下次启动系统时,僵尸进程被消除,僵尸(Zombies)进程不影响系统性能,所以用户不必删除它们。
要杀死一个进程:
1、 变成超级用户,要杀死一个非你拥有的进程,你必须成为超级用户。
2、 键入ps -e,将显示出一组进程,使用第一栏的PID(进程ID)号作为下一步的输入,如果你知道是哪个进程出了问题,则可以键入:
ps -e | grep 来找到其进程ID
3、 键入kill-15 ,若仅键入kill,无参数,则缺省的信号是15。
4、 键入ps -e,检查进程是否已经终止,如果进程还存在,则到第5步。
5、 键入kill-9 ,这个进程应该被终止。 键入man -s5 signal,查看kill所使用的信号描述。
例如:如果gtxa系统上的Open Windows 死了,你必须从另一个系统远程注册来杀死此进程。
elm% rlogin gtxa
Password:
gtxa% ps-e │ grep openwin
PID TTY TIME COMD
2212 pts/0 0:00 openwin
2213 pts/1 0:00 grep openwin
gtxa # kill 2212
gtxa # exit
gtxa% logout
elm%
1.5基本管理工具
Solaris系统软件提供以下两种管理工具:
*一组通用的操作系统命令
*具有图形用户接口的管理工具(Administration Tool)。
1.5.1经常使用的命令
下面几节简单地介绍基本的Solaris命令,你很可能会使用它们作为系统管理例程的一部分,更详细的介绍参见第二章中的“Basic OS Commands”及附录A列出的SunOS 4.x命令与SunOS 5.x命令的对照表。
1.5.1.1在文件系统中移动
Solaris系统软件是有一个层次结构的文件系统,当管理系统时,你需要了解目前处于文件系统的哪个位置、如何转到不同的目录。
1.5.1.2查看在文件系统中所处的位置
要知道目前处于文件系统的哪一层,键入pwd。pwd(打印工作目录)命令显示当前目录:
gtxa&pwd
/etc
gtxa%
1.5.1.3改变目录
要改变目录,键入cd 。cd(改变目录)命令使你进入所键入的目录中:
gtxa% cd /usr
gtxa%% pwd
/usr
gtxa%
如果仅键入cd而没键入路径名,你就返回注册目录下。
1.5.1.4查看文件的有关信息
用ls命令可以显示目录内容以及文件的许可权、符号链、所有者、组、文件长度(字节数)、修改日期及时间和文件名,许多用户存取文件出错的原因,追根底在于拥有不正确的许可权或所有权,有关此类问题的详细说明见第10章“识别文件存取问题”。
1.5.1.5显示文件信息
要显示某个文件的有关信息,键入ls -1 ,则显示许可权、符号链、所有者、组、文件长度(字节数)、修改日期及时间和文件名。
要看目录中的全部文件,键入ls -1a,有关ls的选择项清单可参见命令手册。
gtxa% ls -1 /etc/passed
-r--r--r--lrootsys659 Feb 24 17:28/etc/passed
gtxa%
1.5.1.6查找一个文件
要从根目录开始搜索寻找到一个文件, 就键入find $HOME -name -print. $HOME变量表示查找从根目录开始。 -name选项表示要查找指定的文件名,-print 选项要求显示出查找的结果。如果没找到中指定的文件则系统回到提示符状态。
下面例子是查找文件core:
gtxa% find $HOME -name core -print
/home/ignatz/core
gtxa%
表1.4 find命令的可选项
可选项 说明
-fstype 查找指定类型的文件系统,通常用ufs或nfs中的文件
-prune 限制搜索到指定的目录
-nouser 查找不属于/etc/passwd中用户的文件
-nogroup 查找不属于/etc/group中组的文件
-atime 查找在最后天被存取过的文件
-mtime 查找在最后天被修改过的文件
-ctime 查找在最后天被改变过的文件, 这种改变包括改变文件的属性。如链接数、所有者或组
-Xdev 限制只对一个文件系统搜索
有关find命令可选项的完整说明见find(1)。
1.5.1.7查看一个文件的类型
某些情况下需要确定一个文件的类型,如要查看一个文件的类型,则键入file 。输出结果是指定文件的文件类型。
例如:如果一个用户试图执行一个无执行许可权的ASCII 文件或空文件,查看文件的类型可以得知此文件是ASCII 文件或空文件而不能执行。
以下是空文件的例子:
gtxa% file junk
junk: empty file
gtxa%
以下是ASCII文件的例子:
gtxa% file junk
junk: ascii text
gtxa%
以下例子中,文件是具有可执行许可权的文本文件,所以file命令报告该文件可执行,且是文本文件。
gtxa%chmod 777 junk
gtxa% file junk
junk: commands text
gtxa%
你也可以用ls -1命令来查看某文件是否有执行许可权。
可以用file *命令查看一个目录中全部文件的类型。文件按字母顺序列出,后面跟文件类型:
gtxa% file *
coterie: directory
course: ascil text
dead. letter ascii text
ksyms English text
people: directory
personal: directory
showrev: ascii text
status: directory
text: directory
toodo: ascii text
gtxa%
1.5.1.8查看文件中的信息
用grep和egrep命令可查找文件或命令输出的某些特定信息。
1.5.1.9查找文件中的字符串
键入grep 可查找文件中的指定字符串,且显示文件可包含该字符串的行。
例如:查找passwd文件中包含csh的行:
gtxa% grep csh /etc/passwd
ignatz: 6693: 10:Ignatz 64607:/home/ignatz: /bin/csh
fred: 14072:10:Fred Lux:/home//home/fred:/vin/csh
gtxa%
同时查找多个文件的方法是:在命令中输入多个文件名,它们之间以空格分开;或者用无字符代文件名(或与文件名一起使用)。
为显示出不包含某字符串的行,可以键入grep -v 。
查找具有某种模式的输入行,可以将grep以管道的方式与许多管理命令结合起来使用。
例如:要查找某一用户当前的全部进程,可以将ps命令和grep结合起来使用,并查找该用户名,键入ps -e│grep 。即显示该用户名的清单。可用下面的命令查找Open Windows的全部进程:
gtxa%ps -e │grep openwin
PID TTY TIME COMD
2212 pts/0 0:00 openwin
gtxa%
1.5.1.10查看文件
毫无疑问,人们要花很时间查看文件的内容,需要查看整个文件时可以用more命令,当只需看文件尾的内容时(如日志(log)文件),可用tail命令来显示文件的最后10行,当重要信息在文件头时,可用head命令显示文件的前10行。
1.5.1.11浏览文件
可以键入more 来浏览文件,文件一次只显示一屏,按空格键显示下一屏。当你用more浏览文件时,若想查找文件中的某个字符串,可以键入/。屏幕滚到你要查找的字符串的 位置, 并在窗口顶部显示要找的字符串的“... skippin”信息。如果未找到,则屏幕不滚动并显示出“Pattern not found”。
例如:要查找/etc/mail/aliasses文件中的Local aliases串, 可键入/Local aliases.
/Local aliases
... skipping

# # # # # # # # # # # #
# Local aliases below #
# # # # # # # # # # # #
注意:在more命令中一定要用正确的大小写字母。上例中,如果你键入了/local aliases,则会告诉你没有找到。
为了查找下一个匹配的字符串,键入n。键入q退出more命令,显示shell 提示符。
为显示shell intr 字符,可键入stty -a,就显示stty的设备清单,下列中:^h(退格键)是删除字符:
gtxa%
speed 9600 bau;
rows=35; columns=80; ypixel =9; xpixels=0;
eucw 1:0:0:0, scrw 1:0:0:0
intr=^c;quit=^│; erase=^?;kill=^u
eof=^d; eol+^; eo12=;swtch=;
start=^d; stop =^s;susp=^z;dsusp=^y;
rprnt=^r; flush =^o; werase=^w; lnext =^V;
parenb-parodd cs-cstopb hupcl cread-clocal -loolk -
crtscts-parext
-ingbrk btkint ignpar-parmrk-inpck istrip -inncr -
igncr icrnl-iucle
ixon-ixany-ixoff imaxbel
isig icanon-xcase echo echoe echok-echonl-noflsh
-tostop echoctl -echoprt echoke -defecho -flusho -
pendin inxten
opost-olcuc onler -onocr -ofill-ofdel
1.5.1.12查看文件尾
若要查看文件尾,键入tail , 显示出文件的最后10行(缺省情况),下例显示了/etc/lp/system文件尾:
gtxa% /usr/bin/tail /etc/lp/system
#
# Kepler:-: s5: -:n:10:-:-:SVR4.0 OS
# fubar:-bsd:10:n-:-:BSD OS
# Galialeo:-:s5:-30:10-:-:
# # # # #

billboard-:bsd:-:n:10:-:-:
homeboyl-:s5:-:n:10-:-:
regal:-:s5:-:n:10-:-:
mrplod:-:s5:-:n:10:-:-:
gtxa%
缺省时,head和tail命令显示10行,可靠用-n任项来控制显示行数,用你要显示的行数代替n。例如:要显示最后20行, 可键入tail -20 。
注意:tail命令最多能显示4096字节(大约400行)。
1.5.1.13查看文件头
若要查看文件头,可键入head这时显示出头10行
下例中显示/etc/password文件:
gtxa% /usr/bin/head /etc/pased
rood:0:1:0000-Admin(0000):/:sbin/sh
daemon:1:1:0000-Admin(0000):/:
bin:2:2:0000-Admin(0000):/var/adm:
sys:x:3:3:0000-Admin(0000):/:
adm:x:4:4:0000-Admin(0000):/var/adm:
lp:x:71:8:0000-lp(0000):/usr/spool/lp:
smtp:x:0:0:mail daemon user:/:
uucp:x:5:5:0000-uucp(0000):/usr/lib/uucp:
nuucp:x:9:9:0000-
uucp(0000):/var/spool/uucppublic:/usr/lib/uucp/uucico
listen:x:37:4:Network Admin:/usr/net/nls:
gtxa%
1.5.1.14改变文件的所有权和许可权
用户的许多问题可能是由文件的所有权和许可权问题产生的,用ls命令可查看文件的所有权和许可权,如果要改变它们,可用:chown、chmod和chgrp命令。
*改变文件所有权
你必须拥有一个文件或目录(或者你是超级用户)你才能成为属主
1>;键入ls -1 。文件的属主显示在第三列中
2>;进入超级用户
3>;键入chown . 所有权按赋予指定的新属主文件。
gtxa% ls -1 quest
-rw-r--r--1fred staff 6023 Aug5 12:06 quest
gtxa% su
Password:
# chown ignarz quest
# ls-1 quest
-rw-r--r--lignatzataff6023 Aug5 12:06 quest
#
更详细的介绍请参见第10章。
* 改变文件的许可权
表1.5列出的设置文件许可权的8进制值。可以用三个这样的数来分别设置属主、组和其它用户的许可权。例如:644 说明属主有读/写权限,同组用户和其它用户有只读权限。

表1.5 文件权限的八进制值
值 说明
0 无权限
1 只可执行
2 只可写
3 可写、可执行
4 只读
5 可读、可执行
6 可读、可写
7 可读、写、执行

1>;键入ls -1 。列表显示出文件当前的权限。
2>;键入chmod 。改变文件的权限变为你指定的值。
注意:可以用元字符(如* ?)替换文件名,或与它们一起使用来更改多个文件或一个目录中所有文件的权限。
下例中,将一个文件权从666改为644。
gtxa% ls - 1 quest
-rw-rw-rw-lignatzstaff 6023 Aug5 12:06 quest
gtxa% chmod 644 quest
gtxa%ls -1 quest
-rw-r--r--lignatzstaff6023 Aug5 12:06 quest
gtxa%
1.5.1.15改变文件组
若要改变文件组,键入chgrp 。改变指定文件的组ID
$ls -lg junk
-rw-r--r--l other 0 Oct 31 14:49 junk
$chgrp 10 junk
$ls -lg junk
-rw-r--r--l ataff 0 Oct 31 14:49 junk

组ID号在Group数据库或本地/etc/group文件中定义, 关于组的详细信息请参见第7章。
1.5.1.16设置或显示系统环境
shell使用shell初始化文件中给出的一组说明来维护环境,用户也可以直接发命令给shell来修改shell从环境变量中得到有关环境的信息。Solaris系统软件提供7个缺省的环境变量。
*PSI:定义shell提示符。Bourne和Korn shell的缺省提示符是$。C shell的缺省提示符是%,任何shell中root的缺省提示符皆是#。用户可以在.profile,.login 或.cshrc 文件中下义不同的shell提示符。
*HOME:定义用户主目录的绝对路径。作为注册进程的一部分,自动定义HOME的缺省值,并且设置为/etc/passwd 文件中说明的注册目录。当键入cd命令且无参数时,shell转到HOME 变量所确定的目录之下。
*LOGNAME:定义用户的注册名。作为注册进程的一部分,LOGNAME的缺省值被自动定义且设置为/etc/passwd文件中说明的注册名。
*PATH:列出一组目录。当用户敲入命令后,shell 按顺序从这些目录中查找要执行的程序。如果一个命令所在的目录不在该查找路径中,则用户必须键入该命令的全部路径。做为注册进程的一部分,PATH的缺省 值是按.profile(Bourne和Korn shell)或.cshrc(C shell)文件中的说明设置。查找路径的顺序是非常重要的。当同名的命令在不同的目录存在时,执行的是第一个找到的命令。例如:假设PATH(以 Bourne 和Korn shell方式)定义为PATH =/bin:/usr/bin/:usr/sbin:$HOME/bin,在usr/bin和/home/jean/bin目录中均有名为sample的 程序,当用户不键入路径,而只是键入sample命令时,则执行/usr/bin目录中的sample程序。
其它环境变量包括:
*LPDEST:设置用户的缺省打印机
*OPENWINHOME:设置Open Wimdows可执行码的路径
*DESKSET:设置DESKSET的可执码的路径
*LANG:设置本地语言,可能值是:english、japanese、German、French、Swedish和Italian等
*HZ:设置Borne和Korn shell的历史
*TZ:设置时区
*SHELL:设置make,vi或其它工具所使用的缺省shell
*MAIL:告诉shell到哪去查找新的邮件
*MANSECTS:设置手册的有效章节
用户和系统管理员可另外定义自己使用的环境变量,当用户从shell命令中定义环境变量时,只要用户不退出shell,则定义的环境变量就一直起作用。退 shell,则不再起作用。可将“永久”环境变量存在.profile、.login或.cshrc文件中,定义环境变量的语法依不同的shell而不 同。
1.5.1.17定义Bourne和Korn shell环境变量
若要定义Bourne和Korn shell环境变量,键入=;export .
$HZ=100;export HZ

1.5.1.18定义C shell环境变量
若定义C shell 环境变量,键入setenv .
%setenv DISLAY rogue:0

1.5.1.19显示环境变量的设置
若要显示出当前的环境变量设置,键入env。
$env
HOME=/home/irving
HZ=100
LOGNAME=irving
MAIL=/var/mail/irving
MANSECTS=\1:1m:1c:1f:1s:1b;2\3:3c:3i:3n:3m:3k:3g:3e:3x11:3xt:3w:3b:9:4:5:7:8
PATH=/usr/bin
SHELL=/bin/sh
TERM=sun
TZ=ESTS5EDT

1.5.1.20使用PATH变量
PATH环境变量是非常重要的。当用户执行一个带有全路径名的命令,shell按给定的全路径名去查找命令,当用户只给出命令名时,shell就按PATH环境变量给定的路径顺序去查找目录,若在某一目录中找到该命令时,就执行它。
缺省的根PATH(sbin:/usr/sbin:/usr/bin:/etc)是由系统设置的,但许多用户还在上面添加一些别的命令目录,用户的许多问题,如有关设置环境使用命令或工具的不正确版本等,常常是由于路径设置不正确所产生的。
1.5.1.21设置Bourne和Korn shell路径
Bourne与Korn shell的路径是在用户的$HOME/.profile 文件中如下设置的:
PATH=.:/usr/bin:/$HOME/bin
1.5.1.22设置C shell路径
C shell的路径是在用户的$HOME/.cshrc 文件如下设置的:
set path=(./usr/bin $ home/bin)
更详细说明请参阅有关手册和第10章。
1.5.2使用管理工具
管理工具是Open Windows的一个具有图形用户接口的工具。它用来管理主机系统和/etc下的17个数据库。使用这一管理工具可以管理用户和组,可以管理NIS+数据库和本地/etc目录下的文件。


第2章、基本OS命令
本章将介绍:查找用户信息、查找环境信息、创建和编辑文件、命令组合和输出定向、使用手册、查找硬盘信息 。
本章解释基本的操作系统命令,提供查找有关用户和系统环境信息的方法,同时讲述建立和编辑文件、命令组合、输入重定向,显示手册以及查寻基本磁盘信息的各种方法。
2.1查找用户信息
在管理系统时,经常需要知道谁在使用系统及他们在做些什么。本节描述了解用户信息的命令:who、finger、rusers -1、whodo、id等。
2.1.1确定系统中有谁注册
(who、finger、rusers -1、whodo、id)可以使用上述四个命令之中的一个来发现谁注册进入系统。每个命令还显示各种不同附加信息。
2.1.1.1使用who命令
who命令显示注册进入系统的用户名单,注册的tty端口,以及日期和时间,如果某用户是远程注册的,那么本命令还显示该用户的远程系统名,使用who命令的方法是:键入who。
在下例中,用户irving是远程注册的,用户ignatz是系统gtxa 的本地用户。
gtxa% who
irving pts/1 Oct 31 14:33(elm)
ignatz console Oct 31 12:22
gtxa%
2.1.1.2使用finger命令
finger命令显示注册进入系统的用户注册名,同时显示用户全名(取名/etc/passwd文件对应项的information域),tty端口,星期几,注册时间,如果是远程注册的用户,还显示远程系统名。使用finger命令的方法是:键入finger
在这个例子里,用户winsor从系统castle远程注册
gtxa%flogin @openet
openet%finger
Login Name TTY Idle When Where
Winsor Janice Winsor pts/0 11 Thu 09:59 castle
gtxa%
2.1.1.3使用rusers -1命令
rusers -1(远程用户注册)命令,显示从远程系统注册的用户名清单,同时显示用户注册的系统名,tty端口,日期,登录时间以及空闲时间(idle time)。如果主机不空闲,那么最后一列不显示,使用本命令的方法是:键入rusers-1后再回车。
gtxa%rusers -1
Sending Broadcast for rusersd protocol version 3...
Sending Broadcast for rusersd protocol version 2...
jah caps:consloe Mar 3 13:03 22:03
amber facehole: console Mar 2 07:40
sebree ondine: consloe Mar 2 10:35 14
tut cairo: consloe Mar 2 16:48
jrt cairo: ttyp5 Mar 2 16:20 47:54(gap)
ramseyis mowthelawn: consloe Mar 2 16:33 28
ramseyis mowthelawn: ttpy6 Mar 3 14:20 25:14
(:0.0)
(More logins not shown)
gtxa%
2.1.1.4使用whodo命令
whodo命令显示日期、时间和系统名。它为每一个注册的用户显示设备名、UID、注册时间以及一个与此UID相联系的活动进程表。此表的内容包含设备名、PID、使用的CPU时间(分、秒)以及进程名。
键入Whodo,可以看到谁注册了,以及注册者在做什么。
gtxa%whodo
Tue Mar 12 15:483 1992
SunOs
tty09 men 8:51
tty09 28158 0:9sh
tty52 bdr 15:23
tty52 21688 0:05sh
tty52 22788 0:01whodo
tty52 22017 0:03vi
tty52 22549 0:01sh
2.1.2检查用户的用户号和组号(id命令)
使用id命令可以显示注册用户的用户id和组id号,当用户不能访问他们认为属于自己的文件时,使用这些信息来查找错原因,据此信息也可知道用户所属的 组。使用id命令时,用户先注册,然后键入id命令。如果uid和uid与出现问题的文件的uid或gid不匹配,就需要改变文件的属主或组,或者将用户 加入相应的组中。详见第5章。
gtxa%id
uid=6693(winsor)gid=10(staff)
gtxa%su
Password:
#id
uid=0(rood) gid=1(other)
#
2.2查寻环境信息
每个系统都有一个运行环境,这些环境说明在用户初始化文件标准shell和Korn shell的.profile或C shell的.cshrc和.login中定义,也可通过shell直接定义环境变量。环境变量可以规定诸如用户主目录,注册名,缺省打印机,电子邮件地 址以及访问Open Windows环境的路径。本讲讲述如何查到环境变量的设置。这方面的更详细信息请见第8章。
为了显示用户的环境变量设置,键入env命令。这样系统地显示出环境变更的设备清单,关于环境变量的缺省设置值及如何设置环境变量,请见第1章的有关内容。
gtxa%env
HOME=/
PATH=:/home/ignatz:/usr/bin:
/home/ignatz/bin:/bin:/home/bin:/etc:/usr/etc
LOGNANME=ignatz
HZ=100
TZ=PST8PDT
TERM=sun
SHELL=/bin/csh
MAIL=var/mail/ignatz
PWD=/
MANSECTS=\1:1m:1c:1f:1s:1b:2:\3:3
c:3i:3n:3m:3k:3g:3e:3x11:3xt:3w:3b:9:4:5:7:8
gtxa%
2.3创建和编辑文件
本节描述如何使用cat、touch、cp、mv、Text Editor和vi命令来创建和编辑文件。
2.3.1使用cat命令
使用cat命令可创建短文件或附加少量文本信息到一个已存在的文件末尾。用cat命令创建文件可以:
1、键入cat ;
2、录入文本内容;
3、键入回车;
4、键入Control-D。
文本被存盘,shell提示符重新出现。
用cat命令将文本附加到已存在的文件上可以:
1、键入cat ;
2、录入内容;
3、键入回车;
4、键入Control-D。
文体被存盘,shell提示符重新出现。
2.3.2使用touch命令
touch命令将每个文件的访问和改动时间设为当前时间,如果文件不存在,就创建一个新文件。可以用touch命令创建一个空文件来检查允许权和属主,或创建一个文件用于以后录入文本。
要创建一个空文件,只需键入touch 这样一个新的空文件就创建出来了,如果此文件已存在,那么文件的修改时间就变为当前的日期和时间。
gtxa%ls -1 junk
junk: No such file of directory
gtxa%touch junk
gtxa%ls -1 junk
-rw-r--r--livringstaff 0 Sep 11 15:06 junk
gtxa%
2.3.3文件拷贝(cp)或改名(mv)
可以通过一对一已存在的文件进行拷贝或改名来创建一个新文件。
拷贝已存在的文件的方法是:键入cp ,这样就得到了原文件的拷贝,而且保留了原来的文件。
mv
原文件被改名,原名文件就不再存在。
gtxa%mv quest /tmp/quest。old
gtxa%
2.3.4文本编辑器的使用
可以使用Open Windows的文体编辑来创建和编辑文件。然而普通用户在使用文本编辑器来编辑具有根允许权限(root pemissions )的文件时可能会出现一些问题。
进入Open Windows工作区的主菜单中选择programs,再在programs菜单中选择Editor来打开文体编辑器,也可以在命令行键入: textedit &来打开文体编辑器。打开之后,显示一个文本编辑器窗口。进行编辑时,可使用键盘上Cut、Copy、Paste、Undo键来加快文本的编辑速 度。
2.3.5 vi的使用
全屏幕编辑器vi,通常是由系统管理员编辑文本文件。有专门的一些书讲述vi使用法。本节仅提供其中最常用的编辑命令供用户参考。只需键入 vi 。就可启动vi,如果文件不存在,那么就打开一个新文件,当存入内容时,此新文件就创建出来,如果文件已经存在,则在启动完vi以后,就在屏幕上显示此文 件的开头一部分内容。
表2.1一些基本的vi命令
功能命令
不存盘退出:qi
存盘:w
存后退出:wq
存后退出ZZ
左移一字符h
右移一字符i
上移一行k
下移一行j
移到文件尾G
插入文本(插入方式)v(文本)ESC
在光标后附加文本a(文本)ESC
在行尾附加文本A(文本)ESC
如何退出命令方式ESC
删行dd
删字符x
删词dw
在上一行开始加入新文本O
在下一行开始加入新文本o
拷贝一行到缓冲区Y
将缓冲区内容置于当前光标之前P
将缓冲区内容置于当前光标之后p

2.4命令组合及输出重新定向
SunOS 5.0系统允许以多种方法组合命令,本节讲述命令组合的三种方法。
2.4.1在同一命令行里键入多个命令
在命令之间用分号(隔开,就可以在同一命令行中键入多个命令,例如,可以用cd /usr/bin;ls命令先转到一个目录中,再列出此目录中的目录和文件,另外一个例子是为Bourne shell设定环境变量再输出(export)该变量。
PATH=。:/usr/bin:$HOME/;export PATH
2.4.2输出重新定向(<>
除非另外说明,命令结果通常显示在屏幕上,使用重新定向符(“<”和“>;”),可以将输出结果重新定向,例如:将结果存入一个文件而不是将 它显示在屏幕上,只需使用重新定向符“>;”,指示shell将内容放入一个文件,下面的例子中,date命令的输出被重新定向到 Sample.file文件中:
gtxa%date >; samle.file
gtxa%
下面是Sample.file的内容:
gtxa%more sample.file
Tue May 26 13:26:59 PDT 1992
gtxa%
也可以重新定向输入。例如,将一个文件的内容邮件寄到用户ignatz@gtxa,键入mail igzatz@gtxa < report.file,report.file文件就通过电子邮件发给ignatz@gtxa。
2.4.3组合命令(|)
使用管道操作符(|)来联结两个或更多的命令,管道操作符把前一命令的输出作为后一命令的输入。有许多方法可以将命令用管道线组合起来,本节只举两例:
键入man cat│lp再回车,可以打印cat(1)手册。上述手册就不显示在屏幕上,而是将输出内容传给lp命令,使之在缺省打印机上打印出来。
将ps -ef命令用管道(|)与grep命令联结起来,可以在进程表中找出某个命令对应的过程,输出结果显示在屏幕上。例如,显示Open Windows的进程信息:
gtxa%ps -e│grep openwin
260 ? 0:00 openwin
gtxa%
如果想要打印上述信息,可以另加管道命令(|lp )于上述命令之后:
gtxa%ps-ef │grep openwin │lp
request id is castle─51(request id is cstle ─51
(standard input)
gtxa%
2.5使用手册
SunOS 5.x提供联机参考手册,手册被分为不同的节(section),同一类型的命令组成一节。例如,大多数用户命令归并为(1)节,系统管理归并为(IM)节。手册可以存放在本地系统上,也可以在服务器上,本节描述如何显示手册,及如何找到某条命令在哪一节。
2.5.1显示手册(man)
显示手册,只需键入man ,手册页即显示出来。
gtxa%man grep
grep(1) USER COMMANDS grep(1)
NAME
grep -search a file for a pattern
SYNOPSIS
grep [-bchilnsvw] limited -expression
...
2.5.2找命令节号(whatis、man)
有些命令的名字可以出现在几个章节中,此时可以使用whatis找到命令在手册中的节号(section number)。
注意:仅当使用了cat man来命令建立手册之后whatis命令才起作用。在超级用户状态下键入#cat man 可以建立手册页,其中是欲建立的节号。
依下列步骤可以找到手册的节号:
1、 键入whatis 。本命令手册的第一行显示出来,此行中含有该命令手册的节号。
2、键入man -s 再回车,则显示手册页。
gtxa%whatis chown
chown chown(1) -change owner of file
chown chown(1b) -change owner
chown chown(1m) -change owner
chown chown(2) -change owner and group of a file
gtxa%man -s2 chown
chown(2) SYSTEM CALLS chown(2)
NAME
chown, lchown, fchown-change owner and group of a file
SYNOPSIS
# include
# include
int chown(const char * path, uid-t owner, gid-t group);
int chown(const char * path, uid-t owner, gid-t group);
int fchown(int fildes, udi─towner, gid─t group);
DESCRIPTION
chown()sets the owner ID and group ID of the file specified by path or feferenced ty the open file descriptor fields to owner and group respectively. if owner or group is specified as-1, chown() does not change the corresponding ID of the file. ...
2.6查阅磁盘信息
下面的命令可用来查磁盘使用信息,并指出某文件系统是本地的UFS还是远程的(nfs)。
2.6.1显示磁盘空间的信息(df -k)
Solaris中的df命令,当不加参数使用时, 输出结果与以前的df命令不同。df加上-k选择项,可以按SunOS 4.x中的格式来显示磁盘信息。键入df -k显示文件系统名,总字节数,已使用的字节数,剩余字节数,已经使用的百分比,以及安装点。
gtxa%df -k
/dev/dsk/c0t0d0s0 30383 19926 7427 73% /
/dev/dsk/c0t0d0s6 189683 66503 104220 39% /usr
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
swap 44268 12 44256 0% /tmp
/dev/dsk/c0t0d0s7 331953 116133 182630 39% /opt
/dev/dsk/c0t3d0s7 189858 24293 146585 14% /export/home
openetpid146) 0 0 0 0% /nt
openetpid146) 0 0 0 0% /home
....
2.6.2判别某文件系统是否为本地文件系统(df)
键入df 可以查出某文件系统是本地文件系统还是远程安装的网络文件系统(nfs)。与指定的文件系统相应的磁盘格式信息(包括磁盘位置或安装点)也将显示出来。
在下例中,文件系统是nfs文件系统。
gtxa%df /home/ignatz
bigriver:export/home/ignatz 5388980 399435 85647 82%/tmp-mmt/home/ignatz
gtxa%
在下例中,文件系统在本地硬盘上
#df /
/dev/dsk c0t0d0s0 30383 11885 15468 43% /
2.6.3找出某种类型已安装的文件系统(df -F)
若欲显示同一类型的所有已安装文件系统,可使用-F选择项,后接文件系统类型。最常用的文件系统结构是本地文件系统ufs 和网络文件系统nfs。键入df -F 可列出所有特定类型的已安装文件系统。下例中,显示所有已安装的nfs文件系统:
gtxa%df -F nfs
/net (cinderella: (pid153):0 blocks-1 files
/usr/dist( cinderellapil53)):1276248 block.-1 files
/home (cinderella pid153): 0 block-1 files
/usr/man (ocak: /export/man) : 272934 blocks-1 files
gtxa%
在下例中,显示已安装的ufs(本地)文件系统。
cinderella%df ─F ufs
/ (/dev/dsk/c0t0d0so): 36992 blcoks 13558 files
/usr (/dev/dsk/cotodod6): 274346 blocks 94403 files
/export/home/cinderella (/dev/dsk/cotddos7): 379670 blocks 96046 files
cinderell%
在下列中,显示已安装的临时文件系统信息
cinerella%df ─F tmpfs
/tmp (swap): 88528 block 3156 files
注: 由于交换区文件系统(swapfs)从不安装,故不可用df命令显示之。


第3章、设备管理
本章主要介绍:磁带的使用、软盘的使用、磁盘管理、服务访问机制、建立双向调制解调器
本章描述如何使用磁带和软盘拷贝文件,而如何备份和恢复整个文件系统是第四章的内容,第四章还讲述磁带设备名和用来管理磁盘命令,介绍有关管理终端、调制 解调器及其它使用SunOS 5.x系统软件的网络设备的服务访问机制(SAF) ─提供为打印服务器和打印客户启动端口管理器、向系统中加入与Hayes兼容的调制解调器的步骤,第六章中介绍如何管理打印机。
3.1磁带的使用
本节讲述磁带设备命名约定、读写盒式磁带的命令、以及如何使用tar和cpio命令对带存取文件。
tar和cpio命令可将文件或文件系统拷入磁带,按照拷贝灵活性和精度的要求可以决定选用哪个命令。
tar命令将文件和目录树拷入单个磁带,注意: SunOS 5.x的tar命令可以存取特殊文件(块设备,字符设备文件fifo文件)但SunOS 4.x的tar命令则不可存取这类文件,cpio命令的可移植性则好些。
cpio命令用于拷贝需使用多卷磁带的任何文件、 特殊文件或文件系统,也可以用于将SunOS 5.x系统中的文件拷贝到SunOS 4.x系统中,cpio命令比tar 命令更为高效地将数据装入磁带,而读出时又可跳过磁带上的坏区,cpio命令还提供了写文件时不同格式头(tar,ustar,crc,doc,bar) 的选择,以保证不同类型系统之间的可移植性。
由于tar和cpio命令使用原始设备(raw device), 故不用在使用之前对磁带格式化或创建新的文件系统,使用的磁带驱动器和设备名取决于硬件及系统配置。
3.1.1磁带设备的命名习惯
磁带设备命名习惯采用逻辑的─而非物理的设备名,磁带机依控制器类型分为两类:
•;Xylogics472类,1/2英寸装于机架上的(顶部装入)对卷(reel to reel)式驱动器,(每个控制器最多带4个驱动器) 。
•;SCSI类,1/4英寸盒式带,1/2英寸前部装入对卷式,及4mm或8mm螺旋扫描驱动器,(每个控制最多带8个驱动器)。
在/dev/rmt子目录中,有唯一一组磁带设备文件,它们支持不同的输出密度,通常可按图3.1来规定磁带机设备。
/dev/rmt/XAn
Optional
No-Rrwind
Optional n no-rewind;
Density omit for rewind
l low
Drive m medium
0 h high
1 u ultra
2
3
4
n
图3.1 磁带机设备名
后面三节讲述驱动器号、密度选择及不倒带选择。
3.1.1.1使用缺省密度规定驱动器号
通常磁带驱动器是通过其逻辑单元号来指定的,其单元号由0至n,如果不指定密度,则驱动器依磁带优先密度(通常指它支持的最高密度)写。
指明第一个驱动器,可使用:/dev/rmt/0
指明第二个驱动器,可使用:/dev/rmt/1
注意:多数设备名的序列号从0开始,所以,当使用第一磁带或目标时,其号码为0而不是1。
3.1.1.2为磁带机指定密度
有时会遇到某系统的磁带机只支持某种密度,这时若拷贝磁带,则需指定一个以此密度写的设备名,使用下列规则:
/dev/rmt/
表3.1列出了驱动单元和密度符号,例如,指明第一个(0号)驱动器使用中密度的原始磁带机,使用:
/dev/rmt/0m
表3.1 磁带设备名中的驱动器单元和密度符号
设备名 =/dev/rmt/
磁带驱动器号(数字),0-n,与控制器类型无关
密度(字符),取决于控制器和驱动器类型
null 缺省,优先(最高)密度
l 低密
m 中密
h 高密
u 极高密(ultra)
3.1.1.3指定"不倒带"选项
命令执行后,除非将"不倒带"的选项作为设备名的一部分,否则磁带机将自动倒带,指定"不倒带"选项,只需在设备名之尾加上"n"字。如:/dev/rmt/0mn
3.1.1.4不同磁带控制器和介质的设备名缩写
一个系统中,可以同时有SCSI和非SCST磁带机,SCSI控制器至多可带8个SCSI磁带机, 非SCSI控制器至多可带4个磁带机,对于一驱动器号(x),密度符号取决于后面介绍的控制器和驱动器类型。
表3.2列出不同磁带控制器驱动器和介质的设备缩写。
注: 设备缩写中驱动器号不一定为列出的0,可以1、2或3等等,它取决于系统上连有多少磁带机。
表3.2 磁带控制器/驱动器和介质的设备名缩写
控制器 驱动器单元 大小 类型 格式 磁道 设备缩写
Xylogics 472 Fujitsu 1/2inch 卷绕式 1600bpi 9 /dev/rmt/0m
M2444 1/2inch 卷绕式 800bpi 9 /dev/rmt/0h
SCSI/前插入式 HP 1/2inch 卷绕式 1600bpi 9 /dev/rmt/0m
6250bpi 9 /dev/rmt/0h
SCSI Sysgen 1/4inch 盒式 QIC-11 4 /dev/rmt/0l
QIC-24 4 /dev/rmt/0m
QIC-11 9 /dev/rmt/0l
QIC-24 9 /dev/rmt/0m
Emulex 1/4inch 盒式 QIC-11 4 /dev/rmt/0l
MT-02 QIC-24 4 /dev/rmt/0m
QIC-11 9 /dev/rmt/0m
QIC-24 9 /dev/rmt/0m
Archive 1/4inch 盒式 QIC-150 18 /dev/rmt/0h
QIC-15O
Wangtek 1/4inch 盒式 QIC-150 18 /dev/rmt/0h
QIC-150
Desktop 1/4inch 盒式 QIC-150 18 /dev/rmt/oh
Backup Pack
3.1.1.5 1/2英寸卷绕式非SCSI内接(Rack mounted)磁带机
这类磁带机,无论是Tapemaster还是Xylogics472控制器,其设备名/dev/rmt/XA 中选择都基于表3.3中的密度项。
表3.3 Rack-mounted 1/2英寸磁带机的指定密度
符 号 密度
null 缺省最高密度(6250bpi非压缩)
1800 bpi

m1600 bpi
h6250 bpi
u6250 bpi,压缩
若省去密度符号,那么就依磁带的最高密度写,且不压缩。
3.1.1.6 1/4英寸SCSI盒式和1/2英寸前部装入的卷绕式磁带机
对于这这类磁带机,其设备名(/dev/rmt/XA)中表示密度的A项基于表3.4。
表3.4 SCSI磁带机的指定格式和密度
字符 密度(1/4英寸盒式) 密度(1/2英寸前部装入对卷式)
null 缺省最高密度 缺省最高密度
l QIC-11格式 800bpi
m QIC-24格式 1600bpi
l QIC-150 6250bpi
u 保留 保留
对于1/4英寸盒式带,密度是由写入数据的格式----QIC决定的,QIC-11和QIC-24 格式磁道上每英寸约写1000字节,QIC-150的密度要高些,60Mb 1/4 英寸盒式磁带机的优选密度是QIC-24,150Mb 1/4英寸盒式磁带则为QIC-150。150Mb 的磁带机只能按QIC-150格式写,不可以按QIC-24或QIC-11格式写,格式的选择仅可同时可依QIC-24和QIC-11写的磁带机才有意 义。
3.1.1.7 螺线扫描磁带机
螺线扫描磁带机(例如: Exabyte 8mm 或 Wang/DAT 4mm)是特殊的SCSI磁带机,它们仅依指定密度写,因此,通常只需通过磁带机号来指定它们,例如:
/dev/rmt/0
3.1.2读写磁带的命令
下面介绍一些读写磁带的命令
3.1.2.1拉紧磁带
如果读磁带时出错,则可以拉紧(retnsion)磁带带清扫磁带机,再重读一次。
gtxa%mt -f /dev/rmt/1 retension
gtxa%
3.1.2.2倒带
键入mt -f /dev/rmt/ rewind
指定的n号磁带机倒带。下例中,对/dev/rmt/1进行倒带:
gtxa%mt –f /dev/rmt/1 rewind
gtxa%
3.1.2.3列出磁带机状态
键入mt –f /dev/rmt/ status则可显示磁带机状态
此例显示磁带机/dev/rmt/1中无磁带:
gtxa% mt -f /dev/rmt/1 status
/dev/rmt/1:no tape loaded or dri e offline
gtxa%
在此例中,显示/dev/rmt/<1>;的状态:
gtxa%mt –f /dev/rmt/1 status
Archive QIC-150 tape drive:
sense key(0x6)=nuit attention residual=0 retries
file no=0 block no=0
gtxa%
3.2 磁带与软盘操作
3.2.1 tar命令
下面几节描述如何使用tar命令将文件拷入磁带,并从磁带上列出文件,增加文件和读出文件。
3.2.1.1向磁带写文件(tar)
依下列步骤向磁带写文件:
1、 进入含有欲拷文件的目录;
2、 插入有写权限的磁带到磁带机中;
3、 键入tar cvf /dev/rmt/
注意: 使用c选项写带,将破坏磁带上原有文件,如果欲保护磁带上原有文件,则需使用后面讲述的"r"选择项来附加文件。
c选项表示拷贝(copy)指定的文件,v选项(verbose)表示在拷贝过程中显示文件信息,f选项(files)后面加上磁带设备名,指定文件向何处拷贝,被指定的文件拷贝到磁带上,覆盖磁带上原有文件。
注: 可以使用元字符(?和*)作为文件名的一部分。例如,为了拷贝所有具有.doc后缀的文件,在文件名部分键入*.doc即可,如果指定文件名部分是一目录名,那么此目录及其所有子目录均递归地拷入带中。
4、 自磁带机中取出磁带,填写标签。
在下面的例子中,将两个文件拷入0号磁带机中的磁带
gtxa%cd /home/winsor
gtxa%ls evaluation*
evaluation. doc evaluation. doc. backup
gtxa%tar cvf /dev/rmt/0 evaluation*
a evaluation. doc 86 blocks
a evaluation. doc backup 84 blocks
gtxa%
3.2.1.2列出磁带上的文件(tar)
依下列步骤列出磁带上的文件:
1、 将磁带插入磁带机;
2、 键入tar tvf ./dev/rmt/
t选项(table)表示将指定文件列出,v选项(vevbose)表示在列文件时仿ls -l的格式显示文件信息,f选项(files)表示在此选项后的磁带机设备名表示文件所在设备。
在下列中显示0号磁带机中所放磁带的内容
gtxa% tar tvf /dev/rmt/0
rm-rm-rm-6693/10 44032 Apr 23 14:54 1991 evaluation. doc
rm-rm-rm-6693/10 44008 Apr 23 14:57 1991 evaluation. doc. backup
gtxa%
从左向右,上面信息的第一列显示文件存取权限,第二列显示文件的属主与属组,第三列显示文件字节数,第四、五、六、七列是文件最后修改的月、日、时间和年号,最后一列是文件名。
3.2.1.3向磁带上增加文件(tar)
依下列步骤可以向磁带上拷入文件而不破坏磁带原来内容:
1、 进入含拷贝文件的子目录;
2、 将具有写权限的磁带插入磁带机;
3、 键入tar rvf /dev/rmt/ ......
则指定文件被拷入指定磁带中;
注:可以使用元字符(?和*)作为文件各的一部分。例如,拷贝所有具有.doc后缀的文件,只需在指定文件名部分键入*.doc即可。
4、 自磁带机中取出磁带,填写标签。
下例中,向0号磁带机中的磁带上增加文件:
gtxa%cd /home/winsor
gtxa%tar rvf /dev/rmt/0 junk
a junk 1 blocks
gtxa% tar tvf /dev/rmt/0
rm-rm-rm-6693/10 44032 Apr 23 14:54 1991 evaluation. doc
rm-rm-rm-6693/10 44008 Apr 23 14:57 1991 evaluation. doc. backup
rm-rm-rm-6693/1018 Dec 10 11:36 1991 junk
gtxa%
tar命令的使用n选项(不倒带),可以让用户多次使用tar命令顺序向磁带上拷文件,例如:拷文件后不倒带,下次使用此磁带拷贝时,文件就写在前次拷贝的文件后面。
3.2.1.4从磁带中析取文件(tar)
1、 进入欲存文件的子目录;
2、 将磁带插入磁带机;
3、 键入tar xvf /dev/rmt/
磁带上所有的文件都拷入当前目录。
此例中,0号磁带机中磁带内容全部被拷贝出来:
gtxa%cd /home/winsor/Evaluations
gtxa%tar xvf /dev/rmt/0
x evaluation.doc,44032 bytes,86 tape blocks
x evaluation.dos.backup,43008 bytes,84 tape blocks
gtxa%
自磁带中析取个别文件,只需键入tar xvf /dev/vmt/ ......指定文件则从磁带中拷贝出,并放入当前目录,此例中前缀是evaluation文件自0号磁带机的磁带中拷贝出:
gtxa%cd /home/winsor/Eealuations
gtxa%tar xvf /dev/rmt/0 evaluation *
x evaluation.doc, 44032 bytes, 86 tape blocks
x evaluation.dos, backup, 43008 bytes, 84 tape blocks
gtxa%
下面步骤表示如何自磁带中析取整个子目录:
1、 进入欲放文件的目录,如果拷入的子目录已存在,那么,应进入该子目录的父目录中,而且应保证原子目录中的内容可以覆盖掉,例如,将磁带中的目录Book拷 入/home/winsor/Book中,应键入cd /home/sinsor; tar xvf /dev/rmt/Book,若原先就进入/home/winsor/Book中,则拷入内容则存于/home/winsor/Book/Book中。
2、 键入tar xvf /dev/rmt/ 则此目录与其所有子目录递归地自磁带上拷出。
注意: 自磁带中拷出的文件名就是所存的文档文件名,如果对文件名不清楚,可以先列出磁带上的文件名,步骤详见"列出磁带上的文件(tar)"或tar(1)手册。
3.2.2cpio命令
使用cpio命令建立磁带文档时,它自标准输入设备取得一串文件或路径名, 然后将它们写到标准输出设备上,输出通常反向到文件或设备,后面讲述怎样使用cpio命令将文件拷入盒式磁带,列出盒式磁带文件,及析取磁带上的某个文件子集。
3.2.2.1将某目录下的所有文件拷入磁带(cpio)
依下列步骤将某目录下的所有文件拷入磁带:
1、 将具有写权限的磁带插入磁带机;
2、 键入ls l cpio –oc >; /dev/rmt/
当目录中所有文件则拷入指定磁带机中的磁带内,覆盖磁带上已有文件,显示拷贝总块数;
3、 取出磁带,填好标签。
在下列中,/home.winsor/TOI目录的文件均拷入0号磁带机内的磁带。
gtxa%cd /home/winsor/TOI
gtxa%ls -1 cpio –oc >; /dev/rmt/0
31 blocks
gtxa%
3.2.2.2列出磁带上的文件(cpio)
依下列步骤:
1、 将磁带插入磁带机;
2、 键入cpio -civt < /dev/rmt/
其中i选项自磁带读入(in)内容,v选项仿l
3.2.2.2列出磁带上的文件(cpio)
依下列步骤:
1、 将磁带插入磁带机;
2、 键入cpio -civt < /dev/rmt/
其中i选项自磁带读入(in)内容,v选项仿ls -l格式列出文件;t选项对指定磁带机中的磁带内容列表。
注意: cpio命令列表使用的时间与读整个文档的时间一样长,因为cpio命令需遍历整个文档。
在本例中,0号磁带机中的磁带有四个文件:
gtxa%cpio -civt < /dev/rmt/0
100666 winsor 3895 Feb 24 15:13:02 1992 Boot.chapter
100666 winsor 3895 Feb 24 15:13:23 1992 Directory.chapter
100666 winsor 6491 Feb 24 15:13:52 1992 Install.chapter
100666 winsor 1299 Feb 24 15:14:02 1992 Intro.chapter
31 biocks
gtxa%
第一列是八进制表示的存取权限;第二列显示文件属主;第三列列出文件所占字节数;第四、五、六、七列显示文件最后改动的月、日、时间和年份;最后一列是文件名。
3.2.2.3析取磁带上所有文件(cpio)
如果(磁带上)文档是使用相对路径名建立的,那么输入文件在当前目录下, 如果文档是使用绝对路径名建立的,则以相同的绝对路径重新生成此文件。
注意: 使用绝对路径名来拷贝磁带文件是危险的,因为这样会覆盖文件系统中的原有文件。
依下列步骤拷贝文件:
1、 进入欲放文件的子目录;
2、 将磁带插入磁带机;
3、 键入cpio -icv < dev/rmt/
指定磁带机中磁带上所有文件拷入当前目录。
本例中,0号磁带机的磁带上的所有文件被拷贝出来。
gtxa%cpio –icv < /dev/rmt/0
Boot.chadter
Install.chapter
Intro.chapter 31 blocks gtxa%
3.2.2.4自磁带中析取个别文件(cpio)
通过在选项后面的引号中使用shell通配符号可以拷出磁带中文档文件的某个子集:
1、 进入欲存文件的目录;
2、 将磁带插入磁带机;
3、 键入cpio -icv "" < /dev/rmt/
所有与此模式匹配的文件均拷入当前目录,可以指定文件名匹配模式,但它们必须框入引号之中。
下例中,后缀为chapter的所有文件均自0号磁带机的磁带中拷贝出。
gtxa%cd /home/winsor/Book
gtxa% cpio –icv "*chapter" Boot.chapter
Directory.chapter
Install.chaopter
Intro.chaoter
31 blocks
gtxa%
更详细内容请参阅自cpio(1)手册。
3.2.2.5软盘的使用
本节介绍双面(DS)高密度(HD)3.5英寸软盘的使用方法,在向软盘上拷贝ufs文件或文件系统之前,必须格式化软盘,将ufs文件拷入单个软盘片需 使用tar命令;若向多个软盘片上拷贝时,应使用cpio。cpio命令可以发现介质已用完并提醒使用者插入下一盘片。
也可以在软盘上建立一个DOS文件系统,要想使用DOS格式的软盘,可以将软盘作为pcfs文件系统装入,然后使用基本OS命令如cp,mv等从软盘上存/取文件即可。
3.2.3软驱设备名
软驱的设备名在SunOS 5.x系统软件中与前版本比较,已有所变化,现在的软驱设备名为/dev/diskette;软盘的原始设备文件名为/dev/rdiskette。
3.2.4ufs文件系统的软盘
本节介绍如何格式化用于ufs文件的软盘,以及怎样用tar和cpio命令拷贝文件,同时介绍怎样拷出使用SunOS 4.x中bar命令建立的文件。
3.2.4.1格式化ufs软盘
SunOS 5.x ufs文件使用的软盘依下列步骤格式化:
1、 去掉软盘写保护;
2、 将软盘放入软驱;注意:重新格式化会破坏软盘上所有原有文件。
3、 键入fdformat,显示出"ress return to start formatting floppy"
4、 回车,这时开始格式化软盘,出现一系列的点(......)当格式化完成时,重现提示符。
Press return to start formatting floppy..
..........................................................
gtxa%
3.2.4.2自软驱中取出软盘
自软驱中取出软盘要用eject命令,eject命令也用于将CD-ROM盘片自CD-ROM驱动器中取出,不带参数的eject命令,以 /dev/diskette作为缺省值参数,键入eject命令,则软盘弹出。注意:如果软盘弹不出来,可以用手动取出,方法是用一块硬纸片插入盘片下方 的孔中。
3.2.4.3将ufs文件拷入单张格式化过软盘
本节讲述tar命令,注意tar命令使用的是原始设备名/dev/rdiskette。
1、进入欲拷文件所在的目录;
2、将去掉了写保护且格式化好了的软盘插入软驱;注意:使用c选项会破坏软盘上原有的数据,若欲保护原有数据,应使用后面讲的r选项。
3、键入tar cvf /dev/rdiskette ...
指定文件拷入软盘并覆盖原有的文件。注意:拷贝时文件名中也可以出现元字符(?和*),用于拷贝多个文件。
4、键入eject将软盘自软驱中取出;
5、填写好软盘标签。
下面例子中,向软盘内拷入了两个文件:
gtxa%cd /home/winsor
gtxa%ls evaluation *
evaluation, docevaluation.doc.backup
gtxa%tar cvf /dev/rdiskette evaluation *
a evaluation. doc 86 blocks
a evaluation. doc. backup 84 blocks
gtxa%eject
gtxa%
3.2.4.4列出软盘上的文件
其具体步骤:
1、将软盘插入软驱;
2、键入tar tvf /dev/rdiskette
t选项表示列出软盘上的文件。
下面例子中的软盘上含有2个文件:
gtxa%tar tvf /dev/rdiskette
rw-rw-rw-6693/10 44032 Apr 23 14 54 1991 evaluation.doc
rw-rw-rw-6693/10 44008 Apr 23 14 47 1991 evaluation.doc.backup
gtxa%
在tar(1)手册中有详细说明,同时拷多张软盘应使用cpio,tar只适用于单张软盘。
3.2.4.5向一个格式化好的软盘上附加文件(tar)
依下列步骤,可保证不覆盖软盘上原有的文件;
1、进入含欲拷文件的目录;
2、将一张去掉写保护并格式化后的软盘插入软驱中;
3、键入tar rvf /dev/rdiskette ...
指定文件则附加到软盘上原有文件之后。注:文件名中允许出现?或*这样元字符。
4、键入eject取出软盘。
5、填写好软盘标签。
下例中,附加一个文件到软盘上:
gtxa%cd /home/winsor
gtxa%tar rvf /dev/rdiskette junk
a junk 1 blocks
gtxa%tar tvf /dev/rdiskette
rw-rw-rw-6693/10 44032 Apr 23 14 54 1991 evaluation.doc
rw-rw-rw-6693/10 43008 Apr 23 14 47 1991 evaluation.doc.backup
rw-rw-rw-6693/1018 Dec 10 11:36 1991 junk
gtxa%eject
gtxa%
3.2.4.6从软盘上拷出文件(tar)
1、进入欲存放文件的目录;
2、将软盘插入软驱;
3、键入tar xvf /dev/rdiskette,软盘上所有文件就都拷到当前目录中去了;
4、键入eject命令,自软驱中取出软盘。
下例拷贝软盘上的所有文件:
gtxa%cd /home/winsor/Evaluations
gtxa%tar xvf /dev/rdiskette
x evaluation.doc,44032 bytes,86 tape blocks
x evaluation.dos.backup,40008 bytes,84 tape blocks
gtxa%eject
gtxa%
tar xvf /dev/rdiskette ...命令中从软盘上拷贝出个别文件,在下面的例子中自软盘上拷出所有前缀为evaluation的文件:
gtxa%cd /home/winsor/Evaluations
gtxa%tar xvf /dev/rdiskette evaluation*
x evaluation.doc,44032 bytes,86 tape blocks
x evaluation.dos.backup,43008 bytes,84 tape blocks
gtxa%eject
gtxa%
3.2.4.7自软盘上拷出bar格式的文件(cpio)
SunOS 4.x中的bar命令在SunOS 5.x中已经取消,原来SunOS 4.x中以bar 命令在软盘是存档的文件,可以在SunOS5.x下拷出,其方法是使用cpio命令加-H bar选择项。注意:用-H bar加-i选项只能拷出文件,而不能用该选项来创建bar文件,最好在拷贝之前,先列出软盘内容看一下。
1、进入欲存放拷出文件的目录;
2、将软盘插入软驱;
3、键入cpio -ivH bar4、键入eject命令,将软盘取出;
3.2.5使用多张软盘存档
当向软盘上拷贝较大文件时,cpio命令可以提醒使用者当前软盘满了,再换一张格式化过的空盘,使用的选项在前面的"cpio命令的使用"中讲述过,这些选项与拷入磁带的相同,只需将前面有磁带机设备名改为/dev/rdiskette即可。
3.2.5.1在软盘上创建一个ufs文件系统(newfs /dev/rdiskette)
如果想安装一个ufs软盘,首先必须在其上创建一个文件系统:
1、格式化软盘;
2、进入超级用户状态;
3、键入newfs /dev/rdiskette
于是,就在软盘上创建了一个ufs文件系统,
gtxa%fdformat
Press return to start formatting floppy。
................................................................
gtxa% su
Password:
#newfs /dev/rdiskette

3.2.6pcfs(DOS)文件系统的软盘
按pcfs(DOS)文件系统格式化的软盘可用于DOS系统,下面讲述怎样格式化DOS软盘,关于pcfs文件系统请见第四章。
3.2.6.1 格式化pcfs(DOS)文件系统软盘
格式化这种软盘,需依下列步骤:
1、将软盘插入软驱;
注意: 重新格式化会破坏软盘上原有数据!
2、键入fdformat -d显示"ress return to start formatting filppy"
3、键入回车,格式化过程中,系统显示一连串小圆点,格式化结束后,显示出提示符。
gtxa%fdformat -d
Press return to start formatting floppy.
.................................................................
gtxa%
3.2.6.2安装pcfs软盘
既可以安装使用fdformat -d命令格式化的软盘,也可安装在DOS系统下格式化的pcfs软盘,在安装了pcfs文件系统之后可以使用SunOS的实用程序对文件读、写、创建、删 除,但文件的命名遵从DOS约定,关于pcfs文件系统的格式特点,可以查阅pcfs(7)手册。
软盘上安装pcfs文件系统,方法如下:
1.将软盘插入软驱;
2.进入超级用户方式;
3.键入mount -F pcfs /dev/diskette 文件系统则安装在指定的安装点。
一个pcfs文件系统可以以不同的安装选项安装,(例如: -orw),mount-pcfs(1M)手册中详细讲述了各种选项。
如果频繁使用pcfs软盘,则可以在/etc/vfstab中加入如下一项:
/dev/diskette-pcfs pcfs-no rw
建立一个/pcfs目录,作为软盘安装点,若安装点写入/etc/vfstab中,使用者可以在超级用户状态下键入mount /pcfs来安装pcfs 软盘,一旦pcfs软盘安装上了,则可以使用所有SunOS实用程序,如cp或mv对软盘上文件拷入拷出。
3.2.6.3卸下pcfs软盘
使用完pcfs软盘后,必须首先将它的系统卸下,才能用eject取出该软盘,键入umount 即可完成拆卸,键入eject命令,软盘弹出。
3.3硬盘命名管理
下面各节讲述SunOS 5.x硬盘命名习惯,查找硬盘信息的命令(du,prtvtoc),以及如何修复和更替坏盘。
3.3.1硬盘命名习惯
SunOS 5.x的硬盘命名方法与SunOS 4.x的不同,本节将解释新的命名约定,该命名基于逻辑(而非物理)设备名,SunOS 5.x的硬盘,同时具有设备和原始(字符)设备文件的名字,不管命令要求块设备文件还是原始设备文件,设备名是同一个。
SunOS 4.x要求在原始设备名前加一个r,SunOS 5.x则无此要求,在后者中,每种类型的设备文件在/dve下有自己的子目录:/dve/dsk(块设备接口),/dev/rdsk(原始设备接口)。
诸如mount等命令要求使用/dev/dsk目录中的块接口设备名来指定硬盘设备,而newfs等命令则使用/dev/rdsk目录中的原始接口设备名来指定硬盘设备。
指定硬盘设备名时使用哪种接口取决于控制器类型是基于总线(SCSI或IPI)还是直接的。
3.3.1.1带有总线控制器的硬盘的使用
图3.2列出了总线控制器的硬盘命名习惯。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
cwtxdySz
z Slice (or partition) number (0 to 7)
y Drive number
t Physical bus target number
c Logical controller number
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
图3.2 具总线控制器的硬盘命名习惯
指定具有总线控制器(SCSI或IPI)的硬盘的某个分区,可这样规定设备名:/dev/dsk/cWtXdYsZ(块接口)或 /dev/rdsk/cWtXdYsZ(原始接口)。注: SunOS 5.x使用"片"(slice)"一词来表示片号(在设备名中用"s"表示),其实"片"就是硬盘分区的别称。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表3.6 总线型驱动器硬盘的设备名举例
设备名 描述
/dev/rdsk/c0t0d0s0 该原始接口对应第一个控制器的第一个SCSI
目标地址的第一个硬盘的第一片(根)
/dev/rdsk/c0t0d0s2 该原始接口对应第一个控制器的第一个SCSI
目标地址上的第一个硬盘的第三片(表示整上
硬盘)
/dev/rdsk/c0t1d0s6 该原始接口对应第一个控制器的第二个SCSI
目标地址的第一个盘的第七片(/usr)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
下面列出了一些确定设备文件名的方法:
•;若系统中仅有1控制器,那么W的值通常为0;
•;对于SCSI控制器来说,X是该部件后面开关所设置的目标地址;
•;Y是与目标上相连的驱动器号,若硬盘的控制器是嵌入式的,则Y为0;
•;Z是片号(即分区号),标码由0到7,指定整个硬盘时,值为2,表3.5列出了带有根区的硬盘上分区的常规赋值。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表3.5 有根区硬盘的习惯分区
区(片) 文件系统 用途
0 / 根文件系统
1 Swap 虚拟内存空间
2 - 整个硬盘
6 /usr 可执行程序,程序及文档
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3.3.1.2带有直接驱动器的硬盘的使用
带直接驱动器的硬盘,设备名中没有目标项,指定这种硬盘的片(分区)应使用下列格式的设备名: /dev/dsk/cXdYsZ(块接口)/dev/rdsk/cXdYsZ(原始接口).
图3.3表示出具直接控制器的硬盘的命名约定,如果系统仅有1个控制器,则X为0,使用第二片表示整个硬盘。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
cXdYsZ
X Slice (or partion)llumber(¢to 7)
Y Drive number
Z Longical controller numver
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
图3.3直接控制器硬盘的命名规定
表3.7列出了几个直接控制器硬盘的原始设备命名
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表3.7直接控制器硬盘的设备名示例
设备名 描述
/dev/rdsk/c0d0s0 对应第一个控制器的第一个硬盘的第一片(根)的
原始接口/dev/rdsk/c0d0s2对应第一个控制器的
第一个硬盘的第三片(整个硬盘)的原始接口
/dev/rdsk/c0d1s6 对应第一个控制器和第二个硬盘的第七片(/usr)
的原始接口
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3.3.2检查硬盘使用状况
键入du可以查出每个文件或目录,占用了多少个512字节的硬盘块,若某目录含子目录,则计算块数时,子目录中的内容也算在内。
gtxa%du
2913 ./3.0templates
639 ./Srt
347 ./Howto
1998 ./Clipart
607 ./Newtemplates
38 ./Modemstuff
2004 ./Config/Art
6593 ./Config
13280
gtxa%
上面例子中的输出以512字节的块为单位,欲换算成兆字节(MB),应除以2048,上例中,13280/2048=6.48Mb。
也可以用du –k列出以K为单位的输出结果,使用du –s可以只列出总空间大小而不列详细目录大小。
3.3.3检查硬盘信息(Prtvtoc)
Prtvtoc命令仅对已分配空间的分区产生作用,否则就会显示"No such device or address"的出错信息,使用标准分区命名约定,那么指明第2片就显示整个硬盘的内容。
1、成为超级用户
2、键入prtvtoc /dev/rdsk/cWtXdYsZ显示指定硬盘信息。
gtxa%su
Password:
gtxa#Prtvoc /dev/rdsk/c0tld0s2
*/dev/rdsk/c0t1d0s2 Partition map
*
*Dimensions:
* 512 byres/sector
* 35 sectors/track
* 6 tracks/cylinder
* 210 sectors/cylinder
* 1019 cylinders
* 974 sccessible cylinders
*
*Flags:
* 1: unmountable
* 10: read-only
*
* First
* Partition Tag Flags Sector
0 0 00 0
1 0 00 24150
2 0 00 0
6 0 00 74550
Sector Last
Count Sector Mount Directory
24150 24149
50400 74549
204540 204530
129990 204539
gtxa%
下面讲述怎样修复坏硬盘或重装新硬盘
3.3.3.1将文件存档
如果硬盘坏了,但还可以访问硬盘,那么就把硬盘上的所有文件系统做一下ufsdump。ufsdump命令的用法见第4章。
3.3.3.2将硬盘上文件拷出
若无法对硬盘运行ufsdump,那么找一个同类型硬盘,联入系统,使用dd 命令从坏盘上拷出数据,dd的使用详见dd(1M)手册。
3.3.3.3修复坏块
若硬盘上有坏块, 使用format命令有可能修复磁盘上的坏块,format命令的用法见format(1M)手册。
3.3.3.4重新格式化硬盘
若硬盘上有坏块,重新格式化有时会解决问题,格式化硬盘的命令是format,其用法请见format(1M)手册,请记住格式化硬盘会毁掉磁盘上面的所有数据。
3.3.3.5换下旧硬盘
如果重新格式化和修复坏块都解决不了问题时,就要换下此坏硬盘,方法详见硬盘安装手册。
3.3.3.6加入错误表对硬盘进行格式化、分区及标记
下述步骤用于在新的硬盘上加入错误表、格式化硬盘、对硬盘进行分区和标记。注意:只有加入错误表后方可格式化硬盘,格式化时硬盘上的数据全部被坏破掉,故若硬盘不是新的,一定要保证在格式化前将数据备份出来。
1、 成为超级用户;
2、 键入format命令,显示各个硬盘清单;
AVAILABLE CISK SELSETIONS:
0.c0t0d0 at scsibus0 slave 24
sd0;
3、 从显示的清单中选择新硬盘的号,显示以"format>;"为提示符的format菜单;
4、 键入defect
5、 键入primary原来的错误表就被加到硬盘中;
defect>;primary
Extracring primary drfect list...Extraction complete.
Current Defect list updated.\
total of 30 defdcts.
6、 键入quit回到format>;提示符
7、 键入format开始格式化硬盘,一个容量为10MB的硬盘格式化10分钟,硬盘容量越大,格式化时间越长;
8、 当format>;提示符又出现了时,键入partition
9、 重建与损坏的硬盘的分区相匹配的分区表;
10、 键入label硬盘被标记好;
11、 键入quit回到format>;提示符下;
12、 再键入quit回到shell提示符下。
gtxa%su
Password:
#format
Searching for disks...done
Extraction complete.
of 30 defects.
AVAILABLE DISK SELECTIONS:
O.sd0 at esp0 slave 24
sd0:
1.sd0 at esp0 slave 16
sd2:
Specify disk (enter its number):1
selecting c0t0dd0
[disk formatted]
formAT MENU:
disk -select a disk
type'-select (define) a disk type
partition'-select (define) a partition table
current'-describe the current disk
format'-format and analyze the disk
repair'-repair a defective sector
label-write label ti the disk
analyze'-surface analysis
defect'-defect list management
backup'-search for backup labels
verify'-read and display labels
save'-save new disk/partition defintions
inquiry'-show vendor,product and revision
volname'-set 8-character volume name
quit
format>;defect
defect>;primaty
Extracting primary defect list...Extraction complete.
Current Defect list updated.total of 30 defects.
defect>;quit
format>;format
format>;partition
PARTITION MENU:
0. - change'0'partition
1. - change'1'partition
2. - change'2'partition
3. - change'3'partition
4. - change'4'partition
5. - change'5'partition
6. - change'6'partition
7. - change'7'partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
quit
partition>;
partition>;label
partition>;quit
format>;quit

3.3.3.7重建文件系统(newfs)
硬盘经过格式化,分区和标记以后,就可以在上面建立ufs文件系统, 在重建原已存在的ufs文件系统时,必须先将此系统卸下(unmount)。
重建文件系统需依下列步骤:
1、 成为超级用户;
2、 键入newfs /dev/rdsk/cWtXdYsZ
系统提问是否继续。注意: 必须保证设备名中的分区号正确,否则会将其它分区中的内容删掉。
3、 键入"y"确认,newfs命令使用优化的缺省值创建文件系统。
下面例子在/dev/rdsk/c0t3d0s7上创建一个文件系统。
gtxa%su
Password:
#newfs /dev/rdsk/c0t3d0s7
newfs: constuct a new file system /dev/rdsk/c0t3d0s7(y/n)?y
/dev/drsk/c0t3d0s7: 163944 seotors in 506 cylinders of 9 tracks, 36 sectors 83.9MB in 32 cyl groups(16c/g,2.65MB/g,1216i/g)
super-block backups (for fsck-b#)at:
32. 5264. 10496. 15728. 20960. 26192. 31424. 366656. 41888.
47120. 52352. 578584. 62816. 68048. 73280. 78512. 82976. 88208.
93440. 98672. 103904. 109036. 114368. 119600. 124832. 130064.
1352696. 140528. 145760. 150992. 156224. 161456.

3.3.3.8在临时安装点安装文件系统(mount)
键入mount /dev/dsk/cWtXdYsZ /mnt文件系统安装到临时安装点/mnt上,安装硬盘时,使用块设备目录(/dev/dsk),而不是原始设备目录。
3.3.3.9向文件系统转储文件(ufsrestore)
下列步骤用于恢复最新的完整备份,然后由最低级到最高级依次恢复增量备份。
1、 键入cd /mnt;
2、 将磁带置于写保护状态;
3、 将0级磁带的第一卷插入磁带机;
4、 键入ufsrtore rvf /dev/rmt/若有多卷磁带需恢复,则在出现提示时插入下卷,这样就恢复了0级磁带;
5、 将0磁带取出,将下一最低级别的磁带插入,记住从0级磁带开始恢复,直到最高级;
6、 键入ufsrtore rvf /dev/rmt/则下一级别的磁带被恢复;
7、 对每卷磁带重复步骤5、6;
8、 键入ls命令;
9、 显示文件和目录列表,确认所有文件都已恢复;
10、 键入rm restore symtable删去为恢复而创建的restore sysmtable文件。
3.3.3.10自临时装入点拆卸文件系统(umount)其方法如下:
1、键入cd /
2、键入umount /mnt将文件系统自临时安装点卸下。
3.3.3.11检查文件系统的不一致性(fsck)
键入fsck /dev/rdsk/cWtXdYsZ本命令检查文件系统一致性。
3.3.3.12对恢复文件系统做0级备份
由于ufsrestore命令改变文件的位置及inode的分配,所以对新建的文件系统应立即做备份。
1、将具有写权限的新磁带插入磁带机;
2、键入ufsdump ouf /dev/rmt/
3.3.3.13在永久安装点安装文件系统(mount)
键入mount /dev/dsk/cWtXdYsZ则恢复的文件系统被装上并可以使用了。


第4章、文件系统管理
本章将介绍: 文件系统的类型、缺省的SunOS 5.x文件系统、虚拟文件系统表(/etc/vfstab)、文件系统管理命令、如何使文件系统有效、检测文件系统数据一致性(fsck)、备份与恢复文件系统
文件系统是用于查找和存贮文件的目录结构,文件系统这一术语可有下列不同的含义:
;描述由根目录向下的整个文件树
;描述文件系统的特定类型:磁盘文件系统、网络文件系统以及伪文件系统
;描述硬盘和其它存贮设备的数据结构
;描述安装在主文件树中可被访问的某一部分文件树的结构
通常你可通过上下文判断文件系统具体是哪个含义。
SunOS 5.x系统软件采用了虚拟文件系统(VFS)结构,这一结构为不同类型的文件系统提供了一个标准接口,核心处理基本操作时,如: 读、写、列表文件等,不需要用户或是程序知道具体的文件系统类型。
文件系统管理命令提供了一个公共的接口,这一接口可用于管理不同类型的文件系统,文件系统管理命令由两部分组成: 普通命令和针对每一类文件系统的特殊命令,普通命令适用于大多数文件系统,特殊命令只适用于某一类文件系统。
系统管理的重要任务之一是管理SunOS 5.x文件系统,理解复杂的文件系统便于更有效地管理文件系统,这一章介绍下面几方面的内容:
*文件系统类型
*缺省的SunOS 5.x文件系统
*虚拟文件系统表(/etc/vfstab)
*如何使用户的本地和远程文件系统有效
*备份与恢复文件系统
4.1文件系统类型
SunOS 5.x系统软件支持三种类型的文件系统:
*磁盘文件系统
*网络文件系统
*伪文件系统
4.1.1磁盘文件系统
磁盘文件系统存贮在硬盘、CD-ROM以及软盘等物理介质中,磁盘文件系统可以采用不同的格式进行读写操作,这几种格式是:
*ufs,UNIX文件系统(基于BSD Fat File系统,BSD 4.3 Tahke版提供),它是SunOS 5.x系统软件中缺省的磁盘文件系统。
*hsfs,High Sierra and ISO9660文件系统,High Sierra是第一个CD-ROM文件系统,ISO9660是一官方标准,hsfs文件系统用在CD-ROM上,是只读文件系统,SunOS 5.x hsfs支持RockRidge扩展,该扩展提供除可写性和硬链接以外的所有ufs文件系统语义和文件类型。
*pcfs,PC文件系统,该文件系统可以存取微机上基于DOS格式软盘上的数据和程序。
在SunOS 5.x系统软件中,没有包含由系统V版本提供的传统的System V(S5)文件系统,这是由于此文件系统最多为64,000个文件;文件名最长14个字符和分配限额(quota)等限制造成的。
每一种类型的磁盘文件系统通常与某一特定的存贮介质相对应:
*ufs与硬盘和其它介质(如: 磁带,CD-ROM,软盘)相对应:
*hsfs与CD-ROM相对应
*pcfs与软盘相对应
这些对应也并不是绝对的,如: ufs文件系统也可以安装在CD-ROM和软盘上。
4.1.2网络文件系统
网络文件系统是指可通过网络进行访问的文件系统,典型的基于网络的文件系统是指安装在一个系统上,可由其它系统通过网络进行访问的文件系统,基于网的文件系统有:
•;nfs----网络或分布式文件系统
•;rfs----远程文件共享
SunOS 5.x缺省的分布式文件系统是nfs。管理分布式文件系统是通过共享文件系统(从服务器输出)或者是将文件系统到各个系统中实现的,详细内容请参见后面的"使文件系统有效"一节。
4.1.3伪文件系统
伪文件系统是虚拟的或基于存贮器的文件系统,它提供访问特殊的核心信息和功能,伪文件系统并不需要文件系统盘空间,一些伪文件系统可以使用物理盘中的交换区,例如临时文件系统。
4.1.3.1临时文件系统(tmpfs)
临时文件系统(tmpfs)利用本地存贮器进行盘的读写,所以访问tmpfs文件系统的文件比访问ufs文件系统中的文件快得多,临时文件系统中的文件不是永久的,当文件系统被拆掉、系统关机或重新启动时,它们就被自动删掉。
SunOS 5.x目录中的缺省文件系统类型是tmpfs,与ufs类型的/tmp文件系统一样,可以将文件拷贝或移动到tmpfs类的/tmp文件系统中,或是从其中拷出,移出到其它的目录中。
使用tmpfs文件系统节省了本地盘或网络读写临时文件的开销,所以提高了系统性能,例如: 编译程序时生成很多临时文件,当使用这些文件时,操作系统产生大量的磁盘或网络的输入和输出请求,利用临时文件系统事先保存这些临时文件,可以明显地加快 文件的创建、存取和删除的速度。
tmpfs文件系统利用交换区做为临时存贮区,如果带有tmpfs文件系统的系统没有足够的交换区,可能会产生下面两个问题:
*象一般的文件一样,tmpfs文件系统没有可用空间;
*由于tmpfs申请分配交换区存放数据(如果必要的话),有些程序就可能会因为没有足够的交换区而不能执行。
4.1.3.2循环文件系统(lofs)
用循环文件系统(lofs)可创建一个新的虚拟的原文件系统,然后用另一个路径名来存取文件,例如,可对/tmp/newroot目录进行循环安装 (loopback mount),整个文件系统,包括任何从nfs服务器上安装的文件系统,看起来就像在/tmp/newroot下被复制了,全部文件可以用以/开始的路径 进行存取;或者用以/tmp/newroot开始的路径名进行存取,两者都一样,直到另一文件安装到/tmp/newroot或其子目录中。
4.1.3.3进程文件系统(procfs)
进程文件系统(procfs)驻留在内存中,/proc目录中有一活动进程号的清单,ps等命令会用到/proc目录中的信息,调试器或其它开发工具也可能通过文件系统调用来访问这些过程的地址和空间,下面例子列出了/proc目录中的一部分内容:
gtxa%ls -l /proc
total 144944
-rw-------1root root 0 Dec 19 15:45 00000
-rw-------1root root 196608 Dec 19 15:45 00001
-rw-------1root root 0 Dec 19 15:45 00002
-rw-------1root root 1028096 Dec 19 15:46 00073
-rw-------1root root 1445888 Dec 19 15:46 00091
-rw-------1root root 1142784 Dec 19 15:46 00093
-rw-------1root root 1142784 Dec 19 15:46 00095
。。。
-rw-------1ignatz staff 1576960 Dec 19 15:50 00226
-rw-------1ignatz staff 192512 Dec 19 15:51 00236
-rw-------1ignatz staff 1269760 Dec 19 15:52 00240
-rw-------1ignatz staff 6090752 Dec 19 15:52 00241
-rw-------1ignatz staff 188416 Dec 19 15:52 00247
-rw-------1ignatz staff 2744320 Dec 19 15:52 00256
注意: 千万不要删proc目录中的文件,希望你不要用删除/proc目录中进程的方法来杀掉进程,关于杀掉进程的方法,请参见第一章,记住/proc目录不占用磁盘空间,所以没有必要删除/proc目录下的文件,/proc目录不需任何系统管理。
4.1.3.4别的伪文件系统
下面列出了伪文件系统的其它类型,注意并不需要对这些文件系统进行管理。
•;fifofs(先进先出文件系统)命名管道文件,用于进程对数据的公共访问。
•;fdfs(文件描述符文件系统)提供用文件名打开文件,这是通过文件描述符来实现的。
•;namefsSTREAMS使用它在文件顶端对文件描述符动态安装。
•;specfs(特别文件系统)提供对特别的设备和块设备的访问。
•;swapfs用mkfile和swap命令建立附加的交换区时,核心所用的文件系统。
4.2 SunOS 5.x缺省的文件系统
SunOS 5.x文件是以"/"根目录开始,向下扩展为一系列目录的层次结构,SunOS 5.x系统软件安装了一些缺省的目录,并按一定的约定将相同类型的文件放在一起,表4.1介绍了缺省的SunOS 5.x文件系统,并对每一文件系统类型进行相应的说明。
缺省的SunOS 5.x文件系统
文件系统 文件系统类型 说明
/ ufs 整个文件树的顶,根目录包含系统操作的关键目录和文件,如:核心(/kernel/unix),设备驱动程序和启动系统(boot)的程序,根也包括本地和远程文件系统到该文件树的安装点目录。
/etc ufs 包括用于系统管理的系统文件。
/usr ufs 包括可和其它用户共享的系统文件和目录,只可运行于某类系统上的文件放在/usr目录中(如:SPARC可执行文件),可运行于所有系统上的文件(如: 联机手册)放在/usr/share 目录中。
/home nfs,ufs 用户主目录的安装点,它存贮用户的工作文件,缺省时,/home是一个自动安装的文件系统,单机系统中,/home可以是本地磁盘中的一个ufs文件系统。
/var ufs 包含本地系统中经常变化和增长的系统文件和目录,包括logs、vi和ex备份文件、uucp文件、邮件和日历文件等。
/opt nfs,ufs 可选的安装点,用于安装第三方厂家的软件,在某些系统中,/opt可以是本地盘上的ufs文件系统。
/tmp tmpfs 临时文件,当系统重新启动或关机时,被清除。
/proc procfs 包含按进程号排列的活动的系统进程清单。
根(/)和/usr文件系统中是必须的,/usr文件系统中最基本的命令(如: mount)也包含在根文件系统中,这样便于系统启动到单用户状态时能使用这些命令。
4.3虚拟文件系统表(/etc/vfstab)
每一系统均有一虚拟文件系统表(即/etc/vfstab),它列出了系统中存在的全部磁盘区文件系统,该表还列出了每一个文件的安装点和可选项, SunOS 4.x中, 文件系统表是/etc/fstab,现在/etc/vfstab代替了/etc/fstab,但功能却是相似的,缺省的文件系统配置表 (/etc/vfstab)依赖于系统软件安装时所做的选择,对每个系统,通过编辑/etc/vfstab文件可自动地安装本地的ufs文件系统、必需的 nfs文件系统和其它的文件系统。
下面介绍/etc/vfstab表的内容,并说明如何编辑和使用该文件,文件系统表是ASSCII文件,注释行以#开头,下面的/etc/vfstab文件说明了:系统中有两个硬盘,并安装了两个nfs文件系统说明。
#more /etc/vfstab
#device device mount FS fsck auto- mount
#to mounto fsck point type oass mount? options
/dev/dsk/c0t0d0s0 /dev/dsk/c0t0d0s0 / ufs l no -
proc - .proc proc - no -
/dev/dsk/c0t0d0s1 - - swap - no -
swap - /tmp tmpfs - yes -
/dev/dsk/c0t0d0s6 /dev/dsk/c0t0d0s6 /usr ufs 2 no -
/dev/dsk/c0t3d0s7 /dev/dsk/c0t3d0s7 /files7 ufs 2 no -
cheers: /export/svr4/,man.ja5 - /usr/man nfs yes hard
cheers: /export/svr4/openwin V3.ja4 - /usr/openwin nfs yes
hard

注意:/和/usr的自动安装(automount)域说明为no,这是因为在mountall命令运行前,在系统启动时/和/usr已被安装上了,如果 将此值定义为yes,则mountall命令试图再去安装这两个已经安装的文件系统。/etc/vfstab文件中的每个域必须有值,若无值(即值为 no)必须填上一个"-"号。
/etc/vfstab文件的域
域 说明
Device to mount 可安装的设备有:
*本地ufs文件系统的块设备 (如:/dev/dsk/c0t0d0s0)
*远程文件系统的资源名(如nfs文件系统myserver:/export/home)
磁盘的swap区名(如:/dev/dsk/c0t4d0s1)
*/proc目录和proc文件系统
*hsfs类型的CD-ROM
*pcfs和ufs类文件系统的软盘dev/diskette, 这一域也用于说明swap文件系统
Device to fsck 对应于则域说明的文件系统的原始(字符)特别设备(例如:/dev/dsk/c0t0d0s0)定义了fsck使用的原始接口,当没有对应的设备时用“-”号说明,例如只读文件系统或网络文件系统。
Mount point 缺省的安装点目录(如/usr目录下安装/dev/dsk/c0t4d0s6)。
FS type 由域说明的文件系统类型。
fsck pass Fsck检测次数,用于决定是否需要检测文件系统,当该域是"-"号时不检测文件系统,当该域的值大于1时,则检查文件系统;等于0时,则检查非ufs文 件系统,而不检查ufs文件系统,当fsck作用多个ufs文件系统,而fsck pass值大于1,并且使用了-op选择项时,fsck 自动以最高的效率并行检测不同盘上的文件系统,当fsck pass值为1时,则顺序检测文件系统,否则fsck pass值无效。
Automount? 系统启动时,若需mountall命令自动安装文件系统,则为yes,否则为no.注意该域与自动安装软件毫无关系。
Mount options 安装文件系统统的选择项列表,它们以","号分隔(无空格),"-"号说明无任选项,任选项的值请参见mount-(1M)手册。
4.3.1 文件系统表项的建立
下面建立文件系统表的步骤:
1、 进入超级用户;
2、 用vi等命令编辑/etc/vfstab文件;
3、 加入各项。用空格或Tab键分隔其中每个域,如果某个项没有值,则填上”-”号;
4、 保存该文件;
5、 检查安装点目录是否存在,不存在则建一个:改变目录到需要安装的地方然后键入mkdir
6、 键入mount 此项被安装上
下面的例子说明了将/dev/dsk/c0t3d0s7盘区作为ufs文件系统安装到/test1目录中,安装任选项(读/写)为缺省值,fsck设备是/dev/rdsk/c0t3d0s7字符设备,fsck pass值为2,说明该文件系统不采用顺序方式检测
#device device mount FS fsck auto- mount
#to mount to fsck point type pass mount? options
#/dev/dsk/c0t3d0s7 /dev/rdsk/c0t3d0s7 /test1 ufs 2 yes -
下面的例子说明将gtxa系统的/export/man目录作为nfs文件系统安装到/usr/man上,对nfs文件系统不必说明fsck devices和fsck pass域,这一例中,安装任选项是ro(只读)软方式,为提高可靠性,对读/写的nfs文件系统应采用硬式。
#device device mount FS fsck auto- mount
#to mount to fsck point type pass mount? options
gtxa:/export/man - /usr/man nfs - yes ro.soft
下面的例子说明将CD-ROM安装到/hsfiles目录上,一般情况下CD-ROM文件是只读的,所以安装任选项应设置为ro,目前流行的是CDROM 自动安装,所以automount项为yes,由于hsfs是只读的,所以fsck device和fsck pass均为无值。
#device device mount FS fsck auto- mount
#to mount to fsck point type pass mount? options
/dev/dsk/c0t6d0s2 - /hsfiles hsfs - yes ro
下面的例子说明将软盘安装到/pcfiles上,autmount项为无值,是由于经常在命令行中安装和拆卸,pcfs文件系统不支持fsck,所以fsck device和fsck pass均定为无值。
#device device mount FS fsck auto- mount
#to mount to fsck point type pass mount? options
/dev/diskette - /pcfiles pcfs - no rw
下面例子说明安装根文件系统到循环安装点/etc/newroot上,automount项为yes,fsck device项和fsck pass项为无值,循环文件系统必须在组成它的文件系统安装好后才能安装,要确保循环项是/etc/vfstab 文件中的最后一项,使其跟随在它所依赖的项的后面。
#device device mount FS fsck auto- mount
#to mount to fsck point type pass mount? options
/ - /tmp/newroot lofs - yes -
4.4文件管理命令
这一节将介绍文件系统管理命令及其语法规则、大部分文件系统管理命令包含普通文件系统命令和特别文件系统命令两部分。普通文件系统命令,可加到特别文件系 统部分一起使用,表4.3列出了普通文件管理命令,这些命令在/usr/sbin目录中,它们大部分有一个对应的特别文件系统命令。
注意:在要直接使用特别文件系统命令,如果你使用了一个文件系统不支持的操作,普通命令会显示出错信息::Operation not applicable for FSType。
4.4.1普通命令语法规则
大部分普通命令的语法是:
[-F][-v][][-o] [][operands]
普通文件系统管理命令
命令 说明
clri(1M) 清除inode
df(1M) 报告磁盘空间、空闲磁盘块和文件数
ff(1M) 列出一个文件系统的文件名和统计信息
fsck(1M) 检测一文件系统的完整性,并修复发现的损坏
fsdb(1M) 文件系统调试器
fstyp(1M) 确定文件系统的类型
labelit(1M) 当文件系统拷贝到磁带上时,列出或提供文件系统的标号(适用于volcopy命令)
mkfs(1M) 建立新的文件系统
mount(1M) 安装文件系统和远程资源
mountall(1M) 安装文件系统表中说明的全部文件系统
ncheck(1M) 用inode号产生路径名清单
umount(1M) 拆卸文件系统和远程资源
umountall(1M) 拆卸文件系统表说明的全部系统
volcopy(1M) 产生文件系统映象
4.4.2普通文件系统命令和特别文件系统命令手册
普通文件系统命令和特别文件系统均有手册,在手册中特别命令紧接普通命令。查看特别命令,在普通命令名后附加一个下划线和文件系统类型的缩写即可, 例如:为了查看安装hsfs文件系统特别命令手册,键入
man mount -hsfs
lofs pcfs 以及procfs的文件系统没有mount特别命令手册
4.4.3利用文件系统命令确定文件系统类型
普通文件系统命令确定文件系统类型的步骤是:
1、 如果有-F选择项,由它决定.
2、 通过匹配/etc/vfstab中的项和特别设备来决定任选项,例如:fsck 首先查找与fsck device域的一个匹配,如果未找到,则查设备域。
3、 对本地文件系统使用/etc/default/fs中说明的缺省值,对远程文件系统使用/etc/dfs/fstypes中说明有缺省值。
普通文件系统命令句法描述
任选项 说明
-F 说明文件系统类型,如果不使用该任选项,则寻找/etc/vfstab表中与特别原始设备或安装点相匹配的项,否则:从/etc/default/fs取本地文件系统缺省值,从/etc/dfs/fstypes中取远程文件系统缺省值。
-v 回显完整的命令行,显示行可能包括来自/etc/vfstab中的附加信息,用这一任选项来验证命令行,它并不执行命令。
各类文件系统共同的选择项。
-o 特定某类文件系统的任选项,其格式是跟一空格,然后是由","号分隔并且无空格插入的一系列 [=]对。
说明文件系统,给出存贮文件系统磁盘的安装点或设备文件和名称,对一些命令,文件必须是原始(字符)设备.对一些命令,则必须是块设备,关于盘的命名请参 见第三章。这个参数有时用来做关键字与/etc/vfstab表中某项相匹配,从而得到别的信息,大多数情况,这一参数是需要的,并且紧跟在之后,然而当 你希望一个命令作用于/etc/vfstab 文件中说明的所有文件系统时,则不需要这一参数。
4.4.4文件系统类型
如果你想确定某文件系统类型,可以从上述普通命令所使用的文件中来获取信息。
*文件系统表(/etc/vfstab)中的FS类型域
*对本地文件系统使用/etc/default/fs文件
*对远程文件系统使用/etc/dfs/fstypes文件
为了从/etc/vfstab中找出文件系统类型,键入grep /etc/vfstab,安装点信息显示如下:
gtxa%grep /tmp /etc/vfstab
swap - /tmp tmpfs - yes -
gtxa%
如果vfstab中不含要找的文件系统项,则用下面的命令决定文件系统类型。为了查出安装的文件系统类型,键入grep /etc/mnttab,安装点的信息显示如下:
gtxa% grep /home /etc/mnttab
gtxapid129) /home nfs fo ,ignore,map=/etc/auto-home,indirect,dev21c0004693606637
bigriver:/export/home/bigriver/tmp-mnt/home/bigriver nfs rw,dev21c0005695409833
gtxa%
或键入mount所有安装的文件系统及其类型即可列出:
gtxa%mount
/on/dev/dsk/cot3doso read/write on Tue Dec 24 12:29:22 1991
/usr on /dev/dsk/cotldos6 read/write on Tue Dec 24 2:29:22 1991
/proc on /proc read/writ on Tue Dec 24 12:29:22 1991
/usr/man on swsvr4-50:/export/svr4/man read/write/remote on Mon Dec30 12:44:11 1991
/usr/openwin on swsvr4-50:/export/svr4/openwinV3 read/write/remoteon Mon Do 30 13:50:54 1991
/tmp on swap o on Wed Jan 8 13:38:45 1992
/mnt on swsvr4-50:/export/svr4 read/write/remote on Fri Jan 10 15:51:23 1992
/tmp-mnt/home on bigriver:/export/home read/write/remote on Tue Jan14\09:24:53 1992
gtxa%
或者用下列步骤:
1、 键入devnm 原始设备名显示出来;
2、 成为超级用户;
3、 键入fstyp /dev/rdsk/cWtXdYsZ文件系统的类型显示如下:
gtxa% devnm /usr
/dev/dsk/cotldos6 /usr
gtxa%su
Password:
# fstyp /dev/rdsk/cot3doso
ufs
#
4.5如何使文件系统有效
为了使已创建的一个文件系统有效,必须将其进行安装。一个已安装的文件系统,就意味着它被加到系统目录树中指定的某个安装点上,并且是有效的。根文件系统总是被安装好的。其它任何文件系统可连到根文件系统上或从根中拆掉。
可以用下列步骤安装本地文件系统:
在/etc/vfstab(虚拟文件系统表)文件中加一项。/etc/vfstab中包含的一系列文件系统,在系统以多用户方式启动时被自动安装。/etc/vfstab文件已在前面介绍过。
在命令行中用mount命令安装。
其它系统访问某文件系统之前,必须将该文件系统安装到网络服务器文件系统中,并使其成为可共享的文件系统(输出exported)。后面将会介绍怎样共享服务器文件,当服务器上的文件系统可共享时,客户则可以以下列三种方式将共享文件系统安装为nfs系统:
*在/etc/vfstab表中加一项,以便系统以多用户方式启动时,能够自动安装该文件系统.
*使用自动安装程序。当用户进入或退出一个自动安装目录时,自动安装程序就会自动安装或拆卸对应的文件系统.
*在命令行中使用mount命令.
4.5.1安装与拆卸
文件系统可加到系统的目录层次结构中,这一过程称为安装(mounting),为了安装一个文件系统需要:
*成为超级用户。
*本地系统的一个安装点,安装点是指与安装的文件系统相联结的一个目录。
*要安装的文件系统资源名。(例:/usr)
一般情况,本地硬盘总是包含在/etc/vfstab文件中,而服务器上的软件,如openwindows联机手册或服务器上的主目录,是在/etc/vfstab中安装还是自动安装,取决于你所采用的策略。
当安装文件系统时,只要文件系统一安装好,那么安装点上原来存在的任何文件或目录就不再有效。被屏蔽掉的文件并不永久受安装过程的影响,当文件系统拆卸后,原来的文件或目录又恢复为有效。安装目录最好是采用空目录,这样不会屏蔽掉原来的文件。
系统在/etc/mnttab(mount表)文件中记录了已安装的文件系统。可以用cat或more命令列出mount表的内容。但决不能编辑修改mnttab文件。(/etc/vfstab是可以编辑的)。下面是一个mount表的例子:
gtxa%more /etc/mnttab
/dev/dsk/cot3doso/ufs rw,suid 693186371
/dev/dsk/cotldos6/usr ufs rw,suid 693186371
/proc/proc proc rw,suid 693186371
swap/tmp tmpfs,dev=0 6931863712
swsvr4-50:/expor/svr4/openwinV3/usr/openwin nfs rw,dev=21c0000 6963186443
swsvr4-50/export/svr4/man/usr/man nfs rw,dev=22c0000 693186447
gtxapid127)/nse nfs
ro,ignore,map=/etc/auto.nse,indirect,dev=21c0002 69318449
gtxapid127)/net nfs ro,ignore,map=-
hosts,indirect,dev=21c0003 693186449
gtxapid127)/home nfs
ro,ignore,map=/etc/auto-home,indirect,dev=21c0004 693186449
bigriver:/export/home/bigriver/tmp-mnt/home/bigriver nfs rw,dev=21c0005 693186673
gtxa%
4.5.1.1安装与拆卸文件系统命令
表4.5列出了/usr/sbin目录下的安装和拆卸文件系统命令。
Mount命令不能安装一个数据不一致的读/写文件系统,所以当mount命令或mountall命令返回一个出错信息时,就需要去检查文件系统。
表4.5安装与拆卸文件系统命令
命令 说明
mount(1M) 安装文件系统和远程资源
Mountall(1M) 安装文件系统表中说明的全部文件系统
Umount(1M) 拆卸文件系统及远程资源
Umountall(1M) 拆卸文件系统表中说明全部文件系统

文件系统忙时,umount命令不会拆卸它。所谓文件系统忙是指用户正在该文件系统的某个目录中操作,或是某个程序找开了该文件系统中的文件。
4.5.1.2查找已安装的文件系统
为了显示已安装的文件系统,可键入mount命令,这时当前安装的文件系统将显示出来
gtxa%mount
/on/dev/dsk/c0t0d0s0 read/write/setuid on Wed Oct 23 10:08:501991
/usr on /dev/dsk/c0t0d0s6 read/write/setuid on Wed Oct 23 10:08:501991
/proc on /proc read/write/setuid on Wed Oct 23 10:08:50 1991
/tmp on swap on wed Oct 23 10:08:50 1991
/usr/openwin on cheers:/export/openwin hard/remote on Wed Oct 23 10:11:08 1991
/home on blowuppid136)read only/intr/map=auto.home/indirect on Wed Oct 23 10:11:10 1991
/vol on blowuppid136)read only/intr/map=auto.vol/indirect on Wed Oct 23 10:08:50 1991
/nse on blowuppid136)read only/intr/map=/etc/auto.nse/indirecton Wed Oct 23 10:08:50 1991
gtxa%

4.5.1.3安装/etc/vfstab文件中的全部文件系统
下面是安装/etc/vfstab文件中全部文件系统的步骤:
1、 进入超级用户;
2、 键入mountall /etc/vfstab中所有的本地文件系统被安装上。
gtxa%su
Password:
#mountall
#
4.5.1.4安装特定类型的文件系统
下面说明/etc/vfstab文件中,特定类型的文件系统的安装步骤,最常见的是本地硬盘的ufs文件系统和网络文件系统nfs。
1、 进入超级用户
2、 键入mountall -F,/etc/vfstab中的此种类型的文件系统被安装上。
下面是安装nfs类型文件系统的例子。
gtxa%su
Password
#mountall -F nfs
#
4.5.1.5安装单个文件系统(mount)
安装/etc/vfstab中单个文件系统的步骤是:
1、进入超级用户:
2、键入mount
gtxa%su
Password:
#mount /opt
#
4.5.1.6拆卸所有的远程文件系统(umountall -F nfs)
下面是拆卸远程文件系统的步骤:
1、进入超级用户;
2、键入umountall -F nfs,拆掉/etc/vfstab中全部远程文件系统。
gtxa%/su
password:
#umountall -F nfs
#
注意:如果你要拆掉全部文件系统(用umountall命令且不带参数),系统就不能再使用。必须重新启动。
4.5.1.7拆卸个别的文件系统(umount)
不能拆卸正在使用的安装目录,若想拆卸一个正在使用的目录,必须让所有的用户转出这一目录。
1、进入超级用户;
2、如果必要,让用户转出你要拆除的目录;
3、键入umount 指定的文件系统就被拆除了。
下面是用mount命令查找安装点,并拆掉这一安装点的例子:
gtxa%mount
/on/dev/dsk/c0t0d0s0 read/write/setuid on Wed Oct 23 10:08:501991
/usr on /dev/dsk/c0t0d0s6 read/write/setuid on Wed Oct 23 10:08:501991
/proc on /proc read/write/setuid on Wed Oct 23 10:08 50 1991
/tmp on swap on wed Oct 23 10:08:50 1991
/usr/openwin on cheers:/export/openwin hard/remote on Wed Oct 23 10:11:08 1991
/home on blowuppid136)read only/intr/map=auto.home/indirect on Wed Oct 23 10:11:10 1991
/vol on blowuppid136)read only/intr/map=auto.vol/indirect on Wed Oct 23 10:08:50 1991
/nse on blowuppid136 read only/intr/map=/etc/auto.nse/indirecton Wed Oct 23 10:08:50 1991
[41] gtxa%su
Password:
#cd /
#umount /home
#
4.5.2自动安装程序
可以通过nfs实现共享文件系统的安装,这种方法称为自动安装(automounting)。自动安装程序在后台运行,根据需要安装或拆卸远程目录。正在 运行自动安装程序的客户系统,一旦用户存取自动安装程序可访问的远程文件或目录,自动安装程序就自动将用户要访问的文件系统安装到该用户系统。只要用户在 远程目录中或正在使用其中的文件,远程目录或文件就是安装着。如果一定的时间内没访问远程文件系统,则它自动地被拆掉。自动安装程序根据需要自动地安装或 拆卸文件系统,除了进入或转出目录的操作外,不需用户进行任何干预。
可以用自动安装程序安装一些文件,用/etc/vfstab文件和mount命令安装另外一些文件,对于无盘节点,/etc/vfstab表中必须有/ (根),/usr,/usr/kvm几项,共享文件系统应一直保持有效,所以不要用自动安装程序安装/usr/share。
自动安装程序根据映象表中的说明对文件系统进行操作,这些映象表可作为NIS,NIS+或本地文件来维护。自动安装程序映象表可说明文件的多个远程位置。 由于采用了这种方法,当其中一个服务器出问题时,自动安装程序会再从其它机器上安装,在映象表中可为每一服务器分配一个加权因子,用它来决定哪个服务器对 映象表中的资源有较高的优先级。
当系统进入运行第三级(run level 3)时,将自动启动自动安装程序。当然也可以从命令行中启动自动安装程序。缺省时,sunos5.x系统软件自动安装/home。(如何建立和管理自动安装程序的内容已超出本手册的范围)。
4.5.3共享服务器文件
nfs是一个分布式文件系统,通过nfs可将运行不同操作系统的机器联结在一起例如,运行DOS的系统可与运行UNIX的系统共享文件。
nfs使得文件系统的实际物理位置与用户无关。用户可通过nfs查看所有相关文件,而不管它们的位置。由于采用了nfs共享文件,用户只需在一个系统的盘 中放一个拷贝,其它系统可以通过网络进行存取,而不需在每个系统中均放一个拷贝。在nfs下,远程文件系统与本地文件系统看起来没什么区别,一个系统称为 nfs服务器是指该系统上的某些文件系统可通过网络共享或输出(export),服务器内保留着当前已输出的文件系统表及其存取权限(如读/写或只读)。
用户可以通过网络共享其它机器(通常是服务器)的资源,如文件、目录或设备等,例如可以与其它机器上的用户共享第三方厂家的应用软件。
当你准备让其它用户共享你的资源时,必须保证其它的远程系统安装你的资源。
下面的方法可实现资源共享:
1、用share或shareall命令。
2、在/etc/dfs/dfstab(分布式文件系统表)文件中加一项。缺省的/etc/dfs/dfstab文件给出了资源共享的语法规则和实例:
gtxa%more /etc/dfs/dfstab
#place share(1M) commands here for automatic execution
# on entering init state 3.
#
# share [-F fstype][-o options][-d""][resource]
# .e.g;
share -F nfs -o rw=engineering-d"home dirs"/export/home2
share -F nfs/var/mail
gtxa%
4.6检查文件系统的数据一致性(fsck)
ufs文件系统根据一些内部表来来跟踪inode、已用掉的块和可用的块,当这引起内部表与磁盘的数据没有适当同步(synochronized)时,就产生了不一致,这时就需要修复文件系统。
下面是操作系统突然终止时使文件系统毁坏或产生不一致的几种情况:
*电源出故障
*系统故障性阻塞(unplugging)
*不正常的关机
*核心中的软件错误
文件系统损坏虽然严重,但并不经常发生,系统启动时会自动检测文件系统,大部分情况下能修复检测到的问题。
文 件系统检测是用fsck(file system check)程序实现的。fsck命令将已分配的但没有说明其来源的文件和目录放在lost+found目录下,如果该目录不存在,则由fsck建立。如 果lost+found中没有足够的空间,fsck也会自动增大其空间。
下列情况发生时需要检测文件系统:
*文件系统不能安装
*正在使用的文件系统产生问题
*正在使用着的文件系统出现不一致时,控制台窗口会提示出非常醒目的出错信息,严重情况会发生系统瘫痪。使用fsck前请详细阅读fsck(1M)手册。
4.6.1决定文件系统是否需检测
按下列步骤测定文件系统是否需检测:
1、 进入超级用户;
2、 键入fsck –m /dev/rdsk/cWtXdYsZ命令,上述命令通过检查指定的文件系统超级块中的状态标志来判断文件系统是否有问题,是否进一步修复检测。如果省略 了设备参数,/etc/vfstab文件中列出的fsck pass数大于0的全部ufs文件系统均需检测。
下例中说明第一个文件系统需要检测,第二个不需要检测:
#fsck -m /dev/rdsk/c0t0d0s6
**/dev/rdsk/c0t0d0s6
ufs fsck:sanity check:/dev/rdsk/c0t0d0s6 needs checking
# fsck –m /dev/rdsk/c0t0d0s7
* */dev/rdsk/c0t0d0s7
* * */dev/rdsk/c0t0d0s7
* ufs fsck:sanity check:/dev/rdsk/c0t0d0s7 okay
#
4.6.2以交互方式检测文件系统
下面是以交互方式检测文件系统的步骤:
*进入超级用户;
*拆卸文件系统;
*键入fsck,/etc/vfstab文件中fsck pass域值大于0的文件系统全部被检测,也可以和安装点目录或/dev/rdsk/cWtXdYsZ作参数进行检测。检测中任何不一致处将显示出来。
下面的例子中检测/dev/rdsk/c0t0d0s6并校正其不正确的块计数:
#fsck /dev/rdsk/c0t0d0s6
checkfilesys:/dev/rdsk/c0t0d0s6
*Phase1 - Check Block and Sizes
INCORRECT BLOCK COUNT I=2529(6 should be 2)
CORRECT?y
* * Phase 2-Check Pathnames
* *Phase3- Check Connectivity
* *Phase 4-Check Reference Counts
* *Phase 5_Cylinder Groups
Dynamic 4.3 FFFS
929 files,8928 used.2851 free(75 frags,347 blocks.o.6% fragmentation)
/dev/rdsk/cotoos6 FILE SYSTEM STATE SET TO OKAY
*****FILE SYSTEM WAS MODIFIED ********
4.7备份和恢复文件系统
备份是指做文件的拷贝,作为原文件被删除或毁坏时的安全措施,通常是将其拷到可移动的介质中。备份文件后可方便地恢复误删的文件,但最重要的是用于处理严重的硬件故障和其它灾难性故障。
备份文件是最关键的系统管理功能之一,按照一定的步骤和计划实现系统文件的备份有下述三个主要原因:
*确保系统瘫痪时文件系统的完整性;
*防止用户文件被误删;
*作为重新安装系统或修复系统的重要保护措施。
当按计划备份文件系统时,应保证能够将备份文件恢复为适当的当前状态,另外,你可能也想将备份好的文件系统从一个系统传到另一个系统中或做为文档,将文件保存到可移动的介质上,你就能够移动或改变系统上的文件。
按计划备份文件需考虑下面几方面的内容:
*用哪个命令备份文件系统
*用何种介质
*使用什么备份计划
*这一系统中哪些文件对用户是至关重要的
*这些要备份的文件在什么地方:它们是在一个单独的文件系统中吗?
*这些文件经常变化吗?
*当文件丢失或损坏时需要多快恢复?
*为备份文件,相关文件系统可经常拆卸吗?
介绍可能的备份策略已超出本手册范围,参见联机手册ufsdump(1M)命令中提供的转贮(dump)策略。
下面介绍如何用ufsdump命令备份文件,用ufsrestore命令恢复文件。
4.7.1用QIC-150盒式磁带备份文件系统(ufsdump)
为了备份完整的文件系统,所有的用户必须退出,并使系统进入单用户方式。(磁带设备命名的内容请参见第三章"磁带设备命名约定"
可以在磁带设备名之前加从远程驱动器上进行备份和恢复。下面是语法:/dev/rmt/。
例如:远程系统gtxa上的磁带机名是/dev/rmt/0,则远程设备名应为gtxa:/dev/rmt/0。
下列步骤说明如何实现文件系统级(完整)备份:
*键入init s这时系统进入单用户方式,这样就保证了备份全部文件系统时没有用户修改文件系统。
*插入QIC-150磁带。
*键入ufsdump 0 cuf /dev/rmt/ /dev/dsk/cWtXdYsZ。
任选项0说明的0级(全部)备份。C任选项说明是盒式磁带;U任选项更新转贮记录;f任选项说明随后是设备文件名。也可以键入硬盘区代替备份的文件系统,例如用c0t0d0s7代替/files1。
gtxa%su
Password:
# init s
#ufsdump 0 cuf /dev/rmt/0 /dev/dsk/c0t0d0s7
DUMPate of this level 0dump:Wed Mar 11 10:16:53 1992
DUMPate of last level 0 dump:the epoch
DUMPumping /dev/rdsk/c0t3d0s7(/export/home)to/dev /rmt/0
DUMP:mapping (Pass I)[regular files]
DUMP:estimated 956 blocks (478KB)
DUMP:Writing 63 Kilobyte records
DUMP:dumping(Pass III)[directories]
DUMP:dumping (pass IV)[regular files]
DUMP:level o dump om Wed Mar 11 10:16:53 1993
DUMP:956 blocks (478KB)on 1 volume
DUMPUMP IS DONE
#
如果一盒带存不下,则ufsdump命令会提醒你什么时候该换一盒新带。在磁带上标明命令、文件系统名及备份日期等信息。
4.7.1.1实现增量备份
用ufsdump命令可指定不同的备份级别,这样就可只备份那些上次备份过,而又已经修改了的比较低级别的文件,下列步骤说明在最后一次完整的转贮上增量式备份的过程:
1、 使系统进入单用户模式;
2、 进入超级用户;
3、 将磁带放入磁带机中;
4、 键入ufsdump [1-9] ucf /dev/rmt/ /dev/rdsk/ctds在ufsdump参数前加上级数,例如:9级备份,键入9ucf;
5、 执行完ufsdump命令后取出磁带并贴上标签。
4.7.2恢复备份文件系统
ufsrestore命令可以将用ufsdump命令备份的文件拷贝到当前工作目录中,可以用ufsrestore命令重装使用0级备份后使用增量备份的 文件系统,或从任何备份带中恢复一个或多个文件,文件是以原始的所有者、最后的修改时间和模式(许可权)进行恢复的。恢复文件或文件系统之前需要知道:
*需要哪个带或盘;
*备份文件系统的设备名、你使用的磁带设备类型;
*磁带设备名(本地或远程)。
4.7.2.1决定使用哪一备份带
在开始恢复文件或文件系统之前,必须决定使用哪一备份磁带,当需要恢复全部文件系统时,需要最新的0级备份带。同样,如果是部分备份就需要最新的在较高级 别上做的增量备份带,具体情况需要参考你使用的备份计划来确定你需要的级别和磁带号。例如,如果做了0级和9级的备份,就需要0级和9级的最新的备份带。
下面是决定用哪个带恢复单独的文件或整个文件系统的步骤:
1、 向用户寻问有关文件或文件系统丢失的日期,或文件要被复原到的大概时间。
2、 参考你的备份计划找出最后备份的日期,不一定用最新的备份版本恢复。为了恢复文件的适当的版本,要从逆向查看增量备份文件,从最高级看到最低级,从最新的看到最旧的。
3、 如果有用ufsdump -a命令产生的在线存档文件,则键入ufsrestore ta /path/一定要用文件的全程路径,这时存贮的文件和介质就会显示出来。
4、 找出包含备份的介质,要知道存贮介质是找到数月甚至数年所前的备份介质。
5、 这步是可选的,将存贮介质插入驱动器中,键入ufsrestore tf /path/,对一定用完整的路径名。如果一个文件在备份介质中,则显示出它的文件名和inode号,否则显示信息说明此文件不在该介质中。
6、 如果一个带上有多个备份文件,可以用-sn任选项来定位,选择需要的备份文件。例如键入ufsrestore xfs /dev/rmt/05将磁带定位在第五个备份文件上并将其恢复。
4.7.2.2恢复全部备份
下列步骤说明,采用QIC-150盒式磁带恢复一个文件系统的完整备份的过程,注意:这一过程将生成一新的文件系统,并将毁掉盘上原来存在全部文件系统。
1、 进入超级用户;
2、 键入init s系统进入单用户模式,保证了没有人使用你将恢复的文件系统;
3、 键入umount 命令将相应的安装点(mount-point)(例:/files1)拆卸下来;
4、 键入newfs /dev/rdsk/cWtXdYsZ将磁盘区对应的原始设备文件(例如:/de/rsk/c0t0d0s7对应/home)清掉并重建文件系统;
5、 键入mount /dev/dsk/cWtXdYsZ将相应的块文件设备的文件系统(例如:/dev/dsk/c0t0d0s7对应的/home)重新安装在相应的安装点;
6、 键入cd 则进入你希望做恢复的目录中;
7、 插入QIC-150盒式磁带;
8、 键入ufsrestore rvf /dev/rmt/0h将文件系统恢复。
下例说明恢复/files1对应的c0t0d0s7盘区:
gtxa%su
Password:
#init s
#umount /files1
#newfs /dev/rdsk/c0t0d0s7
#mount /dev/dsk/c0t0d0s7 /files1
#cd /files1
#ufsrestore rvf /dev/rmt/0h
4.7.2.3交互式恢复文件
恢复单个文件或目录时,将它们存入临时目录(例如:/var/tmp)是个好方法,经过确认后才执行恢复操作,事实上要确保不会用备份带上的旧版本文件重写已有的新版本。下面是交互式恢复文件的步骤:
1、 进入超级用户;
2、 将磁带写保护;
3、 将备份带放入磁带驱动器中;
4、 键入cd /var/tmp,如果你希望将文件存放在其它目录下,则用相应的目录名代替/var/tmp;
5、 键入ufsrestore if /dev/rmt/,一些提示信息和提示号显示出来;
6、 建立要恢复的文件清单;
7、 用ls命令列出一个目录的内容:
*键入cd 改变目录
*加一个目录名或文件名到将要恢复的文件清单,键入add
*若要删除将要恢复的文件清单中的目录名或文件名,键入delete
*保持当前目录的模式不变,键入setmodes然后键入n并回车;
8、 建完清单后,键入extract,ufsrestore会问你用哪一卷;
9、 键入卷号回车,如果只有1卷,键入1并回车,清单中的文件或目录就被取出并恢复到当前工作目录中;
10、 键入quit则显示shell提示符;
11、 用ls -l命令列出已恢复的文件或目录;
12、 检查文件列表,确保所有文件或目录均被恢复;
13、 用mv命令将文件移到合适的目录中。
下例说明从pubs目录中恢复backup.example和junk文件的过程:
#cd /var/tmp
#ufsrestore if /dev/rmt/0
ufsrestore>;ls
:
lost+found/pubs/
ufsrestore>;cd pubs
ufsrestore>;ls
./pubs:
.Xauthority login
.profile backup.example%
.Xdefaults .mtdeletelog
wastebasket/ core
.cshrc openwin-init
junk/ dead.letter
desksetdefaults .openwin-init.Bak
backup.examples junk
usrestore>;add backupo.examples
ufsrestore>;add junk
ufsrestore>;setmodes
set owner/mode for "."?[yn]n
ufsrestore>;extract
you have not read any volumes yet
Unless you know which volume your file(s)are on you should start
with the last volume and work towards the first.
Specify next volume #:1
set owner/mode for "."?(yn)n
ufsrestore>;quit
#ls-1
total 6
drwxrwxrwt 3sys sys512 Mar 11 10:36./
drwxrwxr-x 18 oot sys512 Mar 10 16:43.
Drwxr-xr-x2 pubs staff 512 Mar 11 10: 11 pubs/
# pwd
# var/tmp
# cd pubs
# ls
./ ../ backup.examples junk
#
4.7.2.4从备份带中恢复单个文件( ufsrestore)
下面是从备份带上恢复单个文件的过程:
1、 进入超级用户;
2、 将备份带插入;
3、 键入cd /var/tmp进入/var/tmp目录下,如果要将备份文件恢复到不同的目录中,用相应的目录代替/var/tmp即可;
4、 键入ufsrestore xf /dev/rmt/ ,x任选项说明拷贝文件或目录时是否设置所有者/模式的信息;
5、 键入n,目录的模式保持不变;
6、 键入卷号,如果只有1卷,键入1,这时文件被恢复到当前工作目录中;
7、 键入ls –l 文件清单显示出来;
8、 用mv命令将文件移到合适的目录中。


第5章、管理网络服务
本章将介绍:检查远程系统状态、向远程系统注册(rlogin)、系统之间传送文件(rcp,ftp)、管理NIS+数据库(admintool)。
5.1检查远程系统状态
这一节说明显示远程系统状态的命令:rup、ping及rcpinfo –d。
5.1.1确定一个远程系统已运行了多长时间
命令rup告诉你系统运行的时间及平均负载。当键入这个命令时系统显示出主机名、运行时间及平均负载。
gtxa%rup ash
ash up 59 days,3:42,load average:0.12,0.12,0.01
gtxa%
如果在命令后面不跟随任选参数,还可以显示出子网上所有远程主机的一些信息,如果是以表的形式显示,则可以使用表中的任选项对输入分类。
表5.1 RUP命令的任选项
选项 功能
-h 按主机名字字母顺序分类显示
-l 按平均负载字母顺序分类显示
-t 按运行时间长短分类
下例说明,输出按主机名的字母顺序分类;
gtxa%rup -h
ash up 1 day,1:42,load average,0.00,0.31,0.34
elm up 14 days, 0 min, load average:0.07,0.01,0.00
maple up 32 days,14:39,load average:0.21,0.05.0.00
gtxa up 8 days, 15:44,load average.o.02,0.00.0.00
gtxa%
5.1.2确定一个远程系统是否在运行(ping\rup\rpcinfo-p)
下面的步骤判断一个远程系统是否在运行:
* 键入ping ,回答信息" is alive"。意指这个系统在网络上是可以存取的,若出现信息"ping:unknown host",指这个系统可能不存在,因为名字解析系统不能找到这个名字的机器。若出现信息"ping:no answer from ",指远程系统可能没有在运行。
*键入rup 显示系统运行时间及平均负载的信息。
*键入rpcinfo -p,显示服务的相关信息。
*键入rlogin ,注册到远程系统。
*以上以r开头的命令需要远程系统允许才可能得到相关信息。
openet%ping gtxa
gtxa is alive
openet%rup gtxa
gtxa up 3 days,15:10 load average:0.07,0.08.0.09
openet% rpcinfo-p gtxa
program vers proto port service
program vers proto port service
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100000 3 rcp 111 portmapper
100000 2 tcp 111 portmapper
100007 3 tcp 1029 ypbing
100007 3 udp 1025 tobind
100021 1 tcp 1030 nlockmgr
100021 1 udp 1026 mlockmgr
100024 1 tcp 1028 status
100024 1 udp 1027 status
100021 3 tcp 1030 nlockmgr
100021 3 udp 1026 nlockmgr
100020 2 tcp 4045 llockmgr
100020 2 udp 4045 llockmgr
10021 2 tcp 1030 nlockmgr
openet%rlogin gtxa
password
last login; Mon Mar 2 10 :31 56 from cinderella
openet%
还可以键ping 的命令格式,系统会显示信息"is alive",意指系统在网络上是可存取的。若显示信处息"ping:no answer from,即意指网络上没有激活。或显示信息"ping:unreachable address from .... ",即意指这个系统在网络上可能不存在,因为没有路由可以到此地址。
gtxa%ping 129.144.52.199
129.144.52.199 is alive
gtxa% ping 129.144.52.200
unknown host 129.144.52.200
gtxa% ping 129.145.52.199
ping:no answer from 129.145.52.119
gtxa%
5.2注册到一个远程系统(rlogin)
下面是注册到远程系统的步骤:
1、键入rlogin <系统名>;,这时系统可能提示你键入口令。
2、如果你在想注册的那个系统上有一个本地帐号,则键入口令。否则,键入你NIS+口令。如果你在这上系统上有一个可存取的主目录,就注册进入到那个目录。否则只能注册到根(/)目录上。
gtxa%rlogin openet
password:
no directory:logging in with home=/
Last login:Tue Sep 17 13:54:28 from 119
sun microsystems,inc,sunos5.0 june 1992
openet%
5.3系统之间传送文件(rcp、ftp)
如果网络环境设置了automount,可以直接使用cp及mv命令在系统之间传送文件,但本节只讨论如何使用RCP及FTP命令在系统之间传送文件
5.3.1使用RCP命令
要使用远程拷贝命令从远程系统上传送文件到本地机器上,键入RCP <源PATHNAME>; <目标>;,如果你有存取这个远程系统的合法权限,那么,文件就拷贝到你指定的目标路径位置上。
下例说明,将文件quest从系统ash的/tp目录,拷贝到系统gtxa的当前工作目录中:
gtxa% rcp ash:/tmp/quest.
gtxa%
要从本地系统传送一个文件到远程系统,键入rcp ,如果你有存取远程系统权限的话,就将文件从本地系统拷贝到你指定的远程目标路径名中。
下例说明,将文件quest从系统gtxa的当前工作目录拷贝到系统openet的/tmp目录下:
gtxa%rcp quest openet:/tmp
gtxa%
如果需要改变文件名,可以将文件名作为目标中径名的一部分。例如,将文件quest改名为question,并将其放到/tmp目录中,则键入/tmp/question作为目标路径名。
5.3.2使用文件传送程序(ftp)
下面是使用文件传送程序从本地系统传送一个文件到远程系统的步骤。
注:要使用文件传送程序,可能需要在每个系统上有一个你的帐号,或在/.rhosts文件中有个入口,有些系统允许匿名登录是以anonymous或ftp作为注册名,并在口令提示时打入形如电子邮件地址的字符串。
如果有一个NIS或NIS+帐号,可以使用注册名及网络口令通过FTP存取远程系统。
1、 键入ftp命令,则FTP>;提示符显现
2、 键入open <远程系统名>;,系统显示连接信息,并请求用户输入用户名。
3、 键入远程系统上的用户名。
4、 系统请求你输入口令(如果无口令,也可能不出现)。
5、 键入口令(如果需要),系统注册信息及FTP>;提示出现。
6、 键入bin设置二进制格式,或asc设置ASCII格式,这个命令设置文件传送时的类型。bin格式传送时对文件不作任何更改。asc格式传送时,根据双 方系统的类型,自动将文件中的换行符更改为回车符和换行符(如果文件是从unix系统传送至DOS系统),或相反(如果从DOS系统传送到unix系 统),或不变(两端系统相同)。
7、 键入put <本地文件>; <目标文件>;,系统就显示文件传送信息并出现ftp>;提示。
8、 键入quit则goodbye信息及shell命令提示符出现
gtxa%ftp
ftp>;open elm
Connected to elm
220 elm FTP server(unix(r ) system v Release 4.0)ready.
Name(elm:testuser):testuser
331 Password required for testuser
Password:
230 User ignatz logged in .
ftp>;asc
ftp>;put quest/tmp/quest
200 PORT command successful.
150 ASCII data connection for /tmp/quest
(129. 144.52.199.1333)
226 Transfer complete
ftp>;quit
221 Goodbye.
gtxa%
可以使用send命令替代put命令,还可以使用mput命令拷贝多个文件,但没有msend命令,详细内容请见ftp(1)手册。注:你必须在对方系统上有一个帐号或对方系统允许匿名登录才能使用文件传送程序
如果你有一个NIS或NIS+帐号的话,你可以使用你的注册名及网络口令通过ftp存取远程系统。下面是使用文件传送程序将远程系统的文件传送到本地系统的步骤:
1、键入ftp命令,则ftp>;提示符出现
2、键入open<远程系统名>;,系统显示连接信息,并请求你的用户名
3、键入远程系统上你的用户名并按回车.如果需要口令的话,会请求你输入
4、如果需要,键入口令,系统显示注册信息及ftp>;提示
5、键入bin设置二进制格式,或asc设置ascii格式,这步设置文件类型
6、键入get <远程文件名>; <目标文件名>;并按回车,显示传送信息及ftp>;提示信息
7、键入quit,系统显示goodbye信息,退出ftp命令,重新显示shell提示符。
gtxa%ftp
ftp>;open clm
Connected to elm
220 elm FTP server (UNIX(r)system v Release 4.0) ready.
Name (elm;ignatz):ignatz
331 Password required for ignatz.
Password
230user ignatz logged in .
ftp>;asc
ftp>;get quest/tmp/quest
200 port command successful.
150 ASCII data connection for /tmp/quest
(129. 144.52.119.1333)
266 transfer complete.
Tp>;quit
221 Goodbye
gtxa%
注:可以使用mget命令拷贝多个文件,详细资料见ftp(1)手册


第6章、管理用户帐号和用户组
本章主要介绍如何使用管理工具(Administration Tool)来建立和管理用户帐号以及用户组,该管理工具用于编辑NIS+数据库和本地/etc目录下的文件,同时,它还允许用户查看NIS map中的信息,但不提供对这些信息的编辑功能。
注意: Solaris 2.x提供了以下的SVR4 useradd命令:useradd、userdel、usermod、groupadd、groupmod和groupdel。由于这些命令与网络关系 不大,因而不在本章中讨论。如果想要在独立系统中使用这些命令管理用户帐号,请参阅合适手册。
6.1增加和管理用户帐号
在下面几节中我们将介绍如何使用管理工具来增加和删除用户帐号,在Solaris 2.0下,可以通过编辑Passwd数据库或本地的/etc/passwd文件来增加用户,但管理工具不会自动为用户建立主目录。而在Solaris 2.1下,用户管理器(User Manager)则为用户提供了编辑Passwd数据库和建立用户主目录的功能。
6.1.1增加用户帐号
在向网络中增加用户之前,必须首先建立并配置好用户系统,如果需要,还必须在网络上安装并运行NIS+或NIS软件。(只有4.x系统可以成为NIS服务,而NIS客户则可用4.x或5.x 系统来安装)。
增加一个用户需要完成以下两步:设置用户帐号、为用户提供工作环境。
*编辑Passwd数据库
*定义用户组
*建立主目录
*定义用户环境
*建立口令
在以下几节中,我们将介绍如何完成这些工作。
6.1.1.1编辑Passwd数据库
在编辑Passwd数据库或本地的/etc/passwd文件之前,必须首先成为系统管理组(GID14)的成员,如果系统中正在运行NIS+,那么还必 须具备建立或删除NIS+数据的合适权限,之后就可以使用网络上任何系统的管理工具来改变核心NIS+数据库或本地系统的etc/passwd文件了。
增加一个用户,需要知道以下信息:
*注册名(login name)
*用户号(UID)
*基本组号(GID)
*识别信息(姓名、办公地点、家用电话及其它)
*主目录(home directory)
*注册shell
按以下步骤在NIS+网络数据库或本地的/etc/passwd文件中增加用户:
1、键入openwin,启动Open Windows.
2、键入admintool,启动管理工具并显示Adiminstration Tool窗口.
3、用鼠标SELECT Database Manager图标显示Database Manager窗口.
4、SELECT Passwd数据库,在NIS+命名设备或None(本地/etc文件)上用鼠标点中并点击Load按钮,显示出Passwd Database窗口.
5、如果是在一个大型的网络中,那么可能需要搜索某个注册名或UID,以确信它们没有被使用过,在View菜单中选择Find,在文字域中键入注册名或 UID,然后用鼠标点击Find按钮,如果搜索到了一项,那么该项就被点亮,否则在Passwd Database 窗口的底部显示出"No match"信息.
6、在Edit菜单中选择Add Entry一项,显示出Add Entry窗口.
7、在合适的文字域键入用户名和用户ID(UID).
8、当用户第一次注册时,其缺省情况是无口令状态,如果想要选择一个不同的口令状态,可在Passwd Status菜单中选择另外一项,菜单中各项有含义如表6.1所示.
9、在文字域中键入其余的信息,表6.2 描述了每个域中的具体内容,另外Database Manager也为用户提供了联机帮助信息,用户只需将箭头移到某一项标签上或文字域中,然后按键盘上的Help键,即可得到关于该项的详细说明.
10、当所有信息都输入完成以后,用鼠标点击Add 按钮将它们存入Passwd 数据库或/etc/passwd文件中,如果显示了"...cannot execute method,access denied..."信息,那么就需要编辑NIS+组表或/etc/group文件,在系统管理员组(GID)中建立或增加你的注册名.
编辑完Passwd数据库后,还需建立一个主目录并为用户设置环境,这些过程将在下面几节中介绍。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表6.1 Password Status菜单中的口令状态选择
口令状态 描述
Password is cleared 每个帐号需要一个口令,当用户第一次注册时,系统将
until first login 提示用户输入口令
Accunt is locked 当输入非法口令时,帐号无效,此时,用户可通过指定
一个新的口令来讲该帐号进行解锁,这种类型的帐号允
许用户拥有文件但无法注册
No password-rood setuid 帐号无法直接注册,它允许lp或uucp 等程序在某
access only 个帐号下运行,但用户无法注册
Normal password is set 当某帐号已经有一个口令时,可选择该项
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
注意: 一个没有口令的帐号是无法建立的,同时其口令不能在数据库管理器中直接定义而只能使用nispasswd、yppasswd或passwd命令来加以定义.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表6.2 口令数据库(Passwd Database)Add Entry窗口中各域的内容
域 描述
User name 用字符(包括数字)组成一个唯一的注册名
User ID 输入一个100-60000之间的唯一整数,用于在系统内部标
识用户
Passwor Status 见表7.1
Comment(GOOS) 输入可选信息,如用户实际名称、电话号码或所在机构
Home Path 输入用户主目录的路径,一般地,路径为/home/
,注意,在Solaris 2.x系统中,系统名不再是用户目录
路径中的一部分
Shell 输入注册时启动的shell全程路径: Bourne shell的是
bin/sh C shell是bin/csh,Korn shell的是/bin/ksh
缺省值是Bourne shell
Group ID 输入一个0-60000之间的唯一整数,用于标识用户所属的
基本组(primary group).
Max Days Valid 输入口令有效最大天数,如果该项空白,则口令不会失效
Days Warning 输入在口令失效前开始警告用户的天数
Last Mod Date 显示从1970年1月1日开始一直到口令最近一次被修改
时间的天数(8085表示1992年2月28日)该域内容是不
允许修改的
Expiration Date 输入用户帐号被注销的绝对日期,该日期以1970年1月
1日起计算的天数来表示,(如8050表示1992年1日28
日)如果该域空白,则口令不会失效
Min Change Days 输入两次改变口令之间所允许的最小天数
Max Inactive Days 输入某帐号被冻结前失效的天数
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
6.1.1.2定义用户组
如果想在某个组中增加用户,必须编辑组数据库(Group database),并在该组成员表增加用户注册名,本节描述了如何向某个组增加一个用户的过程,在这之前,首先需要知道用户注册名,用户ID(UID)以及组名和组ID。
1、 在Database Manager窗口中,点亮组数据库,用鼠标选择NIS+或None(本etc文件)并点击Load按钮。
2、 用鼠标选择想修改的一项,该项被点亮。从Edit菜单中选择Modify Entry,此时打开Modify Entry窗口,并显示出被选项在组数据库(或文件)中的当前信息。
3、 在成员文字域中增加用户注册名,当你输错时,可按Reset按钮,以便重输信息。
4、用鼠标选择Modify后,组数据库(或本地/etc/group文件)立刻修改。
5、如果你想让该用户属于别的组,则重复以上步骤,在别的组中增加该用户。
注意:如果你不使用命名服务(naming service),那么必须重复以上步骤,才能对属于同一组所有用户更新到其它系统上的/etc/group文件,为了编辑其它系统上的 /etc/group文件,用户必须返回Load Database窗口,并在use /etc files on host文件域中键入系统名。
6.1.1.3建立主目录(home director)
主目录是文件系统一部分,它分配给每个用户用于存贮私人文件,按照用户所创建的文件种类以及其工作性质给每个用户分配的主目录空间可以是不同的,一般地,你可以为每个用户的主目录分配15Mb左右的磁盘空间。
用户的主目录可以在本地文件系统或远程文件服务器中,其路径名约定如/export/home/。注意:这是Solaris 2.x的一种新的约定,服务器名不再包含在用户的主目录路径中,在大型服务器的/export目录下,可以为不同的用户创建户主目录,如homel, home2,home3等,不管用户的主目录安放在哪里,他们都能通过名为/home/安装点访到自己的主目录。
本节描述Solaris 2.x中主目录的安装方法,在这之前,我们先假设用户注册的系统是在网络上,用Automount自动安装的用户主目录是可访问的,并且利用系统提供share共享命令可以使用户在别的系统上通过网络访问本地的用户目录。
主目录的安装方法有以下两种:
*在NIS+Auto-home数据库,NIS auto-home表或本地/etc/auto-home文件中增加一项,自动安装主目录(推荐方法)。
*在用户系统
6.1.1.3建立主目录(home director)
主目录是文件系统一部分,它分配给每个用户用于存贮私人文件,按照用户所创建的文件种类以及其工作性质给每个用户分配的主目录空间可以是不同的,一般地,你可以为每个用户的主目录分配15Mb左右的磁盘空间。
用户的主目录可以在本地文件系统或远程文件服务器中,其路径名约定如/export/home/。注意:这是Solaris 2.x的一种新的约定,服务器名不再包含在用户的主目录路径中,在大型服务器的/export目录下,可以为不同的用户创建户主目录,如homel, home2,home3等,不管用户的主目录安放在哪里,他们都能通过名为/home/安装点访到自己的主目录。
本节描述Solaris 2.x中主目录的安装方法,在这之前,我们先假设用户注册的系统是在网络上,用Automount自动安装的用户主目录是可访问的,并且利用系统提供share共享命令可以使用户在别的系统上通过网络访问本地的用户目录。
主目录的安装方法有以下两种:
*在NIS+Auto-home数据库,NIS auto-home表或本地/etc/auto-home文件中增加一项,自动安装主目录(推荐方法)。
*在用户系统的/etc/vfstab文件中增加一项,使系统可以通过nfs来安装主目录。为支持主目录的自动安装,SunOS 5.x系统软件在/etc/auto-master文件中设置了下面一项:
/home/etc/auto-home
该项通知Automounter将auto-home数据库中指定的目录安装到本地的/home上去,在auto-home中该项的使用格式如下:
:/export/home/
当用户以注册时,Automounter会自动将指定系统(上的指定路径/export/home/)安装到用户所在系统的/home安装点上。
这种方法适用于主目录在本地系统中,但更重要的是,一旦用户在其他系统中注册Automounter会自动将其主目录安装到该系统的/home安装点上。
注意:当Automounter用于安装主目录时,你不能在用户系统的/home安装点上建立任何目录,当Automounter处在运行状态时,系统将自动识别/home目录的特殊状态。
在建立主目录之前,必须首先编辑Passwd database来建立用户帐号,它需要以下信息:
*用户的注册名和UID
*主目录所在系统名称,如果主目录在网络上是可访问的,那么主目录系统必须象用户的本地系统一样在网络的同一网段上(network segment),用df命令检查服务器是否有足够的空间来建立一个新的目录。
*用户帐号的目录名,一般地,主目录可取名为/export/home,在大型的文件服务器目录还可以是多重的,例如/export/home1, /export/home2等等,在每个目录下,不同的子目录是为不同用户建立的(例如: /export/home/、/export/home/、/export/hom1/、/export/home2/等等)。
下面介绍主目录的安装步骤,它适用于主目录在本地系统中或在远程文件服务器上。
1、成为超级用户
2、键入cd /export/,其中是用户主目录的名称,例如,想进入目录/export/homel,可键入:#cd /exprt/homel
3、键入mkdir ,其中是用户的注册名,你可以建立一个与用户注册名匹配的目录,例如建立一个名为ignatz的用户目录,可键入:#mkdir ignatz
4、键入chown ,此时用户成了主目录的所有者,例如,对于用户ignatz,可键入:#chown ignatz ignatz
5、键入chgrp ,用户被指定给Passwd database中标明的基本组,例如: 指定给staff组,可键入:
#chgrp staff ignatz
6、键入chmod 755 /export//,用户的主目录权限设置成:所有者为rwx,同组成员为r-x,系统中其它人员为r-x,例如:
#chmod 755 /export/honel/ignatz
注意:以下步骤描述了如何从一个运行SunOS 5.x的服务器上共享主目录,若想从运行SunOS 4.x的服务器上共享主目录,则必须使用export命令。
1、键入share检查主目录是共享的,则可以看到以下信息
gtxa%su
Password:
#share
- /export/home rw ""

如果没有列出主目录,则可按以下步骤建立一个可被其它系统共享的主目录,一般地,可将主目录命名为/export/home,/export/home1,或/export/home2等。
2、编辑/etc/dfstab文件,加入下面一行:
share -F nfs /export/
3、键入shareall -F nfs。这样不需要重启系统,系统就能自动执行/etc/dfstab文件中的有share命令。
4、键入ps -ef|gerp mountd。如果系统管理进程mountd在运行,则结束,反之,继续执行步骤5。
下面是一个mountd未运行时出现的信息:
#ps -ef|gerp mountd
root 221 218 16 18:07:25 pts/10:00 grep mountd
5、键入/etc/inint.d/nfs.server start,启动共享文件目录要求的系统管理进程。
注意:如果网络没有运行NIS或NIS+,就需要将主目录服务器的IP地址和系统名加入到用户系统的/etc/hosts文件中,本地/etc/hosts文件可用Database Manager来进行编辑。
如果使用了硬盘配额(disk quotas),那么就应该为用户建立一个相应的配额。
在建立了用户的主目录之后,要使之可用,可将它加入到Auto-home database 中由Automounter启动,或者将它用为用户系统中/etc/vfstab文件里的一项由nfs装入。
6.1.1.4自动安装目录
在按本节中所述步骤操作前,必须首先建立用户主目录并且Automounter,如果要用Automounter Tool Database Manager来编辑NIS+Auto-home数据库,那么必须是sysadmin group(GID 14)的成员,并对Auto-home database具有建立和删除的合适权限。
只要有一合适的权限,就可通过网络上的任何系统来修改NIS+Auto-home database或/etc/auto-home文件,在编辑Auto-home数据库时,必须知道用户的注册名和要安装的主目录名。
以下步骤适用于主目录建立在本地系统或者远程文件服务器上。
1、启动Automounter Tool并选择Database Manager。
2、窗口中缺省的域名(Domain Name)是Ecd.East.Sun.COM,如果此缺省域名不对,则可在该字段中输入别的域名;如果是在本地系统上编辑Auto-home文件,则可用鼠标选择None,并在Host Name字段输入系统名。
3、用鼠标选择Load按钮,将显示Auto-home database窗口。
4、选择Edit菜单中的Add Entry,将显示Add Entry窗口。
5、在User Name字段中输入。
6、在Path字段输入:/export//其中是主目录所在服务器名字。
7、用鼠标选择Add按钮,以上所编辑的信息被存入Auto-home或本地的/etc/auto-home文件中,当用户第一次注册时,主目录将自动地被安装到/home/下。
6.1.1.5用nfs安装主目录
如果用户的主目录是在其它系统上并且Automounter无法分配用户空间,那么可按以下方法用nfs来安 装主目录:
1、成为超级用户;
2、编辑/etc/vfstab文件,为用户主目录建立相应的项。例如,想要在服务器gtxa上为用户ignatz建立主目录,可在该文件中加入以下一项:
gtxa: /export/homel/ignstz - /home/ignatz nfs - yes rw,inty
3、为了建立用户系统的安装点,可以键入mkdir /home/。注意:主目录的名称在服务器和用户系统上可以是不同的,例如,服务器上的主目录名/export/home/ignatz/在用户系统上可以是/home/ignatz;
4、键入chown /home/,此时主目录为该用户所有;
5、键入chgrp /home/,此时用户的基本组(primary group)具有访问用户主目录的权限;
6、键入mountall,当前vfstab文件中的所有项(它们的automount域被设成Yes)被启动装入;
7、为了加以验证,可键入mount命令来显示所在已安装好的文件系统。
6.1.1.6定义用户环境
为了建立用户帐号,需进一步定义以下用户环境:
*定义缺省初始化文件
*建立一个邮件帐号
*设置打印机
6.1.1.7定义初化文件
当用户注册时,注册程序会自动生成一系列变量,如HOME、LOGNAME和TZ,接着运行初始化文件为用户设置系统缺省值如PATH、日期信息、 umask等,然后再设置一些特定变量,例如通过修改某个用户初始化文件中的PATH变量可以使某些应用程序只能由该用户执行。
每一种shell都有自己的初始化文件,如表6.3所示。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表7.3 shell 用户初始化文件
shell 初始化文件 用途
C $HOME/.login 注册时定义用户环境
$HOME/.cshrc shell注册后定义C shell要
求的用户环境
Bourne $HOME/.profile 注册时定义用户环境
Korn $HOME/.profile 注册时定义用户环境
$HOME/. 在环境变量指定的文
件中定义注册时的用户环境
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SunOS5.x系统软件为/etc/skel目录下的每个shell都提供了缺省的用户初始化文件,如表6.4所列.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表7.4 缺省主目录下的初始化文件
Shell 文件名
C /etc/skel/local.login
C /etc/skel/local.cshrc
Bourne或Korn /etc/skel/local.profile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
下面是缺省的/etc/skel/local.login文件:
#@(#)login 1.7 89/09/05 SMI
stty -istrip
setenv TERM ‘tset -Q-'
下面是缺省的/etc/skel/local.cshrc文件:
#@(#)cshrc 1.11 89/11/29 SMI
umask 022
set path=(/bin/usr/bin/usr/ucb/etc.)
if ($?prompt) then
set history=32
end if
下面是缺省的/etc/skel/local.profile文件:
stty istrip
PATH=.:/usr/bin/usr/ucb:/etc
export PATH
以上文件定义了系统最小环境,为了简化每个用户的初始化文件,可以在/etc/skel下的文件中设置尽量多的系统级缺省变量。
为了建立初始化文件,必须首先建立好用户的主目录并且知道Passwd数据库中为该用户设置的shell类型(C、Bourne或Korn),按以下步骤设置用户的初始文件:
1、在用户的主目录下成为超级用户;
2、键入cd //,进入用户主目录,例如,要想进入/export/homel 下的ignatz用户目录,可以键入:
#cd exptrt/homel/ignatz
3、键入cp /etc/shel/local.*,将所有缺省的初始文件拷入用户目录;
4、键入chmod 744 local.*,为初始文件设置正确的权限;
5、键入chown *,使用这些初始文件属该用户所有,例如:
#chown ignatz*

6、chgrp local.* ,将文件指派给基本组(如sysadmin),该组号是在passwd数据库为用户帐号专门指定的,例如:
#chgrp 10 local。*

7、重新命名shell初始文件,如果用户shell是C shell,由键入mv local.login .login; mv local.cshrc .cshrc,如果用户shell是Korn或Bourne shell则键入mv local. Profile .profile;
8、键入rm local.*,将已经没用的shell初始化程序全部删除;
9、安装用户主目录;
10、在用户系统中以该用户注册;
11、为用户指定一个临时的口令(见下面如何建立口令一章中的"建立口令";
12、检查用户环境设置得是否正确;
13、编辑用户初始化文件并按需要进行修改;
为了编辑用户初级化文件,需完成以下几步:
1、 设置缺省路径,该路径包含用窗口环境应用程序安装点以及该用户的主目录;
2、 为了改变路径设置,如下增加或修改PATH变量,对于C shell可键入setpath=(. / / /...),例如,可在用户的$HOME/.cshrc 文件中加入以下一行:setpath=(. /usr/openwin/bin /usr/bin $home/bin /usr/lib /usr/sbin)。对于Bourne或Korn shell可键入PATH=/://...;export PATH。例如可在用户的$HOME/.profile文件中加入以下一行PATH=.:/usr/openwin/bin:usr/binHOME/bin:usr/lib;export PATH
4、 用env命令检查环境变量设置得是否正确,注意,即使用户shell是C shell其环境变量也是用Bourne或Korn shell语法显示,输入man=s5 environ可得到在关env命令的更多信息.
$env
HOME=/home/ignatz
HZ=100
LOGNAME=ignatz
MAIL=/var/mail/ignatz
MANSECTS=\1:1m:1c:1f:1s:1b:2:\3:3c:3i:3n:3m:3k:3g:3e:3x11:3xt:3w:3b:4:5:7:8
PATH=:/usr/openwin/bin:sbin:/usr/sbin:/usr/bin:/etc:/$HOME/bin:lib:usr/lib
SHELL=bin/sh
TERM=sun
TZ=EST5EDT
$
5、 增加或改变环境变量的设量,对于C shell可键入setenv (或set =)。例如,设置100个命令的历史表,可键入setenv HISTORY 100,对于Bourne或Korn shell,可以键入=;export。例如,设置用户的缺省邮件路径,可键入MALL=/var/mail/ignatz;export MAIL;
6、 检查umask设置,如果需要对它进行改变,可键入umask ,数字前面的可以省略,例如,要文件权限为755,可键入umask 022,表6.5列出了八进制unask值对应的文件权限。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表6.5 umask值对应的权限
八进制值 文件权限
0 rwx
1 rw-
2 r-x
3 r--
4 -wx
5 -w-
6 --x
7 ---(none)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LANG变量和LC环境变量决定了shell使用的本地习惯,这些习惯和背景是在初始文件中设置的,它们主要包含时区、collation orders、数据格式、时间、汇率和数字,LANG变量为某个指定的国家或地区所有可能的文化习惯和背景,LC变量可单独使用,如果用 LC.COLLATE,LC-CTYPE,LC-MSEE AGES和LC-NUMERIC变量来设置本地的特性,表6.6列出了不同地区的值。
如果系统需要支持多字节字符(如日语)那么需要在系统初始化文件(/etc/profile、etc/login)中加入命令stty cs8 defeucw命令,并重新注册。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表6.6 LANG和LC变量的取值
值 地点
de: German
fr: Frenah
iso-8995-1 English and Enropean
it Italian
Japanese Japanese
Korean Korean
sv Swedish
tchinese Taiwanese
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
6.1.1.8建立用户的邮件帐号
每个用户在本地系统或邮件服务器上都有一个邮箱并可能在/etc/mail/aliase文件中有一个邮件别名,它指向邮箱的具体位置,按以下步骤在邮件服务器上为用户设置邮件客户:
1、在邮件客户服务器系统上成为超级及户;
2、建立/var/mail安装点;
3、 编辑/etc/vfstab文件并在邮件服务器上增加/var/mail目录,将文件安装到该目录上这样系统每次重启后,就会自动挂上户的邮箱;
4、键入mount -a命令安装客户的邮箱;
5、用Administration Tool编辑/etc/hosts文件并为邮件服务器增加相应项。注意:当信息第一次被传送时,/var/mail目录下的sendmail程序会自动为用户建立邮箱。

6.1.1.9建立口令
口令是系统安全性的保障,每个用户都应该使用6--10个字符和数字的组合来构成一个口令,关于改变口令和口令属性的方法可参见手册中的passwd(1)、yppassed(1)、或nispasswd(1)
在SunOS 4.x系统中,加密后的口令与有关用户的其它信息一起存放在/etc/passwd文件中,在SunOS 5.x中,加密后的口令以及与口令有关的信息则被存放在NIS+Passwd数据库的Shadow域(或本地的/etc/shadow文件)中, Shadow文件的权限是--r-------,只有根用户才能读该文件,同时也只有Passwd、ypasswd和nispasswd命令才能写该文 件。
以下是一个/etc/shadow文件的例子:
root:XzVuaelvazZsw:8223::::::
daemon NP:6445::::::
bin:NP:6445::::::
sys:NP:6445::::::
adm:NP:6445::::::
lp:NP:6445::::::
smtp:NP:6445:::::
uucp:NP:6445::::::
nuucp:NP:6445::::::
listen:*LK*::::::
novady:NP:6445:::::
noaccess:NP:6445::::::
janice:gzqgrmlKcfy7A:8223::::::
为了建立或修改口令,可使用命令/usr/bin/passwd ,用户可以在任何时候建立和修改自己的口令,但是只有根用户才能建立其他用户的初始口令。注意:用户可以用passwd命令来定义、更改和查看口令的有关 属性,例如口令的期限等,有前passwd命令的详细信息说明请参见手册。输入新口令时应两次输入新口令。
6.1.2管理用户帐号
管理用户帐号包括对用户帐号的修改、取消和冻结
6.1.2.1修改用户帐号
当有关用户的信息变化时,可以用Database Manager来编辑passwd database中信息,一般用户帐号的登录名和UID是不需要修改的,除非它与现有的某用户名或UID冲突。
在网络环境中,当用户从一个系统转移到另一个系统中或者从一个服务器转移互到另一个服务器上时,需要用Database Manager来为用户主目录修改Auto-home数据库。
如果需要修改用户口令,就使用passwd。
6.1.2.2取消用户帐号
以下是取消用户帐号的步骤
1、 从NIS+Passwd数据库NIS表或/etc/passwd文件中删除该用户项;
2、 从NIS+Group数据库、NIS map或/etc/group文件中取消该用户名;
3、 从打印机访问或拒绝访问表中删除或存档;
4、 决定是否想对所有的用户文件删除或存档;
5、 删除用户邮件文件;
6、 从Auto-home数据库中删除用户;
6.1.2.3冻结用户帐号
有时,你可能想要临时或永久地冻结某个注册帐号。当然,要这样做你必须有充分理由,如用户可能不来使用该帐号或者你有充分证据表明该帐号经常被滥用或安全性受损。
冻结一个注册帐号的最简单方法是使用Database Manager来对Password数据库中的用户口令进行加锁。
在本地系统中,你可以通过设定口令期限、注销日期或规定用户使用该帐号的固定间隙控制用户帐号,另一种冻结用户的简单办法是临时地改变用户帐号的口令。
6.2设置和管理用户组
Group数据库(表或本地/etc/group文件)存贮在关于用户组的信息,通常称为UNIX组。一个用户组是能共享文件以及其它系统资源的一个用户集合,例如, 同一课题组的用户可以组成一个用户组。
每个用户组有一个GID号(组标号,类似于UID),它是系统的内部标识号,一个组应该有一个组名和一个用户名表,用户组可用以下两种方法加以定义:
*在用户帐号中使用GID来定义用户有基本组,即在Passwd数据库的Group域中增一个新的GID号。
*在Group数据库中输入该组的名称、GID号和用户表用上面的第二种方法定义用户组比较合理,因为它为每个组定义了一个组名。
所有的用户都至少属于一个组即基本组,虽然这不是系统所要求的,但是你必须将用户加入到基本组的成员表中,除基本组外用户最多还可以同时属于16个附加组,具体实现方法是将用户加到所属组的成员中。
group命令可用于列出包含该用户的所有用户组,对于任意用户在某一时刻其基本组有一个,但是用户可以使用newgrp命令临时地改变基本组。
某些应用系统(如文件系统)只关心用户的基本组,比如,文件所有者、帐号数据只影响基本组,另外一些应用系统则可能地考虑支持用户共享的附加组,如只有sysadmin group的成员才能使用Administration tool来改变数据库。
通常我们要对文件、目录分别设置用户、组及其它的读/写/执行权限,这些权限是安全性的保证,如果你的基本组或附加组(secondary group)权限不够,那么你就不能存取别人的文件,例如,可以为技术资料编写人员建立的一个techwrite组,并为该组所在目录建立相应的权限,这 样,只有该组成员才能修改该目录下的文件。
用户组可以是本地系统有效,也可以贯穿于整个网络。通过网络,用户组可以允许网络上的一组用户存取一组文件,而其它用户则无法对它们进行操作。
6.2.1设置Group数据库中的域值
Group数据库(表或本地/etc/group文件)包含以下一些主要域项:
*组名(Group Name)
*组号(Group ID)
*成员表(Member List)
另外,组口令(Group Password)也是其中的一项,但很少使用,它是早期的UNIX遗留下来的,通常可将该项空着或者仅仅填入一个星号。
6.2.1.1设置组名(Group Name)域
该域包含一个组名,例如某大学化学系在成员可取名为chem,组名最多可由9个字组成。
6.2.1.2设置Group ID域
该域包含了一个组标识号,在系统中GroupID必须是唯一的,每个Group ID是一个0-65535之间的整数,但通常在100-60000之间取值(60001和60002分别赋给了nobody和noaccess,100以 下的整数是为系统缺省帐号保留的)、当使用Administration Tool来增加用帐号时,你必须指明用户的基本组。
6.2.1.3设置成员表域
该域包含了某组所有用户成员表,用户名之间可用逗留隔开,这些用户必须是在Passwd数据库中定义的注册名,如上所述,每个用户可同时属于17个组。
6.2.2建立缺省的UNIX用户组
SunOS 5.x提供了以下的缺省组:
root::0:root
other::1:
bin::2:root,bin,demon
sys::3:root,bin,sys,adm
adm::4:root,uucp
uucp::5:root,tty,uucp
mail::6:root
tty::7:root,uucp
lp::8:root,lp,adm
nuucp::9:root,nuucp
staff::10
daemon::12:root,draemon
nobody::60001:
noaccess::60002:
可以在NIS+Group数据库、本地的/etc/group文件中加入GID为14的sysadmin组,该组中所有用户可以使用Administration Tool
6.2.3建立新的组
作为系统管理可能要经常地建立新的用户帐号,在具体分配用户之前,必须首先建立用户组和GID号。Administration Tool可用来建立和维护网络以及本地的用户组,在使用Administration Tool建立或编辑组帐号时,首先必须是sysadmin组(GID 14)的成员,如果网络上正在运行NIS+,那么还必须有对NIS+数据库进行操作的权限。
建立一个新的组,需要知道以下信息:
*组成员有用户注册名(Login names)
*组成员的用户号(User IDs)
*组名(Group name)
*组号(Group ID)
按以下步骤在NIS+数据库或本地/etc/group文件中增加用户组:
1、 键入admintool启动Administration Tool;
2、 用鼠标选择Database Manager图标,显示Database Manager窗口;
3、 用鼠标选择Group数据库,并选择NIS+命名服务或None(本地/etc文件);
4、 用鼠标选择Load按钮,显示Group Database窗口;
5、 从Edit菜单中选择Add Entry一项,显示出Add Entry窗口;
6、 输入组名、组号以及成员表(成员名之间用逗号隔开);
7、 用鼠标点击Add按钮,将该组加入到Group数据库(或本地的/etc/group文件)中,如要增加更多的用户组,则重复以上两步。
6.2.4修改或删除用户组
当用户组中有新的成员加入或者成员调离该组时,就需要修改用户组帐号的成员表,即在现有的帐号中增加或删除用户,当某种课题完成后,该组便不再需要了,于是就可以将该组删除,在重用已删除组的GID时应注意避免冲突。
6.2.4.1修改某个组
按以下步骤修改一个组项:
1、 用鼠标选择Group按钮,选择NIS+或None,并按Load按钮,显示出Group Database窗口;
2、 用鼠标选择想要修改的数据库名;
3、 从Edit菜单中选择Modify Entry项,弹出Modify Entry窗口,并显示该组的当前各项值。
4、 在相应字段中增加或删除用户名,然后选择Modify修改数据库中的该项内容。
6.2.4.2删除某个组
如果某个组的组号不再需要,就可将该组删除掉,按以下步骤删除一个组:
1、 用鼠标选择Group,选择NIS+或None并按Load按钮,弹出Group Database窗口;
2、选择需要删除的数据库名;
3、从Edit菜单中选择Delete Entry,此时系统提示:
"Do you really want to delete this entry?"
5、 如果不想真正删除此项,由选择Cancel,如果要删除,则选择Delete按钮,这样便可以将该组从组数据库中删除掉。


第7章、UNIX的shell命令
本章将介绍:各种shell解释器共同点、标准shell介绍、C shell介绍、Korn shell介绍。
在Solaris 2.x软件环境中提供给用户三种命令解释器:标准shell(缺省shell或Bourne shell,本手册中我们称为标准shell)、C shell和Korn shell。对每一个用户而言都有一个缺省的shell命令解释器,另外也可以在命令行中打入某种shell而重新进入另外一种shell解释器。本章首 先介绍三种shell的公共命令,然后再分别对它们各自的特性作一些详细介绍。
7.1各种shell的公共命令
本节描述各种shell所使用的命令
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表7.1 各种shell解释器的基本特性
特性 Bourne C Korn
别名 无 有 有
命令编辑 无 有 有
增强的cd 无 有 有
历史 无 有 有
忽略CTRL-D 无 有 有
不同于profile的初始文件 无 有 有
作业控制 有 有 无
退出文件 无 有 有
文件的重写保护 无 有 有
与标准shell的语义兼容性 是 否 是
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
7.1.1设置某种缺省shell
在用户数据库或/etc/passwd文件中,注册shell是在每个用户的登记项的最后一列中设置,用户可以使用系统提供的管理工具或编辑本地的 /etc/passwd文件来修改注册shell,但是此用户必须是sysadm组的成员,即用户的组号(GID)应该是14,如果是在运行NIS+,则 必须有建立和删除NIS+数据据库的权限。
下面是用户更改注册shell的一些步骤:
1、按需要,从管理工具中打开数据库管理器窗口。
2、 在用户数据上,按下SELECT,然后再接着按SELECT来选择NIS+或无NIS+服务。若选择NIS+则编辑Passwd数据库,否则编辑本地的/etc/passwd文件。
3、 点击Load键,显示用户数据库窗口。
4、 在想要编辑的用户项上按SELECT鼠标键,然后从编辑(Edit)菜单中选择修改(Modify)项。
5、 修改shell项的文字域,/bin/sh是标准shell,/bin/csh是C shell或者输入/bin/ksh作为Korn shell。
6、 点击Modify按钮,修改用户缺省SHELL定义,只要用户重新注册进入系统,即使用新的shell。
7.1.2在命令行中改变shell类型(sh,csh,ksh)
如果用户不修改用户数据库而想使用别的shell解释器,则可以在命令行中简单地打入所需shell的命令名即可。
例如,要想使用C shell,打入csh即可,缺省C shell提示符是在系统名之后跟一个百分号(%)。
$csh
gtxa%
如果要改变为Korn shell,则打入ksh,korn shell的缺省提示符是$
gtxa%ksh
$
7.1.3从shell解释器中退出(exit)
如果用户是在命令行中进入某种shell解释器,则只需打入exit和回车键,即可退出当前的shell解释器,而返回原先的shell解释器。
$exit
gtxa%
7.1.4清除一个shell窗口(clear)
在某个shell窗口中,用户可以清除一个shell窗口的内容,并且重新显示shell的提示符到此窗口的左上角,例如要清除一个窗口的内容,可以打入clear和回车键:
gtxa%which openwin
no openwin in. /home/ignatz/usr/deskset/bin/usr/bin
/home/ignatz/bin/bin/home/bin/etc/usr/etc/usr/etc/usr/ucb
/usr/bin
gtxa%clear
此时窗口的显示内容即被清除,然后把提示重新显示在顶部。
7.2标准shell
在Solaris 2.x软件环境中,标准shell(Bourne shell)是缺省shell,它是由Steve Bourne先生在AT&T Bell实验室工作时开发的,标准shell相对而言,结构紧凑,而且简单,但它也提供所有的程序设计功能,可以实现由各种命令和过程组成的shell文 件(script)。因为如何编写shell文件已经超越本文范围,所以我们不在此赘述。
7.2.1标准shell的初始文件
标准shell只使用一个初始执行文件,其名为.profile,一般放在用户的基目录(home directory)之下,它专门用来设置用户的环境。当用户注册或在命令行中启动标准shell时,即读.profile文件,一般来说,用户通过此文 件来设置用户查找路径和其它环境变量。
7.2.2定义标准shell的环境变量
对于标准shell和Korn shell而言,定义环境变量的语法都是一样的,输入命令=; export,例如:
$HZ=100;export HZ
$
7.3 C shell
C shell是Bill Joy先生在UCB工作学习时开发的,它已被UNIX的众多用户所接受。C shell完全不同于标准shell和Korn shell,而且有自己独特的语法规则,C shell最重要的优点是具有历史功能、命令编辑功能和别名功能。历史功能的意义是C shell可以存贮用户最近输入的命令记录,用户可以显示这些命令,也可以按原样重新使用某条命令;而编辑功能是用户可以通过编辑来改变某条命令;别名可 以让用户用短的名字来表示经常使用的长命令,或几条常用命令。
7.3.1C shell的初始文件
C shell使用两个初始化文件,用于设置用户的环境变量,这两个初始文件名分别是.login和.cshrc,也放在用户基本目录之下。
当用户注册时,C shell首先读.login,然后再读.cshrc文件。当用户是从命令行中启动C shell时,只读.cshrc文件(C shell运行控制)。因为.login文件不是每次启动C shell都读入,因此用户应该在.login中设置环境变量,而在.cshrc文件中设置用户的查找路径名。
7.3.2C shell环境变量的定义
使用命令setenv ,例如:
gtxa%setenv display rogue:0
gtxa%
7.3.3建立C shell的别名
用户可以在.cshrc文件中定义所需的别名。建立一个别名的语法为:
alias
例如,你想简写别名(alias)这个命令成为a,则可以在.cshrc文件加入下列一行:
alias a alias
下面的实例选自.cshrc文件。注意,如果命令行中包含有空格,则必须把整个命令中用引号引起来,引号可以是双引号,也可以是单引号:
alias a alias
a h hiostory
a c clear
a lf 1s -F
a ll "ls -l | home"
a la ls -a
a s "source .cshrc"
a f ‘find -name core -print'
a copytotape "ter cvf /dev/rmt/0 *"
7.3.4设置C shell的历史功能
要设置C shell的历史功能,只需在命令行中打入:
set history=
其中,n可理解为C shell可以存贮的命令条数。举例:
gtxa%set history=18
gtxa%
用户既可在shell窗口中"临时"设置历史功能,也可以把它放在.cshrc文件中设置"永久"的历史功能。
7.3.5使用C shell历史功能
在命令行中,打入history命令,即可显示已经打入过的命令,这些命令是你打入的最后n条命令,n是像7.3.4节所述的方法设置的。
gtxa%history
26 pwd
27 kermit
28 cd howto
29 tar avf /dev/rmt/0
30 ls -l howto*
31 cd
32 cd Config/Art
33 ls -1
34 tar cvf /dev/rmt/0
35 histoty
gtxa%
要想重复执行刚打入的命令,可打入!!和回车,即复执行上一条命令:
gtxa% history
26 pwd
27 kermit
28 cd howto
29 tar avf /dev/rmt/0
30 ls-l howto*
31 cd
32 cd Conrig/Art
33 ls-1
34 tar cvf /dev rmt/0
35 histoty
gtxa%!!
history
27 kermit
28 cd howto
29 tar avf /dev/rmt/0
30 ls-l howto*
31 cd
32 cd Conrig/Art
33 ls-1
34 tar cvf /dev rmt/0
35 history
36 history
gtxa%
要重复最后一条命令的最后一个词,可打入!$,这样上一条命令的最后一个词即可作为当前命令行中的一个变量。例如,你可能已经输入了某个文件的全程路径,然后想用这个路径名作为变量,来用vi编辑此文件或打印此文件:
gtxa%ls -l /home/ignatz/quest
gtxa%lp !$
gtxa%
!$可以用在命令行的任何地方,在下面的命令行中,文件/home/ignatz/quest将拷贝到/tmp目录之下:
gtxa%ls -1 /home/ignatz/quest
gtxa%cp !$ /tmp
cp /home/ignatz/quest /tmp
gtxa%
要想重复C shell历史令表中的某个序号的命令,则打入!,例如:
gtxa%history
29 tar avf /dev/rmt/0
30 ls -l howto*
31 cd
32 cd Config/Art
33 ls -1
34 tar avf /dev/rmt/0
35 ls -l
36 cd
37 lp howto*
38 history
gtxa%!32
cd Config/Art
gtxa%
7.3.6设置C shell的退格键(stty erase)
如果用户想把删除字符的键从Delete键变为Backspace键,则可以输入下面的命令:
gtxa%stty erase ^H
gtxa%
此后,退格键(Backspace)即作为字符删除键使用。
7.3.7新命令的嵌入
C shell为所有命令路径变量建立一个内部命令表,因此当用户把新命令放入某个目录中时,这个新命令并不在这个表中,这样,C shell就不会执行此新命令。C shell为了解决这个问题,把用户的新命令加入到查找路径内部表中,为用户提供了rehash命令,用户只需打入rehash命令,即可使这条新命令有 效:
gtxa%newcommand
newcommand: Command not found
gtxa%rehash
gtxa%newcommand
gtxa%
7.3.8Cshell历史命令的编辑
用户可以从C shell的历史表中编辑命令,其语法:
S//
下面我们举例说明:
gtxa% history
31 cd
32 ls
33 cd/home/frame3.1
34 ls
35 cd
36 tar cvf /dve/rmt/0 frame3.1
37 lp questionnaire
38 lpstat -t
39 echo $PaTH
40 history
gtxa%!39:s/a/A/
echo $ PATH
.:/home/winsor:/usr/openwin/bin:/usr/deskset/bin:/home/
winsor/bin:/bin:/home/bin:/etc:/usr/etc:/usr/bin:/home/
frame3.1/bin
gtxa%
在此例中,第39条命令行中用户打错了一个字母,然后用户用C shell编辑命令改正了打错的那个字母,命令执行也就正常了。
7.4 Korn shell
Korn shell是AT&T Bell实验室的David Korn开发的,是标准shell超集,Korn shell使用标准shell一样的语法,只不过Korn shell本身又加入了许多新的功能, Korn shell 比C shell提供了更加方便的命令编辑方式,Korn shell一样亦具有历史和别名功能。
7.4.1Korn shell的初始化文件
korn shell使用两个初始文件,它们都存放在用户的基目录之下,其名分别为.profile和.,第二个文件名是可以让用户自己选择命名的,其主要功能是设 置环境,同C shell类似,你可以把第二个文件名选择为.kshrc,以后我们即用.kshrc这个名称来说明第二个文件。
当用户注册时,Korn shell首先读.profile文件,然后读.kshrc。.kshrc主要让用户建立使用Korn shell的习惯约定,在.kshrc应该包括只有Korn shell才能执行的命令。
用户必须用ENV环境变量来指定这.文件的名称,Korn shell设置环境变量的命令语法同标准shell:
=;export
其中export命令是必须的,它使此变量对Korm shell以及它的所有子进程都有效,下面为.kshrc文件设置环境变量:
$ENV=$HOME/.kshrc;export ENV
$
很显然,用户必须将ENV这个环境变量在.profile中设置好,否则当用户注册时,Korn shell就会找不到.kshrc文件。注意,ENV环境变量是没有缺省设置的,用户不设置ENV,就不能使用这此性质。
不论是在注册时,还是在命令行中启动Korn shell,.kshrc文件在每次启动Korn shell时都必须读入。
7.4.2Korn shell的选择项
Korn shell有许多变量可用来指定用户的环境和控制命令的执行,要想显示当前的选择项设置情况,可输入:
$set -o
下例显示了Solaris 2.x软件系统中Korn shell的缺省设置情况:
$set -o
Current option settings
allexport off
bgnice on
emacs off
errexit off
gmacs off
ignoreeof off
interactive on
keyword off
markdirs off
monitor off
noexec off
noclobber off
noglop off
nounset off
privileged off
restricted off
trackall off
verbose off
vi off
viraw off
xtrace off
$
我们在表7.2中说明这些缺省选择项的具体意义。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表7.2 Korn shell的选项
选择 缺省值 说明
allexport off 当定义时,自动地报告变量
bgnice on 要低优先级执行所有的后台作业
emacs off 设置emacs/gmacs为联机编辑器
errexit off 如果命令返回伪值,则shell执行ERR陷井并立即 退出
gnaces off 设置gmacs/gmacd为联机编辑器
ignoreeof off 当运行在交互式shell 时,则在文件的未尾也不退出shell,只有打入exit才退出shell
interactive on shell自动进入交互式方式,因此也立即显示shell提示符
keyword off shell根据变量赋值语法将每个字放入变量赋值表中
markdirs off 在所有目录名后显示一个"/"
monitor on 使能作业控制
noclobber off 当使用转向输出>;时,不覆盖一个已经存在的文件
noexec off 只读此命令,而不执行它,利用此命令可以调试shell文件的语法错误
noglob off 取消文件名的扩充
nolog off 在历史文件中不存贮功能定义
nounser off 当shell想要扩展一下已经设置的变量时,显示一条错误信息
privilrged off 当此选择项是off时,使用实际UID和GID,若是on,则把UID和GID设置成启动此shell时有效值
restricted off 设置一种受限制的shell
trackall off 当命令第一次出现时,使得它成为别名
verbose off 当读入时,即是显示输入
vi off 设置vi为联机的编辑器
viraw 0ff 指定从vi中,每次只输入一个字符
xtrace off 当执行命令的变时时,显示它们
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
按照korn shell的习惯用法,这些选择都在.kskrc文件中设置。
要想使某选择项有效,可输入:
set -o
若要取消这个选择项,可输入:
set +o
例如在.kshrc中输入:
set -o vi
即设置联机编辑器为vi,而是如果是下面这一行:
set +o vi
则是关闭vi作为联机编辑器使用。
用户亦可以用同样的语法,在命令行中设置Korn shell的其它选择项。
7.4.3创建Korn shell的别名
Korn shell创建别名的语法是:
Alias =
例如把别名命令alias别名为a,其命令为:
$alias a=alias
$
Korn shell本身带有一些预先定义好的别名,要显示这张别名表,只需打入alias命令即可:
$alias
autoload=typeset -fu
false=let 0
functins=typeset -f
hash=alias -t -
history=fc -1
integer=typeset -i
nohup=nohup
r=fc -e -
stop-kill-STOP
suspend=kill -STOP $ $
true=:
type=whence -v
$
表7.3描述这些缺省别名的意义。

表7.3 Korn shell缺省别名
别名 值 定义
autoload typeset -fu 定义一个自动装入函数
false let -0 返回非零状态,经常用于产生无限循环
functions typeset -f 显示函数表
hash alias –t - 显示跟踪别名表
history fc -1 从历史文件中列出命令
integer typeset -i 整型变量的说明
nohup nohup 即使退出系统(log out),也继续执行正在运行的作业
r fc -e- 重复执行前面的命令
stop kill -STOP 停止作业
suspend kill -STOP$$ 挂起作业
true ; 返回一个零退出状态
type whence-v 显示命令的信息
7.4.4用Korn shell的联机编辑器编辑命令
使用Korn shell的联机编辑器,用户在执行命令以前可以编辑当前命令。Korn shell的联机编辑器可以是emacs、gmacs或vi,利用Korn Shell的选择项功能,使用下面命令:
set -o
或使用EDITOR或VISUAL环境变量来设置联机编辑器。
Korn shell的在线(或联机)编辑器vi是普通vi程序改进后的子集,使用联机vi编辑器时会自动进入插入方式。
用户在一般情况之下,不需要使用联机vi编辑器,而可直接打入命令并执行之。如果想要编辑某个命令,则打入Escape键进入命令方式,用户可以使用标准 的光标移动命令向前移动,也可以使用vi编辑命令编辑这一行的内容。当用户在编辑命令时,按回车即执行此命令,而打入Escape则是回到输入方式。如果 用户想要编辑的命令行是在一个vi文件中,则打入v命令即可打开一个含有命令行的文件。当退出vi时即执行命令,有关vi的常见命令请参见第2章的快速参 考表。
7.4.5设置Korn shell的历史
Korn shell在某个文件中存贮所有的历史命令,这个文件用Korn shell的环境变量HISTFILE指定,如果没有设置这个环境变量,则存贮在$HOME/.sh-history中。变量HISTSIZE指定存贮的 命令个数,若用户没有设置此环境变量,则保存最近输入的128条命令,当历史表中达到了最大的命令个数时,则继续保存新命令,而把最老的命令从历史表中删 除。
要设置一个历史表的大小,可键入:
HISTSIZE=;export HISTSIZE
例如,下面命令行把历史表的大小设置为200:
$HISTSIZE=200;EXPORT HISTSIZE
$
用户可以在某个shell窗口中临时设置历史表的大小,也可以把这些设置命令放入.profile或.kshrc文件中使之“永久”有效。
7.4.6显示Korn shell的历史命令
用户可以利用fc和history这两条命令来显示历史表中的命令,这是因为history已经缺省别名为fc -1,所以用户可以交替使用这两条命令。
下列例子显示历史表中最后的16条命令。
$history
16 pwd
17 ps -el
18 ps -el | grep openwin
19 cd
20 more questionnaire
21 su
22 lp/etc/passwd
23 lpstat -t
24 man ksh
25 du
26 maker&
27 tip -2400 5551212
28 alias h=history
29 find /-name ksh -print
30 df -k
31 history
$
同样,用户打入命令$fc -1也可以显示同样的这些信息。
history和fc命令还可以有附加的变量,这样就可以让用户指定某个显示范围,例如可以显示最后的条命令或以倒序显示命令,有关ksh的详细材料,请参见ksh的手册。
7.4.7使用Korn shell的历史命令
要想利用Korn shell历史表中的命令,可以打入:
r
来重复使用由指定的这条命令,例如要重复使用第27条命令:
$r 27
tip -2400 5551212
(接着显示连接好的一些信息),若是重复执行历史表中的最后一条命令,则只需打入r即可。
7.4.8编辑Korn shell的历史命令
利用fc命令,用户可以显示特定的历史命令和编辑此命令,其语法为:
fc[-e ][-r][]

fc- e-[=选择项-e是用来指定某个编辑器,若不指定编辑器,则使用FCEDIT环境变量,这个环境变量的缺省值为/bin/ed。-r的选择项是倒序显示历史表中的命令,即把最近的命令显示在历史表最上面,若不指定范围,则编辑最后一条命令。
举例来说,用户想使用vi编辑历史表中的最后一条命令,则打入:
fc -e vi
此时创建一个含有历史表最后一项的文件,只要用户编辑此命令并保存这些改变,就可执行此命令了。


第8章、管理系统
本章将介绍:显示系统专有信息、配置附加的交换空间、创建本地邮件别名
8.1显示系统专有信息
使用本节的命令来获得系统专有信息,如主机ID号、硬件类型、处理机类型、OS版本号、系统配置、系统运行多长时间、以及系统日期和时间,随后还说明如何设置系统日期和时间,以及改变系统时域。
8.1.1确定主机ID号(sysdef -h)
为了得到系统的主机ID号,在命令行键入sysdef -h,系统就显示主机ID。这个命令替代SunOS4.x的命令hostid,hostid命令同时也可以使用。
gtxa%sysdef -h
Hostid
554095cc
gtxa%
8.1.2确定硬件类型(uname -m)
键入uname -m,就获得系统的硬件类型,提供相似信息的Sunos4.x命令arch,在sunos5.x中已不存在。
gtxa%uname -m
sun4c
gtxa%
8.1.3确定处理机类型(uname -p)
要获得系统的处理机类型,键入uname -p,系统的处理器类型就是显示出来,这个命令替代sunos的mach命令。
gtxa%uname -p
sparc
gtxa%
8.1.4确定OS版本号(uname -r)
命令uname -r给出OS版本信息
gtxa%unam -r
5.5
gtxa%
8.1.5显示系统配置信息(prtconf)
要显示系统的配置信息,键入prtconf,系统配置信息就显示出来。
gtxa%prtconf
System Configuration; Sun Microsystems sun4c
Memory size:16 Megabytes
sun 4/65 ,unit #0
options,unit#0 zs,unit #0
zs,unit #1
fd,unit #0 (No driver.)
audio,unit #0 (No driver.)
sbus,unit #0
dma,unit #0
esp,unit #0
scsibus,unit#s
sd,unit #0
sd,unit#1
le,unit #0
cgsix,unit #0
auxiliary -io,unit #0(Nodriver.)
...
gtxa%
显示系统配置信息的另一种方法是,键入命令sysdef,系统配置信息显示出来。
gtxa%sysdef
Hostid
530080d2
sun4c Configuration
Devices
options,unit # -1
zs,unit #0
zs,unit #1
fd,unit #-1
audio,unit #-1
sbus,unit #0
dma,unit #0
esp,unit #0
scsibus,unit #0
sd,unit #0
sd,unit #1
le,unit #0
cgsix,unit #0
auxiliary -io,unit #-1
interrupt -enable,unit #-1
memory-error,unit #-1
counter-timer,unit#-1
eeprom,unit #-1
pseudo,unit #0
lo,unit #0
tidg,unit #0
tivc,unit #0
...
gtxa%
8.1.6确定系统已经运行了多长时间
要想知道系统已运行了多长时间,键入命令uptime,本地系统的时间、用户数、平均负数均显示出来
gtxa%uptime
11:18am up 5 day(s),16:12 users,load average:16.46.15.92.15.55
gtxa%
要想知道系统是何时启动的,键入who -b,最后一次启动的月、日、时等信息显示出来。
gtxa%who -b
system boot Ju1 14 08:49
gtxa%
8.1.7确定系统的日期和时间(date)
要显示系统的日期和时间,键入date,系统的日期和时间就显示出来。
gtxa%date
Tue Ju1 14 19:40:47 PST 1992
gtxa%
8.1.8设置系统的日期和时间
下面是重新设置系统日期和时间的步骤:
1、变成超级用户
2、键入date,这里mm是月,dd是天,hh是时,mm是分,yy是年,于是系统的日期和时间按你指定的参数重新设置。
gtxa%su
Password:
#date
Tue ju1 14 16:07:01pst 1992
#date 07141552
tue ju1 14 15:52 :00 pst 1992
#
8.1.9改变系统的时区(/etc/TIMEZONE)
时区在/etc/TIMEZONE文件中设置,可用的U.S时区变量如下。完整的时区变量表见usr/share/lib/zoneinfo目录。
Us/arizona
US/central
US/east-indiana
US/Hawaii
US/Mountain
US/Pacific
US/Pacific-New
US/Yukon
下面是改变时区的步骤:
1、 成为超级用户。
2、 编辑/etc/timezone文件,改变tz=<时区》变量,并保存文件,于是时区被设置。
3、重新启动系统。
下面是一个/etc/timezone文件,系统的时区设置成pacific标准时区。
gtxa% more /etc/timezone
# ident " @(#)timezone 1.3 89/12/12 smi"/* svr4.01*/
# set timezone environment to default for the machine
TZ=US/Pacific;export TZ
下面是将时区Pacific改成Eastern的例子:
gtxa%su
Password:
#vi /etc /timezone
TZ =US/east-indiana;export TZ
:w!
#reboot
gtxa%date
tue ju1 14 14:24:52 est 1992
gtxa%
注:你需要保证文本编辑器确实将改变过的内容写进文件了,如:在vi中,可使用:w!命令强迫写。
8.2配置附加的交换空间(mkfile,swap)
为了在不做格式化的情况下创建并增加交换空间,首先必须使用mkfile命令加入交换空间。
为了列出可用的交换文件,键入swap –1,可用的交换文件表就显示出来。swap命令替代了sunos4.x的swapon命令。
gtxa%swap -1
swapfile dev swaplo blocks free
swapfs - 0 94520 93512
/dev/dsk/c0t3d0s1 32.25 8 65512 45048
gtxa%
下面是创建交换文件的步骤:
1、 成为超级用户,可以在没有根权限的情况下创建一个交换文件,但交换文件的属主最好是根,以使其它进程不能随意存取它。
2、 键入mkfile [k|b|m],跟在数字之后的字母分别K字节、块、或兆字节。于是,按你指定的大小及名字创建一个交换文件。下面的例子创建一个1MB大小的交换文件SWAP:
gtxa%su
Password
#mkfile 1m /files1/swap
#
下面是增加交换文件的步骤:
1、 成为超级用户;
2、 键入swap –a <路径>;,必须使用绝对的路径来指定交换文件,这样交换区就变大,可以使用了;
3、 键入swap -1证实交换文件已增加;
#swap –a /files1/swap
#swap -1
swapfile dev swaplo blocks free
swapfs - 0 94520 93512
/dev/dsk/cot3d0s1 32.25 8 65512 45048
/files1/swap 8 20402040
下面是删除指定交换文件的步骤:
1、 成为超级用户;
2、 键入swap –d <路径名>;,当交换文件不再使用时,它只从表中删除,使得不再用作交换区,文件本身并没删除。
gtxa%su
password:
#swap -d /files1/SWAP
#swap -1
swapfile dev swplo
blocks free
swpfs- 0
94520 93512
/dev/dsk/c0t30s1 32.25 8
65512 45048
#ls –1 /files1/swap
-rw-----1 root root 104857 jan 31 13:56 swap
#
当创建附加的交换空间时,如果希望重新启动系统时这个空间仍可用,那么,必须在/etc/vfstab文件中增加一项。下面是在文件/etc/vfstab中增加一个交换文件项的步骤:
1、成为超级用户;
2、编辑/etc/vfstab文件,增加一行: - - swap – no -。保证这一行跟在交换文件所在的硬盘分割项安装说明的后面。下次系统重新启动时,交换文件大小自动增加,下面的例子将增加交换文件 /files1/swap的说明项放到/etc/vfstab文件中,它在安装文件/files1说明项之后。
/files1/swap - swap – no -
8.3创建一个本地邮件别名(/etc/mail/aliases)
在网络环境中,很可能用一个集中的方法去管理邮件别名,另外,用户常常希望建立本地别名。下面是在本地系统上创建邮件别名的步骤:
1、成为超级用户;
2、编辑文件/etc/mail/aliases;
3、 在文件的末端,在本地别名分类下,键入:<用户名1>;,<用户名2>;.......;
4、保存修改后的文件。
例如,如果你想创建一个叫做friends的别名,就编辑/etc/mail/aliases文件,并增加如下项:
friends:dexter@elm,ogden@willow,mary@maple


第9章、文件存取问题分析
本章描述的是与查找路径、存取数据以及所有权等有关的问题。
当用户无法访问一个程序、一个文件或者是一个目录时,可以从以下两个方面来进行检查:
1、 用户的查找路径是否已被改变,或者查找路径中所列的目录次序是否正确。
2、 文件或目录是否有合适的权限和所有者。
该章简单地描述如何判断以上问题,并指出可能的解决方法。
9.1 诊断与查找路径有关的问题
如果用户键入一个不在查找路径中的命令,系统将提示"Command not found"信息,通常导致命令无法找到的原因有两点:系统中根本没有这一命令,或者命令不在查找路径中。
如果在查找路径的某个目录中存在同名或者错误版本的命令,系统也将无法正确执行该命令。
为了诊断和解决与查找路径有关的问题,可采用以下方法:
1、 显示当前的查找路径;
2、 编辑设置查找路径的文件(C Shell的.cshrc或.login,Bourne和Korn shell的.profile文件),在路径中加入所需目录名或者重新安排路径的次序。注意:对于C shell,应该同时检查.cshrc和.login文件,以确保路径设置的一致性,重复定义将导致路径难以查找并降低用户查找命令的效率。
3、 对C Shell用source命令操作该文件,对Bourne和Kron Shell使用.命令,使路径设置生效;
4、 检查该命令是否在正确路径中;
5、执行该命令。
9.1.1显示当前查找路径
为了显示当前的查找路径,可键入echo $PATH,如:
$echo $path
/sbin:/usr/sbin:/usr/bin:/etc
$
9.1.2为Bourne和Korn shells设置路径
为Bourne和Korn shells设置的路径在用户的$HOME/.profile文件中:
PATH=.:/usr/binHOME/BIN;export path
路径表开始的点(.)表示系统首先要查找的是当前目录。
9.1.3Source Bourne和Korn shell的初始化文件
当改变了.profile文件中的内容后,需要使文件中的修改内容生效,此时可键入:
$. ./.profile
9.1.4为C shell设置路径
C shell中的路径设置在用户的$Home/.cshc或.login文件中。
set path=(./usr/bin $home/bin)
路径名开始的点(.)表示系统首先要查找的是当前目录。
9.1.5Source C shell初始化文件
当你改变了.cshrc或.login文件中的内容后,为变量设置生效,可键入:
$source.login
9.1.6检查当前的查找路径
当修改完.cshrc文件后,可以使用which命令来加以验证。该命令可自动检查.cshrc文件,如果在Bourne或Korn shell中执行which命令,并且在.cshrc文件中有一个which的别名,那么执行which命令可能导致错误的结果,为保证正确执行, Which命令应在C shell中执行。当然也可以在Korn shell中运行直应的Whence命令。
为了检查查找路径,可以键入which ,当系统在路径名表中找到该命令时,该命令的名称和路径就被显示出来。
以下例子表明openwin命令不在搜索路径中。
gtxa% which openwin
no openwin in /home/ingnatz/$bin/usr/sbin/usr/bin/etc/home/ignater/bin/bin/home/bin/usr/etc
gtxa%
以下例子则表明找到了openwin命令
gtxa% which openwin
/usr/openwin//bin/openwin
gtxa%
如果找不到某个命令,就需要查看有关手册。例如找不到lpsched命令,那么手册中的lpsched(1M)节中会告诉你lpsched命令的路径是/usr/lib/lp/lpsched。
9.1.7执行一个命令
键入即可执行一个命令,如果该命令在查找路径中,那么在任何路径下,该命令均可执行。如果不在查找路径,那么必须键入该命令的整个路径名。
9.2分析与权限和所有权有关的问题
用户不能存取文件或目录的最大可能是它们的权限或所有权被修改过了。例如,当用户作为根用户编辑文件时,文件和目录的所有权就可能改变,在为新用户建立主 目录时,特别要注意将主目录下点(.)文件的所有者设置成该用户,如果用户不是点(.)文件的所有者,他们就不能在自己的主目录下建立文件。
另外,当改变用户组的所有权或将用户从/etc/group数据库中删除时,也会遇到同样的问题。
9.2.1改变文件的所有权
注意:当你拥有某文件或目录或者你是超级用户时,你才能修改它的所有权。
按以下步骤改变文件所有权。
1、键入ls –l 命令,在第三列显示文件的所有者;
2、成为超级用户;
3、 键入chown ,文件的所有权即指定给了新的所有者;
gtxa%ls - l quest
-rw-r-r-1 fred other 6023 Aug 512:06 quest
gtxa%su
Password:
#chown iqnatz:staff quest
#ls - l quest
-rw-r-r-l ignatz staff 6023 Aug 5 12:06 quest
#
9.2.2改变文件的权限
chmod命令可用于改变文件的权限。一般有两种方法,一是使用字符,其语法如下:chmod [who] [permission(s)] ,其中who可以是u、g或者o(即用户组或其它),你还可将它设成A用来改变所有权限(A缺省值),运算符可以是+或-,+表示增加权限,-表示删除权 限,权限为R、W或X,即写、执行,有关权限的更多信息请参阅手册中的chmod(1)。
例如:为每个人设置读、写执行权限,可键入:
gtxa%chmod +wrx dog
gtxa%ls -l dog
-rwxrwxrwx 1 janice Staff 54 ju1 7 11:33 dog
gtxa%
为每个人设置读和执行权限,可键入:
gtxa%chmod +rx dog
gtxa%ls -l dog
-r-xr-xr-x l janice staff 54 ju1 7 11:34 dog
gtxa%
为了禁止任何人写此文件,可键入:
gtxa%chmod -w dog
gtxa%ls -l dog
-r-xr-xr-x 1 janice staff 54 ju1 7 11:35 dog
gtxa%
在下面的例子中,对dog文件的所有者赋予读写执行权限:
gtxa%chmod u+ wrx dog
gtxa% ls - l dog
-rwxr-x r-x 1 janice staff 54 ju1 7 11:36 dog
gtxa%
为限制同组成员和其它人员执行该文件,可键入:
gtxa%chmod go -x dog
gtxa% ls - l dog
-rwxr-r-1 janice staff 54 ju1 7 11:37 dog
gtxa%
改变文件权限的第二种方法是使用chmod命令的数字形式。你可以使用3位数字来分别设置owner,group和other的权限,例如,644表示对所者设置读写权限,对同组用户及其它用户设置只读权限。
1、 键入ls –1 ,系统将列出当前各文件的权限。
2、 键入chmod ,改变文件权限。
注意:你可以通过使用匹配符(*,?)来改变某组文件或某个目录下所有文件的权限。以下例子将文件权限666改为644:
gtxa%ls -l quest
-rw-rw-rw-1 ignatz staff 6023 Aubg 5 12 :16 quest
gtxa%chmod 644 quest
gtxa%ls -1 quest
-rw-r-r-1 ignatz staff 6023 Aug 5 12:16 quest
gtxa%
9.2.3改变文件组的所有权
如果某文件的组所有者不正确,那么该组成员就不能修改该文件。为了修改文件组的所有权,你必须是该组成员或者是根用户。为了改变文件的组ID,使用命令 chgrp 。在solaris2.x下,ls -1命令显示文件夹所有者和用户组。当只需要显示组所有者时,可键入ls -lg命令。
$ls -lg junk
-wr-r-r-l other o Oct31 14:49 junk
$chgrp 10 junk
$ls- lg junk
-rw-r-r-1 staff o Oct 31 14:39 junk
GID可以在group数据库或本地/etc/group文件中找到,你可以通过使用Administration Tool的Database Manager来查看或修改组成员。

阅读(5031) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~