Sys/ sparcv9 系统呼叫
/kernel/drv/sparcv9包含系统启动时候所需要的所有设备驱动。/usr/kernel/drv/sparcv9用于其他设备的驱动。 模块是自动读入的。如果需要通过一个应用程序,同样需要每一个在启动时间或者在需求上自动读入模块。当模块不再使用的时候,就从基本内存中释放出来以用于其他需要的任务。
当启动完成以后,设备驱动是被加载的。这个进程是被自动配置的。因为一些设备驱动是在需要的时候被自动加载的。
/etc/system和kernel的配置 /etc/system文件
/etc/system文件为修改控制系统启动的时候kernel加载的参数和module。默认情况下,文件所有的行是以命令方式输出的。
修改和配置kernel的方式要求编辑/etc/system。修改这些参数是为了系统能够更优化的运行。 Ufsboot包含了默认的kernel启动的设置,但是可以通过修改/etc/system来进行修改。 所有的关于/etc/system的修改必须在重新启动以后生效。 /etc/system文件控制以下几个方面: 在启动的时候,为默认的模块搜索路径。 root类型和设备
在启动的时候,被自动读入的模块
在第一次访问的时候,模块可以在启动时间强制的读入。 以新数值代替默认内核的参数值
/etc/system文件被分成5个部分: moddir
设置默认读入内核模块的搜索路径。用户可以列出搜索的共同的目录,通过空格和冒号进行区分。 root设备和root文件系统设置:
设置root文件系统类型去列出数值。默认的是rootfs:ufs 设置root设备。启动程序所在的默认的是设备的物理路径名。物理路径名是平台和依赖的设置。比如:rootdev:/sbus@1,f8000000/esp@0,800000/sd@3,0:a exclude
在内核初始化期间不允许读的内核模块。比如exclude:sys/shmsys forceload
在内核初始化期间强制读入的内核模块。比如forceload:drv/vx
当他在运行时间第一次访问服务的时候,默认的动作是自动的读内核模块 set
改变内核参数变更系统的运做。比如:set maxusers=40
在编辑/etc/system文件之前,用户需要建立备份的拷贝。如果用户在文件中输入错误的数值,系统将不能启动。
下面显示如何拷贝最初的/etc/system文件到一个备份文件。然后编辑/etc/system文件。 # cp /etc/system /etc/system.orig # vi /etc/system
如果一个启动过程因为/etc/system文件出错,就输入交互式启动命令:boot –a。当需要输入系统文件名时,输入备份的文件名或者输入dev/null。一个空的设置文件。
Init阶段
启动的最后阶段就是init阶段了。在这个阶段init启动svc.startd来负责启动和停止指定的服务。/sbin/init阶段使用的信息存储在/etc/inittab中。 /etc/inittab文件
/etc/inittab文件的任何一行都是以这样的方式出现的: Id:rstate:action:process Id 为条目定义的2个字符 Rstate 条目应用的运行级别
Action 定义进程是如何运行的,关于action更多的描述,请参考man inittab
36
Process 定义命令的运行
下面举一个inittab文件中一行的列子:
Ap::sysinit:/sbin/autopush –f /etc/iu.ap
Svc.startd进程
Svc.startd进程是为smf控制进程的启动和重新启动的。这个进程的主要角色就是为了达到相应的运行级别而启动相应的进程。在以前的版本中这个工作是由init来完成的。
Svc.startd使用的决定里程碑和决定要启动的进程的信息存储于/var/svc/manifest目录下。 /var/svc/manifest/milestone目录下的文件为: Single-user.xml Multi-user.xml
Multi-user-server.xml Network.xml
Name-services.xml Sysconfig.xml
这些.xml文件可以参考其他的xml文件在/var/svc/manifest的子目录下包含的运行的命令,比如: /sbin/rc2
/lib/svc/method/fs-local
控制legacy启动进程
Solaris OS提供了一系列legacy脚本停止和启动进程,代表性的是结合运行级别或者里程碑 /sbin目录
任何级别的运行脚本存在与/sbin目录,一些脚本的硬连接也在这个目录下。
这些脚本的处理是通过svc.startd进程设置变量,测试环境,为运行级别呼叫其他脚本的启动和停止。
Rc0,rc5,rc6脚本都是一些其他的硬连接。注意任何一个脚本被安排为同样的接点号。比如: Ls –li /sbin/rc*
可以看到rc0 ,rc5,rc6是同样的接点号。
Solaris OS提供同样的一系列RC脚本在/etc目录下。这些脚本是连接到/sbin下的。 /sbin/rc0:/etc/rc0.d/K* /etc/rc0.d/S*的运行。 /sbin/rc1:运行/etc/rc1.d/S*脚本。
/sbin/rc2:运行/etc/rc2.d/K* /etc/rc2.d/S* /sbin/rc3:运行/etc/rc3.d/K* /etc/rc3.d/S* /sbin/rc5:/etc/rc0.d/K* /etc/rc0.d/S*的运行 /sbin/rc6:/etc/rc0.d/K* /etc/rc0.d/S*的运行 /sbin/rcS:运行/etc/rcS.d
在/etc/rc#.d中以S开头的为启动脚本,以K开头的为停止脚本。 /etc/init.d目录
运行控制脚本位于/etc/init.d目录中。
运行控制脚本/etc/init.d/samba是一个对应于/etc/rc3.d/S90samba的硬连接。 你也可以启动和关闭进程。 /etc/init.d/samba stop /etc/init.d/samba start
使用SMF来停止和启动服务
使用svcs命令来监视SMF服务的运行情况。它的使用是为了测试服务的状态和服务之间相互之间的关系。 #svcs
Svcs命令也可以指定服务来观察服务的状态。 #svcs svc:/system/console-login:default
Svcs也可以显示服务之间的依存关系,使用-d和-D参数来查看。-d:本服务所依靠的其他服务。-D:其他服务依靠本服务。
37
使用svcadm改变服务的运行状态。 下面举一个列子: #pgrep –fl cron 180 /usr/sbin/cron #svcs cron
STATE STIME FRMI
Online 14:38;20 svc:/system/cron:default
#svcadm –v disable system/cron:default
#svcs cron
STATE STIME FRMI
disable 14:38;20 svc:/system/cron:default
#svcadm –v enable system/cron:default
#svcs cron
STATE STIME FRMI
Online 14:38;20 svc:/system/cron:default
#pgrep –fl cron 180 /usr/sbin/cron
在使用svcadm在修改参数状态的时候,也可以使用-t参数来进行临时调整。 #svcadm –v disable -t system/cron:default
使用svcs命令决定服务为什么不能运行。
使用svcs命令还能进行服务的troubleshoot,检测服务为什么不能运行。 #svcs –x cron
可以通过查看/var/svc/log/system-cron:default.log这个文件来了解更加详细的信息。 操作非SMF管理的服务
如果FMRI的前缀是lrc的服务,这钟服务不在SMF管理中。在这样的情况下启动和停止服务,并不需要改变运行级别。这种脚本服务需要手工运行。运行脚本非SMF管理的在/etc/init.d目录下。 比如:
#svcs |grep vol
Legacy_run 14:38:57 lrc:/etc/rc3_d/S81volmgt #pgrep –lf vold
#ls –l /etc/init.d/volmgt #pgrep –lf vold
#/etc/init.d/volmgt start #pgrep –lf vold #svcs |grep vol
创建新的服务脚本
你能够创建新的服务脚本来开始和停止附加进程或者自定义的系统服务。 举例来说,不如数据库服务是需要手工进行起停的。你可以创建一个数据库启动脚本进行数据库服务的自动启动和停止。
把正确的进程加到合适的SMF脚本中。这个过程相当的复杂。通常的步骤要求列出下面详细的内容:
为你的服务决定进程的开始和停止。 建立服务名和服务属于的类型。 决定你的服务运行的多种实例。
标示着这个服务和其他服务之间的依存关系。
如果脚本要求停止和启动进程,创建的脚本应该位于local目录比如:/usr/local/svc/method
38
为你的服务创建确切的文件。这个文件描述着这个服务和其他服务之间的依存关系。服务确切的存储是通过svccfg命令和启动时间来决定的。 通过svccfg命令来结合SMF服务。 下面是一个显示的例子:
#vi /usr/local/svc/method/newservice
#chmod 544 /usr/local/svc/method/newservice
#cd /var/svc/manifest/site #vi newsevice.xml
#svccfg import /var/svc/manifest/site/newsevice.xml #svcs newservice
#svcadm –v disable site/newsevice #svcs newservice
#svcadm –v enable site/newsevice #svcs newservice
#svcs –d milestone/multi-user:default
增加非SMF管理的脚本服务的启动和停止。
增加非SMF控制的脚本只需要在/etc/init.d创建脚本然后在连接到合适的/etc/rc#.d下就可以了。
举例来说:
#vi /etc/init.d/filename
#chmod 744 /etc/init.d/filename #chgrp sys /etc/init.d/filename #cd /etc/init.d
#ln filename /etc/rc#.d/S##filename # ln filename /etc/rc#.d/K##filename #ls –li /etc/init.d/filename
#ls –li /etc/rc#.d/S##filename #ls –li /etc/rc#.d/K##filename # /etc/init.d/filename start 执行系统关闭
用户在已知电源会关闭或者移动系统到一个新的位置的时候,可以关闭Solaris操作环境以执行管理员任务或者维护活动。
Solaris操作环境需要有秩序的关闭程序,用来停止进程,将内存的数据保存到磁盘和卸载文件系统。
根据工作的类别,用户可以决定如何关闭系统
下面是不同类别的系统关闭 关闭系统到单用户模式
关闭Solaris操作环境,显示ok提示符 关闭系统到电源关闭
关闭系统并且自动重新启动到多用户模式
用于关闭系统的可用命令包括: /sbin/init
/usr/sbin/shutdown /usr/sbin/init命令
用户可以使用init命令去关闭,掉电或者重新启动系统。它通知svc.startd进程更改到相应的运行级别。Svc.startd进程达到相应的里程碑,最终处理rc0的kill脚本。 关闭系统到单用户状态下,使用运行级别S或者1。 # init S
停止Solaris操作环境并显示ok提示符
39
# init 0
关闭系统电源 # init 5
关闭系统并且重新启动到多用户模式 # init 6
/usr/sbin/shutdown命令
shutdown命令是一个调用init去关闭,掉电或者重新启动的脚本。他不能执行rc0的kill脚本去关闭进程。不象init命令,shutdown命令做下列操作: 。通报登陆进系统的用户即将关机 。默认延迟60秒
。给你可以向用户描述理由的能力
命令格式
shutdown [-y] [-g 延迟时间] [-I init状态] [描述信息] -y选项是用于提前回答全部shutdown问题。 -g 延迟时间允许root改变默认60秒的数字 -i init状态指定init状态,默认是S 强行关闭系统的命令
下列命令执行系统的强行关闭,而并不处理rc0的kill脚本。 #halt
#poweroff #reboot
设置默认的启动时间里程碑
使用svcadm命令来控制svc.statrd进程控制的启动里程碑。默认的里程碑全部都是指定all方式的话,系统中所有的服务都是启动的。
确定svc.startd进程下次启动到多用户状态里程碑,在启动前执行下面的命令: #svcadm –v milestone –d multi-user-server:default 使用svcadm可以的启动级别包括: All None
Svc:/milestone/single-user:default Svc:/milestone/multi-user:default
Svc:/ milestone/ multi-user-server:default 服务存储的数据库
数据库是存储在/etc/svc目录下。/lib/svc/bin/restore_repository工具能够修复和恢复损坏的数据库。
这个部分主要的是将用户管理的一些基本的信息和内容.因为这个部分相对来说是大家经常要用到的.所以,很多的内容没有在这里详细的描述.还请大家见谅.最后一部分关于用户的初始化文件我结合原来的一些内容自己列了一张表,供大家参考.大家如果对这部分有什么不明白的地方可以直接跟贴或者给我发站内短信.我一定会尽力为大家解答的。在这里再次对一直支持我写作和关注我的读书笔记和veritas volume manager的朋友表示深深的感谢.感谢大家对我的支持!
第十章 执行用户管理 目标要求:
描述用户管理的基本情况 管理用户帐号 管理初始化文件
系统管理的一个重要的任务就是为访问系统的任何一个用户设置合适的系统帐户。任何一个用户需要有一个独一无二的用户名和用户ID(UID),家目录和登陆shell,你也能够决定用户需要访问的组。
一个用户帐号有以下几不部分组成:
用户名:用户登陆系统的唯一的名字。用户名也叫做登陆名。
40