发博文
Fantasize

http://blog.chinaunix.net/space.php?uid=1746782

I love you not because of who you are, but because of who I am when I am with you.    
个人资料
  • 博客访问:135901
  • 博文数量:43
  • 博客积分:2010
  • 博客等级:大尉
  • 注册时间:2006-09-11 10:28:11
订阅我的博客
  • 订阅
  • 订阅到鲜果
  • 订阅到抓虾
  • 订阅到Google
字体大小: 博文
Solaris 9--SA 239 (2006-09-12 15:34)
分类: Sun 教材翻译

本书所涵盖章节:
第一部分、管理文件系统:
一、Solaris OE目录层次结构;
二、管理本地磁盘设备;
三、管理Solaris OE文件系统;
四、Mounts和Unmounts操作;

第二部分、安装软件:
五、安装Solaris9 OE;
六、对Solaris9 OE的包(package)管理操作;
七、在Solaris9 OE上管理软件补丁;

第三部分、执行系统启动程序:
八、执行Boot PROM命令;
九、系统启动和关闭步骤;

第四部分、用户和安全管理:
十、用户管理;
十一、系统安全;

第五部分、管理网络打印机和系统进程;
十二、配置打印服务;
十三、使用打印命令;
十四、控制系统进程;

第六部分、系统备份和恢复:
十五、文件系统备份;
十六、文件系统恢复;
十七、使用UFS快照备份一个已Mounted文件系统

 

还缺 第 10,12,13,15,16,17章节的内容!还希望有的朋友留个言!

谢谢!

 

Module 1 Solaris操作系统文件结构

第一章 Solaris目录结构介绍
目标
        完成此部分,你应该可以完成以下任务:
·描述根下的子目录
·描述文件组件
·描述文件类型
·使用硬连接

第一节  根目录及其子目录介绍
        Solaris OE的目录结构是以管理便捷为目的组织的。此目录树下的分支按照不同的管理目的分为独自的目录。例如,用于保存本地系统私有的文件的目录,与其它系统共享的目录,与home目录。
        逻辑上,所有的目录都是根目录下的子目录。然而物理上,这些目录可以位于单个的文件系统中或者被划分为多个文件系统。每个Solaris OE都有一个root文件系统,但是也可以有其它的文件系统,这些文件系统在可以挂载在树型目录结构中。大多数的文件系统都是创建于磁盘分片上的结构,这些结构包含或者容纳文件与目录。

重要的系统目录介绍
        Solaris OE包含一个重要的系统目录与文件体系。如下的列表是一些重要的系统目录与子目录:
/                所有文件系统名字空间的根
/bin                到/usr/bin目录的符号链接。是标准的系统命令的二进制文件的目录路径。
/dev        逻辑设备名的主目录,该目录的是指向/devices目录中的设备文件的符号链接。
/devices        物理设备名的主目录
/etc                包含主机特定的配置文件和系统管理的数据库的目录
/export        普通共享文件系统的默认目录,例如用户的home目录,应用软件,或者其它共享的文件系统
/home        用户的home目录的默认父目录或是挂载点
/kernel        目录中包含了平台独立的可装载的kernel模块,这是启动过程中将要用到的。
/mnt        一个便捷的,临时的文件系统挂载点
/opt        其它应用包的默认目录或者是挂载点
/platform        平台相关的可装载的内核模块的目录
/sbin        单用户下的bin目录,包含了基本的可执行文件,这些文件在启动过程中及系统失效后手工恢复时使用。
/tmp        该目录用于存放临时文件。该目录会在启动过程中被清除
/usr        该目录包含被所有系统用户使用的程序、脚本及库。这个目录名是UNIX系统资源的首字缩略语
/var        目录用于常变更的文件,这些文件包括临时、日志与状态文件。

下表列出了重要目录下的主要子目录

/dev目录下的主要的子目录
/dev/cua        UUCP与PPP的拔出设备文件
/dev/dsk        块磁盘设备
/dev/fd                文件描述述
/dev/md                逻辑卷管理元磁盘设备
/dev/pts        伪终端设备
/dev/rdsk        raw磁盘设备
/dev/rmt        raw磁带设备
/dev/sound        音频设备与视频设备控制文件
/dev/term        串行设备

/etc目录下的主要子目录
/etc/acct        记帐系统的配置信息
/etc/cron.d        cron工具的配置信息
/etc/default        各种程序的默认信息
/etc/inet        网络服务的配置文件
/etc/init.d        启停服务的脚本,在更改运行级时使用
/etc/lib        当/usr文件系统不可用时必须的动态链接库
/etc/lp                打印子系统的配置信息
/etc/mail        邮件子配置信息
/etc/nfs        NFS服务器日志的配置文件
/etc/opt        可选包的配置信息
/etc/rc#.d        进入或者退出特定的运行级时的脚本
/etc/skel        新用户帐号的默认的shell初始化信息

/usr目录的内容
/usr/bin        标准的系统命令
/usr/ccs        C编译程序与库
/usr/demo        示例程序与数据
/usr/dt                CDE软件的目录或挂装点
/usr/include        头文件(用于C程序,之类)
/usr/java        包含java程序与库的目录
/usr/kernel        平台无关的可装载的kernel模块,在启动过程中一般不会使用
/usr/lib        机器架构相关的数据库,各种程序库,与不是直接由root执行的二进制代码
/usr/opt        可选包的配置信息
/usr/sbin        系统管理命令
/usr/spool        指向/var/spool目录的符号链接

第二节  文件组件介绍
        Solaris OE中的所有文件都使用一个文件名与一个称为inode的记录。大多数的文件都使用数据块。一般地,文件名与inode记录相关联,而inode记录则提供到数据块的访问。
图1-2显示了文件组件的关系
图1-2
文件名
        文件名是用于访问与操作文件时最常使用的对象。文件必须有一个名字,而名字与一个inode记录相关联。
Inodes
        Inodes是Solaris OE用于记录文件相关信息的对象。一般来说,inode包含两个部分。一,inode包含文件相关的信息,包括所有者,文件的操作权限,及大小。第二,inode也包括了指向与文件关联的数据块的指针。
        Inode是被数据化的,每个文件系统都包含其所拥有的inode的列表。创建一个新的文件系统,也即是在该文件系统内创建一个新的inode列表。
数据块
        数据块是用于存储数据的磁盘空间单元。常规文件,目录,与符号链接都使用数据块。设备文件不包含数据。
识别文件类型
        Solaris OE支持的文件类型集几乎包含了所有的基于UNIX的操作系统的类型。一般地,文件提供了一种存储数据、激活设备或允许进程通信的手段。


第三节 Solaris OE文件类型
Solaris OE存在有很多种不同的文件类型,有四种主要的类型:
·常规或普通文件
·目录
·符号链接
·设备文件
        常规文件,目录与符号链接都存储一种或多种类型的数据。设备文件不存储数据,它提供到设备的访问路径。
        使用ls命令区别不同的文件类型。ls -l命令显示的信息中的第一列的字符指示了文件类型。
        第一列中的字符指示了不同的文件类型如下所示:
-        普通文件
d        目录
l        符号链接
b        块设备文件
c        字符设备文件

普通文件
        Solaris OE中最平常的文件类型就是普通文件了,用户可以使用普通文件来存储不同类型的数据。普通文件可包括ASCII文本或者二进制数据,包含数据,数据库数据,应用相关的数据,等等。
        创建普通文件有很多种方式。例如,用户可以使用vi编辑器来创建一个ASCII文本文件,用户也可以使用编译器来创建包含二进制数据的文件。另一个例子是,用户使用touch命令加上一个不存在的文件名来创建一个空的新普通文件。
        图1-3显示了一个名为file1的普通文件。如图示,名字file1与inode号1282相关联。与file1关联的数据块可以包含多种类型的数据之一,且文件可以被以不同的方式创建。

目录
        目录存储与文件名及inode号关联的信息。与普通文件可以包含不同类型的数据不同,目录只能包含文件名与inode的关联。目录包含逻辑上在目录内的所有类型的文件条目。
        图1-4显示了一个名为dir1的信息。如图所示,名字dir1与inode号4221关联。与dir1关联的数据块包含了一个文件名及其相关的inode号的列表。

mkdir命令是创建新目录的一种途径。
        考虑目录作为一个列表保存的信息。列表中的每个条目都与一个文件名对应。如果文件称为file1而目录称为dirA都逻辑上位于一个称为dir1的目录中,那dir1目录将一个条目与名字file1相关,其inode号是1282;及另一个条目与dirA相关,其inode号是5314。

符号链接
        符号链接是向另一个文件的文件。与目录只包含目录信息一样,符号链接也只包含一种类型的数据。
        符号链接包含到它所指向的文件的路径名。因为符号链接使用路径名指向其它文件,它们可以指向其它文件系统中的文件。
        符号链接文件的大小总是与其包含的路径名的字符数匹配。
        下面的例子中,一个叫/bin的符号链接指向目录./usr/bin。符号链接的大小是9字节,因为路径名./usr/bin包含9个字符。
        符号链接可以指向普通文件,目录,其他符号链接以及设备文件。它们可以使用绝对或者相对路径名。
        使用-s选项的ln命令创建一个符号链接。
# ln -s file1 link1
        符号链接把读写操作都定向到它所指的文件去。前面的命令显示了如何使用link1作为命令行参数,让ln命令引用file1。
        图1-5显示了一个叫做link1的符号链接。如图所示,link1文件与inode号3561关联。link1文件数据块的包含了到file1的路径名(./file2).

设备文件
        设备文件提供了到设备的访问方法。与普通文件、目录与符号链接不同,设备文件不使用数据块。设备文件的inode信息包含了指向设备的设备号。使用ls -l显示这些设备号。例如,一个普通文件长列表(即ls -l的输出)显示文件的大小。而一个设备文件的长列表对应的域则显示以逗号的两个数字。这两个数字被称为主设备号与从设备号。下例中,设备文件dad@0,0:a指向主设备号136与从设备号0。
# cd /devices/pci@1f,0/pci@1,1/ide@3
# ls -l dad@0*
        主设备号指定用于访问设备所需的设备驱动程序。从设备号指定设备驱动程序类中的特定单元。(即主设备的实例)
        图1-6中显示的设备文件dad@0,0:a,占用inode号90681。该inode包含指向特定设备的主设备号与从设备号,此例中,是硬盘上的一个分片。
        一般地,重配置启动会自动创建设备文件与到设备文件的符号链接。在Solaris 8 OE与Solaris 9 OE中,可以使用devfsadm命令手工创建新的设备文件。
        设备文件与其所控制的设备有直接的联系。inode中包含的主设备号与从设备号建立这种联系。
        图1-7显示了设备文件dad@0,0:a与其控制的硬盘设备之间的联系。dad@0,0:a的inode信息包含了主设备号136与从设备号0。主设备号136标识了dad的设备驱动程序。dad的设备驱动程序控制IDE设备。从设备号0,在此例中,标识了分片0。
        设备文件分为两:字符设备与块设备。字符设备也称为原始设备。这两类中的设备文件与不同的设备交互。

字符设备
        文件类型“c"标识了字符设备文件。对于磁盘设备,字符设备文件使用基于磁盘最小的可寻址单元,扇区来进行I/O操作。每个扇区有512字节大小。

块设备
        文件类型"b"标识了块设备文件。对于磁盘设备,块设备文件基于一个定义的块大小调用I/O操作。块大小取决于特定的设备,但对于Solaris使用的ufs,默认的块8K字节。

第四节  硬链接使用
        本节定义硬链接并描述如何使用他们。
硬链接介绍
        硬链接是文件名与inode的关联。硬链接不是一种独立的文件类型。每种类型的文件使用至少一个硬链接。目录中的每个条目都由一个硬链接构成。可以将每个文件名都看作是到一个inode的硬链接。当创建文件时,如使用touch命令,一个新的目录条目被创建,它将你指定的文件名与特定的inode号关联。在这种情况下,创建一个新的文件就是创建一个硬链接。
        在图1-8中,名为file1的文件在目录dir1中。在dir1中,名字file1与inode号1282关联。硬链接是file1与inode号1282的关联。
        每个inode中的信息都记录与其关联的文件名数量。这称为链接计数。在ls -l命令的输出中,链接计数出现在文件权限栏与文件所有者栏中间。
创建新的硬链接
        新的硬链接在与文件相关的inode中增加链接计数。
#ln file1 file2
# ls -l
total 0
-rw-r--r-- 2 root other 0 Apr 7 15:26 file1
-rw-r--r-- 2 root other 0 Apr 7 15:26 file2
# ls -li
total 0
1282 -rw-r--r-- 2 root other 0 Apr 7 15:26 file1
1282 -rw-r--r-- 2 root other 0 Apr 7 15:26 file2
        注意:两个文件共用一个inode,所以显示的链接计数都是2。

# find . -inum 1282
./file1
./file2
        使用ln命令创建到普通文件的新的链接计数。与符号链接不同,硬链接是不能跨越文件系统的。

删除硬链接
        删除一个文件是不会影响另一个文件的。链接计数会因而减少。



Module2 管理逻辑硬盘

显示系统硬件:

Using the /etc/path_to_inst file 这个文件最好不要手动改
Using the prtconf command
Using the format command

只显示已经附加上的设备:

# prtconf | grep -v not

注意: – The grep -v not command is used to omit all lines containing
the word “not” from the output (such as driver not attached).

使用devfsadm 命令

To restrict the operation of the devfsadm command to a specific device
class, use the -c option.

devfsadm -c device_class

The values for device_classinclude disk, tape, port, audio, and
pseudo. For example, to restrict the devfsadm command to the disk
device class, perform the command:

# devfsadm -c disk

指定多个级时可以这样:

# devfsadm -c disk -c tape -c audio

为检测指定设备名字的:

devfsadm -i driver_name

例如:
devfsadm -i sd 只检测 sd 支持的磁盘
devfsadm -i st 只检测st 支持的磁盘
devfsadm -i dad 只检测dad支持的磁盘

根据devfsadm发现新硬件修改/devices和/dev目录的内容

devfsadm -v

去掉硬件后可用以下命令进行扫描更新"
devfsadm -C

用format 对磁盘进行分区:

Partition Table Terms and Usage
Term
Description

Part
The slice number. Valid slice numbers are 0 through 7.

Tag
A value that indicates how the slice is being used.

0 = unassigned

1 = boot

2 = root

3 = swap

4 = usr

5 = backup

6 = stand

8 = home

Sun StorEdge™ Volume Manager array tags:

14 = public (region)

15 = private (region)

Flag
00 wm = The disk slice is writable and mountable.

01 wu = The disk slice is writable and unmountable. This is the default state

of slices dedicated for swap areas.

10 rm = The disk slice is read-only and mountable.

11 ru = The disk slice is read-only and unmountable.

Cylinders
The starting and ending cylinder number for the disk slice.

Size
The slice size: Mbytes (MB), Gbytes (GB), blocks (b), or cylinders (c).

Blocks
The total number of cylinders and the total number of sectors per slice.

提示: $字符表示把磁盘剩余空间自动分配到这个切片;
Note – Enter a dollar ($) sign as a value for the last partition size to
automatically assign the remaining space on the disk to this slice.

管理磁盘label:

有两种方法:
format ---> verify
prtvtoc命令
例如:prtvtoc /dev/rdsk/c1t0d0s2

The disk label information includes the following fields:

Dimensions
Describes the logical dimensions of the disk.

Flags
Describes the flags that are listed in the partition table.

Partition
A slice number. It is described further in

Table 2-2 on page 2-36.

Tag
A value used to indicate how the slice is being used. It is described further in Table 2-2 on page 2-36.

Flags
The 00 flag is read/write, mountable; 01 is read/write, unmountable; and 10 is read only. These are described further in Table 2-2 on page2-36.

First Sector
Defines the first sector of the slice.

Sector Count
Defines the total number of sectors in the slice.

Last Sector
Defines the last sector number in the slice.

Mount Directory
If the field is empty, the slice is currently not

mounted and no entry exists in the /etc/vfstab

file.

可以用prtvtoc 命令把磁盘的VTOC保存到一个文件中:

例如: prtvtoc /dev/rdsk/c1t0d0s2 > /vtoc/c1t0d0

可以把prtvtoc命令的输出内容导入到另外一块硬盘中去:

例如: fmthard -s datafile /dev/rdsk/c #t #d #s2

注意: fmthard 命令不能修改未加label的磁盘,你可以用format来完成fmthard这一要求;

Caution – The fmthard command cannot write a disk label on an
unlabeled disk. Use the format utility for this purpose

Module 3 管理solaris OE文件系统

介绍solaris文件系统:

Disk-based file systems
Distributed file systems
Pseudo file systems

一、Disk-based 文件系统包括如下几种:
UFS UNIX操作系统
hsfs cdrom 文件系统
fcfs DOS文件操作系统,如:fat32
udfs DVD文件系统

Distributed file systems包括:

NFS The network file system

Pseudo file systems包括:

tmpfs
swapfs
procfs
fdfs
mntfs

二、生成新的UFS 文件系统

详细见贴子底下的图片
Disk Label (VTOC)
在第一块磁盘扇区;占512k字节;
Boot Block
在VTOC后,点15 个扇区;在第1-15sectors ;
注:只有/ (boot)文件系统有一个活动启动块;其它文件系统在生成里都文件系统开始部分留出启动块;
Primary Superblock

超级块保存在16-31扇区;是一个描述文件系统的信息列表,包括以下内容:

The number of data blocks
The number of cylinder groups
The size of a data block and fragment
A description of the hardware, derived from the label
The name of the mount point
File system state flag: clean, stable, active, logging, or unknown


backup Superblock (备份超级块)
在文件系统生成时,柱面组从32sectors开始,这些复制的超级块可以在灾难后对Superblock的重要数据进行恢复;

cylinder group(柱面组)
每个文件系统在默认情况被分成若十个以16个柱面组成的柱面组;以改善磁盘访问;
文件经常通过把一个文件放到单一的柱面组,减少文件头到访问文件距离来优化磁盘性能.如果可能,文件系统经常把大的文件放到若干个柱面组中.


柱面组块(cylinder group block)

柱面组块是一个柱面组的列表,包含以下信息:

·inode的数量
·柱面组的数据块数
·目录的数量
·柱面组中自由块,自由inode与自由碎片
·自由块图
·自由inode图

ufs inode
inode中包含关于文件的如下信息:
·文件的类型与访问模式
·UID and GID
·文件的大小
·链接数
·文件最后被访问与修改时间,inode更改的时间
·文件使用的或分配给文件的数据块的总数
·两种类型的指针:直接指针与间接指针

提示: 用ls -l 查看文件详细信息
ls -i 查看inode 的详细信息

直接指针:
inode中有12个直接指针,每个指向8K的数据块,一共可指向96K数据块;

间接指针:
单间接指针:能指向2048个8K的数据块,可指向16M的数据块
双间接指针:包含单间接指针,最多可指向32G指针;
三倍间接指针:本来可以指向64TB的数据块,但由于UFS是32位寻址系统,所以最多只能指向1TB数据块;

数据块:

用于分配给UFS文件系统以存储文件和路径;数据块被分成8KB的逻辑块大小,进一步分可分到1KB的分片;
对于普通文件而言,数据块保存文件内容;对于路径而言,数据块存储inode的数据,和包含在路径中的文件名
对于没有存储文件,路径,间接指针的块,在柱面组map上被标记为自由块,这些map记录了磁道碎片来提高硬盘访问性能;


碎片(Fragmentation)

碎片是UFS文件系统有效地分配硬盘空间的一种方法;小于96KB的文件都是由fragmentation方法来存储;
一般地,数据块可以分成8个1024bytes的fragmentation,碎片是用来存储一个小8192bytes文件或小于8192bytes的文件部分;
大于96Kb的文件都是由数据块直接存储,不分再切分碎片;

如果两个文件同处于一个碎片,如果一个文件增长了,那么,UFS文件系统会把增长的文件放置到一个新数据块中,UFS文件不允许同一文件的碎片放置到不同的数据块中.


三、用newfs生成新的UFS文件系统:

newfs /dev/rdsk/c1t3d0s0

在newfs创建文件系统时,会留出1%-10%的空间给newfs给维护所用,这个参数就是minfree,可用命令fstyp查看minfree的值;在newfs创建文件系统时可以用 newfs -m %free 来指定;

fstyp -v /dev/rdsk/c0t0d0s0 | head -10

如果想修改此参数,可用以下命令:
tunefs -m 1 /dev/rdsk/c1t3d0s0


四、用fsck来检查UFS文件系统:
由于断电,内核软件错误,硬件错误,不正当关机所致的系统文件损坏或不一致,可用fsck来修复;

警告: 千成不要用fsck来检查已经mount上的目录,这会导致系统不可用或数据丢失;如果想fsck / /var /usr等目录的话,要转换到单用户模式;

提示 – The status of a file system's state flag determines whether the file
system needs to be scanned by the fsck command. When the state flag is
“clean,” “stable,” or “logging,” file system scans are not run.

fsck检查系统的不一致性:

超级块的一致性: involving such parameters as file system size, free block count, and free inode count.
柱面组块的一致性: 未分配的数据块的数量,未分配的inode的数;

inode 的一致性: the state of inode ,the link count, duplicate blocks, bad blocks, the inode size, and the block count for each inode.
任何未分配而有非0的引用计数的的inode会被链接到文件系统的lost+found目录中。

数据块的一致性:fsck不会检测普通的数据块,但它会查检目录数据块。在目录数据块中,fsck命令检测inode是否指向未分配的块,未分配而已标记为使用的块,已分配而标记为空闲的块与未链接到文件系统中的目录。这些目录被链接回文件系统的lost+found目录中。

lost+found路径: fsck命令就把那些已经分配,但还未被引用的目录和文件放到lost+found路径下;
如果没lost+found路径.,那么fsck创建,如果lost+found路径空间不够,那么fsck进行扩充.

非交互模式(Noninteractive Mode):在系统正常启动时,fsck处于Noninteractive Mode,我们通常称其为:preen, or silent mode.非交互模式下只进行较少的错误判断,修复,如果fsck发现较多的不一致时,会请请求root进行单用户模式进行交互式fsck.
交互模式: fsck会显示每个它遇到的问题,会建议修复,让root回答yes or no,

例如: fsck /dev/rdsk/c0t0d0s7 检测没有在/etc/vfstab的文件系统,

fsck /export/home 根据mount目录来检测.

fsck -o f,p /dev/rdsk/c0t0d0s5 -o参数与其它参数合用;f(force强迫)p(preen整理)

五、恢复文件系统:

可用fsck对文件系统进行恢复:

Allocated unreferenced file(分配的但引用的)
Inconsistent link count(不一致的链接数)
Free block count corruption(自由块坏掉)
Superblock corruption(超级块坏掉)


修复分配但未引用的错误:

如果fsck发现已经分配但未引用的文件时,会发出以下提示,如Y,则把文件指向lost+found目录;
** Phase 3 - Check Connectivity
UNREF FILE I=788 OWNER=root MODE=100644
SIZE=19994 MTIME=Jan 18 10:49 1999
RECONNECT? y

可以通过以下步骤来分析解决问题:

1。显示lost+found目录的内容
2。判断文件的类型 (file命令)
3。查看文件内容(ASCII文件用cat或more,二制文件用string)
4。如果文件是完整的,并且知其原始位置的,可以拷贝到原始位置;

调整链接数:

如果fsck发现在文件系统的inode的链接数与实际不一致时,会发出以下信息,让您判断是否调整:

** Phase 4 - Check Reference Counts
LINK COUNT DIR I=2 OWNER=root MODE=40755
SIZE=512 MTIME=Jan 18 15:59 1999 COUNT 4 SHOULD BE 3
ADJUST? y

在这个fsck过程中, you might also be asked to clear or remove a link.
BAD/DUP type I=200 OWNER=root MODE=40755
SIZE=512 MTIME=Mar 14 08:03 2002
CLEAR? y

修复空闲表:

如果fsck发现未分配的块数与超级块未分配块列表中不一致时,会发出是否以未分配的块数来修复列表内容:
** Phase 5 - Check Cyl groups
CG 0: BAD MAGIC NUMBER
FREE BLK COUNT(S) WRONG IN SUPERBLK
SALVAGE? y


用备份超级块:

超级块的坏掉会导致系统无法mount,系统会发出如下信息:

“Can't mount file_system_name”
or
“device_name is not this fstype”

每个文件系统在第32块都有一个备份块以供恢复超级块,如下:
# fsck -o b=32 /dev/rdsk/c1t3d0s0
如果第32块也属于坏掉的部分则没有办法从32块恢复,可用newfs -N来查看其它备份块,
newfs -N /dev/rdsk/c0t0d0s7
提示: 如果不加-N参数,则文件系统会被重写;
用newfs -N查看到其它备份块,用此来恢复数据:
fsck -o b=535952 /dev/rdsk/c0t0d0s7

六、管理文件系统应用

df – Displays the number of free disk blocks
du – Summarizes disk use
quot – Summarizes file system ownership


df 显示磁盘空间已用,可用,总共

-a Reports on all file systems, including those with entries in
the /etc/mnttab file for which the ignore option is set
-b Prints the total number of Kbytes free
-e Prints only the number of files free
-k Displays disk allocation in Kbytes
-h Acts like the -k option, except that sizes are in a more
readable format, for example, 14K, 234M, 2.7G, or 3.0T
-l Reports on local file systems only


Fields for the df -k Command
Field Definition
Filesystem The mounted file system
kbytes The size of the file system in Kbytes (1024 bytes)
used The number of Kbytes used
avail The number of Kbytes available
capacity The percentage of file system capacity used
Mounted on The mount point

提示: 已用的和可用的,总共的可用的系统空间是除了minfree空间之外的部分.
如果系统文件用满后,普通用户会收到“File System Full”,对root用户而言是可用的.

用du命令显示磁盘的块数(512kb组成)

du -options directory

-k 用kb显示
-s 显示目录概要
-a 全部显示

用quot命令显示有多少空间正在被那些户所用:

quot -options filesystem

-a Reports on all mounted file systems
-f Includes the number of files

用smc&打管理界面

Moduel 4 Performing Mounts and Umounts

Note – While system administrators typically use the /usr/sbin/mount
command, the system boot scripts use the /sbin/mount command.

介绍/etc/vfstab文件:

/etc/vfstab列出系统启动时自动mount的文件, 除/etc/mnttab和/var/run之外;
/etc/vfstab文件分出七个区域:
device to mount 被mount的设备和伪设备
device to fsck The raw or character device e.g. /dev/rdsk下的
对于伪设备如:/proc 或 fd 这项可写 -
mount point mount 的路径
FS type 文件系统类型
fsck pass 指示在系统启动时是否fsck检测;0不检1表示fsck为系统正常启动运行
大于1时表示把此设备加入fsck运行列表,fsck可同时检测8个设备,
mountall命令忽略此项
mount at boot yes 要求启动时自动mount,no 则不

Note – For / (root), /usr, and /var (if it is a separate file system) file
systems, the mount at boot field value is specified as no. The kernel
mounts these file systems as part of the boot sequence before the
mountall command is run. The mount command explicitly mounts the
file systems / (root) and /usr as specified in the
/etc/rcS.d/S30rootusr.sh script and the /var file system as specified
in the /etc/rcS.d/S70buildmnttab script.

mount options A comma-separated list of options passed to the
mount command. A dash (-) indicates the use of
default mount options.


介绍/etc/mnttab文件:
此文件是一个只读文件,当mount一项时,会在此文件中入一条,umount后也会在此文件中删除相应项;

包括五项区域:

mount point 挂接点
Device Name 设备名,块设备是文件系统的物理名称;
Mount Options 文件系统上生效的挂载选项列表
dev=number 主从设备号
Date and time mounted mount的日期时间


使用mount

mount /dev/dsk/c#d#t#s# /mountpoint
不加参数时,使用以下默认属性:

read/write Indicates whether reads and writes are allowed on
the file system.
setuid Permits the execution of setuid programs in the
file system.
intr/nointr Allows and forbids keyboard interrupts to kill a
process that is waiting for an operation on a locked
file system.
nologging Indicates that logging is not enabled for the ufs file
system.
largefiles Allows for the creation of files larger than 2 Gbytes.
A file system mounted with this option can contain
files larger than 2 Gbytes.
xattr Supports extended attributes not found in
standard UNIX attributes.
onerror=action Specifies the action that the ufs file system should
take to recover from an internal inconsistency on a
file system. An action can be specified as:
panic—Causes a forced system shutdown. This is
the default.
lock — Applies a file system lock to the file
system.
umount — Forcibly unmounts the file system.
------------------------------------------------------------------------------
Note – Due to file system overhead, the largest file size that can be created
is approximately 866 Gbytes.
------------------------------------------------------------------------------

使用mount命令的option
Some options used to mount local file systems include: ro, nosetuid,
noatime, nolargefiles, and logging.

格式: mount -o option,option,... device_name mount_point

# mount -o ro /dev/dsk/c0t0d0s6 /usr -------设成只读
下面是使用多个参数,设成只读以及不允许执行setuid进程,但并不限制生成setuid
# mount -o ro,nosuid /dev/dsk/c0t0d0s7 /export/home
为提高磁盘访问性能,文件系统访问频繁,最后访问时间并不计较的可以
# mount -o noatime /dev/dsk/c0t0d0s7 /export/home
防止成生超过2G的文件,
# mount -o nolargefiles /dev/dsk/c0t0d0s7 /export/home
如果文件系统已经存在超过2G的大文件,mount会挫败,如果想成功mount,则必须删除相关大文件,
并且删除后必须用fsck来更新超级块的信息,如果一次运行fsck还不能成功mount则必须用fsck
来清除超级块的信息;

使UFS文件系统写日志;
# mount -o logging /dev/dsk/c0t0d0s7 /export/home

存放日志文件的大小,大约是每1G分配1M的大小,最大不超过64M字节;
当UFS日志达其最大时,它就开始将事务记录到文件系统中。文件系统被卸载时,整个UFS日志
都被清空,所有事务都被写入文件系统。
UFS日志有两个好处。一,它文件系统的不一致性,也就不再需要长时间运行fsck扫描。
二,可以跳过fsck扫描,这就减少了系统在被以非正常的关闭方法关闭时,重启的时间,

使用mountall命令:
mountall -l 只mount本地的所有文件系统;
mountall 命令读取/etc/vfstab文件内容,当device to fsck 项大于0时,fsck会检测文件系统是否完好,以致于安全挂接.当系统文件坏掉,fsck会试图修复,mountall会mount其它挂接点,和 device to fsck 项等于0的挂接点.

mount一个新的文件系统:
八步:
1.把硬盘放入服务器,
2.重启或devfsadm让系统识别硬盘;
3.format把硬盘分区;
4.newfs在磁盘slice上生成新的文件系统;
5.在/目录下用mkdir 生成一个新的挂接点;
6.mount文件系统到挂接点;
7.用mount命令查看是否mount成功;
8.修改/etc/vfstab文件,让系统下次重启时自动加载;

mount不同类型的文件系统:

如果mount时没有以mount -F fstype指明的话,mount会以ufs来作为默认的类型,mount根据设备名, 块名,或挂接点来判断文件类型;

mount 不能从/etc/vfstab的fs entry来判断,会以/etc/default/fs file 或
/etc/dfs/fstypes来决定文件的挂接类型,如果是本地文件系统则是/etc/default/fs 文件中一行
LOCAL=ufs 来确定挂接类型;
如果是远程文件系统,则从/etc/dfs/fstypes第一行来确定
nfs NFS Utilities
autofs AUTOFS Utilities
cachefs CACHEFS Utilities

Using the fstyp Command来查看文件类型:

# fstyp /dev/rdsk/c0t0d0s7
ufs
指定一下hsfs文件系统:
当volume manage停止时,用hsfs来指定一个cdrom
# mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom
指定一个pcfs文件系统:
当卷管理停止时,挂接一个驻留在diskette(软盘)的文件系统

# mkdir /pcfs
# mount -F pcfs /dev/diskette /pcfs


执行umount命令:
提示:在umount文件系统前,都是先从/etc/mnttab文件种删除相应行;

从挂接点删除:
#umount /export/home
从逻辑硬件文件名删除:
# umount /dev/dsk/c0t0d0s7

执行umountall命令:
/usr/sbin/umountall命令会在系统关闭或在命令输入umountall时读取/etc/mnttab文件,然后umount
vfstab文件中除/ (root), /usr, /proc, /dev/fd, /var,/var/run, and /tmp.之外所有行;

umount所有文件系统:
#umountall
umount所有本地的文件系统:
#umountall -l

umountall状态为busy的系统:

以下四种情况,文件系统都会显示:umount: file_system_name busy

1 A program is accessing a file or directory in the file system
2 A user is accessing a directory or file in the file system
3 A program has a file open in that file system
4 The file is being shared

有两种方法解决:
(1) 使用fuser命令来确认挂接点有那些进程在访问,然后杀掉
(2) 用umount -f 强制umount;

用fuser命令的四步:
1.确认挂接点有那些进程需要杀掉
#fuser -cu /mount_point
2.向进程发出SIGKILL信号:
#fuser -ck /mount_point
3.确认看是否还有进程在访问挂接点
#fuser -c /mount_point
4.umount挂接点
#umount /mount_point

umount -f 丢失数据,僵死进程,但比较适合远程共享时,远程没有响应.

在启动失败时,修复重要文件:

1.插入solaris 9 1 of 2 cd-rom
2.OBP下运行:
oK>boot cdrom -s
3.用fsck来检测修复/ 根目录:

# fsck /dev/rdsk/c0t0d0s0

4.如果检测成功,把根目录的挂接点挂到一个新建的目录上:
# mount /dev/dsk/c0t0d0s0 /a
5.设置TERM参数,使vi能正常工作:
# TERM=sun
# export TERM
6.编辑/a/etc/vfstab,
7.umount文件系统:
# cd /
# umount /a
8.重启系统init 6


访问mount 软盘和光盘

volume management提供两大益处:
1.对于root用户和非root用户,都提供diskettes and CD-ROMs的自动mount
2.能上其它网上系统访问本系统的移动存储设备;

volume management自动检测CD-ROM,但不检测diskette,除非用volcheck. volcheck检测diskette和其它可移动设备.
volume management能mount以下文件系统:

ufs, pcfs, hsfs, udfs


用卷管理:
如是vold检测到软件或光盘并且发现其中包含文件系统会把它们mount到相应位置:

First diskette drive /floppy/floppy0
First CD-ROM or DVD drive /cdrom/cdrom0
First Jaz drive /rmdisk/jaz0
First Zip drive /rmdrive/zip0
First PCMCIA card /pcmem0

如果没有发现文件系统:

First diskette drive /vol/dev/aliases/floppy0
First CD-ROM or DVD drive /vol/dev/aliases/cdrom0
First Jaz drive /vol/dev/aliases/jaz0
First Zip drive /vol/dev/aliases/zip0
First PCMCIA card /vol/dev/aliases/pcmem0

当volume management 启动时,一个普通用户访问cdrom或diskette时需要以下几步:

1.插入相应设备,光盘或软盘;
2.如是软盘需要volcheck
3.cd 到相应目录
4.在目录操作
5.umount 目录
6.eject出设备

volume management两个重要文件:

/etc/vold.conf volume management配置文件,配置一些条目,如插入,弹出设备时的动作,
那些设备被volume management管理,那些设备是不安全弹出等.

/etc/rmmount.conf rmmount命令的配置文件,rmmount是一个被volume management在光盘或
软盘弹出时执行的命令;

限制mount光盘或软盘:
停止卷管理服务:
# /etc/init.d/volmgt stop 或 # pkill -9 vold
启动卷管理服务:
# /etc/init.d/volmgt start

没有卷管理服务时访问光盘或软盘:
普通用户需要以下九步:
1.插入光盘或软盘;
2.su到root用户;
3.如果需要 ,生成一个挂接点.
4.判断设备上文件系统类型;
5.用mount和其属性把设备mount
6.在设备下操作处理,
7.工作完后umount设备;
8.弹出设备
9.退出root session

mount一个光盘:
# mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom
mount一个软盘:
# mkdir /pcfs
# mount -F pcfs /dev/diskette /pcfs

Module 5 安装solaris9操作系统

六种方法:
1.Solaris suninstall program
2.Solaris™ Web Start Installation software
3.Custom JumpStart™ procedure
4.Solaris Web Start Flash installation
5.Standard upgrade
6.Solaris™ Live Upgrade method
安装solaris 9的硬件要求:
A system based on an UltraSPARC& processor
64 Mbytes of memory
2.3 Gbytes of disk space
A keyboard and monitor
Access to a CD-ROM drive or an installation server

一、 solaris操作系统的组件:

Software packages
Software clusters
Software groups
这们之间的关系:Software packages<Software clusters<Software groups

Software packages包含了一组文件和路径;
Software clusters包含了许多软件包:例如:
CDE的Software clusters就包含了以下的lpackages
SUNWdtab SUNWdthed SUNWdtmad SUNWeudhr
SUNWdtbas SUNWdthev SUNWdtrme SUNWeudhs
SUNWdtdem SUNWdticn SUNWdtwn SUNWeudis
SUNWdtdmn SUNWdtim SUNWeudba SUNWeudlg
SUNWdtdst SUNWdtinc SUNWeudbd SUNWmfman
SUNWdthe SUNWdtma SUNWeudda

Software groups: solaris OE就有以下几个Software groups来组成:

Core
End User System Support
Developer System Support
Entire Distribution
Entire Distribution Plus Original Equipment Manufacturers (OEM)

Core software gruop,只一个软件cluster,即SUNWCreq,是一个最小的软件,包括启动部分和最小的配置;不支持一些服务,它所支持只有:telnet ftp NFS NIS DNS,和一些需要CDE的驱动,但没有CDE,不包括在线手册.
End User System Support Software Group (SUNWCuser)
包括core和一些推荐的软件即一个CDE;
Developer System Support Software Group (SUNWCproq)
包括:End User 软件包和library,在线手册,程序开发工具;
Entire Distribution(SUNWCall)
包括:Developer system软件包,和其它一些服务,
Entire Distribution Plus OEM Support Software Group(SUNWXCall)
包括:Entier 软件包和支持OEM的硬件支持;

查看cluster配置,可以通过以下:
# grep METACLUSTER /var/sadm/system/admin/.clustertoc
METACLUSTER=SUNWCXall
METACLUSTER=SUNWCall
METACLUSTER=SUNWCprog
METACLUSTER=SUNWCuser
METACLUSTER=SUNWCreq
METACLUSTER=SUNWCmreq

注意:SUNWCmreq是一隐藏的softer cluster,是可以配置一个比core还小的应用;

查看当前clustser的配置:
# cat /var/sadm/system/admin/CLUSTER
CLUSTER=SUNWCXall


二、从光盘安装solaris

安装时需要的工作:
1。考虑为每个语言包的空间;
2。如果提供打印和mail应用,就增加一下/var的文件系统;
3。计划用crash dump 特性,就为/var分物理内存两倍的空间;
4。计划给每个用户提供home目录就生成一个/export文件系统;
5。分配30%给每个文件系统,生成mininum给每个文件系统,以备将来更新;
6。给附加软件和第三方软件预留空间;
安装时提供以下信息:
Hostname ,IP , Name server type(NIS or LDAP..),
、 subnet mask, root password, language



Module 6 管理solaris9的软件包

软件包包含:
1.描述软件包的文件和需要占用的硬盘空间;
2.压缩的软件
3.在软件安装,删除时的脚本;

/var/sadm/install/contents

此文件包含了系统中所有安装的软件记录;
# more /var/sadm/install/contents 显示所有内容
# grep showrev /var/sadm/install/contents 查找相关软件包是否被安装;

命令行管理软件包:

pkgadd 在操作系统上安装软件包
pkgrm 从系统中删除软件
pkginfo 显示软件包信息
pkgchk 检测软件包安装信息;

显示系统中安装的软件包:

/var/sadm/pkg这个目录保存了安装的软件包记录;

下面这个命令显示了系统已装的信息包;
# pkginfo | more
<some output omitted>
application NSCPcom Netscape Communicator
system SUNWaccr System Accounting, (Root)
system SUNWaccu System Accounting, (Usr)
system SUNWadmap System administration applications
system SUNWadmc System administration core libraries
system SUNWaudd Audio Drivers)
ALE SUNWciu8 Simplified Chinese iconv modules for UTF-8
system SUNWcsd Core Solaris Devices
CTL SUNWctplx Portable layout services for CTL (64-bit)
system SUNWdoc Documentation Tools
application SUNWdej2p Java Plug-in

第一列: 软件包的类型;系统,应用 , CTL或ALE
第二列: 软件包名称
第三列: 软件包的描述;

显示所有软件包的详细信息:
# pkginfo -l | more
显示SUNWman软件包的详细信息:

# pkginfo -l SUNWman
PKGINST: SUNWman
NAME: On-Line Manual Pages
CATEGORY: system
ARCH: sparc
VERSION: 42.0,REV=35
BASEDIR: /usr
VENDOR: Sun Microsystems, Inc.
DESC: System Reference Manual Pages
PSTAMP: tinkertoym21003318
INSTDATE: Sep 27 2001 10:43
HOTLINE: Please contact your local service provider
STATUS: completely installed
FILES: 7033 installed pathnames
3 shared pathnames
84 directories
81450 blocks used (approx)

显示系统已安装软件包的数量:
# pkginfo | wc -l


显示光盘相关目录的软件包:
pkginfo -d /cdrom/cdrom0/s0/Solaris_9/Product |more

提示:光盘CD1of2 中放了core and END USER software Groups
cd2 of 2 中放了Developer, Entire Distribution, and Entire Distribution Plus OEM Support software groups.


安装软件包从光盘到系统中:
# pkgadd -d . SUNWns6m

查看软件安装状况:
# pkgchk SUNWcarx

加-v 参数可查看软件包安装在那些目录下放置了文件:
# pkgchk -v SUNWcarx

查看文件状态:
#pkgchk -p /etc/passwd
查看passwd文件什么时候软件包创建,最一次修改时间以及原始文件大小,及现在大小;
#pkgchk -l -p /etc/group
查看此文件被那个软件包创建,以及一些相关信息;

提示:必须使用绝对路径,否则不显示信息;

删除软件包:

# pkgrm SUNWapchr 删除软件包SUNWapchr


增加一个软件包spool 路径:
默认情况下,spool路径放在/var/spool/pkg ,
增加方法如下:
# pkgadd -d /cdrom/cdrom0/s0/Solaris_9/Product -s spool SUNWensqr.u

如果想删除spool路径:
# pkgrm -s spool SUNWensqr.u

如果想增加一个spool中径到一个自己指定的目录/export/pkg下,则如下操作:

# pkgadd -d /cdrom/cdrom0/s0/Solaris_9/Product -s /export/pkg SUNWensqr.u
# pkgrm -s /export/pkg SUNWensqr.u


本章回顾:
pkginfo 显示安装在系统中的软件包或在介质可用的软件包
pkgadd 安装软件包
pkgrm 删除软件包
pkgchk 检测属于软件包的路径的属性,以及软件包状态;

/var/sadm/install/contents 存放安装在系统中的所有软件包信息
/opt/pkgname 推荐但没有安装的非附送软件
/opt/pkgname/bin or /opt/bin 没有安装的非附送软件包的可执行文件
/var/opt/pkgname or /etc/opt/pkgname 非附送软件的日志文件存放处;


Module 7 管理软件补丁

solaris补丁共分以下五种:

标准补丁(standard pathc):维护指定软件或硬件的问题;
推荐补丁(recommended pathc):大部分系统可能出现的问题;
Y2K patch(二千年问题补丁):
补丁群(patch cluster):标准补丁,推荐补丁,安全补丁,Y2k patch等补丁被捆到一起.
维护更新:(Maintenance update)

patch号的规则:
例如:105050-01 , 105050为基础号; 01为版本号;

可通过http://sunsolve.sun.com或FTP到网上下载patch;
pathc文档放在/pub/patches目录下;

Solaris9.PatchReport 介绍solaris9patch摘要
9_Recommended.README 介绍安装方法,以及一些提示和警告;

检查系统已经安装的patch:
# showrev -p

# patchadd -p

提示:showrev -p 和patchadd -p是一样的,只是patchadd显示稍微详细一点,
还有就是showrev是一个二制命令,patch是一个脚本命令;

显示patch安装的目录:
# ls /var/sadm/patch
所以/var必须为安装补丁预留充分的空间;

获取补丁的方法:
用户可向SUN索取update CDrom,或到网站下载;
-------------------------------------------------------------------------------------------
提示:mget获取文件时每个文件都会提醒,如果不想可以用ftp -i FTPweb,或者在FTP登录后输入prompt命令;
--------------------------------------------------------------------------------------------

准备安装:
.ZIP文件: # /usr/bin/unzip 105050-01.zip
.tar.z文件:# /usr/bin/zcat 105050-01.tar.Z | tar xvf -

安装:
# patchadd 105050-01

存储在/usr/sbin/patchadd下的error code:
0 No error.
1 Usage error.
2 An attempt to apply a patch that has already been
applied.
3 The effective user ID (EUID) is not root.
4 An attempt to save original files failed.
5 The pkgadd command failed.
6 The patch is obsolete.
7 An invalid package directory.
8 An attempt to patch a package that is not installed.
9 Cannot access /usr/sbin/pkgadd (client problem).
10 Package validation errors.
11 An error occurred while adding a patch to the root
template.
12 The patch script terminated due to a signal.
13 A symbolic link was included in the patch.
14 Not used.
15 The prepatch script had a return code other than 0.
16 The postpatch script had a return code other than 0.
17 A mismatch of the -d option occurred between a
previous patch installation and the current one.
18 There is not enough space in the file systems that are
targets of the patch.
19 The $SOFTINFO/INST_RELEASE file was not found.
20 A direct instance patch was required but was not
found.
21 The required patches have not been installed on the
manager.
22 A progressive instance patch was required but was not
found.
23 A restricted patch is already applied to the package.
24 An incompatible patch was applied.
25 A required patch was not applied.
26 The user-specified backout data cannot be found.
27 The relative directory supplied cannot be found.
28 A pkginfo file is corrupt or missing.
29 Bad patch ID format.
30 Dry run failures occurred.
31 The path given for the -C option was invalid.
32 You must be running the Solaris 2.6 OE to the Solaris 9
OE.
33 The patch file was formatted incorrectly or the patch
file was not found.
34 An incorrect patch spool directory was given.
35 A later revision was already installed.
36 You cannot create a safe temporary directory.
37 An illegal backout directory was specified.


删除补丁patchrm:
如下三种情况无法正常删除补丁:

1.在安装补丁时用了-d参数:patchadd -d 即更新不进行备份;
2.此补丁被其它补丁使用;
3.补丁已经被更新的补丁替代;

# patchrm 105050-01


安装patch cluster:

patch cluster由推荐补丁,安全补丁以及Y2K patch组成;安装时必须在/ /var /usr /opt有至少10M的空间,会把patch存在/var/sadm/pkg目录,也可-nosave,将不能对个别patch进行恢复删除,

具体步骤如下:
1.确定.zip 或.tar.z文件已经解压;
2.决定使用默认的save还是-nosave属性;
3.到解压后的patch cluster目录,进行安装
# cd patch_cluster_directory
# ./install_cluster
4.查看个别的patch的README文件,看是否还要进行附加的步骤;
5.查看日志文件,查看详细信息;
6.重启机器,使patch 生效;

第八章 执行PROM命令

目录
完成本部分的学习后,管理员可以执行如下任务:
·了解boot PROM(programmable read-only memory)的基础知识
·使用基本的boot PROM命令
·标识系统启动设备
·创建删除定制的设备别名
·在shell中查看与更改NVRAM(novolatile random access memory)
·中止未响应的系统

第一节 boot PROM基础介绍
所有的Sun系统都有常驻的boot PROM固件,提供启动之前的基本硬件测试与初始化。boot PROM还支持从不同的设备启动。此外,还具有一个提供许多重要功能的用户接口。
Sun boot PROM可访问一个标准的普通设备驱动程序集。系统使用这些驱动程序访问并控制总线和启动设备,以正常启动。
所有版本的Openboot结构都支持第三方的板卡标识板卡自身,并装载其内建的设备驱动程序。在系统启动过程中硬件配置阶段,OpenBoot PROM请求每个设备声明自己的类型,并装载其内建的驱动程序。
图8-2显示了标识过程。

图8-2 第三方设备标识过程

OpenBoot体系结构标准的目的
IEEE OpenBoot架构标准的目的是用于提供如下功能:
·测试并初始化系统硬件
·判定系统的硬件配置
·启动操作系统环境
·为配置、测试与调试提供交互式的接口
·支持使用第三方的设备

Boot PROM
每个Sun系统都有一个boot PROM芯片。容量1M的芯片通常与CPU位于同一块板上。Boot PROM芯片在老式的系统上常位于一个可插拔的接口上。对于3.x版本的PROM,该芯片被固化在主系统板上。
Ultra工作站使用可重编程的Boot PROM,称为闪存PROM(FPROM)。FPROM支持使用软件将新的启动程序数据加载入PROM中,而不是用更换芯片的方式进行功能升级。这些升级程序以CDROM方式发行。
桌面系统中有一个写保护跳线,在写PROM之前必须更改跳线。跳线默认的位置是写保护。参考Refer to the Flash Programming Manual for Ultra Desktop Systems手册, part number 802-3233-17,查看系统的路线位置。
注意:很多系统的跳线位于安装的帧缓冲区或其它可移动的卡下方。在移除更换这些卡时要小心。
Boot PROM的主要功能是测试系统硬件,启动操作系统环境。Boot PROM固件被称为monitor程序。
Boot PROM固件在操作系统启动、内核可用之前控制了系统的运行。Boot PROM还给用户提供了用户接口与固件工具命令,也称为FORTH命令集。命令包括启动命令,诊断命令,及修改默认配置的命令。
注意:Boot PROM不能识别Solaris Operating environment(Solaris OE)文件系统或文件。它主要负责处理硬件设备

Sun Boot PROM发展已经经历了5代,每一代都有其基本的版本号,如下列表:
版本 描述
1.x SPARC系统上的第一代Boot PROM
2.x 第一代的OpenBoot PROM
3.x 使用flash更新特性的OpenBoot PROM。可以不用更换Boot PROM芯片而更新3.x固件。这一代被用于Sun UltraSPARC产品线
4.x 支持64位UltraSPARC III 处理器的OpenBoot PROM
5.x 用于Sun Enterprise 3500,4500,5500及6500服务器

运行如下命令查看系统上运行的OpenBoot PROM版本:
# /usr/platform/‘uname -m‘/sbin/prtdiag -v

NVRAM
每个Sun系统中另一个重要的硬件设施是NVRAM芯片。该可移除的芯片通常位于主系统板上。
NVRAM模块包含EEPROM (electronically erasable programmable read-only memory)。EEPROM存储了用户在默认的Boot PROM参数设置集中更改的启动参数。这种机制让用户可以在特定环境下配置系统以特定的方式运行,具有一定程度的灵活性。NVRAM模块内部有一块锂电池,为NVRAM和时钟供电。
NVRAM包含可编辑区及不可编辑区。不可编辑区包括如下内容:
·以太网mac地址,如8:0:20:5d:6f:9e
·系统host ID值,如805d6f9e
可编辑区包括如下内容:
·time-of-day(TOD)时钟值
·描述系统运行参数的配置数据
·一个诊断模式开关,启用或禁用加电自检(POST)
·默认启动设备的设备名与路径
·启动过程中使用的定制程序位置

注意:注意保持NVRAM芯片,因为它包含host ID。很多需要license的软件包都是基于系统的host ID的。NVRAM芯片上有一个黄色的标签,上面有一个条形码。如果芯片失效,Sun可以根据该条形码提供替换芯片。替换芯片有与原芯片相同的host ID与以太网MAC地址。可以将替换芯片插入系统上原来芯片所在的位置进行替换。

图8-3显示了Boot PROM与NVRAM的基本组件。

图8-3 PROM的基本结构
POST
系统加电时,会执行一个低级的POST。低级POST的代码被存储在Boot PROM中,
它被用于检测系统硬件的最基本的功能。
成功完成低级POST阶段以后,Boot PROM固件接管控制并执行如下的初始化过程:
·探测内存,然后探测CPU
·探测总线设备,解析其驱动程序,并建立设备树
·安装终端
在Boot PROM初始化系统之后,Boot PROM与NVRAM中存储的系统检测参数决定是否和如何启动操作系统环境。

控制POST阶段
POST运行的第一个检测是检测是否有键盘连接到系统及是否按下了Stop键选项。
注意:可以使用Sun键盘控制POST阶段。
Stop键盘位于键盘的左侧。将Stop键与其它键一同按下,启用不同的调试模式。Stop组合键影响OpenBoot PROM,定义系统加电时POST如何运行。下面是Stop键的组合:
·Stop-D 系统加电时按下Stop键和D键,固件自动切换到诊断模式。此模式将在系统硬件上运行extensive(广泛的)POST诊断。OpenBoot PROM变量diag-switch?被设置为true。
图8-4显示了diag-switch?变量的作用

图8-4 加电测试
注意:Stop-D组合在串口终端上不可用

·Stop-N组合键 系统加电时同时按下Stop键和N键,将NVRAM参数设为默认值。当键盘上的LED灯开始闪烁时,可以放开键,然后系统就继续启动。
不正确的NVRAM设置可能会让系统启动失败。例如,在闪存PROM下载时,如这时掉电,NVRAM的一些内容可能就会不可用。
如果系统不能启动,怀疑是因为NVRAM参数未正确设置,参数可以被很容易地改变为默认值。

·Stop-A组合键 按下Stop键与A键会立即中断任何当前正在运行的程序,并回到OpenBoot PROM的命令行模式下。系统显示ok提示符,表示接受输入OpenBoot PROM命令。
注意:Stop-A组合键,是到ok提示符下的方法之一,但不推荐,除非别无选择。Stop-A键可能会导致Solaris OE文件系统崩溃,这将很难修复。

禁用Abort组合键
系统管理员可能会想禁用abort组合键(即Stop-A),以防止可能的文件系统崩溃,使系统更安全(防止别人使用Stop –A 组合键进入PROM提示符)。
编辑/etc/default/kbd文件禁用abort组合键。将语句KEYBOARD_ABORT =disable取消注释。将该行前的注释符号删除,保存文件,并执行命令kbd -i。完成操作后,系统将只允许在启动过程中使用Stop-A组合键。
也可将系统配置更改,把abort组合键改为其它替代的组合。查看kbd命令的man手册,获取更多信息。

输出POST到串口
系统管理员可以使用串行线连接到系统的串口上,获取POST输出的更多信息。
当系统加电时,POST查找键盘,如果系统中没有键盘,POST会将系统输出转向串行口A。
POST在当系统的PROM参数diag-switch?设置为true时,会以诊断模式运行,执行更多的检测。
确保使用正确类型的null modem电缆连接到串口A上。
一些系统需要特殊的适配电缆。将电缆的另一头连接到ASCII终端的modem端口上,如图8-5所示。

下面的例子是一台Sun Blade 1000工作站的POST输出:
Partial Post Output Listing
@(#) 4.0 Version 29 created 2000/07/12 16:46
Clearing TLBs Done
Reset: 0000.0000.0000.0010 SPOR
Loading Configuration
Membase: 0000.0000.0000.0000
MemSize: 0000.0000.2000.0000
Init CPU arrays Done
Init E$ tags Done
Setup TLB Done
MMUs ON
Block Scrubbing Done
Copy Done
PC = 0000.07ff.f000.3138
Decompressing Done
Size = 0000.0000.0006.e3b0
ttya initialized
Start Reason: Soft Reset
System Reset: (SPOR)
Probing gptwo at 0,0 SUNW,UltraSPARC-III (750 MHz @ 5:1, 8 MB)
memory-controller
Probing gptwo at 1,0 Nothing there
Probing gptwo at 8,0 pci pci upa ppm
Loading Support Packages: kbd-translator
Loading onboard drivers: ebus flashprom bbc ppm i2c dimm-fru dimm-fru
dimm-fru dimm-fru dimm-fru dimm-fru dimm-fru dimm-fru nvram idprom
i2c cpu-fru temperature fan-control card-reader motherboard-fru
Memory Configuration:
Segment @ Base: 0 Size: 512 MB (2-Way)
Probing /upa@8,480000 Device 0,0 Nothing there
Probing /upa@8,480000 Device 1,0 Nothing there
Probing /pci@8,600000 Device 4 SUNW,qlc fp disk
Probing /pci@8,600000 Device 1 Nothing there
Probing /pci@8,700000 Device 5 network firewire usb
dev-descrip
next-add
node made
Probing /pci@8,700000 Device 6 scsi disk tape scsi disk tape
Probing /pci@8,700000 Device 1 Nothing there
Probing /pci@8,700000 Device 2 Nothing there
(UltraSPARC-III) , Keyboard Present
OpenBoot 4.0, 512 MB memory installed, Serial #12134217.
Ethernet address 8:0:20:b9:27:49, Host ID: 80b92749.

第二节 使用基本的Boot PROM命令
Boot PROM提供用户接口,输入OpenBoot命令。
注意:ok提示符指示Solaris OE当前未运行。
表8-1列出了常用的ok提示符命令:
表8-1 ok提示符下的常用命令:

命令 描述
banner 显示加电banner
boot 启动系统
help 显示主要的帮助目录
words 显示字典中的FORTH单词
sifting text 显示FORTH命令中包含text的命令
printenv 显示所有参数的当前值与默认值
setenv 将指定的NVRAM参数设为指定值
reset-all 重设整个系统,类似于power cycle(加电循环?重启)
set-defaults 将所有的参数值设为出厂设置
probe-ide 检测IDE总线上的所有设备
probe-scsi 检测SCSI总线上的设备
probe-scsi-all 检测所有SCSI总线上的设备
probe-fcal-all 检测所有光纤通道环上的设备
.version 显示Boot PROM的日期与版本
probe-pci 检测指定PCI总线上的所有设备
probe-pci-slot 检测指定PCI总线上指定PCI插槽上的设备
test 在指定设备上运行自检
.enet-addr 显示以太网地址
.idprom 显示ID PROM内容
.speed 显示CPU与系统上的总线的速度
.registers 显示寄存器内容

查看系统Boot PROM版本
banner命令列出很有帮助的系统信息,如模块名,Boot PROM版本号,内存量,以太网地址,及host ID。
下面是banner命令的输出例子:
ok banner
Sun Ultra 5/10 UPA/PCI (UltraSPARC-IIi 360MHz), Keyboard Present
OpenBoot 3.31, 128 MB (50 ns) memory installed, Serial #11888271.
Ethernet address 8:0:20:b5:66:8f, Host ID: 80b5668f.

启动系统
使用boot命令从ok提示符下启动Solaris OE。此命令有几个可用选项,用于将系统启动到不同的状态。
boot命令的格式如下:
ok boot device_name - options
在ok提示符下输入boot命令将系统自动启动到多用户状态:
ok boot
下面的列表是boot命令的参数项:
·-s 将系统启动到单用户状态,并要求用户提供root口令
ok boot -s
ok boot cdrom -s

·-a 交互式启动系统。如果需要执行替代文件(即不使用下面例子中的某个既定文件来加载系统,而是自己手工指定),使用此选项。boot程序向用户请求如下信息:
ok boot -a
Enter filename [kernel/sparcv9/unix]:
Enter default directory for modules [/platform/SUNW,Ultra-5_10/kernel
/platform/sun4u/kernel /kernel /usr/kernel]:
Name of system file [etc/system]:
root file system type [ufs]:
Enter physical name of root device:

·-r 执行重配置启动。使用此选项查找新安装的设备,并在/devices和/dev目录中添加新的设备条目。也将更新/etc/path_to_inst文件。
ok boot -r

·-v 启动系统,输出更详细的设备信息到控制台。使用此选项在启动过程中排错。可以与其它选项一起使用:
ok boot -v
ok boot -rv
ok boot -sv

查询更多细节信息
可以使用help命令获取OpenBoot固件的主要目录。下面是Ultra 5工作站上help输出的例子,它使用的是3.31版本的OpenBoot PROM:
ok help
Enter ’help command-name’ or ’help category-name’ for more help
(Use ONLY the first word of a category description)
Examples: help system -or- help nvramrc
Categories:
boot (Load and execute a program)
nvramrc (Store user defined commands)
system configuration variables (NVRAM variables)
command line editing
editor (nvramrc editor)
resume execution
devaliases (Device aliases)
diag (Diagnostics commands)
ioredirect (I/O redirection commands)
misc (Miscellaneous commands)
ok
help命令的输出列表提供了许多可以用来查看更多细节的关键字。
如,要查看上例中主要类别的特定信息,执行下面命令之一:
ok help boot
ok help nvramrc
ok help diag
ok help misc

列出NVRAM参数
可以使用printenv命令列出所有的NVRAM参数。如果参数被修改过,printenv命令会显示其默认值与当前设置值,例:
ok printenv
Variable Name Value Default Value
tpe-link-test? true true
scsi-initiator-id 7 7
keyboard-click? false false
keymap
ttyb-rts-dtr-off false false
ttyb-ignore-cd true true
ttya-rts-dtr-off false false
ttya-ignore-cd true true
ttyb-mode 9600,8,n,1,- 9600,8,n,1,-
ttya-mode 9600,8,n,1,- 9600,8,n,1,-
pcia-probe-list 1,2,3,4 1,2,3,4
pcib-probe-list 1,2,3 1,2,3
mfg-mode off off
diag-level max max
#power-cycles 273
output-device screen screen
input-device keyboard keyboard
boot-command boot boot
auto-boot? true true
diag-device net net
boot-device disk net disk net
local-mac-address? false false
screen-#columns 80 80
screen-#rows 34 34
use-nvramrc? false false
nvramrc devalias pgx24 /pci1f,0 ...
security-mode none
security-password
security-#badlogins 0
diag-switch? false false
ok
可使用printenv命令显示单个参数及其值。
例如,执行如下命令显示boot-device参数值:
ok printenv boot-device
boot-device = disk net
boot-device可能的值包括disk,net和cdrom。
注意:一些OpenBoot PROM参数,如auto-boot?,以问号结束。如果OpenBoot PROM参数以问号结束,其参数值通常是true或false。

更改NVRAM参数
可以使用setenv命令更改当前指定给NVRAM参数的值。如果auto-boot?参数设定为true,系统自动启动。如果为false,系统会停止在ok提示下。
下面的例子更改了auto-boot?参数的值,从默认设置true改为false。
ok printenv auto-boot?
auto-boot? = true
ok
ok setenv auto-boot? false
auto-boot? = false
reset-all命令将系统挂起,清除所有的缓冲区与寄存器,并在系统上执行一个软件模拟的power-off/power-on操作。
ok reset-all
Resetting ...
注意:,在PROM3.x及更高版本上,如果要执行probe或其它测试命令,必须以reset-all命令清除系统寄存器。

恢复默认的NVRAM参数值
使用set-defaults命令将所有的NVRAM参数重新设置为其默认值。它只影响那些曾经被赋予默认值的参数(即有的参数是没有默认值的)。
ok set-defaults
Setting NVRAM parameters to default values.
ok
以set-default命令后面跟参数名,将该指定参数设定为其默认值。
ok set-default parameter-name
如,执行如下命令将diag-level参数重设:
ok set-default diag-level
要恢复默认的NVRAM参数值,可以在加电启动系统时,按住Stop-N组合键。
当键盘上的LED灯开始闪烁时,放开组合键,系统继续启动。

显示连接到总线上的设备
使用probe命令查看当前连接到系统的外设,如硬盘,磁带驱动器或CDROM。
要查看系统上可用的不同的probe命令,使用sifting命令。sifting命令在你不知道确切的OpenBoot PROM命令语法,而需要使用时特别有用。
例如,要查找可用的probe命令,执行如下命令:
ok sifting probe
(f006c954) probe-all (f006c5a0) probe-all (f006c378) probe-ide
(f006c1e8) probe-pci-slot (f006bc8c) probe-scsi
(f006bd78) probe-scsi-all (f0060fe8) probe-pci
(下略)
最常用的probe命令是probe-scsi,probe-scsi-all和probe-ide命令。
包含FC-AL(Fibre Channel-Arbitrated Loop ) 和 GBICs(Gigabit Interface Converters)的系统使用probe-fcal-all命令。
注意:如果在Sun系统上的Boot PROM版本是3.x或更高,运行probe命令时可能会出现如下的警告消息:
This command may hang the system if a Stop-A or halt command has been executed. Please type reset-all to reset the system before executing this command.
Do you wish to continue? (y/n) n
执行如下命令以防止系统被挂起:
ok setenv auto-boot? false
ok reset-all
判定系统在执行probe命令时是否挂起的一个方法是使用.registers命令:
ok .registers
Normal Alternate MMU Vector
0: 0 0 0 0
1: 0 0 0 0
2: 0 0 0 0
3: 0 0 0 0
4: 0 0 0 0
(output edited for brevity)
%PC 0 %nPC 0
%TBA 0 %CCR 0 XCC:nzvc ICC:nzvc
前面的输出显示所有的寄存器均为空,值为0。如果寄存器的值非为0,那很有可能probe命令让系统挂起。

probe-scsi命令
probe-scsi命令标识连接到板载SCSI控制器上的所有外围设备。probe-scsi命令使用其目标地址标识如硬盘,磁带驱动器或CDROM等外围设备。
ok probe-scsi
Target 1
Unit 0 Disk FUJITSU MAB3045S SUN4.2G17059825M62990
Target 3
Unit 0 Disk IBM DDRS34560SUN4.2GS98E99255C5917
(C) Copyright IBM Corp.
1997. All rights reserved.
Target 6
Unit 0 Removable Read Only device SONY CDROM

probe-scsi-all命令
probe-scsi-all命令标识所有连接到系统板上的SCSI控制器或分离的SBus或PCI SCSI控制器上的外围设备。
ok probe-scsi-all
/pci@1f,0/pci@1/pci@1/SUNW,isptwo@4
Target 3
Unit 0 Disk FUJITSU MAB3045S SUN4.2G1907
Target 4
Unit 0 Removable Tape EXABYTE EXB-8505SMBANSH20090

probe-ide命令
probe-ide命令标识连接到板载IDE控制器上的硬盘或CDROM。此命令显示内部设备的设备号:
ok probe-ide
Device 0 ( Primary Master )
ATA Model : ST 38420A (DISK)
Device 1 ( Primary Slave )
Not Present
Device 2 ( Secondary Master )
Removable ATAPI Model : CRD-8322B (CD-ROM)
Device 3 ( Secondary Slave )
Not Present

probe-fcal-all命令
probe-fcal-all OpenBoot PROM命令标识系统上所有包含FC-AL GBIC的外围设备。Sun Enterprise 3500即是这类系统的一个例子:
ok probe-fcal-all
probe-fcal-all命令在Sun Blade 1000工作站上不可用。在Sun Blade 1000工作站上标识板载或外置FC-AL驱动器,使用probe-scsi-all命令。
ok probe-scsi-all
/pci@8,600000/SUNW,qlc@4
LiD HA --- Port WWN --- ---- Disk description ----
10 10 2100002037651b0e SEAGATE ST318304FSUN18G 022D0017L007G2
12 12 2100002037651c12 SEAGATE ST318304FSUN18G 022D0017L007VJ
1 1 2100002037653317 SEAGATE ST318304FSUN18G 032D0020L009TT
13 13 2100002037651f72 SEAGATE ST318304FSUN18G 022D0017L007JZ
11 11 2100002037651f76 SEAGATE ST318304FSUN18G 022D0017L007AL
14 14 2100002037651bf5 SEAGATE ST318304FSUN18G 022D0017L007XS

第三节 标识系统的启动设备
Sun硬件使用设备树的概念组织连接到系统中的设备。
图8-6显示了Ultra 5或Ultra 10工作站上的设备树的组织结构。
注意:图8-6中的目录采取了简化,以方便显示。
OpenBoot固件采集POST的信息建立设备树。设备树被装载到内存中,在启动时被kernel使用,以标识所有配置好的设备。
设备树的顶端是根设备节点。根设备节点下面是一个总线连接节点。连接到总线连接节点的是一个叶节点,一般是安装的设备的控制器。

图8-6 Ultra 5或Ultra 10工作站上的设备树(部分)

图8-6中,设备disk@0,0是IDE设备代表硬盘驱动器。cdrom@2,0设备代表CDROM 驱动器。它们都连接到IDE控制器ide@3上。同样,sd@3,0设备是SCSI硬盘设备,ST@4,0是SCSI磁带机设备。它们都连接到PCI卡的SCSI控制器SUNW,isptwo@4上。
OpenBoot固件建立的设备树路径,随着系统的类型及其设备控制而变。
图8-7显示了Ultra工作站上一个PCI总线的硬盘设备路径。

图8-7 Ultra工作站上PCI IDE总线中的硬盘设备路径

图8-8显示了Ultra工作站上PCI-SCSI总线上面的硬盘的设备路径。

图8-8 Ultra工作站上PCI-SCSI总线上的硬盘设备路径

show-devs命令
可以使用show-devs命令查看整个设备树。
下面的例子了show-dev命令的输出:
ok show-devs
/SUNW,UltraSPARC-IIi@0,0
/pci@1f,0
/virtual-memory
/memory@0,10000000
/pci@1f,0/pci@1
/pci@1f,0/pci@1,1
/pci@1f,0/pci@1,1/ide@3
/pci@1f,0/pci@1,1/SUNW,m64B@2
/pci@1f,0/pci@1,1/network@1,1
/pci@1f,0/pci@1,1/ebus@1
/pci@1f,0/pci@1,1/ide@3/cdrom
/pci@1f,0/pci@1,1/ide@3/disk
/pci@1f,0/pci@1,1/ebus@1/SUNW,CS4231@14,200000
/pci@1f,0/pci@1,1/ebus@1/flashprom@10,0
/pci@1f,0/pci@1,1/ebus@1/eeprom@14,0
/pci@1f,0/pci@1/pci@1
/pci@1f,0/pci@1/pci@1/SUNW,isptwo@4
(output truncated)
ok
注意:除了使用show-devs命令显示整个设备树之外,还可以使用如下的OpenBoot PROM命令查看指定设备的信息:show-ttys, show-displays, show-nets, show-disks, 与show-tapes。

devalias命令
使用devalias命令为系统标识当前的根设备别名。
下面的例子显示了devalias命令的输出:
ok devalias
screen /pci@1f,0/pci@1,1/SUNW,m64B@2
net /pci@1f,0/pci@1,1/network@1,1
cdrom /pci@1f,0/pci@1,1/ide@3/cdrom@2,0:f
disk /pci@1f,0/pci@1,1/ide@3/disk@0,0
disk3 /pci@1f,0/pci@1,1/ide@3/disk@3,0
disk2 /pci@1f,0/pci@1,1/ide@3/disk@2,0
disk1 /pci@1f,0/pci@1,1/ide@3/disk@1,0
disk0 /pci@1f,0/pci@1,1/ide@3/disk@0,0
ide /pci@1f,0/pci@1,1/ide@3
floppy /pci@1f,0/pci@1,1/ebus@1/fdthree
ttyb /pci@1f,0/pci@1,1/ebus@1/se:b
ttya /pci@1f,0/pci@1,1/ebus@1/se:a
keyboard! /pci@1f,0/pci@1,1/ebus@1/su@14,3083f8:forcemode
keyboard /pci@1f,0/pci@1,1/ebus@1/su@14,3083f8
mouse /pci@1f,0/pci@1,1/ebus@1/su@14,3062f8
name aliases
左边是设备别名的输出列表,右边是每个设备的物理地址输出列表。
设备别名被硬编码写入OpenBoot PROM固件中去的,比物理设备地址更好记忆与使用。disk设备别名标识了系统的默认启动设备。
NVRAM中的boot-device参数设定系统的启动设备。默认情况下,boot-device参数设定为disk net。可以在ok提示符下使用命令查看系统的启动设备。
要从默认设备启动,执行boot命令:
ok boot

第四节 创建与删除定制设备别名
NVRAM中有一部分称为NVRAMRC,里面存放了定制的参数的值,也预留用于存储新设备别名的空间。默认的,外部设备没有与之关联的设备别名。
NVRAMRC受nvalias与nvunalias命令的影响,也受参数usr-nvramrc?的影响。

nvalias命令
使用nvalias命令创建新的设备别名,以访问新添加的外部设备。命令格式如下:
nvalias aliasname device_path
nvalias命令的作用是将如下的命令行存储到NVRAMRC中:
devalias aliasname device_path
下面的例子显示如何添加新的启动设备别名,称为mydisk,并从新的启动设备别名启动系统。
注意:可以使用如下的快捷方式,运行show-disks命令,然后选择一个设备,然后使用Control-Y键将设备路径拷贝到命令行上。

例子使用show-disks命令为使用的硬盘选择设备路径。然后使用nvalias命令创建一个新的设备别名mydisk。
ok show-disks
a) /pci@1f,0/pci@1/scsi@1,1/disk
b) /pci@1f,0/pci@1/scsi@1/disk
c) /pci@1f,0/pci@1,1/ide@3/cdrom
d) /pci@1f,0/pci@1,1/ide@3/disk
e) /pci@1f,0/pci@1,1/ebus@1/fdthree@14,3023f0
q) NO SELECTION
Enter Selection, q to quit: d
/pci@1f,0/pci@1,1/ide@3/disk has been selected.
Type ^Y (Control-Y) to insert it in the command line.
e.g. ok nvalias mydev ^Y
for creating devalias mydev for
/pci@1f,0/pci@1,1/ide@3/disk
ok nvalias mydisk ^y
在命令行上按下Control-Y键将选定的硬盘的设备路径粘贴到命令行上。
ok nvalias mydisk /pci@1f,0/pci@1,1/ide@3/disk@0,0
注意:当设备路径被粘贴到命令行(使用Control-Y键)上时,目标号与逻辑单元号(LUN logical unit number)需要添加,如sd@0,0或disk@0,0。
设定boot-device参数为新值,本例中是mydisk,然后启动系统。
ok setenv boot-device mydisk
boot-device = mydisk
ok boot

nvunalias命令
使用nvunalias命令删除设备别名。使用如下命令格式:
ok nvunalias aliasname
注意:nvalias命令是一个例外,更新被立即写到NVRAM上,不需要使用reset-all命令。
例子中,使用nvunalias命令从NVRAMRC中删除别名mydisk,并使用setenv命令将boot-device参数设定为disk。
ok nvunalias mydisk
ok setenv boot-device disk
boot-device = disk
ok reset-all
Resetting ...

第五节 从shell中查看并更改NVRAM参数
Solaris OE运行时,使用/usr/sbin/eeprom命令查看并更改NVRAM参数。

使用eeprom命令
使用eeprom命令时有如下几条需要注意:
·只有root用户可以更改参数的值
·当命令在C shell中执行时,必须以单引号括住参数???
·所有的更新都是永久的,不需要使用reset命令来撤消参数更改。
下面的例子使用eeprom命令相看并更改NVRAM参数:
·执行如下命令列出所有的参数及其当前值:
#eeprom
·执行如下命令列出单个参数及其值,这里参数是boot-device。
# eeprom boot-device
boot-device=disk
#
·要更改当前的默认启动设备为disk2,执行如下命令:
# eeprom boot-device=disk2
#
·要更改auto-boot?参数的值,执行如下命令:
# eeprom auto-boot?=true
#

第六节 中止不响应的系统
当系统死锁或停止对键盘响应时,你可能需要中断它。中断系统时,所有的活动进程立即停止,处理器只为OpenBoot PROM服务。不允许刷新内存或同步文件系统。

中止未响应的系统
有如下的几种方法尝试:
1、尝试从远程登录到未响应的系统上,找出并杀死造成系统停止响应的进程
2、尝试重启未响应的系统。
3、按下不响应系统的键盘上的Stop-A组合键,系统被置于ok提示符下。
注意:如果使用ASCII终端作为系统控制台,使用Break键。
4、使用OpenBoot PROM下的sync命令手工同步文件系统:
ok sync
此命令使所有的文件系统同步,并将内存作一个crash dump,然后重启系统。

第九章 执行启动和关闭程序

目标
完成这一章,你应该能够做以下事情:
确定运行级别的基本原理
确定启动进程的状态
控制启动进程
执行系统关闭程序

确定运行级别的基本原理
一个运行级别是一个系统状态,通过一个数字或字母来描述,用来定义用户当前可用的服务和资源。系统总是运行于一个单一的运行级别
Solaris OE运行级别
0 关闭Solaris操作环境,显示boot PROM ok提示符,用于安全关闭系统电源
s或S Soaris OE单用户模式,所有临界文件系统被挂接,并且是可以访问的
1 系统运行于单用户管理状态,可以访问所有可用的文件系统
2 系统支持多用户操作,多个用户可以访问系统。所有系统守护进程都被运行,除了NFS服务
3 系统支持多用户操作,并且NFS共享可用,这是系统/etc/inittab文件中指定的默认级别
4 这一级别当前没有启用
5 关闭Solaris OE并且关闭系统电源
6 关闭Solaris OE,系统重启到默认的运行级别
确定系统当前运行级别
# who –r
改变运行级别
你可以用init命令手工进行运行级别间的转换。你也能够使用shutdown、halt、reboot和poweroff等命令来改变运行级别。
辨别boot程序的阶段
一般的,当系统打开电源时,PROM监视器运行一个POST程序,检查系统硬件和内存。如果没有发现错误,并且auto-boot?参数被设置为true,系统开始自动引导程序。
整个导入程序被描述为四个明显的阶段:
boot PROM阶段
boot程序阶段
kernel初始化阶段
init阶段
下图显示了详细启动阶段:


boot PROM阶段
在启动过程的第一部分,boot PROM阶段执行下面这些步骤:
PROM运行POST
boot PROM固件运行POST,确认系统的硬件和内存,如果自检成功完成,开始它的顺序启动。
PROM显示系统标识,模式类型、处理器类型和速度、键盘状态、PROM版本号、RAM数量、NVRAM系列号,以太网址和host ID。
boot PROM确定启动设备,通过读取PROM参数boot-device
boot PROM读位于默认启动磁盘设备上的位于0扇区的磁盘卷标
boot PROM从PROM中获得默认启动设备的启动程序
boot PROM读取叫做bootblk的系统主引导程序(位于1-15扇区),它包括一个UNIX文件系统读取器。(在系统安装期间,bootblk程序被installboot程序放置在磁盘上)
Boot命令把bootblk程序从本地设备导入内存。
boot程序阶段
接下来描述boot程序阶段:
bootblk从boot设备导入第二boot程序ufsboot到内存
到ufsboot的路径被记录在bootblk程序中,bootblk程序由Solaris OE指令installboot安装。
Ufsboot程序本地化,并且导入适当的两部分kernel
Kernel的内核是两片叫做genunix和unix的静态代码,genunix是与平台无关的通用kernel文件,unix是指定平台的kernel文件。
当usfboot把这两个文件导入到内存后,他们被组合成运行的kernel的形式。
在运行于32位模式的系统上,这两部分kernel位于目录/platform/`uname –m`/kernel
在运行于64位模式的系统上,这两部分kernel位于目录/platform/`uname –m`/kernel/sparcv9

kernel初始阶段
下面描述kernen初始化阶段:
kernel读它的配置文件,调用/etc/system
kernel初始化自身,并且开始导入模块
kernel使用ufsboot命令导入文件。当它为了挂接root文件系统已经导入足够多的模块的时候,它并不绘制ufsboot程序并且继续。(?)
kernel启动/etc/init进程
注意:/etc/init和/sbin/init进程被链接到一起。
SunOS kernel是一个很小的内核,由genunix和unix和很多动态导入的kernel模块组成。
模块由设备驱动,支持文件系统的二进制文件,流文件,也包括其他类型的为指定的系统任务使用的模块组成。
组成内核的典型模块位于目录/kernel和/usr/kernel中,同平台相关的模块位于目录/platform/`uname –m`/kernel和/platform/`uname –i`/kernel目录中。
下面描述各模块子目录的类型:
drv —— 设备驱动
exec —— 可执行文件形式
fs —— 文件系统类型,例如,ufs,nfs和proc
misc —— 各种混杂的模块(虚拟交换)
sched —— 调度类(继承执行调度)
strmod —— 流模块(归纳了用户和设备驱动间的连接)
sys —— 系统调用(定义应用所使用的接口)
/kernel/drv目录包括所有系统启动所用到的设备驱动。/usr/kernel/drv包括所有其他的设备驱动。
在启动时或需要的时候,如果应用发出要求,需要的模块被自动导入,当一个模块不再使用,它所使用的内存被另外一个任务需要的时候,它可能被卸载。
启动进程完成之后,当设备(例如磁带设备)被访问的时候,设备驱动被导入。这个进程叫做自动配置,因为当需要的时候,一些kernel驱动模块被自动导入
一旦初始化或重新配置启动,系统自检并且检查所有挂载的设备。
动态kernel安排的优点是使得整个kernel的大小更小,更有效的使用内存,允许简单的改变或调整。下图显示这个安排:

注意:sparcv9CUP是一类支持64位处理的CPU
/etc/system文件和kernel配置
警告:Solaris OE基于系统(内存,CPU等等)建立内核。大多数情况下,默认的内核的性能是非常足够处理系统上大多数日常活动。任何改变都应该极度小心。
/etc/system文件是改变系统启动时哪一个模块和参数将被内核加载的控制文件。默认的,这个文件中的所有行都被注释掉了。
改变内核的行为(或配置)需要编辑/etc/system文件。改变这个文件允许你改变内核的可加载模块的处理,也可以改变内核参数以调整系统性能。
ufsboot程序包含了一个默认可加载内核模块的列表,这些模块在系统启动是将被加载。然而,你能通过改变/etc/system文件越过这个列表,控制哪个模块和参数将被加载。
这个文件的所有改变将在系统重启后有效。
/etc/system文件能明确的控制:
系统启动时加载的默认kernel模块的查找路径。
Root文件系统类型和设备
启动时从系统自动加载的模块中排除在外的模块
在系统启动时而不是首次访问时强制加载的模块。
新值将覆盖默认kernel参数值。
注意:命令行长度必须小于等于80个字符,并且注释行以*开始以新的一行结束。
/etc/system文件被分成五个明显的段落:
moddir:
为默认可加载kernel模块设置查找路径。你能把多个查找路径列在一起,用空格或冒号分隔。如果模块没有在第一个目录里被发现,将查找第二个目录,依此类推。
Root设备和root文件系统配置:
设置root文件系统类型列表,默认是:rootfs:ufs
设置root设备。默认是boot程序驻留的设备的物理路径名。物理路径名是和系统平台和配置相关的,举例如下:
rootdev:/sbus@1,f8000000/esp@0,800000/sd@3,0:a
exclude:
kernel初始化期间不允许被加载的可加载kernel模块。例如:
exclude :sys/shmsys
forceload:
kernel初始化期间,强制加载的kernel模块,例如:
forceload :drv/vx
在用户或应用运行一个动作,当它的服务被初次访问时,默认动作将自动加载一个kernel模块。
Set:
为修改系统操作而改变内核参数,例如
set maxusers=40
编辑/etc/system文件
在你编辑/etc/system文件之前,你应该做一个备份。如果你在这个文件里输入一个错误的值。系统可能不能启动。
下面的例子显示怎样做一个原始的/etc/system文件的备份,并编辑/etc/system文件。
# cp /etc/system /etc/system.orig
# vi /etc/system
如果一个启动进程因为/etc/system文件的错误而失败了,使用交互式启动命令:boot –a。当你被要求输入一个system文件名的时候,输入你的备份的system文件的名称,或/dev/null为一个空的配置文件。
Init 阶段
系统启动进程的最后阶段是init阶段。在这一阶段期间,init守护进程启动运行控制(rc)脚本,启动其他进程。Init守护进程是一个通用程序。它的主要角色是从存储在/etc/inittab文件中的信息创建进程。
Init守护进程执行系统启动(rc)脚本,依次,执行一系列其他脚本。
Init接成功完成之后,默认的行为是显示系统命令行登陆符或GUI登陆窗口。
/etc/inittab文件
当你启动一个系统或使用init或shutdown命令改变运行级别时,init守护进程通过读取/etc/inittab文件中的信息,停止进程,启动程序,或执行二者,
inittab文件为init进程定义了三个重要的条目:
系统默认运行级别。
系统进入一个新的运行级别时要采取的动作
启动,监视,在终止后重启的进程
/etc/inittab文件中的每一行条目都包含下面的四个域:
id :rstate :action :process
注意:从rc脚本输出的信息是直接指向/dev/msglog文件的。Solaris 8 OE及以前的版本,所有这些信息都被写到/dev/console文件。/dev/msglog文件常常被用做系统启动或后台应用信息输出的收集。
Action域关键词
Initdefault :标识默认的运行级别,当init程序被初始调用的时候读取。Init程序决定初始进入哪一个运行级别时使用。默认是运行级别3。
Sysinit :在init程序企图访问控制台之前(在控制台登陆提示符之前)执行这个程序。Init进程继续读取inittab文件之前,等待这个进程的完成。
Wait :在移动到同一运行级别的下一条之前启动一个进程并等它完成。
Respawn :如果进程死掉了,init进程重启它。如果进程不存在,init启动它并继续读取inittab文件。如果程序不存在,不需要任何动作,init进程继续读取inittab文件。
Powerfail :仅仅init进程收到一个电源失败信号的时候执行这个进程。
警告:如果rstate域是空的,并且initdefault行被使用,rstat域被译为0123456,并且init进程默认进入运行级别6。这讲引起系统连续重启。
接下来将按顺序描述inittab文件每一行:
1. 初始化流模块
2. 配置套接字传输提供者
3. 初始化文件系统
4. 定义默认运行级别
5. 描述一个电源失败shutdown
6. 定义一个单用户模式
7. 定义运行级别0
8. 定义运行级别1
9. 定义运行级别2
10. 定义运行级别3
11. 定义运行级别5
12. 定义运行级别6
13. 定义到firmware的转换
14. 定义到power off的转换
15. 定义到reboot的转换
16. 初始化服务访问控制器
17. 初始化ttymon端口监视器,放置一个命令行提示符到控制台
init进程

init程序读取/etc/inittab文件做接下来的事情:
1. 标识initdefault条目,定义默认运行级别3。
2. 执行在action域有sysinit的任何进程条目以至于任何指定的初始化能够在用户登陆前发生。这包括/sbin/rcS的执行,它挂载并检查/(root),/usr,/var和/var/adm文件系统。、
3. 执行在rstat域有3和action域有一个合适的关键词(同默认的运行级别3三匹配的关键词)的任何进程条目。
在这个运行级别执行的命令包括:
/usr/sbin/shutdown – 仅仅在系统收到一个电源fail信号后init进程运行shutdown命令
/sbin/rc2 – 启动系统守护进程,使系统进入运行级别2(多用户模式)。
/sbin/rc3 – 为运行级别3启动NFS和其他网络资源服务器
/usr/lib/saf/sac – 启动设备端口监视器,例如ASCII终端和调制解调器。
/usr/lib/saf/ttymon – 启动ttymon进程,监控有登陆请求的控制台。在所有系统上默认的terminal_type都像在/etc/inittab中列出的那样是sun。
控制启动进程
Solaris OE提供一系列运行控制脚本(rc)以停止和启动同运行级别相关的典型的程序。
/sbin目录
每一个运行级别相关的rc脚本都位于/sbin目录。
Rc脚本被init进程执行以设置变量。测试环境和调用其他脚本启动和停止指定运行级别的进程。
Rc脚本rc0,rc5,rc6彼此是硬连接的。注意每一个脚本都被指派了相同的脚本inode号。
Solaris OE在/etc目录下为后向兼容提供了相同系列的rc脚本。这些脚本是到/sbin目录的rc脚本的符号连接。
运行控制脚本和他们的功能
/sbin/rc0 运行/etc/rc0.d/K*脚本然后/etc/rc0.d/S*脚本执行下面任务:
停止系统服务和守护进程
终止所有正在运行的进程
卸载所有文件系统
启动脚本应该仅仅完成快速系统清除功能
/sbin/rc1 运行/etc/rc1.d/S*脚本完成下面的任务:
停止系统服务和守护进程
终止所有正在运行的用户进程
卸载所有远程文件系统
如果前一运行级别是S,挂载所有本地文件系统
/sbin/rc2 运行/etc/rc2.d/S*脚本完成下面的任务:
如果前一运行级别是S,挂载所有本地文件系统
删除/tmp目录下的任何文件和子目录
配置系统帐号
配置默认路由
启动大部分系统守护进程
/sbin/rc3 运行/etc/rc3.d/K*脚本,然后运行/etc/rc3.d/S*脚本,完成下面的任务:
清理/etc/dfs/sharetab文件
共享/etc/dfs/dfstab文件中列出的所有资源
启动nfsd和mountd命令
/sbin/rc5 /sbin/rc6 运行/etc/rc0.d/K*脚本,然后运行/etc/rc0.d/S*脚本,完成下面的任务:
停止系统服务和守护进程
终止所有正在运行的进程
卸载所有文件系统
启动仅仅完成快速系统清除功能的脚本
/sbin/rcS 运行/etc/rcS.d脚本使系统到运行级别S:
建立一个最小网络
挂载/usr,/var和/var/adm目录,如果他们是分离的文件系统
设置系统名
检查/(root)和/usr文件系统
挂载伪文件系统(/proc和/dev/fd)
为重新配置启动重建设备条目
挂载单用户模式需要的其他文件系统
/etc/rc#.d目录
/etc/rc#.d目录包含启动和停止相应运行级别的系统进程附加的脚本
启动运行控制脚本
/etc/rc#.d 启动脚本一直以ls命令排序的次序运行。以S开头的文件被运行以启动一个系统进程。这些脚本被适当的/sbin/rc#调用,这个脚本传递参数 “start”给他们,如果他们的名字并不是以.sh结尾。没有参数被传递到.sh脚本。这些文件名的格式如下:
S##name-of-script
停止运行控制脚本
/etc/rc#.d 停止运行脚本(也被看作是kill脚本)总是以命令ls排序的次序运行。用K开头的文件被运行以停止或杀死一个系统进程。这些脚本被合适的 /etc/rc#调用,这个脚本传送参数“stop”给他们,如果他们的名字并不是以.sh结尾的。这些文件命名格式如下:
K##name-of-script
注意——以小写的k或s开头的文件名会被init进程忽略的,他们不会被执行。为使一个脚本不被运行,用合适的小写字母重命名它。
/etc/init.d目录
运行控制脚本位于/etc/init.d目录
运行控制脚本/etc/init.d/cron是到相应的运行控制脚本/etc/rc2.d/S75crom的硬连接。
每一个运行级别有单独脚本的好处是你能作为root用户在/etc/init.d目录中单独运行脚本。
你能停止或启动一个进程而不用改变系统运行级别。
建立新的运行控制脚本
为了定制一个系统,你能建立新的脚本启动和停止附加进程或服务
例如,为了消除手动启动一个数据库服务起的需求,你能创建一个当合适的网络服务已经启动之后,自动启动数据库的脚本。
为了增加运行控制脚本启动和停止一个服务,在/etc/init.d目录下建立脚本,在合适的/etc/rc#.d目录下创建连接,保证服务能够在恰当的运行级别下被启动和停止。

注意——图中halt和reboot命令并不像init和shutdown命令那样处理inittab文件。Init和shutdown命令运行状态间变换的首选的方法。
执行系统关闭程序
为了执行一个管理任务或维护活动,如果你预见到电源损耗或如果你需要把系统移动到一个新的地方,你能关闭Solaris OE。
Solaris OE需要一个干净的有序的关闭,停止进程,把内存中数据写到磁盘,卸载文件系统。
当然,系统关闭时你所需要的工作的类型决定了系统怎样被关闭和你使用哪一个命令。
下面描述了系统关闭的不同类型。
关闭系统到单用户模式
关闭系统,停止Solaris OE,显示OK提示符
关闭系统并且关闭电源
关闭系统并且自动重启到多用户模式。
为做这些类型的系统关闭,root用户可用的命令包括:
/sbin/init(使用运行级别S,0,1,2,3,5,6)
/usr/sbin/shutdown(使用运行级别S,0,1,5,6)
/usr/sibin/halt
/usr/sbin/poweroff
/usr/sbin/reboot

/usr/sbin/init命令
你可以使用init命令用一个干净有序的习惯shut down,power off或reboot一个系统。它执行rc0 kill脚本。然而,这个命令并不警告登陆的用户系统正在被关闭,没有宽限期。
/usr/sbin/shutdown命令
shutdown命令是一个调用init守护进程shutdown,power off或reboot系统的脚本。为了关闭进程和应用,它执行rc0 kill脚本。但是,不象init命令那样,shutdown命令做下面的事情:
通知所有登陆用户,系统将要被关闭
默认延迟关闭60秒
让你能够包括一个可选描述信息,告之你的用户发生了什
命令格式:
shutdown –y –g grace-period –i init-state optional message
-y选项预答了最后关闭确认问题,以至于命令以一个非交互方式运行。
-g grace-period允许你改变默认60秒延时为你自己指定的时间grace-period
-i init-state指定init进程将要获得的运行级别,默认是S
注意——如果shutdown命令显示错误消息:“shutdown:'i' – unknown flag”它指出shell已经定位并执行了/usr/ucb/shutdown命令。使用它的全路径(例如,/usr/sbin/shutdown)重新执行这个命令,或者设置PATH变量确保/usr/sbin位于/usr/ucb前面。
/usr/sbin/halt命令
halt命令完成一个立即系统关闭。它并不执行rco kill脚本,它不通知登陆用户,也没有宽限期。
/usr/sbin/poweroff命令
poweroff命令完成一个立即系统关闭。它并不执行rco kill脚本,它不通知登陆用户,也没有宽限期。
/usr/sbin/reboot命令
reboot命令完成一个立即关闭并且重新初始化,并启动系统到默认的运行级别3。Reboot命令不同于init 6.

命令,因为它并不执行rc0 kill脚本


第十一章     系统安全
目标
完成这部分,你应该达到以下要求:
监控系统访问
在系统上变换用户
控制系统访问
限制对文件里的数据的访问

监控系统访问
由于无权限用户的访问,所有系统都应该被例行公事的监控。你能通过执行命令和检查日志文件,决定谁正在或谁已经登陆进入了系统。
显示本地系统上的用户
who命令显示当前登陆到本地系统的用户的列表。它显示每一个用户登陆名,登陆设备(TTY port),登陆日期和时间。这个命令读取二进制文件/var/adm/utmpx获得这些信息和关于用户从哪登陆的信息。如果一个用户从远程登陆,who命令在输出的最后一列显示远程主机名,或IP地址。
Who命令输出的第二个域显示的是用户的登陆设备,具体如下:
Console —— 用来显示系统登陆和错误信息的设备
Pts —— 伪设备,象征一个登陆或窗口对话不是一个物理设备
Term —— 连接到一个串口的物理设备,例如一个终端或一个调制解调器
注意——who命令有很多选项,其中的一个是-m选项。Who –m命令输出仅是当前窗口的信息。
显示在远程系统上的用户
rusers命令产生同who命令同样的输出,但是它显示登陆到本地和远程主机的用户的列表。这个列表显示用户名和主机名,次序是从主机收到响应的次序。
如果一个远程主机的rpc.rusersd守护进程是使能的,它仅仅对rusers命令响应。Rpc.rusersd守护进程是网络服务器守护进程,它返回远程主机上的用户的列表。
注意——这个网络服务器守护进程的全路径是/usr/lib/netsvc/rusers/rpc.rusersd
rusers命令的格式如下:
rusers –options hostname
rusers –l命令显示一个长的登陆到本地和远程主机的用户的登陆名的列表。输出显示用户名,系统名,登陆设备(TTY port),登陆日期和时间,idle时间和登陆主机名。如果用户不是idle,在idle时间域上没有值被显示。Idle期间意味着在这台终端上用户在这段时间没有做任何活动,它表示用户可能是屏幕锁定或从终端离开了。
显示用户信息
为了显示一个本地或远程用户活动的详细信息,使用finger命令。
Finger命令显示:
用户的登陆名
home目录路径
登陆时间
登陆设备名
用户在/etc/passwd文件的注释域中的信息
登陆shell
主机名,如果用户远程登陆,任何idle时间。
Finger命令格式如下:
Finger [-bfhilmpqsw] [username…]
Finger [-l] [username@hostname1 [@hostname]]
-m选项仅仅匹配参数username(不是第一个或最后一个可能出现在/etc/passwd注释域中的名字)。
如果用户在他们的home目录中创建标准ASCII文件.plan或.project,这些文件的内容将被作为finger命令输出的一部分显示出来。
这些文件传统上被用来描述用户当前计划或项目,并且必须被设置文件访问权限为644。
注意——仅仅当in.fingerd守护进程被运行,你才可以从finger命令得到一个响应。
显示一个登陆活动的记录
使用last命令显示一个所有登陆和注销的记录,在输出中,最近的登陆活动排在顶部。Last命令读取二进制文件/var/adm/wtmpx,这个文件中记录了所有登陆,注销和重启。
每一个条目包括用户名,登陆设备,用户登陆用的机器(IP),用户登陆的日期和时间,注销的时间,用小时和分钟表示的全部登陆时间,包括系统重启次数的条目
last命令的输出可能是非常的长。因此,你可能想要使用它和-n number选项一起指定显示指定的行数。
记录失败的登陆企图
当一个用户从本地或远程登陆进系统时,login程序参考/etc/passwd和/etc/shadow文件验证用户。它确认用户名和输入的密码。
如果用户提供的登陆名在/etc/passwd文件中,并且提供了一个正确的密码,login程序赋予它访问系统的权限。
如果登陆名不在/etc/passwd文件中或这个登陆名的密码不正确,login程序拒绝它访问系统。
你能在文件/var/adm/loginlog中记录失败的命令行登陆企图。这是一个有用的工具,如果你想要确定正在侵入系统的企图。
默认情况下,loginlog文件并不存在。为了使这个日志能够使用,你应该建立这个文件,并使它只有root用户读写的权限,并且它应该属于sys组。
当五次连续的失败尝试之后,所有失败的命令行登陆动作都被自动写到这个文件中
loginlog文件为每一个失败的尝试建立一个条目,每个条目包含用户的登陆名,登陆设备(TTY port)和失败尝试的时间。
如果有少于五次连续失败的尝试,不会有动作被记录在这个文件中。
在一个系统上变换用户
作为系统管理员,你应该作为一个正常用户登陆进系统,然后仅仅在运行系统管理任务的时候变换到root用户帐号。
你应该避免作为root用户直接登陆。这个防范帮助保护系统无认证的访问,因为它降低了使用root用户登陆的系统无人照顾的可能性,如果你作为规则用户执行例常工作,临界错误更少发生。
介绍su命令
使用su命令交换到超级用户或另一个用户,不用注销后作为这个用户返回。
命令格式如下:
su – username
如果没有给定用户,则su命令尝试变换到root用户
为了使用su命令,要提供合适的密码,除非你已经是root用户。 Root用户可以运行su命令而不需要密码。
如果密码是正确的,su命令建立一个新的shell进程,同在用户帐号的/etc/passwd文件条目域中指定的一样。
Su -(dash)选项特指一个完全登陆,将读取用户所有shell初始化文件。-选项改变你的工作环境到你期待的样子就像你已经用指定的用户直接登陆一样。它也改变用户的home目录。
下图显示了su命令对真正用户的ID(UID)的影响,不是有效的用户ID(EUID)。这个表假定user1有一个UID是100和一个GID是10,变换为UID是200和GID是20的用户user2。

显示有效的用户ID
当你运行su命令的时候,用户ID和用户的组ID(GID)变成你已经交换的用户的,分别变成了EUID和有效的组ID(EGID)。
访问文件和目录是由有效用户的EUID和EGID值决定的,而不是由登陆到系统的原始用户的UID和GID号决定的。
使用whoami命令
whoami命令显示登陆的EUID名
注意——whoami命令位于/usr/ucb目录
显示真正用户ID
为了确定原始用户的登陆名,使用who命令和am i选项。
使用who am i命令
为使用who am i命令,在shell提示符下,输入su命令和你想要变换到的用户的登陆名,按回车键。输入这个用户的密码,按回车键
变换到另外一个规则用户
为了变换到另外一个用户并有这个用户的环境,象下面一样使用su命令:
变成root用户
监视su尝试
由于安全的原因,你必须监视谁已经使用su命令,特别是那些企图获得系统root用户访问权限的用户。你能启动监控,通过设置/etc/default/su文件中的两个变量。
注意——在/etc/default/su文件中有很多变量。这个课程仅仅设施这些变量的一个子集。
/etc/default/su文件的内容
/etc/default/su文件中的CONSOLE变量
默认的,系统忽略/etc/default/su文件中的CONSOLE变量,因为前面的注释符(#)。所有使用su命令的尝试都被记入控制台,不管成功还是失败。
当注释符被删除的时候,CONSOLE变量的值被定义为/dev/console文件。随后,每一个使用su命令访问root帐号的成功的尝试都以一个输出的附加行的形式记入控制台。
/etc/default/su文件中的SULOG变量
/etc/default/su文件中的SULOG变量指定文件名,这个文件用来记录所有使用su命令交换用户的尝试。如果这个变量没有被定义,su命令记录被关闭。
/var/adm/sulog文件是一个系统上执行su命令的用户所有尝试的记录。每一次su命令被执行,一个新的条目将被加入到sulog文件。
这个文件中的条目包括命令被执行的日期和时间,是否它是成功的符号(+)或失败的符号(-),命令被执行的设备,并且,最后,登陆和有效标识。
控制系统访问
通过网络可用的访问越多,对于一个远程系统用户就越有利。然而,无限制的访问和数据与资源的共享可能产生安全问题。
一个本地主机的远程安全测量方法一般是基于从远程系统用户的验证,限制或时钟操作的能力。
/etc/default/login文件
注意——这个文件里有很多变量,这里只代表所有变量的一个子集。
/etc/default/login文件为用户设立默认参数,当他们登陆进入系统的时候,/etc/default/login文件给你在一个系统上保护root帐号的能力。你能限制root访问一个指定的设备或到一个控制台,或不许 root一起访问。
/etc/default/login文件中的CONSOLE变量
你能在文件/etc/default/login中设置CONSOLE变量,指定限制root帐号访问的三个可能情况中的一个:
如果变量被定义为:CONSOLE=/dev/console,root用户仅仅能在系统控制台登陆。任何在其他设备作为root登陆都将收到错误的消息
如果变量没有被定义,例如# CONSOLE=/dev/console,root用户能通过网络从任何设备登陆进入系统,通过一个modem或使用一个附加的终端。
如果变量没有一个值被赋予它(例如CONSOLE=),则root用户不能从任何地方登陆,甚至控制台也不能。在这个系统上变成root用户的唯一方法是用一个常规用户登陆使用su命令变成root用户。
注意——你能使用CONSOLE变量限制root登陆到一个特定的端口,例如,CONSOLE=/dev/term/a允许root用户仅仅从连接到串口A的终端登陆进系统。
/etc/default/login文件中的PASSREQ变量
当/etc/default/login文件中的PASSREQ变量被设置成默认值YES,所有在创建时没有赋予密码的用户当他们初次登陆时都被要求输入一个新的密码。如果这个变量被设置为NO,空密码被允许。这个变量并不会应用到root用户。
文件传输协议访问(FTP)
Solaris OE提供一个命名为/etc/ftpd/ftpusers的ASCII文件。/etc/ftpd/ftpusers文件列出了禁止通过FTP协议连接到系统的用户的名字。
FTP服务器守护进程in.ftpd读取/etc/ftpd/ftpusers文件,当FTP会话被调用的时候。如果用户的登陆名同文件中的条目匹配,它被拒绝登陆并发送登陆失败信息。
/etc/hosts.equiv文件和$HOME/.rhosts文件
典型的,当一个远程用户请求登陆访问一个本地主机时,本地主机读取的第一个文件是/etc/passwd,文件中这个用户的详细信息的条目使得用户可以从远程系统登陆本地主机。如果这个帐号有一个相关的密码,为了登陆并获得系统访问权限,远程登陆用户被要求提供这个密码。
如果/etc/passwd文件没有关于这个远程用户的条目,访问被拒绝。
文件/etc/hosts.equiv和$HOME/.rhosts绕过了这个标准的基于密码的认证,使用一个本地用户的标识确定是否一个远程用户被允许访问本地主机。
这些文件提供一个远程鉴定程序来作出决定。
这个程序首先检查/etc/hosts.equiv文件,然后检查$HOME/.rhosts文件。包括在这两个文件中的信息(如果他们存在)决定是否远程访问被赋予或拒绝。
/etc/hosts.equiv文件的信息应用于整个系统,然而单个用户能够在他们的home目录里维护他们自己的$HOME/.rhosts文件。

/etc/hosts.equiv文件和/$HOME/.rhosts文件中的条目
这两个文件有相同的格式,但是同样的条目在两个文件中有不同饿影响。
这两个文件中可能包含如下类型的条目:
hostname
hostname username
+
这两个文件中的主机名必须是主机的正式名字,不能是它的一个别名。
注意——当登录到许多不同的系统时,你能运行uname –n命令,决定你当前正登录到哪一个系统上。
/etc/hosts.equiv文件规则
对规则用户,/etc/hosts.equiv文件标识远程主机和考虑被信任的远程用户。
如果本地主机的/etc/hosts.equiv文件包含了一个远程主机的主机名,则远程主机的所有规则用户都是可信任的,不需要提供一个密码就能够登陆到本地主机。这个被支持要求每一个远程用户对于本地主机都应该是已知的,即要求在本地/etc/passwd文件中都有一个条目,否则,访问将被拒绝。
这个功能对在几个不同的系统都有帐号的用户的站点是特别有用的,消除了通过网络发送ASCII密码产生的风险。
/etc/hosts.equiv文件默认并不存在。如果你需要在本地主机信任远程用户,你必须手工建立这个文件。
$HOME/.rhosts文件规则
/etc/hosts.equiv文件适用于非root用户的广泛系统访问,.rhosts文件适用于一个指定的用户。
所有用户,包括root用户,都能够在他们的home目录里创建和维护他们自己的.rhosts文件。
例如,如果你运行一个rlogin进程从一个远程主机,为了获得root访问一个本地主机,在本地主机的root home目录中/.rhosts文件被检查。
如果一个远程主机名被在这个文件中列出,它就是一个可信任主机,并且,既然这样,root访问被赋予到本地主机。为了一个远程root用户的登陆,/etc/default/login文件中的CONSOLE变量必须被注释掉。
$HOME/.rhosts文件默认并不存在,你必须在用户的home目录中创建它。

第十四章     控制系统进程

目标
完成这一部分,你应该可以做以下事情
观察系统进程
清楚冻结的进程
预定一个命令自动一次执行
预定一个命令自动循环执行

观察系统进程
一个进程就是运行在系统上的程序。所有进程都被赋予一个唯一的标识号(PID),它常常被kernel用来跟踪和管理这个进程。PID号被root和普通用户用来标识和控制他们的进程。
使用prstat命令
prstat命令检查和显示系统上活动的进程的信息。
这个命令让你可以观察指定的进程的信息,用户的UID号,CPU Ids,或处理器设置。默认的,prstat命令显示信息是以所有进程的CPU使用率来排序的。为了使用prstat命令,执下面的命令:
# prstat
prstat命令报告的列头
PID 进程的PID号
USERNAME 进程所有者的登陆名或UID
SIZE 进程全部虚拟内存大小
RSS 进程常驻内存大小
STATE 进程状态
        Cpu — 进程正在CPU上运行
        Sleep — 进程等待一个事件的完成
        Run — 进程在运行队列中
        Zombie — 进程终止,并且父进程并不在等待
        Stop — 进程停止
PRI 进程的优先级
NICE 优先级估算使用的值
TIME 进程的累计执行时间
CPU 进程最近使用CPU时间的百分比
PROCESS/NLWP 进程名/轻量级进程号
注意——kernel和很多应用现在都是多线程的。一个线程是一个为完成一个特别的任务而写的程序指令的逻辑序列。每一个应用线程独立预定运行在一个LWP上,作为一个虚拟CPU功能。LWPs轮流被绑盯到kernel线程,它预定运行在真正的CPU上。
注意——使用priocntl(1)命令赋予进程一个悠闲级类,管理进程优先级。Nice(1)命令仅仅为支持Solaris OE的后向兼容性保留的。Priocntl命令在管理进程方面提供更多机动性。
Prstat命令的选项
-a 在同一时间分开显示进程和用户的报告
-c 在当前报告下面继续打印新的报告
-n nproc 限制输出行的数量
-p pidlist 仅仅报告在被给的列表中给定PID的进程
-s key 用key的将序排序输出行。五个可能的key包括:cpu,time,size,rss,pri一次只能使用一个key
-S key 用key的升序排序输出行
-t 报告每个用户的全部使用概要
-u euidlist 仅仅报告在被给的列表里有一个有效用户ID(EUID)的进程
-U uidlist 仅仅报告在被给的列表里有一个真正的UID的进程
清除冻结进程
你可以使用kill命令或pkill命令发送一个信号给一个或多个正在运行的进程。典型的,你使用这些命令终止或清除一个不想要的进程。
使用kill和pkill命令
命令格式如下:
kill –signal PID
pkill –signal Process
你使用一个无signal选项的kill命令将发送默认的信号15给进程。这个信号常常用来使进程终止。
进程信号和名字

1,        SIGHUP —— 一个挂断信号,使一个电话线或终端连接被停止。对于特定的守护进程,例如inetd和in.named,一个挂断信号将使守护进程重新读取它的配置文件。
2,        SIGINT —— 一个中断信号,来自键盘,常常是CTRL-C组合键
3,        SIGKILL —— 一个杀死进程的信号。进程不能忽略这个信号
4,        SIGTERM —— 用一个有序的方式终止一个进程的信号。一些进程忽略这个信号
一个kill命令能够发送的完全命令的列表可以执行kill –l命令查看,或使用man命令查看:
# man –s3head signal
警告——使用kill –9或pkill –9命令作为终止一个进程的最后手段。对一个控制数据库应用或更新文件的程序的进程使用kill –9命令可能是损失惨重的。进程将立即终止而没有机会完成一个有序的关闭。
执行远程登陆
预定一个命令的一次执行
使用at命令仅仅在一个指定的时刻自动执行一个作业一次
使用at命令
命令格式如下:
at –q queuename time date
at –r job
at –l
at命令的选项
-m 当进程被完成后发送mail给用户
-r job 从队列里删除一个预定的at作业
-q queuename 指定一个特定的队列
time 为执行的命令指定一个时间
-l 为调用用户报告所有预定的作业
date 为执行的命令指定一个可选的日期,一个月名,接下来是天数或星期的哪天
at命令的作业号显示作业的执行时间,它反应的是同日期12:00 A.M. Januagy 1,1970相差的全部秒数。
控制到at命令的访问
作为root用户,你使用at.deny和at.allow文件控制谁可以访问at命令。
/etc/cron.d/at.deny文件
默认的,Solaris OE包括/etc/cron.d/at.deny文件。这个文件标识禁止使用at命令的用户。这个文件格式是一个用户是一行。
/etc/cron.d/at.allow文件
/etc/cron.d/at.allow文件默认是不存在的,因此所有用户(除了/etc/cron.d/at.deny文件中列出的)都可以建立at作业。
通过建立/etc/cron.d/at.allow文件,你创建一个仅仅这些用户可以使用at命令。
/etc/cron.d/at.allow文件的组成是,每一行一个用户名
at.allow和at.deny文件之间的交互遵循下面这些规则:
如果at.allow文件存在,仅仅这个文件中列出的用户可是使用at命令。
如果at.allow文件不存在,所有用户(除了at.deny文件中列出的)都能使用at命令
如果这两个文件都不存在,仅仅root用户能使用at命令
预定一个命令的自动循环执行
你能是用cron工具预定有规律的循环命令。用户能提交一个命令给cron工具,通过改变他们的crontab文件
所有crontab文件都被放在/var/spool/cron/crontabs目录下统一维护,并且以创建cron作业的用户的登陆名为文件名来存储。
Cron守护进程负责余调度和运行这些作业。
注意——clock守护进程,cron,在系统启动时启动,连续不断的在后台运行。
介绍crontab文件格式
一个crontab 文件每一行由六个域组成。域之间用空格或制表符分隔。前五个域提供命令将要被预定的日期和时间。后一个域是命令的全路径。
注意——如果命令域包含一个百分号(%)字符,则所有后来的字符将作为标准输出传递给命令。

crontab域的规则

使用crontab命令
用户可以使用crontab命令查看,编辑或删除一个crontab文件。
查看一个crontab文件
为了查看root crontab文件的内容,作为root用户运行crontab –l
查看其他用户的crontab文件,运行crontab –l username
编辑crontab文件
为建立或编辑一个crontab文件,做下面这些步骤:
1.        检查EDITOR变量是否被设置为你想要使用的编辑器。这将指示cron指令用哪一个编辑器打开文件。
# EDITOR=vi
# export EDITOR
2.        运行下面的crontab命令打开你的crontab文件,并增加合适的条目。
# crontab –e
注意——如果用户并没有重新定向编辑crontab文件的命令的标准输出和标准错误,则产生的输出或错误将以电子邮件的方式发送给用户。
删除crontab文件
删除crontab文件的正确的方式是调用下面的命令:
# crontab –r username
典型的用户能够删除他们自己的crontab文件。Root用户能够删除任何用户的crontab文件。
警告——如果你意外的在命令行输入了crontab命令,没有带一个选项(-l,-e,-r),按中断键CTRL-C退出。不要按CTRL-D键,这个动作将用空文件重写存在的crontab文件。
控制crontab命令的访问
你能使用/etc/cron.d目录下的两个文件控制crontab命令的访问,cron.deny和cron.allow文件。
这些文件仅仅允许指定的用户执行crontab任务,例如创建,编辑,显示或删除他们自己的crontab文件。
/etc/cron.d/cron.deny文件
Solaris OE提供一个默认的cron.deny文件,这个文件由一个用户名的列表组成,每行一个,这些用户不被允许使用cron。
/etc/cron.d/cron.allow文件
/etc/cron.d/cron.allow默认并不存在,因此(除cron.deny文件中列出的那些外)所有用户都能访问他们的crontab文件。创建一个cron.allow文件,你能列出允许访问crontab命令的用户。
cron.deny文件和cron.allow文件遵从的规则:
同at命令。

我的更多文章
前一篇:Solaris 9--SA 119
亲,您还没有登录,请[登录][注册]后再进行评论