Archive for the ‘Uncategorized’ Category

Solaris 速查手册

August 22, 2006

硬件系统:
1、如何查看cup的状态? 作者:南非蜘蛛
# psrinfo -v
# mpstat 可以列出多cpu负载的状态
2、如何查看内存? 作者:南非蜘蛛
# prtconf | grep ‘Memory’ 可以查看内存的多少.
# /usr/platform/sun4u/sbin/prtdiag

3、如何动态添加swap分区? # $su - root —– 成为超级用户
# mkfile 100m /home/swapfile —– 创建100m的Swap文件
# /usr/sbin/swap -a /path/filename —– 激活Swap文件
# /usr/sbin/swap -l —– 验证swap文件
# /usr/sbin/swap -d /path/filename —– 取消swap文件
# rm -rf /home/swapfile —– 删除swap文件

4、如何查看当前网卡是以何种速率起来的? 作者:南非蜘蛛
# dmesg |grep Link

5、如何调整x-window的分辨率和刷新频率?
字符界面登陆,运行:#/kdmconfig

6、如何使用光、软驱?
一般情况下用:
# /etc/init.d/volmgt start
# volcheck
以上方法不行,用:
# /etc/init.d/volmgt stop
# mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom –挂接光驱
# mount -F pcfs /dev/diskette0 /floppy –挂接软驱
solaris定义系统磁盘文件系统说明:
ufs – UNIX文件系统。是Solaris缺省的文件系统。
hsfs – 高密度CD-ROM文件系统,是只读文件系统。
pcfs – PC文件系统,支持DOS格式化的软盘

7、SCSI设备的命名规则是什么?
带有总线控制器的硬盘的使用,下面列出了总线控制器的硬盘命名习惯:
cWtXdYsZ
c Logical controller number
t Physical bus target number
d Drive number
s Slice (or partition) number (0 to 7)
例如:
/dev/rdsk/c0t0d0s0 该原始接口对应第一个控制器的第一个SCSI目标地址的第一个硬盘的第一片(根)
/dev/rdsk/c0t0d0s2 该原始接口对应第一个控制器的第一个SCSI目标地址上的第一个硬盘的第三片(表示整上硬盘)

8、如何查看硬盘的使用情况? 作者:南非蜘蛛
# df -k 可以看到已安装的文件系统的空间大小及剩余空间大小。
# quota -v 查看用户的磁盘空间信息,如果你用quota限制了用户空间大小的话。
# du -sk * 查看目录的使用情况
# du -k | sort -n 可以迅速发现那个目录是最大的。

9、如何查看硬盘物理信息?
# format 这个命令也可以查看硬盘的类型和分区的详细情况
# iostat -E看硬盘的大小和型号
# prtvtoc /dev/rdsk/c0t0d0s0 显示某个磁盘的分区状况

10、查看系统内核命令。 作者:南非蜘蛛
# isainfo 看内核的bit,
# isainfo -kv 调整内核
# modinfo 显示可载入的模组
# prtconf 显示系统硬件配置(周边设备)
#sysdef 显示可载入的模组,硬件配置与一些可以调整的核心参考值
#ulimit -a

11、打印当前的OBP版本号 作者:gunguymadman007
# prtconf -V
OBP 3.20.0 2000/10/24 10:47
# /usr/platform/sun4u/sbin/prtdiag -v | grep OBP
OBP 3.20.0 2000/10/24 10:47 POST 6.1.0 2000/10/24 10:49
ok. .version
Release 3.20 Version 0 created 2000/10/24 10:47
OBP 3.20.0 2000/10/24 10:47
POST 6.1.0 2000/10/24 10:49
OBDIAG 4.5.1 2000/10/24 10:48

12、查看及启动系统的32位或64位内核模式 作者:gunguymadman007
64位模式
# isalist -v
sparcv9+vis sparcv9 sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
# isainfo -v
64-bit sparcv9 applications
32-bit sparc applications
# isainfo -b
64
启动64位内核模式
ok. boot kernel/sparcv9/unix

32位模式
# isalist -v
sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
# isainfo -v
32-bit sparc applications
# isainfo -b
32
启动32位模式
ok. boot kernel/unix

13、测定当前的显示器刷新频率
# /usr/sbin/fbconfig -rev \?

14、如何配置网卡ip?
# ifconfig -a –查看网卡,例如是hme0
# ifconfig hme0 unplumb –停止网卡
# ifconfig hme0 plumb –起用网卡
# ifconfig hme0 inet 192.168.2.3 netmask 255.255.255.0 up –添加ip、子网掩码
# vi /etc/defaultrouter 添加默认路由的ip
# vi /etc/hostname.hme0 添加主机名
# vi /etc/nodename 添加主机名
# vi /etc/resolv.conf
domain china.com 你的域名
nameserver 202.106.0.20 你使用的nds ip
# vi /etc/nsswitch.conf 更改 hosts:file dns

15、 PROM状态命令与参数
格式: OK> 指令
命令 说明
banner 显示当前机器配置状况,CPU,内存,hostid,EtherNet
probe-scsi 显示内部SCSI通道所挂接设备
probe-scsi-all 显示所有SCSI通道及所挂接设备
probe-ide 显示所有IDE通道及所挂接设备(针对U10,U5)
devalias 显示设备别名,如 cdrom,disk,disk0,disk1等
printenv 无参数,显示环境变量或
参数为环境变量名 如: printenv auto-boot?
setenv 设置环境变量,如: setenv auto-boot? false
set-default 恢复环境变量预定值 如:set-default auto-boot?
set-defaults 恢复所有环境变量预定值
boot device option 启动主机
设备别名: cdrom 或 disk
设备名: /pci@1f,4000/scsi@3,1/disk@6,0:f
option -r 设备配置
-s 单用户
eject cdrom|floppy 弹出cdrom或floppy
reset 复位
test net
watch-net-all
show-devs

16、查找网卡名称及接口个数 作者:阿丙
# grep network /etc/path_to_inst

17、如何一块网卡帮定三个ip,并且子网掩码不同?
举例说明,网卡名hme0:
# vi /etc/hosts
127.0.0.1 localhost
192.168.2.1 dbs loghost
192.168.9.15 dd
192.168.9.65 aa
# vi /etc/netmasks
192.168.2.0 255.255.255.0
192.168.9.0 255.255.255.192
192.168.9.64 255.255.255.252

#vi /etc/hostname.hme0
dbs
#vi /etc/hostname.hme0:1
dd
#vi /etc/hostname.hme0:2
aa
# ipconfig hme0 inet 192.168.2..1 netmask 255.255.255.0 up
# ipconfig hme0:1inet 192.168.9.15 netmask 255.255.255.192 up
# ipconfig hme0 inet 192.168.9.65 netmask 255.255.255.252 up
# init 6
#ipconfig -a

18、如何在prom状态下查看光纤硬盘 ? 作者:深圳菜鸟
stop +a进入ok状态:
ok> select 光纤卡设备名(可用show-devs查看到)
ok> show-children

19、主机双屏幕设置。 作者:iricyan
1.Confirm there are two Video Cards。
2.Confirm driver installed and patches installed if need。
3.vi /usr/dt/config/Xservers.
comment the last line.
and uncomment the nearest line like this.
4.reboot.

20、查看硬盘参数及其物理地址:
#format </dev/null
21、显示磁盘的分区情况:
#prtvtoc /dev/rdsk/c0t0d0s2

系统应用:
1、、查看系统运行级别
# who -r 看运行级别
2、进程工具 作者:e4gle
pstop pid 停止进程
prun pid 重新启动进程
ptime pid 使用微状态计算进程时间
pwait pid 等待指定的进程终止
pcred pid 显示可信度    *
pfiles pid  显示已打开文件的fstat和fcntl信息   *
pflags pid 显示每个lwp的/proc跟踪标志,等待和待有信号量以及其他状态信息  *
pldd  pid 显示链接到每个进程的动态链接库   *
pmap pid  显示地址映射空间   *
psig pid 显示信号操作    *
pstack pid 显示每个lwp的十六进制与符号堆跟踪   *
ptree pid 显示包含指定PID的进程树
pwdx  pid 显示当前工作目录   *
后面加*的必须是超级用户执行。
这些工具在/usr/proc/bin/里面。

3、patch软件包的安装
每个补丁都有编号。例如补丁号为101945,版本是34的话,这个补丁的目录名就是101945-34.
# patchadd 105160-01 安装补丁
# patchrm 删除补丁
# patchadd -p 检查系统的补丁情况
# showrev -p 查看所有已经安装的patch

4、如何容许root用户远程登录?
# vi /etc/default/login
CONSOLE=/dev/console —用#注释掉这一行。

5、如何限定telnet登陆数?solaris pts的数量缺省为47, 修改/etc/system文件, 增加如下内容:
set maxusers=数量
set pt_cnt=数量

6、显示已经使用和未使用的i-node数目 作者:gunguymadman007
# df -F ufs -o i

7、显示cpu使用率最高的进程 作者:gunguymadman007
# ps -eo pid,pcpu,args | sort +1n
该命令输出当前系统进程的pid, CPU占用率及命令描述,并以pcpu来排序

8、查看当前的OpenWindows版本 作者:gunguymadman007
# showrev -w
OpenWindows version:
X11 Version 6.4.1 5 November 2001

9、查看当前CDE的版本 作者:gunguymadman007
# /usr/ccs/bin/what /usr/dt/bin/dtmail
/usr/dt/bin/dtmail:
CDE Version 1.4.6_06
CDEVersion1.4.6_06

10、文消掉本中的^M
# cat test.dat | tr -d ’15’ > test.out
这样可以将 test.dat 内 ^M(15) 这个字元去掉, 产生 test.out

11、关机命令。
关闭系统的方式根据关闭的原因而不同.执行关闭有的是为了转至执行等级S,有的是要停止操作系统并关闭设备的电源.
(1) /usr/sbin/shutdown -gtime -ilevel -y
(2) init 0
(3) halt
(4) STOP+A ; sync
(5) 关闭电源
紧急情况,按Stop_A , 如Stop_A不起作用,则将设备电源关闭再打开.这是
极端情况.这两种方法不是干净的关闭,是突然关闭的,仅在紧急情况使用.

12、Solaris下怎么发送即时消息?
用wirte命令到单个用户的终端。
$ wirte username
输入消息正文,结束按ctrl-d,消息就会出现在用户终端。
用户可以用mesg n[y]来决定是否启动接受消息。

用wall,是发给所有系统用户。
$ wall
hello ,i love you …… 结束用ctrl-D.

rwall -n netgroup 给网络上所有用户。
$ rwall -n workgroup ——–发给组workgroup下的每一个用户
hi ! no smoking …… 结束用ctrl -d

$ rwall sune450 ——或者主机名为sune450。用法如上。。。

13、系统是sunos5.8, 不知何种原因现在唯一的普通用户起不了Terminal, vi等,但是超级用户可以,如何补救? 作者:kesin
用/etc/skel/local.cshrc 替换掉登陆路径下的 .cshrc, 重新登陆, 就OK了!
$cp /etc/skel/local.cshrc ./

14、关机时这个题是什么意思? 作者:sunmarmot
/usr/sbin/vold[724]: [ID 244572 daemon.error] 卸载 /vol 时发生问题;中断系统调用
uxwdog[481]: [ID 248799 daemon.error] error communicating with server (Broken pipe)

你还没卸下来/VOL就启动,才出问题,运行:
# umount -f /vol后再做。

15、find常用的例子:
命令格式: find dir -name filename command
例子:
# find . -name hello -print 寻找目前目录及所有的子目录内叫hello的文档。
# find . -ctime +7 -print 找出七天内未被更动的文档
# find . -size +2000m -print 找出大小超过2000 bytes的文档
# find /tmp -user b1234567 -print 在/tmp下属於b1234567的文档
# find . -name ‘*.c’ -exec rm {} 删除所有的.c档
# find . -name test\* -print 显示当前目录及其子目录文件名前4位为test的文件名

16、忘记solarsi的root口令怎么办? 作者:南非蜘蛛
方法一:
1.别怕:) ,跟我来.
2.把你的solaris光盘放进cdrom
3.键入stop+a
4.当出现’ok’字样时,键入boot cdrom -s
5.cd /tmp
6.mkdir /tmp/xxx (xxx是什么鬼东西就无关紧要了)
7.mount /dev/dsk/c0t0d0s0 /tmp/xxx (在这里c0t0d0s0是你的root盘)
8.运行csh
9.TERM=sun;export TERM或者
setenv TERM vt220
10.cp /tmp/root/xxx/shadow /tmp/root/xxx/shadow/shadow.backup
11.vi /tmp/root/xxx/shadow并且将password里root项删除。
12.重启动,你就可以以无密码的root登陆了,这时更改你的密码。
要是没有shadow,就把/etc/passwd里root用户名后面的X删掉,就可以了
方法二:
找一台有系统的solaris机器,把忘记密码的系统放进去mount上来,重复方法一10以后的步骤.

solaris for x86的机器:
用光盘启动到要你安装的时候退出去就成单用户,剩下的操作如上。

17、常见文件的解压 作者:南非蜘蛛
一般而言,在solaris下,会有这么几种格式的软件:
1) .gz结尾的文件,我们用gunzip或者gzip -d来解压,再用tar来解压.
2) .tar结尾的文件,我们肯定知道用tar xvf的格式来解压.
3) .zip结尾的文件,我们用unzip,注意,这个只有在高版本的solaris下,才有.而且该文件格式以solaris的patch比较多.
4) .Z结尾的文件,我们一般用uncompress来解压(当然,每个人的习惯不一样.)
上面讲的是解压,一般解压后,会生成这么几种方式:
1)生成.local的文件,这个时候,我们用: pkgadd -d xxx.local来安装.
2) 生成一个目录,而且该目录下会有一些pkg信息,我们用: pkgadd -d . ;指在当前目录下,安装,并且按照缺省的路径来安装.
3) 生成一个数字的目录,一般是指solaris的patch,这个时候我们用patchadd来安装.

18、如何在命令行界面替换一个文件中的字符段?
# vi file 在命令模式中输入:
:1, $s/diag/peng/g 全文件查找diag并替换为peng

19、请问TERM=VT100和TERM=dtterm都在什么情况下设置? 作者:C.Arthur
一般情况下如果你在机器的显示器上登陆或者通过XMANAGER等登陆,就默认是dtterm,telnet 一般是ansi,当你通过telnet修改文件的时候,需要设置成 TERM = VT100 ; export TERM

20、如何查看系统的版本?
$ uname -X
$ more /etc/release

21、命令行进入CDE:
#/usr/dt/bin/dtlogin -daemon;exit
or
#/etc/rc2.d/S92dtlogin start;exit;
22、查看patch安装过程中返回错误代码的含义:
#more /usr/sbin/patchadd23、

如何从一台SOL8的机器登录到另外一台SOL8的CDE桌面上去。
登陆CDE的时候点击一下菜单:选择–登陆远程主机–
24、如何查看你的默认语言环境?C.Arthur
# more /etc/default/init25、

如何更改/home的权限?作者: xieliangcheng
停掉autofs服务,或者将/etc/auto_master的home注释掉:
#vi /etc/auto_master
————内容如下———-
# Master map for automounter
#
+auto_master
/net -hosts -nosuid,nobrowse
#/home auto_home -nobrowse
/xfn -xfn
第三方软件应用或技巧:
1、查看当前的bind版本信息 作者:gunguymadman007
# nslookup -class=chaos -q=txt version.bind

2、在登录时显示系统指定的消息?

#vi /etc/motd —-删除所有过时的消息,输入新消息
注意:对于已经登录且正在使用系统的用户不显示该消息,超过一屏的消息无法显示。每次修改该文件后,该文件的时间戳随之更新。3、

去掉文本中^M
# dos2unix aaa.txt bbb.txt,会去掉aaa.txt中的^M,生成bbb.txt文件。
4、将系统中7天前的txt文件查找并打包。
# find / -mtime -7 >aaa.txt
# tar cvf bbb.tar -I aaa.txt
—查找出文件记录在aaa.txt文件中,在作成bbb.tar文件包。5、

查找并删除比某一天更老的文件:
#find . ! -mtime -<days> | /usr/bin/xarys rn -rf
6、solaris9普通用户下无法正确输入中文的解决方法:
在用户目录在#vi .profile 修改如下:
stty cs8 -istrip

7、请问如何防止telnet登陆发呆时间过长被踢呢?
这里,vi /etc/default/login
# TIMEOUT sets the number of seconds (between 0 and 900) to wait before
# abandoning a login session.
#
#TIMEOUT=300
修改之后不是立即生效,在这之后所又的login session都符合这个要求,但是在修改之前已经建立的连接不受影响。
8、如何安装gcc。
去sunfreeware.com上下载相应平台的pkg包的gcc版本。
#pkgadd -d gcc*
设置环境变量:
bash 和sh 的shell:
vi $home/.profiel
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/etc:/usr/local/bin:/usr/ccs/bin;export PATH
CC=gcc;export CC
csh的shell:
vi $home/.cshrc
set path=( /bin /usr/bin /usr/ucb /etc /usr/local/bin /usr/local/sbin .)
setenv CC gcc

9、列出当前目录下的目录。作者:brucewoo
ls -al | grep ‘^d’
10、用命令行来打开一个新的terminal。作者:beginner-bj
/usr/dt/bin/dtterm
X86或者Vmware:

1、在Solaris10 x86上挂接window98分区的方法。 作者:k338
#mount -F pcfs /dev/dsk/c0d1p0:e /mnt
总结一下:
偶的硬盘是接在IDE1的slaver盘上,用上述命令可将E:盘挂在/mnt
目录下。如果你的电脑只有一个硬盘,并且是接在主板的IDE1槽,设为
Master盘(通常这种情况较多),现在想挂WIN98下的D:盘,可输入
#mount -F pcfs /dev/dsk/c0d0p0:d /mnt
注意,/mnt可以改为任意的其它空目录,如/data(我在文件管理器中自己
新建的一个目录),可改为
#mount -F pcfs /dev/dsk/c0d0p0:d /data
按回车后如没有任何出错提示,则表示挂接成功,你就可以进入挂接的文件夹(此处为/data)找到你所挂接的win98的D:分区上的文件了。
本方法经过偶N次实验,是确实可行的。为后来者不再偶走过的弯路,偶特在此总结一下,哪位初学者不会在Solaris10 x86(Solaris9也应该行)
挂win98分区的话,可参考本方法。

Solaris 常用命令和例子(一)

August 22, 2006

ok>show-devs
ok>show-disks
终端控制
ctrl+s :终止屏幕输出,如用cat命令输出时,要停一下
ctrl+q :恢复ctrl+q的输出
ctrl+c :中断当前的活动,返回命令提示符
ctrl+d :表示文件的结束或退出,如退出终端窗口
ctrl+u :擦除整个命令行
ctrl+w :擦除命令行最后一个单词
ctrl+h :擦除命令行最后一个字符
bc :计算器

#ksh 切换到k shell
命令:

# uname
SunOS
NAME

#man uname
uname – print name of current system

SYNOPSIS
uname [-aimnprsvX]

uname [-S system_name]
# date
2004年05月19日 星期三 21时57分49秒 CST
#
stings
$stings /usr/bin/cat
能够用来打印可执行文件或二进制文件中的可读字符。

cat more

#cat -n test.txt //显示行号

键值 目的
空格 滚动到下一屏
回车 一次滚动一行
b 向后移动一屏
f 向前移动一屏
h 显示更多特性的帮助菜单
q 退出,返回shell提示符
/string 向前搜索字符串string
n 查找下一处匹配

less
#less test.txt //前移动一屏F,后B ,/string 查找字符

head
#head -5 /export/home/wing/test.txt //显示开始的5行
#head chap*|more //显示所有以chap开头的文件的头部
用来显示一个或多个文件的前n行,默认省略-n参数将显示文件的前10行。

tail
#tail -5 /export/home/wing/test.txt //显示最后5行
#tail +5 /export/home/wing/test.txt //显示第5行开始到结束
用来显示一个文件的最后n行,默认省略-n参数将显示文件的最后10行。

# tail -f /var/adm/messages //实时自动浏览syslog入口
Oct 6 00:20:26 wing genunix: [ID 936769 kern.info] sd0 is /pci@0,0/pci-ide@7,1/ide@1/sd@0,0
Oct 6 00:20:26 wing pcplusmp: [ID 637496 kern.info] pcplusmp: fdc (fdc) instance 0 vector 0x6 ioapi
c 0x1 intin 0x6 is bound to cpu 0
Oct 6 00:20:26 wing last message repeated 1 time
Oct 6 00:20:26 wing isa: [ID 202937 kern.info] ISA-device: fdc0
Oct 6 00:20:26 wing fdc: [ID 114370 kern.info] fd0 at fdc0
Oct 6 00:20:26 wing genunix: [ID 936769 kern.info] fd0 is /isa/fdc@1,3f0/fd@0,0
Oct 6 00:20:30 wing i8042: [ID 526150 kern.info] 8042 device: mouse@1, mouse8042 # 0
Oct 6 00:20:30 wing genunix: [ID 936769 kern.info] mouse80420 is /isa/i8042@1,60/mouse@1
Oct 6 00:21:37 wing login: [ID 722452 auth.error] user2netname: (nis+ lookup): Error in accessing N
IS+ cold start file… is NIS+ installed?
Oct 6 00:21:47 wing last message repeated 1 time
Oct 6 00:52:07 wing login: [ID 722452 auth.error] user2netname: (nis+ lookup): Error in accessing N
IS+ cold start file… is NIS+ installed?
wc
#wc /export/home/wing/test.txt //显示文件的行、单词、字节数

#wc -l /export/home/wing/test.txt //显示文件的行数

选项 功能
-l 统计行数
-w 统计单词数
-c 统计字节数
-m 统计字符数

diff
#diff -i test.txt test2.txt //忽略文章中的大小写
#diff -c test.txt test2.txt //进行细致的比较生成一个差别表

touch
#touch test1.txt test2.txt test3.txt //可以一次创建多个文件

mkdir
#mkdir /export/home/wing
#mkdir -p /export/home/wing //在路径中名中不存在的目录将被创建
#rmdir dir //所要删除的目录必须是空的

rm
rm -i test.txt test2.txt //交互式删除文件
rm -r /tem/testd //删除目录和目录下的文件
rm -ir /tem/testd //交互式的删除目录和目录下的文件

cp
cp -i oldfilename newfilename //交互式拷贝
cp /export/home/keven/ok.txt /export/home/wing/test.txt
cp -ri /export/home/keven /export/home/wing 整个目录一起拷
cp -rp 文件属性一起拷贝
crontab
直接登陆窗口界面
# crontab -l root //查看作业
/etc/init.d/cron stop //停止进程
在CONSOLE 中熟命令 crontab -e root
crontab -e root //编辑加入要执行的代码
0-59 * * * * date >> /export/home/keven/keven.txt //加入次行在末尾,每分钟执行一次

“格式如下:
  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   date >> /export/home/keven/keven.txt
      1. 分钟 (0-60)
      2. 小时 (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (0-6)
      6. 所要运行的程序
如1-59分钟,1-24 小时

0 18-23 0 0 0-6 //每天的18-23点执行,0-6为周日到周六

/etc/init.d/cron start //启动进程
# crontab -l root
查看作业是否加入执行队列。
不行退出到登陆界面,再次登陆进入,还加载就reboot
你是不是直接编辑用户的cron文件呀?
如果是当然不运行,cron demon是在启动的时候才读一次配置文件.
如果你是后加的JOB 要用crontab -e来编辑用户的cron.
要不你 kill -HUP cron的进程ID.
重新启动这个进程.
每5分钟做一次必须写成5,15,20,25,30,35,40,45,50,55 * * * *
===================================
“格式如下:
  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   /usr/bin/updatedb
      1. 分钟 (0-60)
      2. 小时 (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (1-7)
      6. 所要运行的程序
但是我设成 1 0 0 0 0 /usr/bin/ps
希望能自动在一分钟之后显示进程。但是没有成功。
HELP ME

===============================================
15 1 * * * /opt/bin/ta.sh /opt/aadir > /dev/null

此处>/dev/null 必须用吗? 何意思?
输出重定向到/dev/null, 否则会mail到你的邮箱
dev/null 是一个特殊文件,所有输入到该文件的数据都会被丢弃。
> /dev/null 的意思就是丢弃所有的输出内容,否则(就象楼上老兄说的)就会将输出内容发送到执行该命令的用户信箱中。
这种写法只能把标准输出送到/dev/null中,如果有错误产生的话,还是会送到信箱里的。下面的写法才可以丢弃所有的输出内容:
15 1 * * * /opt/bin/ta.sh /opt/aadir > /dev/null 2>&1

0 14 * * 0-6 //每天的下午14点执行
ls
$ ls -n
总数 12
-rw-r–r– 1 0 1 247 10月 2 07:53 list
-rw-r–r– 2 1002 100 62 10月 2 01:10 ok.txt
drwxr-xr-x 2 0 1 512 10月 1 21:27 ss
-rw-r–r– 1 1002 100 171 10月 3 01:10 test.txt
-rw-r–r– 1 1002 100 120 10月 2 20:54 test1
-rw-r–r– 1 1002 100 0 9月 30 08:54 test2
-rw-r–r– 1 1002 100 0 9月 30 08:54 test3
-rw-r–r– 1 0 1 247 10月 2 07:58 tt.txt

# ls -ld using_samba //查看目录的权限
drwxr-xr-x 2 root other 512 5月 8 22:23 using_samba
$ ls -a
. .cshrc list ss test1 test3
.. .login ok.txt test.txt test2 tt.txt

$ ls -l
总数 12
-rw-r–r– 1 root other 247 10月 2 07:53 list
-rw-r–r– 2 keven user 62 10月 2 01:10 ok.txt
drwxr-xr-x 2 root other 512 10月 1 21:27 ss
-rw-r–r– 1 keven user 171 10月 3 01:10 test.txt
-rw-r–r– 1 keven user 120 10月 2 20:54 test1
-rw-r–r– 1 keven user 0 9月 30 08:54 test2
-rw-r–r– 1 keven user 0 9月 30 08:54 test3
-rw-r–r– 1 root other 247 10月 2 07:58 tt.txt
$ ls -F //列出目录名
TT_DB/ keven/ temp/ user2/ www/
cole/ lost+found/ user1/ wing/
符号 文件类型
/ 文件夹
* 可执行文件
(none) 无格式文件或者ASCII文件
@ 链接符

如:
# ls -F
accept* gsscred* metaset* i86/ //目录
acctadm* halt* metastat* roleadd*
add_drv* hostconfig* metasync* test.txt //ASCII
cachefslog@ in.rlogind* mount* rtquery*
cachefswssize@链接文件 in.routed* mountall* rwall*//可执行文件

$ ls -R //递归显示
.:
TT_DB keven temp user2 www
cole lost+found user1 wing
./cole:
inetservices.txt services services.txt

./keven:
dir test.txt

./keven/dir:

./lost+found:
./lost+found: 权限被否定

./temp:
so.tar.gz

./user1:

./user2:

./wing:
aa dead.letter mywife.tar ok passwd.txt test

./wing/test:

./www:
$
$ ls . //显示当前目录
dir test.txt
$ ls .. //显示当前目录的父目录,支持路径表示符如~
TT_DB keven temp user2 www
cole lost+found user1 wing
$ ls -i test.txt test1.txt //节点检查
64 test.txt 65 test1.txt

$ ls -il test.txt test1.txt
64 -rw-r–r– 1 keven sysadmin 27 10月 12 17:27 test.txt
65 -rw-r–r– 1 keven sysadmin 0 10月 12 17:25 test1.txt
$ ls -ld //只显示目录
drwxr-xr-x 3 keven sysadmin 512 10月 12 17:25 .

file
$ file passwd.txt
passwd.txt: ascii文本

lp
$lp ok.txt myfile test.txt
$lp -p evans1 test.txt //-p后为打印机evans1
$lpstat // 打印队列状态
ln
#ln file1 newfile
#ln file1 directory/newfilename 硬链接
#ln ~/book/chap* /home/brad
为每个chap文件都创建了链接,把这些链接指向/home/brad目录
如果文件有多个指向它的硬盘链接,只是删除该文件并不能有效的释放磁盘空间,你将不得不删除掉所有指向它的硬链接。

#ln -s src target
是软链接,存储的只是路径,用ls -l 可以看到,如果原文件已移走或删除,该名,则target就没有用了,删除和该名链接同样用rm
如果文件有多个指向它的硬盘链接,只是删除该文件并不能有效的释放磁盘空间,你将不得不删除掉所有指向它的硬链接。

# ln -s /export/home/ddd /var 既把/export/home/ddd目录链接到/var下面
在var下面生成ddd 链接符号。当/var满了是时候用
mv
#mv -i oldfilename newfilename 改名文件或文件夹
#mv -i source_file(s) target_directory 移动文件到其它目录
swap
# swap -s //列出一个系统虚拟交换空间的摘要。

total: 25728k bytes allocated + 6140k reserved = 31868k used,56496k
available

# swap -l //列出系统物理交换空间的详细说明。
swapfile dev swaplo blocks free
/dev/dsk/c0t3d0s1 32,28 8 98792 90384

vmstat //查看虚拟内存状态
# vmstat
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr cd f0 s0 — in sy cs us sy id
0 0 0 635012 40880 10 36 21 0 1 0 231 3 0 0 0 116 287 184 1 1 99

# vmstat -s
0 swap ins
0 swap outs
0 pages swapped in
0 pages swapped out
84899 total address trans. faults taken //地址解析错误
5916 page ins
6 page outs
12283 pages paged in
9 pages paged out
22759 total reclaims
22759 reclaims from free list
0 micro (hat) faults
84899 minor (as) faults //小错误
5186 major faults //主要错误
16092 copy-on-write faults //写复制操作错误
22331 zero fill page faults
539644 pages examined by the clock daemon
18 revolutions of the clock hand
570 pages freed by the clock daemon
550 forks
17 vforks
514 execs
431543 cpu context switches
272891 device interrupts
105553 traps
671500 system calls
97227 total name lookups (cache hits 96%)
1297 user cpu
1388 system cpu
230813 idle cpu
1542 wait cpu
#

mpstat //系统负载cpu等信息
# mpstat 5 //每隔5秒刷新一次
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 32 2 0 114 68 181 5 0 1 0 263 0 1 1 98
0 2 0 0 101 55 160 1 0 0 0 58 0 0 0 100
0 0 0 0 101 55 164 1 0 0 0 70 0 0 0 100
0 0 0 0 99 52 158 1 0 0 0 48 0 0 0 100
0 22 0 0 102 56 164 1 0 0 0 136 0 0 0 100

cal
# cal
2004年 5月
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

# cal 12 2002 //显示2002年10月的日历
2002年 12月
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
# date;uname //组合命令,中间用;隔开
2004年05月19日 星期三 22时05分23秒 CST
SunOS
重定向输入/输出
#command >filename //如果文件名存在,它将被覆盖,不存在将被创建
#command >>filename //向一个存在的文件追加(添加到文件的末尾)内容,而不是覆盖它,如果不存在就创建。
#command 2>filename //重定向标准错误,会创建文件或覆盖原有文件
#commanf 2>>filename //重定向标准错误,向一个存在的文件追加(添加到文件的末尾)内容,而不是覆盖它,如果不存在就创建。

建ok文件 写入:cole how are you
$ write cole<ok
cole会收到这段话:
在 wing (pts/2) [ 10月 3 五 22:41:08 ] 上面的 wing 中的消息 …
how are you my baby
<结束>
find
#find . -name test.txt //搜索当前目录
#find dir -name test.txt
#find / -name test.txt
#find /export/home -name test.txt
#find ~ -name ‘*tif’ //用户的主目录
#find /export -name core -exec rm {} \ //搜索core文件并删除它们
#find dir -type d //文件类型
#find /export -type d -name test //文件夹名为test
#find /export -size +400 //文件大于400块的512byte =1 blocks
#find /export -name test.txt -exec rm {} \; //查找并删除
#find /export -name test.txt -ok rm {} \; //交互模式删除 y
#find /export -user keven //按用户查找
#find / -user UID -exec rm{} \; //查找该用户的文件并删除
#find / -name pfile -print>find.txt 2>null.txt&
//找到则放入find.txt,否则就放到null.txt 程序在后台运行

# find /export -name tex.txt -exec rm {} \; //{} \中间有一个空格
$ find ~ -name ‘*es’ //es的前面为任意字符
搜索表达式 意义 定义
name filename 文件名 搜索所有匹配的给定的文件,可以接受元字符(如? *)
type filetype 文件类型 搜索匹配给定文件类型的文件(d为目录)
mtime [+|-]n 修改的时间 搜索所有修改时间或者大于,或小于给定时间的文件
atime[+|-]n 访问的时间 搜索所有访问时间或者大于,或者小于给定时间的文件
user loginid -group groupid 用户ID和属组ID 搜索所有匹配登陆ID的所有者或属组ID的文件
perm mode 权限 搜索所有匹配给定权限的文件(只允许八进制模式)
size[+|-]n[c] 搜索所有大小或者大于,小于n的文件,n以512字节每块计算,如果后面有ac,则以字符(字节)计算
-print 基将搜索结果输出到标准输出。该结果是一个全路径名的文件名 列表

-exec command{}\; exec选项必须通过\;来终止;这样使得find命令可以应用于指定命令中搜索准则中给出的每个文件
-ok command{}\; -exec的交互格式.这个选项用于要求来自用户的输入命令.如 rm -i
-ls 使用长列表格式打印当前路径.这个表达式最常用于链接一个输出,把它重定向到一个文件中,以便稍后进行检查

#grep root /etc/passwd //在passwd中查找root
#grep -i root /etc/passwd //忽略大小写
#grep -v root /etc/passwd //显示除了含有root的行
# grep -c root group //统计有多少行
10

# grep -l root passwd group hosts //查找文件中包含root的文件
passwd
group
正则表达式 功能 例子 结果
.(dot) 匹配任意字符可以多次使用,类似ls命令 grep chap.. file 显示所有包含chap,且之后还有两个字符的行
*(asterisk) 在模式上匹配0个或多个字符 grep chap* file 显示所有包含chap,且之后可以是任意字符
\(back slash) 告诉shell按照字面意思理解\之后的特殊字符 grep dollar\* file 显示所有包含dollar*的行./告诉shell按照字面意思理解*,而不是通配符
^ (caret) 匹配所有以指定模式打头的所有行 grep ^name file 显示所有以Name开头的行
$ 匹配所有以指定模式结尾的行 grep $800 file 显示所有以800结尾的行
[] 匹配模式中的一个字符 grep [64.128] 显示所有包含64MB或128MB的行
-i 忽略大小写
-v 反包含.除了该字符串之外的行
egrep
# egrep ‘N(e|o)’ /etc/passwd //查找以字母大N开头后面接e 或者o
listen:x:37:4:Network Admin:/usr/net/nls:
nobody:x:60001:60001:Nobody:/:
noaccess:x:60002:60002:No Access User:/:
nobody4:x:65534:65534:SunOS 4.x Nobody:/:
$ egrep ‘(Network|uucp) Admin’ /etc/passwd
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
listen:x:37:4:Network Admin:/usr/net/nls:

sort
#cat test.txt
oggg
aaa
ddkk
ddgfg
kk
11
34
22
#sort test.txt
11
22
34
aaa
ddgfg
ddkk
kk
oggg
# ls -ld t* >list
# cat list
-rw-r–r– 1 keven user 32 10月 2 07:51 test.txt
-rw-r–r– 1 keven user 0 9月 30 08:54 test1
-rw-r–r– 1 keven user 0 9月 30 08:54 test2
-rw-r–r– 1 keven user 0 9月 30 08:54 test3
# sort -rn +4 list -o tt.txt //翻转排序 头4个字符
# ls
list ok.txt ss test.txt test1 test2 test3 tt.txt
# cat tt.txt
-rw-r–r– 1 keven user 32 10月 2 07:51 test.txt
-rw-r–r– 1 keven user 0 9月 30 08:54 test3
-rw-r–r– 1 keven user 0 9月 30 08:54 test2
-rw-r–r– 1 keven user 0 9月 30 08:54 test1
#sort +5M +6n list -o up.txt

选项 描述
-n 进行数字排序,n可以单独和短横线连接,或者可以跟着一个区域参数
(+|-)n 以第n个分隔符的区域开始或结束。默认的分割符是空格
-r 翻转排序的顺序。r可以单独与短横线连用,或者可以跟着一个区域参数
-f 在排列中忽略大小写
+nM 把开始的三个字符做为月份名称的简写来排序
-d 使用字典排序,只用字母和空格排序,其它的符号忽略
-o filename 把所有输出放到文件名中
who
# who
root console 10月 2 19:23 (:0) (本地登陆)
wing pts/2 10月 2 19:22 (192.168.0.1)(远程登陆)

# who -q //登陆用户统计
root wing
# users=2

# who -r //运行级别
. run-level 3 10月 2 19:20 3 0 S

$ who -Hu
NAME LINE TIME IDLE PID COMMENTS
keven pts/2 10月 12 10:57 . 389 (192.168.0.1)
user pts/3 10月 12 10:16 0:52 368 (192.168.0.1)
PID为用户登陆上来的进程,#kill -9 368 把此用户踢出

$ who
root console 10月 3 19:21 (:0)
keven pts/6 10月 3 22:11 (192.168.0.1)
wing pts/2 10月 3 22:11 (192.168.0.1)
cole pts/3 10月 3 22:11 (192.168.0.1)

w
$w
下午11点01分 运行 3:43, 4 users, 平均负载:0.00, 0.00, 0.02
用户名 终端号 登入时间 闲置 JCPU PCPU 执行命令
root console 下午 7点21分 3:40 10 1 /usr/dt/bin/dtscreen -mode blank
keven pts/6 下午10点11分 -csh
wing pts/2 下午10点11分 5 w
cole pts/3 下午10点11分 50 -ksh
$ w keven
下午11点10分 运行 3:52, 4 users, 平均负载:0.00, 0.00, 0.02
用户名 终端号 登入时间 闲置 JCPU PCPU 执行命令
keven pts/6 下午10点11分 9 -csh
logins
# logins
root 0 other 1 Super-User
daemon 1 other 1
bin 2 bin 2
sys 3 sys 3
adm 4 adm 4 Admin
uucp 5 uucp 5 uucp Admin
nuucp 9 nuucp 9 uucp Admin
smmsp 25 smmsp 25 SendMail Message Submission Program
listen 37 adm 4 Network Admin
lp 71 lp 8 Line Printer Admin
wing 1001 adm 4 my wife
keven 1002 user 100
user1 1003 adm 4
user2 1004 adm 4
cole 1005 adm 4
nobody 60001 nobody 60001 Nobody
noaccess 60002 noaccess 60002 No Access User
nobody4 65534 nogroup 65534 SunOS 4.x Nobody
last
$ last //当前系统的使用历史使用模式
keven pts/2 192.168.0.1 Mon Oct 6 00:55 仍在登录状态
cole pts/6 192.168.0.1 Mon Oct 6 00:52 仍在登录状态
root console :0 Mon Oct 6 00:44 仍在登录状态
wing pts/3 192.168.0.1 Mon Oct 6 00:21 仍在登录状态
keven pts/2 192.168.0.1 Mon Oct 6 00:21 – 00:55 (00:34)
reboot system boot Mon Oct 6 00:20
keven pts/2 192.168.0.1 Sun Oct 5 19:47 – 20:02 (00:14)
reboot system boot Sun Oct 5 19:46
wing pts/1 192.168.0.1 Sun Oct 5 07:47 – 07:48 (00:00)
keven pts/1 192.168.0.1 Sun Oct 5 06:24 – 07:47 (01:23)
root console :0 Sun Oct 5 06:22 – 07:48 (01:25)
keven pts/1 192.168.0.1 Sun Oct 5 06:21 – 06:24 (00:02)
reboot system boot Sun Oct 5 06:21
cole pts/6 192.168.0.1 Sun Oct 5 01:58 – 03:09 (01:11)
wing pts/5 192.168.0.1 Sun Oct 5 01:58 – 03:10 (01:11)

finger
# finger
Login Name TTY Idle When Where
root Super-User console Thu 19:23 :0
wing my wife pts/2 Thu 19:22 192.168.0.1
$ finger -s keven //指定查看的用户
Login Name TTY Idle When Where
keven admin pts/6 11 Fri 22:11 192.168.0.1
$ finger @www //查看一台主机的登陆用户状况www为主机名
[www]
Login Name TTY Idle When Where
root Super-User console 1 Fri 19:21 :0
keven admin pts/6 13 Fri 22:11 192.168.0.1
#finger -s username@hostname
#finger @webserver.com
#finger username@webserver.com
$ finger -l keven //长格式显示
Login name: keven In real life: admin
Directory: /export/home/keven Shell: /bin/ksh
On since Oct 12 10:16:41 on pts/2 from 192.168.0.1
24 seconds Idle Time
No unread mail
No Plan.
# finger user1
Login name: user1 In real life:
Directory: /export/home/wing Shell: /bin/sh
On since Oct 12 11:11:33 on pts/3 from 192.168.0.1
4 minutes 8 seconds Idle Time
No unread mail
No Plan.

$ finger -m //只搜索登陆的用户名
# man -l uname //输出该命令的地址
uname (1) -M /usr/share/man
uname (2) -M /usr/share/man
NAME
man – find and display reference manual pages

SYNOPSIS
man [-] [-adFlrt] [-M path] [-T macro-package] [-s section]
name…

man [-M path] -k keyword…

man [-M path] -f file…

id
# id
uid=0(root) gid=1(other) //为当前用户的ID,而不是原始登陆ID

who i am
# who i am //真实的UID
root console Oct 2 19:23 (:0)
wing pts/2 Oct 2 19:41 (192.168.0.1)

df -k
# df -k
Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c0d0s0 63127 36137 20678 64% /
/dev/dsk/c0d0s6 1201014 768820 372144 68% /usr
/proc 0 0 0 0% /proc
mnttab 0 0 0 0% /etc/mnttab
fd 0 0 0 0% /dev/fd
/dev/dsk/c0d0s3 55047 25063 24480 51% /var
swap 608948 24 608924 1% /var/run
swap 609216 292 608924 1% /tmp
/dev/dsk/c0d0s5 24239 15 21801 1% /opt
/dev/dsk/c0d0s7 2691830 112 2637882 1% /export/home
/dev/dsk/c0d0s1 462639 306816 109560 74% /usr/openwin
du -k
#du -k /export //递归显示文件夹中的文件或文件夹
# du -sk /etc 查看目录的使用情况 总树统计
# du -k /etc 逐个查看
# du -k /export | sort -n 可以迅速发现那个目录是最大的。
vi
vi(文本输入模式)
命令 功能
a 在光标后追加文本
A 在行末追加文本
i 在光标前追加文本
o 在光标下插入新的一行
vi(末行模式)
命令 功能
:w 写缓冲区,保存更改继续在vi中工作
:w new_filename 把缓冲区写如new_filename
:wq 或 ZZ 写缓冲区,保存修改,然后退出vi
:q! 不保存修改而退出
:wq! 写缓冲区保存修改然后推出vi,如果你是文件的所有者将忽略只读属性
e! 取消自上次保存以来所做的修改
等价于:wq! wq
u 取消最近的一次编辑

vi(命令模式)
命令 功能
j(或向下箭头) 向下移动一行
k(或向上箭头) 向上移动一行
h(或向左箭头) 向后移动一个字符
l(或向右箭头) 向前移动一个字符
空格 向右移动一个字符
w 向前移动一个单词(包括标点)
b 向后移动一个单词(包括标点)
$ 移动到行末
0(零)或 ^ 移动到行首
回车 移动到下一行首

vi(命令模式和末行模式)
命令 功能
x (小写) 删除光标处字符
dw 删除单词
3dw 删除三个单词
dd 删除光标所在的行
3dd 删除三行
yy 拉出一行拷贝,放到剪贴板中
p(小写) 把拉出行放到当前之下
P(大写) 把拉出行放到当前之上
:set nu 显示行号
:set nonu 隐藏行号
:set showmode 显示当前操作模式(如用vedit将自动打开)
:set noshowmode 关闭模式显示
:set 显示所有vi变量
:set all 显示所有可能的vi变量和它们的当前的值
G 到达文件的最后一行
:21 到达第21行
/string 向前搜索字符串string
?string 向后搜索字符串string
n 查找匹配的下一个字符串
cpio

#cpio -idcmv < lnx_902_disk1.cpio 截压缩

tar
# tar cvf backup.tar list ok.txt test.txt //备份生成backup.tar
a list 1K
a ok.txt 1K
a test.txt 1K
#tar rvf backup.tar tt.txt //追加tt.txt到backu.tar中去
# tar cvf backup.tar tt.txt //注意会覆盖backup.tar原有的文件
a tt.txt 1K
# tar cvf /export/home/wing/mywife.tar ok2.txt ss // 备份到另一个目录
# tar xvf backup.tar //全部还原出来

# tar xvf backup.tar tt.txt //把指定的文件还原出来
tar: 块大小 = 4
x tt.txt, 290 bytes, 1 tape blocks
# tar tvf backup.tar //查看里面被压缩了的文件名,并没有解压出来
tar: 块大小 = 4
-rw-rw-rw- 1002/1 290 2003 10月 3 02:10 tt.txt
$tar uf myarch mydir //t a r将比较每个存档文件和用户目录中文件的最近更新时间,然后将任何自从上次存档以来所改变的文件拷贝到档案中
参数 说明
c 创建一个新的tar文件
t 列出tar文件的内容
x 从tar文件中解压出指定的文件
r 向已有的tar文件追加一个新文件进去
f 指定文件名
v 详细模式
m 将在从一个档案中抽取文件时,不要给它新的时戳
compress
# compress -v kk.txt mm.txt
kk.txt: 压缩:58.18% — 用kk.txt.Z替换 //注意原来的文件将被.Z所替代
mm.txt: 压缩:1.33% — 用mm.txt.Z替换
# ls
err.txt kk.txt.Z mm.txt.Z tt.txt
# uncompress -v ok2.txt.Z //解压缩,注意原来的.Z文件将被ok2.txt替代
# uncompress -c test1.Z|more //只是查看文件的内容,没有解压出来

zip
#zip winzip test1.txt test2.txt //生成winzip.zip文件
#unzip winzip.zip //解压缩

gzip
# gzip -v test2 test3
test2: 0.0% — replaced with test2.gz//注意把原来的给替换了
test3: 0.0% — replaced with test3.gz
# ls
test2.gz test3.gz

gunzip
#gunzip test2.gz

gzcat
#gzcat tt.txt.gz
-rw-r–r– 1 keven user 32 10月 2 07:51 test.txt
-rw-r–r– 1 keven user 0 9月 30 08:54 test3
-rw-r–r– 1 keven user 0 9月 30 08:54 test2
-rw-r–r– 1 keven user 0 9月 30 08:54 test1

Solaris 常用命令和例子(二)

August 21, 2006

用户和权限
chmod
#chmod u+r test.txt
#chmod go+rw test.txt
#chmod o-w test.txt
#chmod 555 test.txt
#chmod +t dir //粘带位权限
#chmod g+s file.txt //setuid
#chmod u+s file.txt //setgid

chown
#chown new_owner filename
#chown -R new_owner directoryname

chgrp
#chgrp new_group filename
#chgrp -R new_group filename
nice
#nice -20 dtterm //优先级增加到20 数值越大优先级越高
#nice –20 dtterm //优先级减少到20

groups
$ groups //显示自己所在的组
adm
$ groups root //显示该用户属于什么组
other root bin sys adm uucp mail tty lp nuucp daemon

newgrp
$newgrp adm //切换到其它的组

umask
% umask
22
起始权限-想得到的权限=umask值

useradd
#useradd user3
#useradd -u 1006 -g 4 -d /export/home/user3 -s /bin/sh -c “web user” user3 //完整的添加用户
#useradd -u 1006 -g 4 -d /export/home/user3 -m -s /bin/sh -c “web user” user3 //创建用户的同时创建主目录文件

参数 说明
-c 对每个用户的注释,记录每个用户的个人信息
-d 用户主目录路径
-m 用来创建用户的主目录,通常与-d路径名一起用
-g 用户的默认组
-g 用户的默认gid
-e 帐号不再有效,通常在创建临时帐号用
-f 许可用户的最大闲置天数,在创建临时帐号时用到
-u 用户的uid
-s 用户的shell路径

userdel
#userdel user7 //把user7删除,但是不删住目录
#userdel -r username //把主目录一起删除

usermod
# usermod -u 1005 -c adminisrator cole //修改用户的一些信息
#usermod -G group1 ,group2 username //把用户添加到多个组
# usermod -G sys,sysadmin cole
# groups cole
mail sys sysadmin
# usermod -g apache cole //主要组
# groups cole
apache

passwd
#passwd -f user //下次登陆时强制其改变密码
#passwd user //修改其密码
#passwd -l user //锁住用户不能登陆
#passwd -x 30 user //口令有效期为30天
#passwd -w 3 user //口令失效的前3天提醒用户修改

groupadd
# groupadd -g 2000 usergroup

groupdel
#groupdel groupname

groupmod
#groupmod -n newname oldname
#groupmod -g gid groupname //修改其gid
#groupmod -g gid -n newname oldname
进程管理

ps

字段概述:
F十六进制标志,它们加起来表示进程的当前状态。
如下所述:00 进程终止,而且它们在进程表中的空间已释放。01 系统进程,长驻内存02 进程被父进程跟踪04 进程被父进程跟踪而且已被停止08 该进程无法被信号量唤醒10 该进程当前在内存中,而且被锁定直到一个事件完成20 进程不能被交换出

S 进程当前状态,由以下字母之一显示:
O 当前正在处理器上运行
S 睡眠;等待I/O事件完成
R 运行结束I 空闲;进程被创建
Z 僵死。进程已终止
T由于父进程跟踪而停止
X 等待更多的内存
UID进程所有者的用户ID
PID进程ID
PPID父进程ID
C 进程的CPU使用情况(即进程占CPU时间的百分比)
PRI 进程优先权方案。较大的数表示较低的优先权
NI 进程的nice值,该值与优先权方案相关联。使一个进程”nicer”意指降低该进程的优先权,以使它不会用尽CPU的时间
SZ进程请求的虚拟内存量。这是该系统对内存需求的一个好的指标。
TTY 启动进程(或者父进程)的终端。带问号的进程无控制终端(通常为系统进程)
TIME自进程启动以来占CPU时间总量
COMD产生进程的命令
# ps -f
UID PID PPID C STIME TTY TIME CMD
keven 360 358 0 19:19:19 pts/2 0:00 -csh
keven 477 360 0 19:28:14 pts/2 0:00 ps -f
# ps -u wing //特定用户
PID TTY TIME CMD
368 pts/3 0:00 sh
# ps
PID TTY TIME CMD
360 pts/2 0:00 csh
475 pts/2 0:00 ps
# ps -e
PID TTY TIME CMD
0 ? 0:01 sched
1 ? 0:00 init
2 ? 0:00 pageout
3 ? 0:00 fsflush
328 ? 0:00 sac
331 ? 0:00 ttymon
153 ? 0:00 rpcbind

# ps -ecl //PRI为进程优先权,这里98为最高
F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME CMD
19 T 0 0 0 SYS 96 fec287cc 0 ? 0:00 sched
8 S 0 1 0 TS 59 de7a8808 319 dea06e16 ? 0:00 init
19 S 0 2 0 SYS 98 de7a8108 0 fec4d4b8 ? 0:00 pageout
19 S 0 3 0 SYS 60 de7a7a08 0 fecea0bc ? 0:01 fsflush
8 S 0 329 1 TS 59 de7a7308 448 deac8d68 ? 0:00 sac
8 S 0 256 1 TS 59 de7a6c08 1084 deeb7f02 ? 0:00 sendmail

$ ps -eaf
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 19:18:44 ? 0:01 sched
root 1 0 0 19:18:44 ? 0:00 /etc/init –
root 2 0 0 19:18:44 ? 0:00 pageout
root 3 0 0 19:18:44 ? 0:00 fsflush
root 328 1 0 19:19:10 ? 0:00 /usr/lib/saf/sac -t 300
root 331 328 0 19:19:10 ? 0:00 /usr/lib/saf/ttymon
root 153 1 0 19:18:53 ? 0:00 /usr/sbin/rpcbind

#ps -eaf |grep wing
root 317 1 0 19:19:10 ? 0:00 /usr/lib/dmi/snmpXdmid -s wing
root 329 1 0 19:19:10 console 0:00 /usr/lib/saf/ttymon -g -h -p wing
console login: -T sun-color -d /dev/console
wing 368 366 0 19:19:47 pts/3 0:00 -sh

用法:ps [ -aAdeflcjLPy ] [ -o 格式 ] [ -t 项列表 ]
[ -u 用户列表 ] [ -U 用户列表 ] [ -G 组列表 ]

[ -p proclist ] [ -g pgrplist ] [ -s sidlist ]
选项 意义 功能
ps 无选项 显示在当前shell和终端窗口中的用户进程信息
ps -e every 显示系统中每一个进程的信息
ps -f full 生成一个长列表,显示每个进程的所有可用信息
ps -u userid user 显示特定用户的所有进程信息
$ ps -u wing //wing为用户名
PID TTY TIME CMD
368 pts/3 0:00 sh
494 pts/3 0:00 ps
$ ps -U wing
PID TTY TIME CMD
368 pts/3 0:00 sh
495 pts/3 0:00 ps
$ ps -G user //user为组名
PID TTY TIME CMD
360 pts/2 0:00 csh

# priocntl -l
CONFIGURED CLASSES
==================

SYS (System Class) 系统

TS (Time Sharing) 分式共享
Configured TS User Priority Range: -60 through 60

FX (Fixed priority)
Configured FX User Priority Range: 0 through 60

IA (Interactive) 交互
Configured IA User Priority Range: -60 through 60
对于分式共享级,用户提供的优先权范围为:-20~+20

# ps -ecl
F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME CMD
19 T 0 0 0 SYS 96 fec287cc 0 ? 0:00 sched
8 S 0 1 0 TS 59 de7a8808 319 dea06e16 ? 0:00 init
pgrep //查看进程
# pgrep -lf inetd
616 /usr/sbin/inetd -s -t

$ pgrep -l lp
217 lpsched
kill

signal:
1 暂停
2 中断
3 退出
4 非法指令
5 跟踪中断
6 Abort
7 EMT指令(Emulation竞争trap)
8 浮点格式的异常情况
9 kill(不能被捕获或忽略)
10 通道错误
11不合法的内存区段
12 错误系统调用
13 写入不可读的连通管道
14 alarm clock
15 软件结束信号
16 用户定义的信号1
17用户定义的信号2
18 子进程状态被改变
19 电源坏掉
20窗口(Window)的大小被改变
21Urgent(紧急的)Socket Condition
22 Pollable(可查询的)event
23 停止
24 由用户终止
25 继续执行
26 停止终端输入
27 停止终端输出
28 virtual Timer expired
29 Profiling time expired
30 超过CPU时间
31 超过文件大小限制
32 Socket I/O possible

#kill -9 368 //强行杀死一个进程
#kill 368 //杀死一个进程,使用15为默认值,为软杀死
kill -HUP ID //重启一个进程

$sleep 500&
$jobs
[1]+Running sleep 500
$sleep 500
^z
[1]+stopped sleep 00
$jobs
[1]+stopped sleep 500
$bg%1
[1]+Running sleep 500
$kill %1
[1]+ Terminated sleep 500
$jobs
$
java
# java -version
java version “1.4.0_03”
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0
Java HotSpot(TM) Client VM (build 1.4.0_03-b04, mixed mode)

proc工具

$ ps
PID TTY TIME CMD
806 pts/3 0:00 ps
368 pts/3 0:00 sh
$ pflags 368
368: -sh
data model = _ILP32 flags = PR_ORPHAN
/1: flags = PR_PCINVAL

% pmap 823 //进程的地址空间分配,和需要执行的库
823: -csh
08043000 20K rw— [ stack ]
08050000 128K r-x– /usr/bin/csh
08070000 12K rwx– /usr/bin/csh
08073000 68K rwx– [ heap ]
DD9C0000 8K r-x– /usr/lib/locale/zh_CN.GB18030/methods_zh_CN.GB18030.so.2
DD9D1000 4K rwx– /usr/lib/locale/zh_CN.GB18030/methods_zh_CN.GB18030.so.2
DD9E0000 324K r-x– /usr/lib/locale/zh_CN.GB18030/zh_CN.GB18030.so.2
DDA40000 8K rwx– /usr/lib/locale/zh_CN.GB18030/zh_CN.GB18030.so.2
DDA60000 4K rwx– [ anon ]
DDA70000 628K r-x– /usr/lib/libc.so.1
DDB1D000 24K rwx– /usr/lib/libc.so.1
DDB23000 4K rwx– /usr/lib/libc.so.1
DDB30000 152K r-x– /usr/lib/libcurses.so.1
DDB66000 28K rwx– /usr/lib/libcurses.so.1
DDB6D000 8K rwx– /usr/lib/libcurses.so.1
DDB80000 4K r-x– /usr/lib/libdl.so.1
DDB90000 292K r-x– /usr/lib/ld.so.1
DDBE9000 16K rwx– /usr/lib/ld.so.1
DDBED000 8K rwx– /usr/lib/ld.so.1
total 1740K

$ pldd 830 //与每个进程链接的动态库列表
830: -sh
/usr/lib/libgen.so.1
/usr/lib/libc.so.1
/usr/lib/libdl.so.1
/usr/lib/locale/zh_CN.GB18030/zh_CN.GB18030.so.2
/usr/lib/locale/zh_CN.GB18030/methods_zh_CN.GB18030.so.2

$ psig 830 //与进程相关的的信号列表
830: -sh
HUP caught done 0
INT caught 0x8059a30 0
QUIT caught 0x8059a30 0
ILL caught done 0
TRAP caught done 0
ABRT caught done 0
EMT caught done 0
FPE caught done 0
KILL default
BUS caught done 0
SEGV caught 0x8059f70 ONSTACK,SIGINFO

$ pstack 830 //以十六进制格式查看进程堆栈跟踪
830: -sh
ddacedf7 waitid (0, 353, 8047d40, 83)
ddaeeea7 _waitpid (353, 8047df8, 80) + 66
ddb30581 waitpid (353, 8047df8, 80) + 21
08062319 ???????? (8078c44)
08062cef postjob (353, 1) + ce
0805d1e9 execute (8079374, 0, 0) + 801
08055b61 ???????? (0)
080559b5 main (1, 8047eb4, 8047ebc) + 4d9
08055427 ???????? ()

$ pfiles 830 //每个进程所打开的所有文件
830: -sh
Current rlimit: 256 file descriptors
0: S_IFCHR mode:0620 dev:102,0 ino:853 uid:1001 gid:7 rdev:24,2
O_RDWR
1: S_IFCHR mode:0620 dev:102,0 ino:853 uid:1001 gid:7 rdev:24,2
O_RDWR
2: S_IFCHR mode:0620 dev:102,0 ino:853 uid:1001 gid:7 rdev:24,2
O_RDWR

$ pwdx 830 //获取该进程当前的工作目录
830: /export/home/wing
$ ptree 830 //获父进程与子进程的关系
179 /usr/sbin/inetd -s
828 in.telnetd
830 -sh
854 ptree 830

lsof 工具-需下载安装,本身没有自带
软件管理
pkgadd
#pkgadd -d /tem softwarename
软件名gpw-6.94-sol8-intel-local.gz
#gunzip gpw-6.94-sol8-intel-local.gz
#head gpw-6.94-sol8-intel-local.gz //查看文件的版本信息
#pkgadd -d gpw-6.94-sol8-intel-local.gz
install
#install -c /opt/scripts -m 0755 -u bin -g sysadmin /tmp/setup_script
//目标路径 权限 用户 组 源路径
pkginfo
#pkginfo //安装了的软件包
pkgchk
#pkgchk pkginst //检查软件包的完整性
#pkgchk -f pkginst //处理软件包问题
#pkgchk -n pkginst //忽略包的不稳定性
#pkgchk -l -p /usr/bin/mydir //获取已安装文件的包属性
pkgrm
#pkgrm pkginst //删除软件包
#pkgrm pkginst1 pkginst2 //同时删除多个包
showrev
#showrev -p //显示已安装的补丁

patchadd
#patchadd patchname //安装补丁
#patchadd -M patch1 patch2 //同时安装多个补丁
#patchadd -d -R /export/mars /var/spool/patch/11102-12
//目的 源路径
//不允许对补丁安装进行现场恢复

补丁安装实例
2.6_Recommended.tar.z 补丁名
1
#df -k dir //查看该目录的大小
#tar xvf 2.6_Recommended.tar.z
#./install
参数 功能
-B 指定存储恢复现场信息的目录,而不是默认目录
-C 如果需要,指定需要打补丁的网络安装映象的路径
-d 不接受可恢复现场的补丁安装
-M 指定定位补丁的可选目录
-p 打印所有已安装的补丁列表
-u 不让文件安装生效
-R 为客户安装指定可选根目录
-S 从服务器为客户端安装补丁,客户机共享服务器操作系统目录
patchrm
#patchrm patchname // 删除补丁
#patchrm -C /export/solaris_2.9/tools/1065-15
//从客户端系统删除补丁

引导和启动过程、ok模式
#shutdown
#reboot
#init 0
#boot -r

ok setenv boot-device disk //将默认的启动设备改为disk
boot-device = disk

ok printenv boot-device //验正启动设备
boot-device disk disk

ok reset

ok test net //测试回路网络设备
ok watch-clock //测试时钟设备
ok boot -r //重新引导系统
ok boot net //从网络启动
ok boot cdrom //从光盘启动
ok boot floppy //从软盘启动
ok boot tape //从磁带引导系统
ok watch-net //检查网络是否联通
ok probe-scsi //检查系统检测出的所有磁盘设备,并得到可用的设备列表
ok banner //检测内存、系统固件的openboot版本信息
ok boot -s //进入单用户模式
#reboot -l — -r //重新引导不在系统日记里记录
#shutdown – i 0 -g 120 -y
#sync;init 0
#traceroute www.abc.com
wall
#wall

init
#init q //重新初始化运行级别
#init 0 //硬件维护模式
#init 1 //单用户模式
#init 2 //NFS不可用
#init 3 //NFS可用
#init 4 //用户定义状态
#init 5 //关闭系统电源
#init 6 //挂起操作系统
#init s //进入管理状态

网络配置

etc/hostname.interface //是这块网卡的名字或机器的名字
# cat hostname.pcn0
wing

# cat hosts
#
# Internet host table
#
127.0.0.1 localhost
192.168.0.11 wing
# hostname
wing

# cat netmasks
192.168.0.0 255.255.255.0

#ifconfig le0 172.16.255.1 netmask 255.255.255.0

配置网络端口状态
#ifconfig le0 up/down
配置网络端口是否可用
#ifconfig le0 plumb/unplumb
#ifconfig -a 这个地址只有root用户使用时才显示。如果一个非root用户使用ifconfig命令,那么只有IP地址
# ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 192.168.10.25 netmask ffffff00 broadcast 192.168.10.255
ether 8:0:20:a2:11:de
#

#ifconfig le0 192.168.0.3 netmask 255.255.255.0 broadcast 192.168.0.255 up
banner
你也可以在系统还没有启动时在ok提示符下敲入banner来找到MAC地址,CPU 型号和频率。
ok banner

un Ultra 5/10 UPA/PCI (UltraSPARC-IIi 300MHz), Keyboard Present
OpenBoot 3.1.1 64 MB memory installed, Serial #9361102.
Ethernet address 8:0:20:8e:d6:ce, HostID: 808ed6ce.
# arp -a //登陆用户

Net to Media Table: IPv4
Device IP Address Mask Flags Phys Addr
—— ——————– ————— —– —————
pcn0 192.168.0.1 255.255.255.255 00:03:0f:fd:6d:0c
pcn0 wing 255.255.255.255 SP 00:0c:29:19:a1:54
pcn0 224.0.0.0 240.0.0.0 SM 01:00:5e:00:00:00
# netstat // 网络状态

TCP: IPv4
Local Address Remote Address Swind Send-Q Rwind Recv-Q State
——————– ——————– —– —— —– —— ——-
wing.telnet 192.168.0.1.1030 7168 0 66608 0 ESTABLISHED
wing.telnet 192.168.0.1.1032 6253 1 66608 0 ESTABLISHED

Active UNIX domain sockets
Address Type Vnode Conn Local Addr Remote Addr
df187cc0 stream-ord dee4c1c0 00000000 /tmp/.X11-unix/X0
df187de8 stream-ord 00000000 00000000
#

# netstat -r //查看路由表

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
——————– ——————– —– —– —— ———
192.168.0.0 wing U 1 3 pcn0
224.0.0.0 wing U 1 0 pcn0
default wing UG 1 0
localhost localhost UH 2 6 lo0

# netstat -g

Group Memberships: IPv4
Interface Group RefCnt
——— ——————– ——
lo0 224.0.0.1 1
pcn0 224.0.0.1 1
# netstat -p

Net to Media Table: IPv4
Device IP Address Mask Flags Phys Addr
—— ——————– ————— —– —————
pcn0 192.168.0.1 255.255.255.255 00:03:0f:fd:6d:0c
pcn0 solaris9 255.255.255.255 SP 00:0c:29:80:4c:0a
pcn0 224.0.0.0 240.0.0.0 SM 01:00:5e:00:00:00
#
# netstat -s

RAWIP
rawipInDatagrams = 0 rawipInErrors = 0
rawipInCksumErrs = 0 rawipOutDatagrams = 0
rawipOutErrors = 0

UDP
udpInDatagrams = 923 udpInErrors = 0
udpOutDatagrams = 928 udpOutErrors = 0

TCP tcpRtoAlgorithm = 4 tcpRtoMin = 400
tcpRtoMax = 60000 tcpMaxConn = -1
tcpActiveOpens = 18 tcpPassiveOpens = 21
tcpAttemptFails = 0 tcpEstabResets = 0
tcpCurrEstab = 31 tcpOutSegs = 715
tcpOutDataSegs = 524 tcpOutDataBytes = 52210
tcpRetransSegs = 0 tcpRetransBytes = 0
tcpOutAck = 191 tcpOutAckDelayed = 90
tcpOutUrg = 0 tcpOutWinUpdate = 0
tcpOutWinProbe = 0 tcpOutControl = 47
tcpOutRsts = 0 tcpOutFastRetrans = 0
tcpInSegs = 925
tcpInAckSegs = 505 tcpInAckBytes = 52216
tcpInDupAck = 7 tcpInAckUnsent = 0
tcpInInorderSegs = 524 tcpInInorderBytes = 45645
tcpInUnorderSegs = 0 tcpInUnorderBytes = 0
tcpInDupSegs = 0 tcpInDupBytes = 0
tcpInPartDupSegs = 0 tcpInPartDupBytes = 0
tcpInPastWinSegs = 0 tcpInPastWinBytes = 0
tcpInWinProbe = 0 tcpInWinUpdate = 0
tcpInClosed = 0 tcpRttNoUpdate = 0
tcpRttUpdate = 497 tcpTimRetrans = 0
tcpTimRetransDrop = 0 tcpTimKeepalive = 0
tcpTimKeepaliveProbe= 0 tcpTimKeepaliveDrop = 0
tcpListenDrop = 0 tcpListenDropQ0 = 0
tcpHalfOpenDrop = 0 tcpOutSackRetrans = 0

IPv4 ipForwarding = 2 ipDefaultTTL = 255
ipInReceives = 422 ipInHdrErrors = 0
ipInAddrErrors = 0 ipInCksumErrs = 0
ipForwDatagrams = 0 ipForwProhibits = 0
ipInUnknownProtos = 0 ipInDiscards = 0
ipInDelivers = 1832 ipOutRequests = 265
ipOutDiscards = 0 ipOutNoRoutes = 0
ipReasmTimeout = 60 ipReasmReqds = 0
ipReasmOKs = 0 ipReasmFails = 0
ipReasmDuplicates = 0 ipReasmPartDups = 0
ipFragOKs = 0 ipFragFails = 0
ipFragCreates = 0 ipRoutingDiscards = 0
tcpInErrs = 0 udpNoPorts = 20
udpInCksumErrs = 0 udpInOverflows = 0
rawipInOverflows = 0 ipsecInSucceeded = 0
ipsecInFailed = 0 ipInIPv6 = 0
ipOutIPv6 = 0 ipOutSwitchIPv6 = 8

IPv6 ipv6Forwarding = 2 ipv6DefaultHopLimit = 255
ipv6InReceives = 0 ipv6InHdrErrors = 0
ipv6InTooBigErrors = 0 ipv6InNoRoutes = 0
ipv6InAddrErrors = 0 ipv6InUnknownProtos = 0
ipv6InTruncatedPkts = 0 ipv6InDiscards = 0
ipv6InDelivers = 0 ipv6OutForwDatagrams= 0
ipv6OutRequests = 0 ipv6OutDiscards = 0
ipv6OutNoRoutes = 0 ipv6OutFragOKs = 0
ipv6OutFragFails = 0 ipv6OutFragCreates = 0
ipv6ReasmReqds = 0 ipv6ReasmOKs = 0
ipv6ReasmFails = 0 ipv6InMcastPkts = 0
ipv6OutMcastPkts = 0 ipv6ReasmDuplicates = 0
ipv6ReasmPartDups = 0 ipv6ForwProhibits = 0
udpInCksumErrs = 0 udpInOverflows = 0
rawipInOverflows = 0 ipv6InIPv4 = 0
ipv6OutIPv4 = 0 ipv6OutSwitchIPv4 = 0

ICMPv4 icmpInMsgs = 5 icmpInErrors = 0
icmpInCksumErrs = 0 icmpInUnknowns = 0
icmpInDestUnreachs = 5 icmpInTimeExcds = 0
icmpInParmProbs = 0 icmpInSrcQuenchs = 0
icmpInRedirects = 0 icmpInBadRedirects = 0
icmpInEchos = 0 icmpInEchoReps = 0
icmpInTimestamps = 0 icmpInTimestampReps = 0
icmpInAddrMasks = 0 icmpInAddrMaskReps = 0
icmpInFragNeeded = 0 icmpOutMsgs = 5
icmpOutDrops = 0 icmpOutErrors = 0
icmpOutDestUnreachs = 5 icmpOutTimeExcds = 0
icmpOutParmProbs = 0 icmpOutSrcQuenchs = 0
icmpOutRedirects = 0 icmpOutEchos = 0
icmpOutEchoReps = 0 icmpOutTimestamps = 0
icmpOutTimestampReps= 0 icmpOutAddrMasks = 0
icmpOutAddrMaskReps = 0 icmpOutFragNeeded = 0
icmpInOverflows = 0

ICMPv6 icmp6InMsgs = 0 icmp6InErrors = 0
icmp6InDestUnreachs = 0 icmp6InAdminProhibs = 0
icmp6InTimeExcds = 0 icmp6InParmProblems = 0
icmp6InPktTooBigs = 0 icmp6InEchos = 0
icmp6InEchoReplies = 0 icmp6InRouterSols = 0
icmp6InRouterAds = 0 icmp6InNeighborSols = 0
icmp6InNeighborAds = 0 icmp6InRedirects = 0
icmp6InBadRedirects = 0 icmp6InGroupQueries = 0
icmp6InGroupResps = 0 icmp6InGroupReds = 0
icmp6InOverflows = 0
icmp6OutMsgs = 0 icmp6OutErrors = 0
icmp6OutDestUnreachs= 0 icmp6OutAdminProhibs= 0
icmp6OutTimeExcds = 0 icmp6OutParmProblems= 0
icmp6OutPktTooBigs = 0 icmp6OutEchos = 0
icmp6OutEchoReplies = 0 icmp6OutRouterSols = 0
icmp6OutRouterAds = 0 icmp6OutNeighborSols= 0
icmp6OutNeighborAds = 0 icmp6OutRedirects = 0
icmp6OutGroupQueries= 0 icmp6OutGroupResps = 0
icmp6OutGroupReds = 0

IGMP:
0 messages received
0 messages received with too few bytes
0 messages received with bad checksum
0 membership queries received
0 membership queries received with invalid field(s)
0 membership reports received
0 membership reports received with invalid field(s)
0 membership reports received for groups to which we belong
0 membership reports sent
# netstat -M

Virtual Interface Table is empty

Multicast Forwarding Cache is empty

#
# netstat -r //网络接口状态

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
——————– ——————– —– —– —— ———
192.168.0.0 solaris9 U 1 1 pcn0
192.168.0.0 address2 U 1 0 pcn0:1
224.0.0.0 solaris9 U 1 0 pcn0
default 192.168.0.1 UG 1 0
localhost localhost UH 2 6 lo0
# netstat -rn

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
——————– ——————– —– —– —— ———
192.168.0.0 192.168.0.3 U 1 1 pcn0
192.168.0.0 192.168.0.5 U 1 0 pcn0:1
224.0.0.0 192.168.0.3 U 1 0 pcn0
default 192.168.0.1 UG 1 0
127.0.0.1 127.0.0.1 UH 2 6 lo0
#
# netstat -i 1 5
input pcn0 output input (Total) output
packets errs packets errs colls packets errs packets errs colls
1187 0 1318 0 0 3699 0 3830 0 0
4 0 4 0 0 4 0 4 0 0
3 0 3 0 0 5 0 5 0 0
4 0 4 0 0 4 0 4 0 0
3 0 4 0 0 5 0 6 0 0
#

snoop

# snoop -c 3 //抓取3IP包
Using device /dev/pcn0 (promiscuous mode)
192.168.0.1 -> solaris9 TELNET C port=3013
solaris9 -> 192.168.0.1 TELNET R port=3013 Using device /dev/pc
192.168.0.1 -> solaris9 TELNET C port=3013
3 packets captured
#
# snoop -v -c 2 //抓取两个详细的IP包。
Using device /dev/pcn0 (promiscuous mode)
ETHER: —– Ether Header —–
ETHER:
ETHER: Packet 1 arrived at 1:43:41.42
ETHER: Packet size = 60 bytes
ETHER: Destination = 0:c:29:80:4c:a,
ETHER: Source = 0:3:f:fd:6d:c,
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: —– IP Header —–
IP:
IP: Version = 4
IP: Header length = 20 bytes
IP: Type of service = 0x00
IP: xxx. …. = 0 (precedence)
IP: …0 …. = normal delay
IP: …. 0… = normal throughput
IP: …. .0.. = normal reliability
IP: …. ..0. = not ECN capable transport
IP: …. …0 = no ECN congestion experienced
IP: Total length = 40 bytes
IP: Identification = 1627
IP: Flags = 0x4
IP: .1.. …. = do not fragment
IP: ..0. …. = last fragment
IP: Fragment offset = 0 bytes
IP: Time to live = 128 seconds/hops
IP: Protocol = 6 (TCP)
IP: Header checksum = 7320
IP: Source address = 192.168.0.1, 192.168.0.1
IP: Destination address = 192.168.0.3, solaris9
IP: No options
IP:
TCP: —– TCP Header —–
TCP:
TCP: Source port = 3013
TCP: Destination port = 23 (TELNET)
TCP: Sequence number = 769864152
TCP: Acknowledgement number = 52297913
TCP: Data offset = 20 bytes
TCP: Flags = 0x10
TCP: 0… …. = No ECN congestion window reduced
TCP: .0.. …. = No ECN echo
TCP: ..0. …. = No urgent pointer
TCP: …1 …. = Acknowledgement
TCP: …. 0… = No push
TCP: …. .0.. = No reset
TCP: …. ..0. = No Syn
TCP: …. …0 = No Fin
TCP: Window = 17292
TCP: Checksum = 0x7b85
TCP: Urgent pointer = 0
TCP: No options
TCP:
TELNET: —– TELNET: —–
TELNET:
TELNET: “”
TELNET:

ETHER: —– Ether Header —–
ETHER:
ETHER: Packet 2 arrived at 1:43:41.42
ETHER: Packet size = 97 bytes
ETHER: Destination = 0:3:f:fd:6d:c,
ETHER: Source = 0:c:29:80:4c:a,
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: —– IP Header —–
IP:
IP: Version = 4
IP: Header length = 20 bytes
IP: Type of service = 0x00
IP: xxx. …. = 0 (precedence)
IP: …0 …. = normal delay
IP: …. 0… = normal throughput
IP: …. .0.. = normal reliability
IP: …. ..0. = not ECN capable transport
IP: …. …0 = no ECN congestion experienced
IP: Total length = 83 bytes
IP: Identification = 50744
IP: Flags = 0x4
IP: .1.. …. = do not fragment
IP: ..0. …. = last fragment
IP: Fragment offset = 0 bytes
IP: Time to live = 60 seconds/hops
IP: Protocol = 6 (TCP)
IP: Header checksum = f717
IP: Source address = 192.168.0.3, solaris9
IP: Destination address = 192.168.0.1, 192.168.0.1
IP: No options
IP:
TCP: —– TCP Header —–
TCP:
TCP: Source port = 23
TCP: Destination port = 3013
TCP: Sequence number = 52297913
TCP: Acknowledgement number = 769864152
TCP: Data offset = 20 bytes
TCP: Flags = 0x18
TCP: 0… …. = No ECN congestion window reduced
TCP: .0.. …. = No ECN echo
TCP: ..0. …. = No urgent pointer
TCP: …1 …. = Acknowledgement
TCP: …. 1… = Push
TCP: …. .0.. = No reset
TCP: …. ..0. = No Syn
TCP: …. …0 = No Fin
TCP: Window = 64240
TCP: Checksum = 0xd1f6
TCP: Urgent pointer = 0
TCP: No options
TCP:
TELNET: —– TELNET: —–
TELNET:
TELNET: “Using device /dev/pcn0 (promiscuous mode)\r\n”
TELNET:

2 packets captured
#

# snoop host1 host2
host1 -> host2 ICMP Echo request
host2 -> host1 ICMP Echo reply
使用snoop实用程序判定系统间实际上传送的什么信,判断网络畅通
# snoop -a dhcp

Snoop 的使用
Snoop 是Solaris 系统中自带的工具, 是一个用于显示网络通讯的程序, 它
可捕获IP 包并将其显示或保存到指定文件. (限超级用户使用snoop)
Snoop 可将捕获的包以一行的形式加以总结或用多行加以详细的描述(有
调用不同的参数-v -V来实现). 在总结方式下(-V ) , 将仅显示最高层的相关协
议, 例如一个NFS 包将仅显示NFS 信息, 其低层的RPC, UDP, IP, Ethernet 帧信息将不会显示, 但是当加上相应的参数(-v ), 这些信息都能被显示出来.
参数简介:
[ -a ] # Listen to packets on audio
[ -d device ] # settable to le?, ie?, bf?, tr?
[ -s snaplen ] # Truncate packets
[ -c count ] # Quit after count packets
[ -P ] # Turn OFF promiscuous mode
[ -D ] # Report dropped packets
[ -S ] # Report packet size
[ -i file ] # Read previously captured packets
[ -o file ] # Capture packets in file
[ -n file ] # Load addr-to-name table from file
[ -N ] # Create addr-to-name table
[ -t r|a|d ] # Time: Relative, Absolute or Delta
[ -v ] # Verbose packet display
[ -V ] # Show all summary lines
[ -p first[,last] ] # Select packet(s) to display
[ -x offset[,length] ] # Hex dump from offset for length
[ -C ] # Print packet filter code
由于snoop 的使用非常灵活, 希望能通过下面一些例子的学习来其常见用法.
1. 监听所有以本机为源和目的的包并将其显示出来.
# snoop
2. 监听所有以主机A为源和目的的包并将其显示出来. ( A为主机名, 下同)
– 2 –
# snoop A
3. 监听所有A和B之间的包并将其保存到文件file.
# snoop -o file A B
4. 显示文件file 中指定的包(99-108)
# snoop – i file -p 99,108
99 0.0027 boutique -> sunroof NFS C GETATTR FH=8E6C
100 0.0046 sunroof -> boutique NFS R GETATTR OK
101 0.0080 boutique -> sunroof NFS C RENAME FH=8E6C MTra00192
to .nfs08
102 0.0102 marmot -> viper NFS C LOOKUP FH=561E screen.r.13.i386
103 0.0072 viper -> marmot NFS R LOOKUP No such file or directory
104 0.0085 bugbomb -> sunroof RLOGIN C PORT=1023 h
105 0.0005 kandinsky -> sparky RSTAT C Get Statistics
106 0.0004 beeblebrox -> sunroof NFS C GETATTR FH=0307
107 0.0021 sparky -> kandinsky RSTAT R
108 0.0073 office -> jeremiah NFS C READ FH=2584 at 40960 for 8192
5. 详细查看文件file 中第101 个包:
# snoop – i file – v -p101
ETHER: —– Ether Header —–
ETHER:
ETHER: Packet 101 arrived at 16:09:53.59
ETHER: Packet size = 210 bytes
ETHER: Destination = 8:0:20:1:3d:94, Sun
ETHER: Source = 8:0:69:1:5f:e, Silicon Graphics
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: —– IP Header —–
IP:
IP: Version = 4, header length = 20 bytes
IP: Type of service = 00
IP: ..0. …. = routine
IP: …0 …. = normal delay
IP: …. 0… = normal throughput
IP: …. .0.. = normal reliability
IP: Total length = 196 bytes
IP: Identification 19846
IP: Flags = 0X
IP: .0.. …. = may fragment
IP: ..0. …. = more fragments
?
– 3 –
?
6. 查看主机A和主机B之间的NFS 包(命令中的and 和or 为相应的逻辑运
算)
# snoop – i file rpc nfs and A and B
1 0.0000 A -> B NFS C GETATTR FH=8E6C
2 0.0046 B -> A NFS R GETATTR OK
3 0.0080 A -> B NFS C RENAME FH=8E6C MTra00192 to .nfs08
7. 将这些符合条件的包保存到另一文件file2 中:
# snoop – i file -o file2 rpc nfs A B
8. 监听主机A和主机B间所有TCP 80 端口或UDP80端口的包
# snoop A and B and (tcp or udp) and port 80
9. 监听所有的广播包
# snoop broadcast
Using device /dev/hme (promiscuous mode)
10.10.10.50 -> BROADCAST UDP D=177 S=2541 LEN=35
10.10.10.50 -> BROADCAST UDP D=177 S=2541 LEN=35
10.10.10.50 -> BROADCAST UDP D=177 S=2541 LEN=35
10. 监听所有的多播包, 并显示详细内容.
#snoop -v multicast
ETHER: —– Ether Header —–
ETHER:
ETHER: Packet 1 arrived at 12:33:2.16
ETHER: Packet size = 69 bytes
ETHER: Destination = ff:ff:ff:ff:ff:ff, (broadcast)
ETHER: Source = 0:4:76:46:8f:50,
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: —– IP Header —–
IP:
IP: Version = 4
IP: Header length = 20 bytes
IP: Type of service = 0x00
IP: xxx. …. = 0 (precedence)
IP: …0 …. = normal delay
– 4 –
IP: …. 0… = normal throughput
IP: …. .0.. = normal reliability
IP: Total length = 55 bytes
IP: Identification = 14658
IP: Flags = 0x0
IP: .0.. …. = may fragment
IP: ..0. …. = last fragment
IP: Fragment offset = 0 bytes
IP: Time to live = 128 seconds/hops
IP: Protocol = 17 (UDP)
IP: Header checksum = ed38
IP: Source address = 10.10.10.50, 10.10.10.50
IP: Destination address = 255.255.255.255, BROADCAST
IP: No options
IP:
UDP: —– UDP Header —–
UDP:
UDP: Source port = 2541
UDP: Destination port = 177
UDP: Length = 35
UDP: Checksum = 8E35
UDP:
ETHER: —– Ether Header —–
ETHER:
ETHER: Packet 2 arrived at 12:33:12.16
ETHER: Packet size = 69 bytes
ETHER: Destination = ff:ff:ff:ff:ff:ff, (broadcast)
ETHER: Source = 0:4:76:46:8f:50,
ETHER: Ethertype = 0800 (IP)
ETHER:
IP: —– IP Header —–
IP:
IP: Version = 4
IP: Header length = 20 bytes
IP: Type of service = 0x00
IP: xxx. …. = 0 (precedence)
IP: …0 …. = normal delay
IP: …. 0… = normal throughput
IP: …. .0.. = normal reliability
IP: Total length = 55 bytes
IP: Identification = 14985
IP: Flags = 0x0
IP: .0.. …. = may fragment
IP: ..0. …. = last fragment
IP: Fragment offset = 0 bytes
IP: Time to live = 128 seconds/hops
IP: Protocol = 17 (UDP)
IP: Header checksum = ebf1
IP: Source address = 10.10.10.50, 10.10.10.50
– 5 –
IP: Destination address = 255.255.255.255, BROADCAST
IP: No options
IP:
UDP: —– UDP Header —–
UDP:
UDP: Source port = 2541
UDP: Destination port = 177
UDP: Length = 35
UDP: Checksum = 8E35
UDP:
11.监听所有的NTP 协议包
# snoop |grep – i NTP
Using device /dev/hme (promiscuous mode)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:48:50 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:49:54 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:50:58 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:52:02 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:53:06 2002)
ts1 -> 224.0.1.1 NTP broadcast (Tue Jul 23 12:54:10 2002)
这里我们也可看到NTP server 每隔约一分钟即向多播地址广播一次.

date
# date
2003年10月12日 星期日 10时04分16秒 CST
(CST是Chinese Standard Time的缩写)
# date 10121003 设置时间为10月12日10时03分

设备管理

软盘
#volcheck
fdformat [-dDeEfHlLmMUqvx] [-b label] [-B filename] [-t dos-
type] [devname] //格式化

prtconf
# prtconf //配置信息
System Configuration: Sun Microsystems i86pc
Memory size: 128 Megabytes //内存
System Peripherals (Software Nodes):

i86pc
+boot (driver not attached)
memory (driver not attached)
aliases (driver not attached)
chosen (driver not attached)
i86pc-memory (driver not attached)
i86pc-mmu (driver not attached)
openprom (driver not attached)
options, instance #0
packages (driver not attached)
delayed-writes (driver not attached)
itu-props (driver not attached)
isa, instance #0
motherboard (driver not attached)
asy, instance #0
asy, instance #1
lp (driver not attached)
fdc, instance #0
fd, instance #0
fd, instance #1 (driver not attached)
i8042, instance #0
keyboard, instance #0
mouse, instance #0
PNP0C02 (driver not attached)
PNP0C02 (driver not attached)
PNP0C02 (driver not attached)
bios (driver not attached)
bios (driver not attached)
bios (driver not attached)
pci, instance #0
pci15ad,1976 (driver not attached)
pci8086,7191 (driver not attached)
pci15ad,1976 (driver not attached)
pci-ide, instance #0
ide, instance #0
cmdk, instance #0
ide, instance #1
sd, instance #0
pci15ad,1976, instance #0
pci15ad,1976 (driver not attached)
display, instance #0
pci1022,2000, instance #0
pci1274,1371 (driver not attached)
used-resources (driver not attached)
objmgr, instance #0
cpus (driver not attached)
cpu, instance #0 (driver not attached)
pseudo, instance #0
#
# prtconf | grep Memory //查看内存
Memory size: 128 Megabytes

arch
# arch -k //了解体系结构
i86pc
uname
# uname -m
i86pc
# uname
SunOS
# uname -a
SunOS wing 5.9 Generic_112234-03 i86pc i386 i86pc
eject
#eject floppy

eeprom
#eeprom selftest -#megs=64 //修改系统自检到的内存数

sysdef
#sysdef //更详细的体系机构

df
# df -k //显示当前所有已安装的文件系统上的文件数目和空闲块的数目
文件系统 千字节 用了 可用 容量 挂接在
/dev/dsk/c0d0s0 63127 36143 20672 64% /
/dev/dsk/c0d0s6 1201014 768820 372144 68% /usr
/proc 0 0 0 0% /proc
mnttab 0 0 0 0% /etc/mnttab
fd 0 0 0 0% /dev/fd
/dev/dsk/c0d0s3 55047 25258 24285 51% /var
swap 651040 24 651016 1% /var/run
swap 651016 0 651016 0% /tmp
/dev/dsk/c0d0s5 24239 15 21801 1% /opt
/dev/dsk/c0d0s7 2691830 122 2637872 1% /export/home
/dev/dsk/c0d0s1 462639 306816 109560 74% /usr/openwin
# df -a //打印所有文件系统的信息
/ (/dev/dsk/c0d0s0 ): 53968 块 30100 文件
/usr (/dev/dsk/c0d0s6 ): 864388 块 261705 文件
/proc (/proc ): 0 块 1878 文件
/etc/mnttab (mnttab ): 0 块 0 文件
/dev/fd (fd ): 0 块 0 文件
/var (/dev/dsk/c0d0s3 ): 59578 块 25450 文件
/var/run (swap ): 1

20% 的 Solaris 知识解决 80% 的问题

August 21, 2006

Rolf Kersten
德国Sun微系统股份有限公司
版本历史
日期 版本 简介
2002年05月25日 V1.8e 第一个英语发布版
2002年06月12日 V1.9e 第一次反馈(感谢Dnaiel Schmidberger!)
2002年07月19日 V1.10e 添加iostat章节
2002年09月04日 V1.11e Matt Ruetz的修订版
2002年12月05日 V1.12e 经过修正和增加的版本
2003年01月17日 V1.13e 被Halvard Halvorsen(www.sundot.com)和Sven Fink修正和附加的版本
2003年04月11日 V1.14e Sven和Andreas Fatum关于shell编译器和环境变量章节更多地说明
简介
这篇文档包含了你用solaris和Sun平台工作时所需要的最重要的20%的技术。它能处理你所遇到的80%的问题。
这篇文档并不打算覆盖Solaris处理环境的细节,也不会包含常见问题解答(相关的书和链接将在附录中给出)。这本书将用来为刚成为Solaris系统管理员的新手或没有每天管理Solaris系统基础的人提供一种怎样收集这种信息的服务。这篇文章关注的方向是用来做技术开发的图形工作站,也将对希望为建立一套用来演示或作为基准的Sun系统的人有所帮助。
两点提醒:
? 永远记住在记录日志中记录下你对系统的每一次改动
? 清楚的在头脑中记住这篇文档包含能让系统不可用的系统级的程序。除非你对它的破坏性做了仔细的分析,否则不要在正在使用的系统上执行这些程序。

1 系统启动和测试
1.1 OK提示符
每套SUN都有一个Boot-PROM模式,可以在启动操作系统之前访问,也可以在运行的时候访问,可以用STOP+A进入,如果没有STOP键(PC),可

以用ctrl+break.。一旦进入Boot-PROM模式,会出现OK提示符。如果操作系统运行时候出现,可以用go继续。
1.2 控制台测试
Boot-PROM模式可以用直接连接的键盘和显示器,也可以用终端。
如果系统启动时候没有检测到键盘,输入输出自动转到第1个串口(/dev/ttya,A),可以连接一个终端或者另一计算机(通过交叉串口线)到

这个端口。
如果另外的计算机是SUN工作站,可以使用tip hardwire来查看启动控制台。Tip命令输入之后,所有的启动信息会出现在相应的终端窗口里面

,如果被观察的机器用了STOP+A,必须使用Strg-]把tip改成telnet模式,然后输入一个BREAK:telnet>send brk
1.3 重新启动SUN工作站
重新启动之前,工作站需要进入一个合适的状态,可以使用下面及格命令退出:
# init 5
# init 6
# init 0
SUN工作站在重新启动之前,会以一定的方式关闭系统,下面是几种可选择的方法:
最好、最干净的方法:
– # init 5 关闭所有进程,然后系统自动关掉电源。
– #init 6,关闭所有进程,然后系统自动从新启动。
– #init 0,关闭所有进程,然后系统自动回到OK状态。
在这3种情况下,在系统关闭之前执行/etc/rc0.d下面的K*脚本,这可以用于关闭数据库,或者关闭WEB服务器的进程ID文件等。
如果没有合适的shell窗口,可以使用远程登录来执行上面的命令。远程也不可以,可以使用下面的方法:
– STOP-A
– OK sync 同步文件系统,中断OS,然后重启。
注意:需要察看随之产生的保存在/var/crash/<hostname>下面的内核转储文件。
如果碰到STOP-A也不能使用的情况,必须关闭计算机电源,在打开电源。
1.4 系统的测试
启动系统,在执行到内存测试的时候,按下STOP-A。
下面的段落只描述很重要的命令。
详细的描述可以在下面的书中《Hardware Diagnostics for Sun TM Systems: A Toolkit for System Adminis-trators》(Infodoc Number

23476 on http://sunsolve.sun.com)。
1.4.1 Banner(标识)
Banner显示下列信息:
. CPU的数量、类型和频率
. 内存
. MAC地址和主机地址(主机号)
. 控制台显示卡类型
. Sun-Globe: Creator 3D
. Sun with face: Elite 3D
. Self-describing Logo: PGX, Raptor GFX (=PGX32), Expert3D(lite) XVR-500, XVR-1000 etc.
1.4.2检测
probe-scsi-all列出内置和外置的所有SCSI设备。对于IDE硬盘,使用:probe-ide-all.
1.4.3 测试所有
test-all.运行所有的自检,可以检测象网线是否正常等情况。
1.4.4 printenv and devalias
devalias列出所有别名,printenv列出所有变量。例如boot-device变量,定义了计算机启动的路径,一般情况下是disk,disk是一个指向特定

设备的别名。
1.4.5禁止网卡错误信息
当网卡在没连接网线启动的时候,”Interface: No link”会出现多次,可以在OK下面设置
setenv tpe_link test false 来禁止这个报错信息。

2 管理硬盘
2.1 逻辑设备名
所有的硬盘都有一个共同的命名方案,该方案包括一下四个部分:
c 控制器号
t 目标号,对于SCSU设备,就是对应的SCSI地址。
d 驱动号或者是RAID设备的LUN 号(一个地址,多个硬盘)
S 分区号(见下一段)
这些逻辑设备的以连接方式放在/dev/dsk和/dev/rdsk目录里面,并指向物理设备名。但这些物理设备仅在改变启动设备时用到,一般的命令都

以逻辑设备为参数。
例如:
c0t0d0s0 通常是工作站的第1硬盘,c0t1d0s0 是第2个 c0t6d0s0 是内部光驱(SCSI地址是6)
在OK提示下输入 boot ?Cr可以更新/dev/dsk and /dev/rdsk目录里面的内容,devfsadm也可以。
Solaris8以前的需要用drvconfig;disks;devlinks3个命令来完成,刷新之后,probe-scsi-all所看到的设备的逻辑连接也就能看见了。
2.2 分区
下面是一个两个硬盘的工作站用format命令看到的内容
c0t0d0
c0t1d0
这里显示的是硬盘,不是分区或扇区,format的目的就是产生和管理分区,一个硬盘最多可以优个分区,用format-print可以查看。如果使用缺

省安装,Solaris安装工具就会把系统盘分成slices: / (root) /usr /var 和 /export/home。Solaris 8操作系统缺省安装产生3个分区,大约

1G的根区,SWAP区(根据内存容量确定大小),剩余空间给/export/home.
对于工作站来说,这个缺省分区不是最优化的,分区的容量不能在数据不丢失的情况下扩充。在分区空间用尽的情况下,必须使用符号连接。

对于服务器来说,得保留一个分区给/var目录,
这样的话,保存在/var/tmp里面的记录和大文件就不会影响到根区,避免系统产生问题。
建议工作站这样分区
slice 0: / root-Partition, incl. /usr, /var, /opt plus
/export/home
slice 1: swap 交换区,和物理内存一样大
slice 2: backup 不要改变这个分区!!代表整个硬盘
slice 7: sds 用于Solstice DiskSuite(TM) metadata的小分区
为了使用Solstice Disksuite logical volume manager (SDS),建议保留30M,用于拷贝”state replica databases”.可以参阅后面的使用SDS

镜像启动盘
从Solaris 8 02/02开始,会自动安装Live Upgrade。使用Live Upgrade,可以在系统正在运行的时候拷贝当前根的环境。例如可以测试新的操

作系统而不用改变正在运行的系统。为了产生这个预备启动环境(ABS),必须留出足够的空间,现在的硬盘空间足够大,可以使用下面分区:
slice 0: / root-partition, incl. /usr, /var, /opt
slice 1: swap swap-Partition, as large as physical memory
slice 2: backup Do not change this partition!
It is always the size of the whole disk
slice 3: /export OS-independent data, home-directories
slice 4: <not mountet>, to be used as ABE with Live Upgrade
( about 150% of the expected size of / )
slice 7: sds A small space reserved for Disksuite metadata
2.3 Crashdumps
从Solaris 7开始,缺省情况下crashdump写到交换区上,这也是为什么交换区为什么和内存一样大的原因之一。下次启动的时候,从交换区中读

取这个文件,压缩之后写到var/crash/<hostname>里面,用于以后的分析。因此/var(如果没有单独分出/var或者是/区)不能太小。
如果一个系统用了几个G的空间作为dump设备,启动时会由于上面提到的拷贝操作,花上很长时间。这时候,最好利用dumpadm定义一个dump分

区,从这个指定分区拷贝的操作会在后台运行。注意经常检查和清除/var/crash/<hostname>,保证有足够的空间用于其他的crashdumps.
2.4 Example
假如有一台E450系统并且有一个已经配置好的启动盘,但你不知道两件事情:(1)盘插哪里(系统又20个槽,必须装到安装系统时硬盘所在的

槽里才能启动),(2)忘了超级用户口令。把 盘插到一个任意槽里,按下面的步骤:
第1步 插入一个启动光盘(SOLARIS 安装盘)STOP+A,然后 boot cdrom

?Cs。如果用外置光驱,就需要probe-scsi-all列出光驱位置,然后boot <光驱路径> -s。系统起来之后,就有了一个不需要口令的超级用户窗

口。
第2步 开始mount硬盘。首先用devfsadm重新建立设备,在/dev/dsk下面会有8个新文件。接下来使用format-print-partition确认盘已经装好

,并找出来哪个分区是root分区,通常都是0区 。假设盘插到2槽,format会识别到c1t2d0(SCSI ID是2,第1个控制器),c1t2d0s0就是root分

区,因此应该ount这个盘,fsck ?CY /dev/rdsk/c1t2d0s0;mldir /tmp/disk;mount /dev/dsk/c1t2d0s0 /tmp/disk
第3步

首先清楚/tmp/etc/shadow里面的root后面的加密内容清空,然后查看/tmp/etc/vfstab里面看看该盘是不是第2槽的,如果是,/应该mount在/d

ev/dsk/c1t2d0s0,如果不是,就把硬盘插到相应的槽里面。
第4步

假设在/tmp/etc/vfstab里面看到的是/dev/dsk/c1t2d0s0,这说明在原来的系统里面启动盘就是第2槽,一般,E450会从第1槽启动(c1t0d0s0

)。在/dev/dsk里面找到并记下来c1t0d0s0指向的物理设备文件名。
第5步 reboot,STOP+A,输入:boot <物理设备文件名>。
第6步 定义别名, nvalias my disk <物理设备文件名>,这样就可以输入boot mydisk就可以启动了。定义setenv boot-device mydisk,系统

就会自动从mydisk启动了。
2.5 Removable Devices
2.5.1 Volume Management(卷管理)
可移动设备又卷管理器来负责,卷管理器检测CD-ROM并自动挂接到/cdrom/cdrom0下面。一些手工操作会造成卷管理器错误,比如使用曲别针打

开光驱,而不是使用eject cdrom命令。只这时候需要手工重起卷管理器.
/etc/init.d/volmgt stop
/etc/init.d/volmgt start
2.5.2 软驱
插入软盘(UNIX或DOS格式)必须使用volcheck才能使用卷管理器管理软驱。如果volcheck成功,软驱会出现在/floppy/floppy0下面,使用eje

ct floppy而不手工取出软盘。
2.5.3 CD-ROM
CDROM不需要volcheck,开机就会被检测到,并挂接在/cdrom/cdrom0下面,没有shell或命令使用/cdrom路径时可以使用eject cdrom弹出光驱,

fuser ?Cc /cdrom/cdrom列出所有和光驱有关的进程ID或命令,fuser ?Ck可以快速杀掉相关进程。
如果没有卷管理器,使用下面的方法管理CDROM(假设SCSI地址是6):
– mkdir /tmp/cdrom
– mount -F hsfs /dev/dsk/c0t6d0s0 /tmp/cdrom
– (Work with CD mounted on /tmp/cdrom)
– umount /tmp/cdrom
– eject /dev/dsk/c0t6d0s0
2.5.4 CD-R 和 CD-RW
CDRW,是一个与solaris 8

捆绑的工具,用来烧制CD-R或者CD-RW介质。这个工具也可以烧制用命令mkisofs从solaris文件系统和目录中创建的ISO镜象文件。
看下面带精确参数的例子:

#! /bin/sh
# ./nfscd <PARAMETER1> <PARAMETER2>
# PARAMETER1 = Application ID
# PARAMETER2 = from where
#
# ./nfscd SunNetManager /net/center2000/export/pkg/SUNWsnm
# set Umask
umask 022
# Remove old image
rm /data/disk.img
# Create image
mkisofs -A $1 -d -l -L -o /data/disk.img -P “Sun Microsystems” -p
“Solaris SPARC” -r -R -J -V “$1” -v $2
# Burn
cdrw -i /data/disk.img

2.5.5 磁带
磁带设备不是用卷管理器来控制的,它们必须用命令tar来处理。典型的磁带设备被作为一个外部SCSI设备连接到系统。当solaris OE 运行时

它们的连接和配置就已经被完成了,在运行以前版本的solaris命令devfsadm(solaris 8 OE) 或者drvconfig; tapes;devlinks,你能找到一些

逻辑的连接在/dev/rmt 目录。0描述的是第一个磁带设备,1是第二个磁带设备。
通过以上,你就可以访问这个磁带,用命令 tar tvf /dev/rmt/0.
注意:SGI系统写入的磁带通常只能用特定的块因子(blocksize)来读
tar tvfb 512 /dev/rmt/0
在某些情况下,需要进行字节交换操作,才能正确读取
dd if=/dev/rmt/0 conv=swab | tar tvfb 512 –
2.6 克隆磁盘
通过这部分的学习,你可以把一个系统克隆到另一个和它的硬件属于同一系列的系统中。例如克隆Ultra(TM) 10工作站到Ultra 10工作站是可

以的,而克隆到Ultra 60工作站就是行不通的。
如果监测到目标系统的硬件结构和源系统有所不同的话(不同的结构缓冲,网卡等),目标系统在克隆以后需要用boot ?Cr命令来重新配置。
2.6.1 使用内部磁盘来克隆
这种方式适合用于易于改变的内部磁盘:
?Ultra 30, Ultra 60, Ultra 80或者Sun Blade(TM) 100工作站或者E220R/E420R/E250R/E450
?Sun Enterprise(TM)220R, 420R, 250, 或者450服务器
内部的FC-AL磁盘(如Sun Blade 2000工作站和Sun Fire(TM) 280R或V880服务器)可能导致一些问题。
接下来是用Ultra 60工作站做的一个范例:
1 将目标盘插入主板上的第二个硬盘口
3 启动进入但用户模式(STOP-A; boot ?Cs)
4 用devfsadm重新配置所有的磁盘
5 键入format察看硬盘的名称。在Ultra 60工作站上,你会看到c0t0d0和c0t1d0。C0t1d0是内部系统中最顶端的磁盘。
6 决定哪个盘是源盘,哪个盘是目标盘(不要忘记备份你的数据!)。在我们的例子中c0t0d0(底部的盘)作为源盘,c0t1d0(上面的盘)是目

标盘。
7 dd if=/dev/rdsk/c0t0d0s2 of=/dev/dsk/c0t1d0s2

bs=128k(这条命令为整个盘,包括分区标的内容作了一个1:1的副本。如果源盘是一个9GB的盘,而目标盘是一个18GB的盘,那么将会有9GB的

容量被浪费)。警告:仔细检查这一步,避免对你源盘的意外损坏。
8 fsck ?CY of=/dev/dsk/c0t1d0s0(检查启动分区的文件系统,一般来说是分区0)
9 移除源盘,将克隆好的盘放进先前源盘所在的位置。重新启动你新做好的克隆的系统

2.6.2 通过转接线来克隆
这种方式比上面描述的通过内部磁盘克隆要慢,但是它适合用于一些内部的磁盘不容易改变的系统(如Ultra 10或Ultra 5工作站)。
警告:记住文件”/.rhosts”仅仅在这个任务中使用,在完成这个任务之后删除它来避免系统的安全漏洞。
目标系统
启动
在注册屏幕上使用命令行注册(command line login)
尽可能地停止引起磁盘输入输出的进程
TERM=vt100vi /etc/inet/hosts
->添加目标和源
ifconfig hme0 plumb
ifconfig hme0 <target> netmask 255…up
->测试rsh源
rsh source “dd if=/dev/rdsk/c0t0d0s2 ibs=128k obs=8k” | dd of=dev/rdsk/cotodos2 bis=128k obs=128k
(9GB的盘需要等待大约40分钟)
STOP-Aboot cdrom ?Cs(用可引导的光盘引导)
fsck ?CY /dev/rdsk/c0t0d0s0
源系统
在文件/.rhosts中添加目标IP
sync; sync;

2.7 用SDS制作磁盘镜像
Solaris逻辑卷面管理(SVM),一般是指Solstice Disksuite(SDS)软件,它可以把磁盘系统做成RAID 0, 1, 0+1或5。工作站最感兴趣的方式

是RAID 1:为磁盘错误准备好了一个包含启动文件系统的磁盘镜像。
SVM是Solaris 9系统环境的一部分。在Solaris 8平台上,你可以在第二章光盘的”EA”目录下找到SDS软件。而在Solaris 7或者2.6系统环境

中,服务器版,你可以查找一下光盘”Easy Access Server”。
我们假定一个工作站有两块内部的磁盘,c0t0d0和c0t1d0。这两块盘都以相同的方式被正确的分区:分区0被分配给/(root),分区1被分配给交

换区(swap),一个比较小的分区7被分配用来记录复制数据库(State Replica Databases)。分区2被定义成一个备份区(参见”分区”一章)。
把第一块盘的分区信息复制到第二块盘,可以用如下的命令:
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s – /dev/rdsk/c0t1d0s2
记录复制数据库是一个包含了镜像信息纪录的小文件。镜像中的每个磁盘都必须知道有三个记录复制数据库文件:
# metadb -a -f -c 3 c0t0d0s3 c0t1d0s3
下一步,在第一块磁盘上创建第一个子镜像,它包含了启动文件系统:
# metainit -f d50 1 1 c0t0d0s0
然后在第二块磁盘上创建第二个子镜像:
# metainit d52 1 1 c0t1d0s0
使用第一个子镜像创建镜像的第一个部分:
# metainit d54 -m d50
用metaroot修改/etc/vfstab和/etc/system,让系统可以从元设备(metadevice)d54上启动:
# metaroot d54
重新启动系统,然后将添加第二个子镜像d54。这就强制了”镜像同步”,将第一块盘的内容复制到了第二块盘。这将在一小段时间内影响系统

的性能。
# metattach d54 d52
为了避免在从第二块盘上紧急启动时发生错误信息,交换分区必须做成相同样式的镜像。否则,交换分区在损坏的磁盘上,/etc/vfstab仍然会

定位到c0t0d0s1。
现在系统已经可以从第一块盘(boot disk),也可以从第二块盘(boot disk1)上启动了。
如果有一块磁盘损坏,Solstice DiskSuite会停止启动程序。这是因为如果要在一次错误以后成功地启动系统,纪录复制数据库的大部分必须

依然”幸存”。在我们的两块镜像盘上仅仅需要六个复制中的三个依然存活。
超过两块盘的服务需要有第三块盘来用记录复制数据库来配置。两块盘的工作站必须手动地修复,下面的例子描述了这个过程:
?记录数据库复制在c0t0d0s7和c0t1d0s7上配置,c0t0d0盘发生故障。
?启动程序被Solstice DiskSuite停止,并转换进入到单用户模式。
?现在记录数据库复制希望发生错误的盘没有被配置:
metadb -d -f c0t0d0s7
?在下一次重启之后,对重置的磁盘进行分区,使它和仍然活动的磁盘的分区一致。
?做完这些之后,在重置的硬盘上创建记录数据库复制文件:
metadb -a -c 3 c0t0d0s7
?在下次的重启之后,镜像又可以重新同步了。
注意:
如果你有一个两块盘的系统,在一块盘上创建三个记录数据库复制,在另一块上面创建四个。在理论上有50%的机会可以在一次错误后重新启动

系统而不需要手动地去使用元数据。
如果你能接受在2盘系统下发生错误后无人职守的重启,在两块盘上创建相同数量的记录数据库复制并且创建/etc/system条目:
set md:mirrored_root_flag=1
关于这方面内容更多的讨论可以在Sun的蓝皮书”Configuring Boot Disks With Solaris[tm] Volume Manager

Software”(http://www.sun.com/blueprints/1002/817-0407-10.pdf)上找到。

3 SWAP交换空间
3.1 固定配置文件 /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes ?C
/dev/dsk/c0t0d0s1 – – swap – no ?C
/usr/local/swapfile.1 – – swap – no ?C

swap – /tmp tmpfs – yes ?C
交换文件系统可以使用像/dev/dsk/c0t0d0s1这样的裸分区或者象/usr/local/swapfil.1的空文件。
你可以定义多个交换文件系统,所有这些都在逻辑上绑定并挂接到/tmp挂接点。这就意味着只要物理内存是可用的,向/tmp中写文件将写入内

存并耗尽内存(not very sure)
例如:
/dev/dsk/c0t0d0s1 – – swap – no ?C
/dev/dsk/c0t1d0s1 – – swap – no ?C
/dev/dsk/c0t2d0s1 – – swap – no ?C

swap – /tmp tmpfs – yes ?C
上面创建了另外的6GB的虚拟内存(假设所有的分区大小为2G).Solaris将条带访问对所有的磁盘。
3.2 “裸分区”和空文件的比较
最快速的交换就是不进行交换,假如物理交换不可避免,使用在多可磁盘上条带后的分区。如果实在需要内存或者没有可用的分区或磁盘,则

使用空文件系统。
3.3 临时配置
在标准的SOLARIS操作中,空文件可以加入到交换空间。
# mkfile 100m /usr/local/swapfile.1
# swap -a /usr/local/swapfile.1
# swap -l
在系统重启之前,这些额外的空间是临时的。可以使用命令swap -d /usr/local/swapfile.1去掉这些额外的交换空间

4 系统安装和维护
4.1 CD安装
在安装过程中,你尽可以轻松地按照屏幕的提示进行,但也许会有一些小的缺陷;
- Name Service:选择 NONE.如果你这时候选择象NIS这样的内容,因为网络还没有安装好,所以没有NIS服务可用,这时系统可能会”挂起”

等待NIS服务器响应,在基本的网络安装完成后再配置NIS或DNS会更好些。
- 安装群集:对于工作站而言,应该始终选择”Entire Plus OEM Software”项来确保安装所有的内容。对于专用服务器,去掉不必要的服务包

可以最大降低安全风险。参考 SUN 蓝皮书《Minimizing the Solaris[tm] Operating Environment for Security: Updated for Solaris 9

Operating Environment>>
(http://www.sun.com/blueprints/1102/816-5241.pdf) 可获得更多内容
- 磁盘分区:根据再”分区”这一章所提供的建议,为了能够对磁盘进行分区,当提示安装方式时,选择”定制”方式而不是”默认”方式。
从 Solaris 7 OE版本开始,安装CD内含有预打包的Solaris映像.如果需要升级以前的季度升级包到该映像文件的版本,参考”维护升级”
例如:安装”维护升级 7″(同Solaris 8 02/02 OE发布)到Solaris 8 07/01 OE版本需要升级Solaris 补丁包(只这些,没有功能的增强)

到在02/02版本上的状态。升级安装在/etc/release文件中写入如下标记:”Solaris 8 07/01 Maintenance Update 7″ “推荐补丁集”采用另

外的方式,用户每月在”推荐补丁集”上可以看到不同补丁包和补丁版本。 这些可以从http://www.sun.com/bigadmin下载并且在Solaris安装

后安装。
安装完毕后,root用户只能从system控制台登录,这种终端方式直接连接到系统或键盘。为了允许通过TELNET,RSH等从远程登录,必须修改一

个文件:注释该行:CONSOLE=/dev/console!in!/etc/default/login.注意:这是一项安全分险。

4.2 包的安装
包是通过tar/compress/zip等工具压缩的一些目录文件,其命名规则名字如下:前面的四个大写字母代表发行该包公司的US股票代码,后面的

小写字母代表其功能。例如SUNWspci2这个软件包,就是SUN-pci卡的驱动程序包,前面的SUNW是SUN的股票代码,后面的spci2是其功能(PCI卡

驱动)。
安装命令如下(后面的目录里必须包含这个包)
pkgadd -d /cdrom/cdrom0
pkginfo 打印该包的信息,pkgrm <Package-Name>删除(卸载)已经安装的包。
例如:你的机器原来安装的显示卡是Creator3D(ffb)换成了Elite3D(afb),这样开机的时候会提示”no console framebuffer”(没有显示卡

),说明没安装Elite3D驱动程序。使用
pkginfo | grep -i afb
命令检查,没有输出,说明安装系统的时候没有安装Elite3D显示卡的驱动,而Elite3D的驱动程序在安装盘的s0/Solaris/Product. 进入这个

目录,使用下面命令安装即可:
pkgadd -d . *afb*
重新启动机器,新安装的显示卡就可以正常显示了。
4.3补丁安装
补丁的数字代码包含了两个部分,6位数字的补丁号,后面是两位数字的版本号,人员123456-78。
Solaris8使用的是*.zip格式的补丁压缩,以前使用的是*.tar.Z的格式的包。安装补丁的时候,先拷贝到/tmp下面,然后接压缩,安装之后要

删除这些临时文件。解压缩办法:
zcat 123456-78.tar.Z | tar xvf –
unzip 123456-78.zip
然后使用patchadd 123456-78这样的命令安装这个补丁。使用patchadd 123456-78安装的补丁可以使用pkgrm删除(卸载),/var/sadm/patch

纪录了这些安装纪录,这个目录没有的话,pkgrm就不能正常删除补丁了。
showrev -p | grep <patch number>可以查找到已经安装的补丁包。

5 X-Server和CDE用户接口
5.1 常见的需要注意的问题
X-Server或者CDE总是按照以下顺序搜索配置文件:
1. $HOME/.dt/…
2. /etc/dt/…
3. /usr/dt/…
注意,永远不要改动在整个系统范围内都生效的/usr/dt/中的内容。如果系统的X-Server或CDE出现 问题,总是使用/etc/dt/下的文件去维护

或恢复设置。用户自己的配置如扩展按钮或面板的改变等,配置总是保存在$HOME/.dt/目录下。在本节以下的内容中,将用<DT>来代替这些目

录($HOME/.dt, /etc/dt,/usr/dt)。
5.2 定制登陆界面
文件:<DT>/config/$LANG/Xresources
Logo(象素图或位图,24位色或以下,广泛装载时间):
Dtlogin*logo*bitmapFile: /usr/local/lib/X11/dt/bitmaps/Mylogo.bm
通用欢迎登陆语句:
Dtlogin*greeting*labelString: Heres %LcoalHost%!
输入用户名后的欢迎:
Dtlogin*greeting*persLabelString: Hello %s
5.3 从多屏幕登陆,Xinerama,和24位色
首先查看 /dev/fbs,找出有几个显示卡可用,它们是如何命名的. 确认有 /dev/fbs/ifb0和/dev/fbs/ifb1,两个 Expert 3D显示卡。
然后,把X-Server文件从/usr/dt/config复制到/etc/dt/config,编辑该文件,确认最后一行与以下内容相同:
:0 Local local_uid@console root /usr/openwin/bin/Xsun :0 -nobanner
5.3.1 多屏幕
多屏幕是指CDE在每个屏幕中运行一个完整的用户面板。鼠标可以在两个屏幕间移动,而各屏幕上的窗口不能在两个屏幕间移动。ifb0的的显示

屏幕被称为: :0.0, ifb1的显示屏幕被称为: :0.1
:0 Local local_uid@console root /usr/openwin/bin/Xsun :0 -dev /dev/fbs/ifb0 -dev /dev/fbs/ifb1 -nobanner
5.3.2 Xinerama
Xinerama(Solaris 7 11/99 OE以后的版本有效)是一个覆盖多个显示屏幕的的虚拟显示屏幕。鼠标和程序窗口可以在多个显示屏幕之间移动

, CDE只生成一个用户前端面板。只有一个显示号码: 0:0. Xinerama 只在使用相同的显示卡时才可用。
:0 Local local_uid@console root /usr/openwin/bin/Xsun :0 +xinerama -dev /dev/fbs/ifb0 -dev/fbs/ifb1 -nobanner
Xinerama 允许定义一X和Y方向的重叠,这种设置使显示画面边扩展到多个显示器上,使两个显示器显示一个图形窗口(Xoverlap=<水平解析象

素>),下面是一个在1280像素的的水平分辨率,20%边缘重叠显示的配置例子:
:0 Local local_uid@console root /usr/openwin/bin/Xsun :0 = xinerama -xoverlap 256 -dev /dev/fbs/ifb0 -dev /dev/fbs/ifb1

-nobaaner
5.3.3 使用24位色深
CDE本身默认使用8位色深(256色). 不过这没有问题,因为每个窗口可以使用单独的颜色位深设置。某些显示卡只有一个颜色表,这可能导致在

某些应用中出现程序窗口颜色闪烁的现象。只需要将CDE修改成使用24位色深。如果使用PGX显卡,需要使用命令
fbconfig -degth 24
将框架缓冲区切换到24位。
注意:由于某些老的应用只支持8位色深,不是24位色深,可能会出现问题。
:0 Local local_uid@concole root /usr/openwin/bin/Xsun :0 -dev /dev/fbs/ifb0 defdepth 24 -dev /dev/fbs/ifb1 defdepth 24

?Cnobanner
5.4 用户定制CDE面板
CDE中的应用启动机制叫做”活动”。当用户将鼠标点到一个CDE图标是,”活动”发生预定义的行为,一旦定义以后,”活动”的关联到环境

变量中:Menus, file manager, MIME-types 和定义文件
5.4.1 活动(Actions)
CDE 按照以下顺序搜索*.dt-files配置文件:
$HOME/.dt/types
/etc/dt/types/$LANG/
/usr/dt/types/$LANG/
例如,StarOffice52.dt(这是在$HOME/.dt/types下安装完StarOffice之后)
ACTION StarOffice52
{
LABEL StarOffice 5.2
TYPE COMMAND
EXEC_STRING “/opt/Office52/program/soffice” “%(File)Args%”
ICON So52
WINDOW_TYPE NO_STDIO
DESCRIPTION StarOffice
}
5.4.2 图标
一个活动的的定义还包含一个图标名。图标名按照以下顺序解析:
$HOME/.dt/icons
/etc/dt/icons/$LANG/
/usr/dt/icons/$LANG/
naming scheme: <name>.<size=m|t|l>.<format=bm|pm>
例如StarOffice52的图标文件存在以下位置: $HOME/.dt/icons/So52.m.bm
5.4.3 用户前面板
通过添加*.fp-files文件到$HOME/.dt/types目录下,可以方便简单的扩展用户前面板。默认定义存储在:
. /etc/dt/types/$LANG/
. /usr/dt/types/$LANG/
例如($HOME/.dt/types/tools.fp)
CONTROL Tools (Always define the main control before sub panel)
{
TYPE icon
CONTAINER_TYPE BOX
CONTAINER_NAME Top
POSITION_HINTS first
ICON Dtagen (This is a folder icon, Icon must exist!)
LABEL Tools
}
SUBPANEL Toolspanel
{
CONTAINER_NAME Tools
TITLE My Tools
}
CONTROL StarOffice52
{
TYPE icon
CONTAINER_TYPE SUBPANEL
CONTAINER_NAME Toolpanel
ICON So52
LABEL Star Office 5.2
PUSH_ACTION StarOffice52 (compare ACTION StarOffice52)
DROP_ACTION StarOffice52
}
你可以通过在子面板(SUBPANEL)里添加额外的控制(CONTROLs),来建立整个菜单按钮

6 显示卡和OpenGL

6.1 Fbconfig
在Solaris 8 系统环境中,fbconfig是配置显示卡的唯一的程序接口,每个显示卡有自己的专用配置工具。在Solaris 8 软件中,通过有规则

的命名方式来与/dev/fbs下的设备名对应。
下面是一些显示卡配置命令及对应的显示卡类型
. ffbconfig Creator, Creator3D
. afbconfig Elite3D
. ifbconfig Expert3D, Expert3Dlite
. m64config PGX24 (onboard U5, U10), PGX64
. gfxconfig PGX32
在下面的内容中,只提及fbconfig,其他命令的参数都是一样的。如果没有在配置中把某个设备指定给某个显示卡,fbconfig工作在默认的显

示卡(接主屏幕的显示卡)。
可以使用 ls /dev/fbs命令查找系统中安装了哪些显示卡。另外,可以使用下列命令通过设备名直接列出系统中安装了的显示卡。
fbconfig -res /dev/fbs/afb1 -propt -prconf
这个命令可以列出第二个Elite3D显示卡的配置信息,例如显示卡的类型、分辨率等。第一个Elite3D显示卡使用的设备名是 afb0。
fbconfig -res \?
这条命令将列出该显示卡支持的分辨率,指定的分辨率可以”剪切&拷贝” 到下面命令里面:
fbconfig -res “1280x1024x86” -try -now
-try和-now都是选项。
-try将只会改变10秒钟的分辨率。可以使用这个方法测试显示器和改变之后的视频信号是否同步。-now参数使分辨率改变立即生效,不需要重

启X-Server。然而,有些时候使用-now选项改变分辨率后,屏幕显示会有一点几何失真,可以用退出用户再重新登陆来重新启动X-Server的方

法来解决。
fbconfig -g 1.7
命令将gamma因子设定到1.7,默认值是2.2,通常看起来可能太亮了。
新的gamma因子设定,不用重启X-Server就可以立刻生效,而且重启后依然有效。
6.2 ogl_install_check
尽管在Solaris 2.5.1以后的版本的CD中都有OpenGL软件包,但在Solaris系统安装过程中,不会自动安装。 使用以下命令检查该系统上是否正

确安装了OpenGL,以及OpenGl软件的版本:
/usr/openwin/demo/GL/ogl_install_chech
注意:在正确的设置了gamma因子后,OPENGL的测试环的设置也很简单了。
推荐使用最新版本的OpenGL。 例如Xinerama只能支持OpenGL1.2.1以后的版本。OpenGL的下载地址
http://www.sun.com/solaris/opengl

6.3 和图形卡相关的补丁
下面是和显示卡有关的补丁列表,它和Solaris版本、OpenGL版本和显示卡类型有关系。
下表只列出来补丁号。请到http://sunsolve.sun.com下载最新版本的合适的布丁。补丁的安装顺序如下
1.显示卡补丁
2.X-Server补丁
3.OpenGl
4.OpenGL补丁

显示卡补丁列表:(详细列表参见原版21页)
显示卡类型 Solaris 9 OE Solaris 8 OE Solaris 7 OE
Expert3D (lite) 112540 108576 108787
XVR-500 112540 108576 不支持
XVR-1000 112565 112564 不支持
Elite3D 111620 108604 106144
– and XFB 106148
– and VIS 109872 106147
Creator3D 112621 108605 106145
– and XFB 106148
– and VIS 109872 106147
OpenGL 1.2.2 32 Bit: 111993 32 Bit: 111993 32 Bit: 111993
64 Bit: 111994 64 Bit: 111994 64 Bit: 111994

OpenGL 1.2.3 32 Bit: 112628 32 Bit: 112628 32 Bit: 112628
64 Bit: 112629 64 Bit: 112629 64 Bit: 112629
XSun 112785 108652 108376
PGX32 /64 112622 109154 107716

7 管理
7.1 主机
你可以用admintool或者smc创建主机列表文件hosts,直接编辑/etc/inet/hosts文件更简单。提示:/etc/hosts文件是/etc/inet/hosts文件的

连接。
使用复制命令cp /etc/host.old /etc/hosts不会覆盖正确的文件。Solaris默认安装方式启动sendmail守护进程。如果主机名不包含点号(.)

的话,sendmail守护进程会输出错误信息。为了抑制错误信息,在/etc/inet/hosts文件里应该像下面这样定义主机信息: 192.168.0.2

myhost myhost.domain.com loghost
7.2 串口
同样,常用的最佳工具是admintool或者是Solaris 9环境下的”Solaris 管理控制台(Solaris Management Console)”smc。
7.3 打印机
同样,常用的最佳工具是admintool。Solaris 9环境下,有系统自带的”打印机设置向导”/usr/sadm/admin/bin/printmgr。
7.4 创建用户
创建用户常用的最佳工具是admintool。从Solaris 9平台开始,使用”Solaris 管理控制台”smc。当创建新用户时不要指定/home/<username>

作为用户的起始目录(须禁止autofs)。用下面的更好: /export/home/<username>。
/home/<username>目录默认作为Solaris自动装载器(automounter)的目标目录,因此不可写。一些第三方软件试图使用/home/xyz目录。为避

免出错,应该关闭自动装载器或者改变它的默认设置。
7.5 Shell和环境变量
正确的设置环境变量是系统设置中最有效的减少错误的方法之一。不幸的是,在使用不同的shell的情况下,如何设置变量以及针对特定用户的

性能优化所用的语法各不相同。
最常用的命令解释器是sh,ksh和csh。从Solaris 8开始,流行的bash也可以使用了。sh是安装完成后root用户默认的命令解释器。一般情况下

,用户的默认命令解释器在/etc/passwd文件中定义,例如:demo:x:2003:10:Demo User:/export/home/demo:/bin/csh 下表描述如何在不同的

命令解释器中设置变量:表1(见附件)
所有命令解释器在启动时读取一系列文件。登录命令解释器(login shell,通常在用户使用telnet,ssh等登录系统后启动)与子命令解释器

(subshell,即sh,ksh,csh或者bash的统称)读取的文件不同。下表描述了不同命令解释器所读取的文件:表2(见附件)
表格在原文P23页。

8 网络连接
8.1 /etc目录下的文件
Solaris

软件在/etc目录下存放网络配置文件。所有的配置数据比如ip地址、网关等可以被定义或者在运行层进行修改,而只有那些存放在/etc目录文

件中的定义可以在系统重启后可以保存下来,永久生效。
可以在这些文件中找到主机名(hostname):
/etc/nodename
/etc/hostname.<interface-name>
/etc/inet/hosts
/etc/net/{ticlts,ticots,ticotsord}/hosts
/etc/nodename 这个文件定义了系统名,从网络的观点看,一个有多块网卡和多个ip地址的系统可以有多个名字。每个都在/etc/inet/hosts中

有定义。 这些名字中的任何一个都等价于系统名( nodename),但是他们不是必须的 。
有些文件产生了ip地址跟网卡接口名之间的连接。他们是/etc/hostname.<interface-name><number>。
最常见interface name是:
le 老式sparc系统上的以太网网卡名
hme Ultra sparc系统上的快速以太网网卡名
eri UltraSPARC-III 系统上的快速以太网网卡名
qfe 基于四口扩展以太网卡上的快速以太网网卡名
举例: 一台有QFE (QuadFastEthernet)的Ultra 60 工作站有五个网络接口: hme0 (on board),qfe0,qfe1,qfe2 and qfe3 (on the

QFE-card)。主机名是 hermione, 则 /etc/inet/hosts文件的内容如下:
127.0.0.1 localhost
157.168.34.12 hermione hermione.domain.com loghost
191.133.23.10 dumbledore
在公司的局域网上地址是157.168.34.12的系统就叫hermione,相应的,文件 hostname.hme0 必须包含 hermione 这个名字。
Dumbledore(191.133.23.10)是网络服务提供商分配的地址。这根缆线连接到QFE的第一个端口 qfe0 ,所以文件 hostname.qfe0 包含

dumbledore 这个字符串。
qfe1-3 现在没有使用。为了避免solaris出现”没有缆线连接”这种错误信息,对于没有使用的接口不要生成hostname.* 这种文件。
一个具有多个网络接口的系统会在各个子网之间自动路由,例如在我们例子中的157.168.*.* 和 191.133.*.* 子网之间。在系统启动的时候,

会显示出来”machine is a router”这条信息。 如果不希望启动路由服务,手工生成一个空文件 /etc/notrouter 接着重新启动系统就可以了


Ip地址的子网掩码定义在文件/etc/netmasks中。在X-Server运行时不要更改nodename,最好更改nodename或hostname之前,从当前的会话中退

出来然后使用命令行界面重新登陆。
8.2 虚拟网络接口
有时候,对于只有一块网卡的系统定义2个ip地址是很有用的。例如,商业演示用的demo工作站了为了与其它的主机通信而需要添加另一个地址

的同时也需要保留自己公司的ip地址,这个需求可以通过虚拟网络接口得以实现。实现方法就和上一章节描述2块物理网卡的情形一样, 仅有

的不同是我们这次不使用 hme0 和 qfe0 ,而是使用 hme0 和 hme0:1,所以如果你写dumbledore 字符串到/etc/hostname.hme0:1 文件,在商

业演示时ISP提供的网线就可以接到 hme0, QFE网卡就不再需要了。
8.3 ifconfig工具
ifconfig -a 列出所有物理和虚拟的接口定义,包括ip地址和子网掩码。 另外在系统运行期间我们还可以用ifconfig去定义ip地址和子网掩码

(在hpux系统中这样的定义当系统重新启动后就不存在了,不知solaris是不是这样)。 让我们再来看Ultra 60 工作站的例子,这次首先假定

dumbledore在/etc/inet/hosts中没有定义,那么 qfe0 在系统重新启动后就不再被使用。
现在第一步是去激活qfe0(加载驱动):ifconfig qfe0 plumb
开始配置这种网络接口:
ifconfig qfe0 191.133.23.10 netmask 255.255.255.0 up
ifconfig -a 可以看到新的配置
对于虚拟网络接口这个步骤是相同的:
ifconfig hme0:1 plumb
ifconfig hme0:1 191.133.23.10 netmask 255.255.255.0 up
8.4路由
可以将IP地址加入/etc/defaultrouter文件来设定默认路由(或者是标准网关)。如果在此文件中加入的是主机名,要确认/etc/inet/hosts文

件中已经定义了此主机名。 等价的命令是:
*删除所有当前路由:route flush
*将1.2.3.4定义为默认路由:route add default 1.2.3.4
*用netstat -r命令可以查看更改结果。
如果机器上有两个以上可用的网络接口,Solaris会自动启用IP转发。
要检查IP转发是否已经启用:ndd -get /dev/ip_forwarding
启用IP转发:ndd -set /dev/ip_forwarding 1
关闭IP转发:ndd -set /dev/ip_forwarding 0
另一种关闭IP转发的方法是创建/etc/norouter文件,例如touch /etc/norouter
8.5NIS客户机
-首先将NIS域名加入/etc/defaultdomain文件(区分大小写)
-然后在/etc/inet/hosts文件中加入NIS服务器
-运行ypinit -c,输入NIS服务器名称 -运行/usr/lib/netsvc/yp/ypstart或者重启。
现在要告诉Solaris操作环境,对于哪些项目(主机名,用户等等)使用NIS。/etc/nsswitch.conf文件对此进行控制。要使Solaris软件在/etc

/inet/hosts文件中找不到主机名时查询NIS服务器,可以在hosts开头的行中在files后面加上nis。
在/etc目录中有名为nsswitch.nis的预设文件,对于所有可用项目都带有nis定义。
8.6 DNS客户机
1. 在/etc/resolv.conf文件中输入DNS服务器地址:
nameserver 192.168.0.1
现在可以用nslookup www.sun.com测试DNS服务。
2. 告知Solaris解析主机名时使用DNS。编辑/etc/nsswitch.conf,在hosts开头的行的files后面加上dns。现在不只是可以使用nslookup

www.sun.com,也可以ping www.sun.com
8.7 DHCP客户机
如果创建两个空文件/etc/hostname.<网络接口名称>和/etc/dhcp.<网络接口名称>,此接口就配置为使用DHCP。Solaris会用30秒等待DHCP服务

器应答。可以在/etc/dhcp.<网络接口名称>修改此时间: WAIT <以秒计的时间>
可以在网络接口运行时启用DHCP(在此例中是对接口qfe0):
ifconfig qfe0 plumb
ifconfig qfe0 dhcp start
8.8 sys-unconfig
如果要更改网络配置,但是对相关的文件不确定,有一个简单的方法:sys-unconfig,关闭机器。在下一次重启(在OK提示符下输入boot)时所

有Solaris安装时网络相关的问题都会再次问到。(IP地址,网关,掩码等等)。
8.9 10Mb还是100Mb,全双工还是半双工?
可以用ndd /dev/<interface-driver>命令查询网络接口状态。<interface-driver>一般是le, hme, eri或者是qfe。
-ndd /dev/eri link_status: 0=down, 1=up
-ndd /dev/eri link_speed: 0=10Mb, 1=100Mb
Solaris对于所有网络接口的参数默认为”自适应”。如果添加的网络设备不支持自适应,就要手动设置参数。将多余的参数设为0。
10Mb半双工的例子:
ndd -set /dev/eri adv_100fdx_cap 0
ndd -set /dev/eri adv_100hdx_cap 0
ndd -set /dev/eri adv_10fdx_cap 0
ndd -set /dev/eri adv_10hdx_cap 1
ndd -set /dev/eri adv_autoneg_cap 0
用ifconfig unplumb关闭网络接口然后用ifconfig plumb重启接口。也可以在/etc/system文件中定义这些设置。(set eri:

eri_adv_10hdx_cap=1)

9.网络文件系统
9.1 NFS服务器
Solaris将目录信息存储在/etc/dfs/dfstab 中,以便于在网络上的其他系统安装。该文件是一个被share命令使用的脚本。
如果这个文件没有包含任何share命令,Solaris OE(OE,操作系统引擎??)在重起时不会自动开始共享网络文件系统,

即使明确的调用执行了/etc/init.d/nfs.server start命令,dfstab也是空的。
例如:共享/export/home
1、 添加share /export/home 到/etc/dfs/dfstab中
2、 如果这是第一次添加该文件中的内容,执行/etc/init.d/nfs.server start命令
3、 输入shareall
4、 如果/export/home被正确共享的话,使用share命令检查
9.2NFS客户端
一个NFS客户端不需要制定任何域,但是,NFS服务器名是重要的。一个IP地址 (mount 192.168.0.1:/export/home)是不够的,所有的NFS服务

器必须在/etc/inet/hosts,NIS或者DNS中定义。
你能够安装(mount)一个网络目录,使用命令 mount server:/export/home /tmp/home。如果这个安装点需要在下次系统重起的时候自动的安装

的话,在文件/etc/vfstab中插入该安装点的相关内容。
注意:当使用root用户在网络目录中拷贝文件的时候,注意,本地的root和网络目录上的root是不同的,都是作为”nobody”(除非在服务器上使

用了anon=0)。网络目录下的文件没有”other”用户的读权限是禁止拷贝的,为了使用root用户从网络文件目录中拷贝所有的文件,不要使用下

列命令:
root# cd server:/verz;tar cvf – | (cd verz;tar xvf -)
最好使用 rsh来在该服务器上获得 root用户的读权限:
root# rsh server “cd /verz; tar cvf -“|(cd verz;tar xvf -)
9.3 与其他的流行的UNIX系统的区别
在Solaris上的NFS系统与其他流行的UNIX版本中(Linux,AIX等)的实现不完全相同:
1)文件:Solaris 系统中文件/etc/dfs/dfstab,由/etc/exports取代;
2) 命令:Solaris 系统中的命令shareall由exportfs -a取代。
9.4 自动加载(AutoMounter)
自动加载功能可以实现在用户访问相关目录的时候自动的将文件系统加载(mount)。在大型网络环
境中,如果大量主机和用户的具有如下目录路径/net/<hostname>或/home/<username>是,将会非常有帮助。
两个文件定义自动加载的基本操作:/etc/auto_master和/etc/auto_home.
auto_master文件预定义了上述自动加载的行为。
目录/net将会在访问相关的主机是自动加载。
/home目录的自动加载功能在/etc/auto_home文件中定义。
/net -hosts -nosuid,nobrowse
/home auto_home -nobrowse
如果/etc/auto_home文件包含以下行
/export/home/&
当有人访问/home/joe目录时,自动加载功能将起作用,把/export/home/joe 加载到这个加载点
(/home/joe)

10 工具
10.1 编译器
c, c++和fortran编译器通常安装在/opt/SUNWspro/bin目录, 通用工具象make安装在/usr/ccs/bin下.
10.2 GNU工具包
几乎所有GNU工具包都有基于solaris平台的预编译包. 它们可以从http://www.sunfreeware.com下载.从solaris 8 OE开始,

一些重要工具象perl,gzip或apache是自动安装的, 剩下的绝大多数GNU工具包都作为预编译包存放于solaris companion CD上.
10.3 SUN PCi和SUNPCi-II
很多工作站都装备有SUNPCi卡. 这是一个运行WINDOWS(98,ME,NT,2000,XP)系统的完整PC.这里有一些关于操作SUNPCi卡的提示.
*封装/opt/SUNWspci2/bin/sunpci进一个小脚本以设置一些环境变量:
setenv NVL_INTERFACE=hme0 (如果SUNPCi要用hme0网络界面)
setenv LANG=C
setenv KBCP=850 (例如:德国键盘/代码页)
setenv KBTYPE=GR (还记得MS-DOS吗?)
*不但让root可写c:映像, 而且这个工作站上的每一个用户都要有666权限.当sunpci由一个用户启动时, 一个叫pc的子目录在该用户的HOME下产

生.为让该用户同全局c:映像协同工作, 中断随后的特定用户映像的创建, 并且编辑sunpci.ini文件以指向那个全局映像(例如:

/pc/C.diskimage).
10.4 staroffice 软件
如果staroffice软件由root执行setup /net安装, 所有用户能在他们的个别安装期间选择”工作站安装”选项. 工作站安装仅仅拷贝1MB数据进

该用户的home目录, 而其他的情况使用集中式安装. 如果staroffice软件安装在/opt/Office60, 用户能用/opt/Office60/program/soffice来

启动他的工作站安装.
10.5 netscape navigator浏览器
从solaris 8开始, netscape navigator作为标准浏览器. 它被安装在/usr/dt/bin/netscape.
10.6 杂项
提示: 当启动桌面时, 那个注册提醒器能用”more information”中的”never register”选项禁止.
要禁止所有用户中出现的的警告信息, 在/etc/default/solregis文件中加入一行:DISABLE=1

11.提示集
11.1 3个首要提示
l c-shell: 在~/.cshrc中定义 set filec和set history=100 savehist=50, 一旦你按下esc键, shell将完成文件名和目录名. History列出最

后的100条命令, 用!13用让编号13的命令重新出现.!$用于列出先前命令的最后一个参数, 象: mkdir /export/home/demo/test后键入cd !$.

从solaris 8开始, tcsh有效了, 它有用光标键编辑命令行和浏览历史命令的功能.
l 进程控制 : 从solaris 8 O以后, 可以用pkill <搜索文本> 去替代由ps ?Cef|grep <搜索文本>, 然后kill <搜索文本的PID>所能达到的功

能. Kill -9 -1中断属于当前用户的所有进程.
l 文件编辑: 不喜欢vi的人可用CDE的编辑器dtpad.
11.2 硬件配置分析
11.2.1 prtdiag
/usr/platform/`uname ?Ci`/sbin/prtdiag ?Cv命令显示CPU的数量及类型, RAM, 扩展卡等硬件配置信息.
11.2.2 prtcon/path_to_inst
prtconf 以阶层的形式列出设备目录. 用逻辑设备(驱动程序在/dev)映射物理设备(在/devices下指定)的说明在/etc/path_to_inst文件中. 当

执行boot ?Cr或devfsadm时, 这个文件被重写. 在把一张卡从一个PCI槽移到另一个槽后, 必须编辑这个文件. 在该文件中, /dev/hme1被连接

到一个特定槽. Reboot不能重新定义这个关系.
警告: 手工编辑/etc/path_to_inst需要设备路径操作的高级经验. 编辑错误会导致系统不能引导!
11.2.3 explorer
该工具能从SunSolve(http://sunsolve.sun.com/pub-cgi/show.pl?target=explorer/explorer) 下载. 它搜集所有重要的系统信息. 它能用于

准备服务命令, 备份配置数据和快照配置等.

11.3 运行时数据分析
11.3.1 time/ptime
较简单的运行时分析工具有time(0.1sec解析)和ptime(1msec解析), 它们能加入命令行. time gzip j2sdk.tar.gz 的结果分成用户(程序)时间

, 系统时间和用去的时间.
11.3.2 top/prstat/ps
solaris下的prstat类似于其他平台下的top工具./usr/ucb/ps ?Caux显示相近的结果, 但它没有排序且不能自动更新.
ps ?CL ?Cp <process-ID>列出有线程的进程及其线程数.
11.3.3 vmstat/mpstat
vmstat <以秒计频率>列出系统负载明细. 下面行列出大多数有趣的:
free: 空闲内存(直到solaris 7此值接近零, 因为有用磁盘缓存. 从solaris8开始反映了的正确值.)
page pi/po: 页面调度行为. 系统不交换直到在交换设备上i/o流量被报告!
Cpu us: user-time. 被应用程序消耗的百分比.
Cpu sy: system-time.被solaris系统消耗的百分比.
Cpu id: idle-time.
Vmstat参数输出结果解释(原文没有,RACE注)
procs 报表下面三种状态的进程数:
r–在运行队列中等候运行
b–被资源阻塞(I/0,页面调度,等等.)
w–可运行但是被换出的
memory 报告虚拟内存和实存信息:
swap–以千字节为单位的当前可用交换空间的数量
free–以千字节为单位的页自由表大小
page 报告每秒页面调度活动数量的信息:
re-从自由表回收页
mf–次要的错误;地址空间或硬件地址转换错误
pi–页入的千字节数
po -页出的千字节数
fr- 释放的千字节数
de–以千字节为单位的可接受的短期内存不足数
sr–页由时钟算法扫描
disk 可以为四个磁盘报告每秒磁盘I/O的数量
faults 报告每秒系统软件中断和硬件中断的速率
in-设备中断,不包括系统时钟中断
sy-系统调用
cs-CPU任务(上下文)交换
cpu– CPU故障时间的百分比,在多处理器系统上,这是全部处理器的平均值:
us- 用户时间
sy– 系统时间
id– 闲置时间

mstat 打印类似信息, 每个处理器一行.
mpstat输出结果解释(原文没有,RACE注)
*CPU――处理器ID
*minf――一般故障
*mjf ――重大故障
*xcal――处事器间的交叉调用
*intr――中断
*ithr――线程中断,不计时钟中断
*csw――任务交换
*icsw――非主动任务交换
*migr――向另一处理器的线程转移
*smtx――互斥信号旋转(第一次时不要求锁定)
*srw――读/写锁定旋转(第一次时不要求锁定)
*syscl――系统调用
*usr ――用户时间百分比
*sys――系统时间百分比
*wt――等待时间百分比
*idd――空闲时间百分比

11.3.4 iostat
iostat ?CxtcP <以秒计频率>列出系统i/o负载.每一个分区或NFS装载打印一行. “kr/s”和”kw/s”行显示以千字节/秒为单位的读写吞吐量.

若”svc_t”大于100表明那磁盘用于磁头(?)分配的时间多过数据传送的时间.
iostat输出结果解释(原文没有,RACE注)
tin每秒输入的字符数
tout每秒输出的字符数
kps每秒传输的千字符数
tps每秒传输的操作次数
serv以毫秒计的的平均服务时间
最后一组报告了CPU使用率:
us用户状态所占百分比
sy系统状态所占百分比
wt等待状态所占百分比
id空闲时间所占百分比
us用户状态所占百分比
ni用于运行nice或renice的进程的时间所占百分比
sy系统状态所占百分比
id空闲时间所占百分比
r/s每秒的读传输操作
w/s每秒的写传输操作
kr/s每秒的千字节数
kw/s每秒写的千字节数
wait在设备队列中等待命令的平均数目
actv在处理中的命令的平均数目
svc_t服务时间(* 是指为一条命令服务的平均时间,这里包括为等待在处理队列中前面的命令所耗费的时间)
%w在队列等待时间的百分比
%b设备忙的时间的百分比

11.3.5 sdtperfmeter, sdtprocess
sdtperfmeter是一个图形工具, 它将vmstat的数据作为柱形或条形图. 该工具的最小化版本显示在CDE面板. Sdtprocess显示用某种方式排序的

所有进程. 可用于深入察看进程特性, 中断进程等.
11.3.6 32或64位?
Isainfo ?Ckv 显示系统内核是32还是64位. UltraSPACR-II系统自动启动64位内核 ; 在ok状态下, 用boot kernel/unix而不是boot

kernel/sparcv9/unix可以明确地装入32位内核 . 而UltraSPARC III只有64位内核.
11.4 调试
11.4.1 Truss,
命令truss <command> 列表应用程序执行过程中所有的系统调用,由于列表中还包含系统调用的参数和返回,因而我们可看到应用程序调用的

共享库和配置文件以及它们的文件位置。
11.4.2 pstack,pmap
“p*-command” 输出属于该进程的详细信息
pstack <PID> 显示进程的最后一个子程序名
pldd <PID> 显示共享连接库列表
pmap -x <PID> 显示该进程与它的装载模块的内存使用情况
11.4.3 snoop
snoop 输出通过网卡所有的包

11.5 常见问题

1. 启动进程过长
OBP 设置:ls diag-swith?=true ??
2. 不能用FTP登陆,但telnet、ssh可以
在/ect/ftpuser中设置不允许用户FTP登陆
3. VI 不能正确的显示
查看变量term 是否定义,如果没有,设置term=vt100
12 相关参考书籍和站点
12.1 参考书
A valuable collection of Hints&Tricks for UNIX:
Jerry Peek, Tim OReilly, Mike Loukides “UNIX Power Tools”
ISBN 1565922603
A detailed view on all UNIX-variants incl. Solaris software and Linux
Evi Nemeth, Garth Snyder, Scott Seebass, Trent R. Hein “UNIX System
Administration Handbook”
ISBN 0130206016
12.2 站点
http://www.sun.com Homepage of Sun Microsystems
http://www.sun.com/bigadmin Everything a sys admin needs
http://www.sun.com/blueprints Blueprints on various topics, monthly additions
http://docs.sun.com All documentation for Sun products online
http://sunsolve.sun.com Technical faqs, infodocs, symptom/resulution database,
patch download etc.
http://www.sunfreeware.com All Freeware-Tools for Solaris, precompiled
http://www.sunhelp.org FAQ portal, other information
http://bhami.com/rosetta.html A Sysadmins Unixersal Translator (ROSETTA STONE)
OR What do they call that (command) in this world (Unix)?

20% 的 Solaris 知识解决 80% 的问题

August 21, 2006

Rolf Kersten
德国Sun微系统股份有限公司
版本历史
日期 版本 简介
2002年05月25日 V1.8e 第一个英语发布版
2002年06月12日 V1.9e 第一次反馈(感谢Dnaiel Schmidberger!)
2002年07月19日 V1.10e 添加iostat章节
2002年09月04日 V1.11e Matt Ruetz的修订版
2002年12月05日 V1.12e 经过修正和增加的版本
2003年01月17日 V1.13e 被Halvard Halvorsen(www.sundot.com)和Sven Fink修正和附加的版本
2003年04月11日 V1.14e Sven和Andreas Fatum关于shell编译器和环境变量章节更多地说明
简介
这篇文档包含了你用solaris和Sun平台工作时所需要的最重要的20%的技术。它能处理你所遇到的80%的问题。
这篇文档并不打算覆盖Solaris处理环境的细节,也不会包含常见问题解答(相关的书和链接将在附录中给出)。这本书将用来为刚成为Solaris系统管理员的新手或没有每天管理Solaris系统基础的人提供一种怎样收集这种信息的服务。这篇文章关注的方向是用来做技术开发的图形工作站,也将对希望为建立一套用来演示或作为基准的Sun系统的人有所帮助。
两点提醒:
? 永远记住在记录日志中记录下你对系统的每一次改动
? 清楚的在头脑中记住这篇文档包含能让系统不可用的系统级的程序。除非你对它的破坏性做了仔细的分析,否则不要在正在使用的系统上执行这些程序。

1 系统启动和测试
1.1 OK提示符
每套SUN都有一个Boot-PROM模式,可以在启动操作系统之前访问,也可以在运行的时候访问,可以用STOP+A进入,如果没有STOP键(PC),可

以用ctrl+break.。一旦进入Boot-PROM模式,会出现OK提示符。如果操作系统运行时候出现,可以用go继续。
1.2 控制台测试
Boot-PROM模式可以用直接连接的键盘和显示器,也可以用终端。
如果系统启动时候没有检测到键盘,输入输出自动转到第1个串口(/dev/ttya,A),可以连接一个终端或者另一计算机(通过交叉串口线)到

这个端口。
如果另外的计算机是SUN工作站,可以使用tip hardwire来查看启动控制台。Tip命令输入之后,所有的启动信息会出现在相应的终端窗口里面

,如果被观察的机器用了STOP+A,必须使用Strg-]把tip改成telnet模式,然后输入一个BREAK:telnet>send brk
1.3 重新启动SUN工作站
重新启动之前,工作站需要进入一个合适的状态,可以使用下面及格命令退出:
# init 5
# init 6
# init 0
SUN工作站在重新启动之前,会以一定的方式关闭系统,下面是几种可选择的方法:
最好、最干净的方法:
– # init 5 关闭所有进程,然后系统自动关掉电源。
– #init 6,关闭所有进程,然后系统自动从新启动。
– #init 0,关闭所有进程,然后系统自动回到OK状态。
在这3种情况下,在系统关闭之前执行/etc/rc0.d下面的K*脚本,这可以用于关闭数据库,或者关闭WEB服务器的进程ID文件等。
如果没有合适的shell窗口,可以使用远程登录来执行上面的命令。远程也不可以,可以使用下面的方法:
– STOP-A
– OK sync 同步文件系统,中断OS,然后重启。
注意:需要察看随之产生的保存在/var/crash/<hostname>下面的内核转储文件。
如果碰到STOP-A也不能使用的情况,必须关闭计算机电源,在打开电源。
1.4 系统的测试
启动系统,在执行到内存测试的时候,按下STOP-A。
下面的段落只描述很重要的命令。
详细的描述可以在下面的书中《Hardware Diagnostics for Sun TM Systems: A Toolkit for System Adminis-trators》(Infodoc Number

23476 on http://sunsolve.sun.com)。
1.4.1 Banner(标识)
Banner显示下列信息:
. CPU的数量、类型和频率
. 内存
. MAC地址和主机地址(主机号)
. 控制台显示卡类型
. Sun-Globe: Creator 3D
. Sun with face: Elite 3D
. Self-describing Logo: PGX, Raptor GFX (=PGX32), Expert3D(lite) XVR-500, XVR-1000 etc.
1.4.2检测
probe-scsi-all列出内置和外置的所有SCSI设备。对于IDE硬盘,使用:probe-ide-all.
1.4.3 测试所有
test-all.运行所有的自检,可以检测象网线是否正常等情况。
1.4.4 printenv and devalias
devalias列出所有别名,printenv列出所有变量。例如boot-device变量,定义了计算机启动的路径,一般情况下是disk,disk是一个指向特定

设备的别名。
1.4.5禁止网卡错误信息
当网卡在没连接网线启动的时候,”Interface: No link”会出现多次,可以在OK下面设置
setenv tpe_link test false 来禁止这个报错信息。

2 管理硬盘
2.1 逻辑设备名
所有的硬盘都有一个共同的命名方案,该方案包括一下四个部分:
c 控制器号
t 目标号,对于SCSU设备,就是对应的SCSI地址。
d 驱动号或者是RAID设备的LUN 号(一个地址,多个硬盘)
S 分区号(见下一段)
这些逻辑设备的以连接方式放在/dev/dsk和/dev/rdsk目录里面,并指向物理设备名。但这些物理设备仅在改变启动设备时用到,一般的命令都

以逻辑设备为参数。
例如:
c0t0d0s0 通常是工作站的第1硬盘,c0t1d0s0 是第2个 c0t6d0s0 是内部光驱(SCSI地址是6)
在OK提示下输入 boot ?Cr可以更新/dev/dsk and /dev/rdsk目录里面的内容,devfsadm也可以。
Solaris8以前的需要用drvconfig;disks;devlinks3个命令来完成,刷新之后,probe-scsi-all所看到的设备的逻辑连接也就能看见了。
2.2 分区
下面是一个两个硬盘的工作站用format命令看到的内容
c0t0d0
c0t1d0
这里显示的是硬盘,不是分区或扇区,format的目的就是产生和管理分区,一个硬盘最多可以优个分区,用format-print可以查看。如果使用缺

省安装,Solaris安装工具就会把系统盘分成slices: / (root) /usr /var 和 /export/home。Solaris 8操作系统缺省安装产生3个分区,大约

1G的根区,SWAP区(根据内存容量确定大小),剩余空间给/export/home.
对于工作站来说,这个缺省分区不是最优化的,分区的容量不能在数据不丢失的情况下扩充。在分区空间用尽的情况下,必须使用符号连接。

对于服务器来说,得保留一个分区给/var目录,
这样的话,保存在/var/tmp里面的记录和大文件就不会影响到根区,避免系统产生问题。
建议工作站这样分区
slice 0: / root-Partition, incl. /usr, /var, /opt plus
/export/home
slice 1: swap 交换区,和物理内存一样大
slice 2: backup 不要改变这个分区!!代表整个硬盘
slice 7: sds 用于Solstice DiskSuite(TM) metadata的小分区
为了使用Solstice Disksuite logical volume manager (SDS),建议保留30M,用于拷贝”state replica databases”.可以参阅后面的使用SDS

镜像启动盘
从Solaris 8 02/02开始,会自动安装Live Upgrade。使用Live Upgrade,可以在系统正在运行的时候拷贝当前根的环境。例如可以测试新的操

作系统而不用改变正在运行的系统。为了产生这个预备启动环境(ABS),必须留出足够的空间,现在的硬盘空间足够大,可以使用下面分区:
slice 0: / root-partition, incl. /usr, /var, /opt
slice 1: swap swap-Partition, as large as physical memory
slice 2: backup Do not change this partition!
It is always the size of the whole disk
slice 3: /export OS-independent data, home-directories
slice 4: <not mountet>, to be used as ABE with Live Upgrade
( about 150% of the expected size of / )
slice 7: sds A small space reserved for Disksuite metadata
2.3 Crashdumps
从Solaris 7开始,缺省情况下crashdump写到交换区上,这也是为什么交换区为什么和内存一样大的原因之一。下次启动的时候,从交换区中读

取这个文件,压缩之后写到var/crash/<hostname>里面,用于以后的分析。因此/var(如果没有单独分出/var或者是/区)不能太小。
如果一个系统用了几个G的空间作为dump设备,启动时会由于上面提到的拷贝操作,花上很长时间。这时候,最好利用dumpadm定义一个dump分

区,从这个指定分区拷贝的操作会在后台运行。注意经常检查和清除/var/crash/<hostname>,保证有足够的空间用于其他的crashdumps.
2.4 Example
假如有一台E450系统并且有一个已经配置好的启动盘,但你不知道两件事情:(1)盘插哪里(系统又20个槽,必须装到安装系统时硬盘所在的

槽里才能启动),(2)忘了超级用户口令。把 盘插到一个任意槽里,按下面的步骤:
第1步 插入一个启动光盘(SOLARIS 安装盘)STOP+A,然后 boot cdrom

?Cs。如果用外置光驱,就需要probe-scsi-all列出光驱位置,然后boot <光驱路径> -s。系统起来之后,就有了一个不需要口令的超级用户窗

口。
第2步 开始mount硬盘。首先用devfsadm重新建立设备,在/dev/dsk下面会有8个新文件。接下来使用format-print-partition确认盘已经装好

,并找出来哪个分区是root分区,通常都是0区 。假设盘插到2槽,format会识别到c1t2d0(SCSI ID是2,第1个控制器),c1t2d0s0就是root分

区,因此应该ount这个盘,fsck ?CY /dev/rdsk/c1t2d0s0;mldir /tmp/disk;mount /dev/dsk/c1t2d0s0 /tmp/disk
第3步

首先清楚/tmp/etc/shadow里面的root后面的加密内容清空,然后查看/tmp/etc/vfstab里面看看该盘是不是第2槽的,如果是,/应该mount在/d

ev/dsk/c1t2d0s0,如果不是,就把硬盘插到相应的槽里面。
第4步

假设在/tmp/etc/vfstab里面看到的是/dev/dsk/c1t2d0s0,这说明在原来的系统里面启动盘就是第2槽,一般,E450会从第1槽启动(c1t0d0s0

)。在/dev/dsk里面找到并记下来c1t0d0s0指向的物理设备文件名。
第5步 reboot,STOP+A,输入:boot <物理设备文件名>。
第6步 定义别名, nvalias my disk <物理设备文件名>,这样就可以输入boot mydisk就可以启动了。定义setenv boot-device mydisk,系统

就会自动从mydisk启动了。
2.5 Removable Devices
2.5.1 Volume Management(卷管理)
可移动设备又卷管理器来负责,卷管理器检测CD-ROM并自动挂接到/cdrom/cdrom0下面。一些手工操作会造成卷管理器错误,比如使用曲别针打

开光驱,而不是使用eject cdrom命令。只这时候需要手工重起卷管理器.
/etc/init.d/volmgt stop
/etc/init.d/volmgt start
2.5.2 软驱
插入软盘(UNIX或DOS格式)必须使用volcheck才能使用卷管理器管理软驱。如果volcheck成功,软驱会出现在/floppy/floppy0下面,使用eje

ct floppy而不手工取出软盘。
2.5.3 CD-ROM
CDROM不需要volcheck,开机就会被检测到,并挂接在/cdrom/cdrom0下面,没有shell或命令使用/cdrom路径时可以使用eject cdrom弹出光驱,

fuser ?Cc /cdrom/cdrom列出所有和光驱有关的进程ID或命令,fuser ?Ck可以快速杀掉相关进程。
如果没有卷管理器,使用下面的方法管理CDROM(假设SCSI地址是6):
– mkdir /tmp/cdrom
– mount -F hsfs /dev/dsk/c0t6d0s0 /tmp/cdrom
– (Work with CD mounted on /tmp/cdrom)
– umount /tmp/cdrom
– eject /dev/dsk/c0t6d0s0
2.5.4 CD-R 和 CD-RW
CDRW,是一个与solaris 8

捆绑的工具,用来烧制CD-R或者CD-RW介质。这个工具也可以烧制用命令mkisofs从solaris文件系统和目录中创建的ISO镜象文件。
看下面带精确参数的例子:

#! /bin/sh
# ./nfscd <PARAMETER1> <PARAMETER2>
# PARAMETER1 = Application ID
# PARAMETER2 = from where
#
# ./nfscd SunNetManager /net/center2000/export/pkg/SUNWsnm
# set Umask
umask 022
# Remove old image
rm /data/disk.img
# Create image
mkisofs -A $1 -d -l -L -o /data/disk.img -P “Sun Microsystems” -p
“Solaris SPARC” -r -R -J -V “$1” -v $2
# Burn
cdrw -i /data/disk.img

2.5.5 磁带
磁带设备不是用卷管理器来控制的,它们必须用命令tar来处理。典型的磁带设备被作为一个外部SCSI设备连接到系统。当solaris OE 运行时

它们的连接和配置就已经被完成了,在运行以前版本的solaris命令devfsadm(solaris 8 OE) 或者drvconfig; tapes;devlinks,你能找到一些

逻辑的连接在/dev/rmt 目录。0描述的是第一个磁带设备,1是第二个磁带设备。
通过以上,你就可以访问这个磁带,用命令 tar tvf /dev/rmt/0.
注意:SGI系统写入的磁带通常只能用特定的块因子(blocksize)来读
tar tvfb 512 /dev/rmt/0
在某些情况下,需要进行字节交换操作,才能正确读取
dd if=/dev/rmt/0 conv=swab | tar tvfb 512 –
2.6 克隆磁盘
通过这部分的学习,你可以把一个系统克隆到另一个和它的硬件属于同一系列的系统中。例如克隆Ultra(TM) 10工作站到Ultra 10工作站是可

以的,而克隆到Ultra 60工作站就是行不通的。
如果监测到目标系统的硬件结构和源系统有所不同的话(不同的结构缓冲,网卡等),目标系统在克隆以后需要用boot ?Cr命令来重新配置。
2.6.1 使用内部磁盘来克隆
这种方式适合用于易于改变的内部磁盘:
?Ultra 30, Ultra 60, Ultra 80或者Sun Blade(TM) 100工作站或者E220R/E420R/E250R/E450
?Sun Enterprise(TM)220R, 420R, 250, 或者450服务器
内部的FC-AL磁盘(如Sun Blade 2000工作站和Sun Fire(TM) 280R或V880服务器)可能导致一些问题。
接下来是用Ultra 60工作站做的一个范例:
1 将目标盘插入主板上的第二个硬盘口
3 启动进入但用户模式(STOP-A; boot ?Cs)
4 用devfsadm重新配置所有的磁盘
5 键入format察看硬盘的名称。在Ultra 60工作站上,你会看到c0t0d0和c0t1d0。C0t1d0是内部系统中最顶端的磁盘。
6 决定哪个盘是源盘,哪个盘是目标盘(不要忘记备份你的数据!)。在我们的例子中c0t0d0(底部的盘)作为源盘,c0t1d0(上面的盘)是目

标盘。
7 dd if=/dev/rdsk/c0t0d0s2 of=/dev/dsk/c0t1d0s2

bs=128k(这条命令为整个盘,包括分区标的内容作了一个1:1的副本。如果源盘是一个9GB的盘,而目标盘是一个18GB的盘,那么将会有9GB的

容量被浪费)。警告:仔细检查这一步,避免对你源盘的意外损坏。
8 fsck ?CY of=/dev/dsk/c0t1d0s0(检查启动分区的文件系统,一般来说是分区0)
9 移除源盘,将克隆好的盘放进先前源盘所在的位置。重新启动你新做好的克隆的系统

2.6.2 通过转接线来克隆
这种方式比上面描述的通过内部磁盘克隆要慢,但是它适合用于一些内部的磁盘不容易改变的系统(如Ultra 10或Ultra 5工作站)。
警告:记住文件”/.rhosts”仅仅在这个任务中使用,在完成这个任务之后删除它来避免系统的安全漏洞。
目标系统
启动
在注册屏幕上使用命令行注册(command line login)
尽可能地停止引起磁盘输入输出的进程
TERM=vt100vi /etc/inet/hosts
->添加目标和源
ifconfig hme0 plumb
ifconfig hme0 <target> netmask 255…up
->测试rsh源
rsh source “dd if=/dev/rdsk/c0t0d0s2 ibs=128k obs=8k” | dd of=dev/rdsk/cotodos2 bis=128k obs=128k
(9GB的盘需要等待大约40分钟)
STOP-Aboot cdrom ?Cs(用可引导的光盘引导)
fsck ?CY /dev/rdsk/c0t0d0s0
源系统
在文件/.rhosts中添加目标IP
sync; sync;

2.7 用SDS制作磁盘镜像
Solaris逻辑卷面管理(SVM),一般是指Solstice Disksuite(SDS)软件,它可以把磁盘系统做成RAID 0, 1, 0+1或5。工作站最感兴趣的方式

是RAID 1:为磁盘错误准备好了一个包含启动文件系统的磁盘镜像。
SVM是Solaris 9系统环境的一部分。在Solaris 8平台上,你可以在第二章光盘的”EA”目录下找到SDS软件。而在Solaris 7或者2.6系统环境

中,服务器版,你可以查找一下光盘”Easy Access Server”。
我们假定一个工作站有两块内部的磁盘,c0t0d0和c0t1d0。这两块盘都以相同的方式被正确的分区:分区0被分配给/(root),分区1被分配给交

换区(swap),一个比较小的分区7被分配用来记录复制数据库(State Replica Databases)。分区2被定义成一个备份区(参见”分区”一章)。
把第一块盘的分区信息复制到第二块盘,可以用如下的命令:
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s – /dev/rdsk/c0t1d0s2
记录复制数据库是一个包含了镜像信息纪录的小文件。镜像中的每个磁盘都必须知道有三个记录复制数据库文件:
# metadb -a -f -c 3 c0t0d0s3 c0t1d0s3
下一步,在第一块磁盘上创建第一个子镜像,它包含了启动文件系统:
# metainit -f d50 1 1 c0t0d0s0
然后在第二块磁盘上创建第二个子镜像:
# metainit d52 1 1 c0t1d0s0
使用第一个子镜像创建镜像的第一个部分:
# metainit d54 -m d50
用metaroot修改/etc/vfstab和/etc/system,让系统可以从元设备(metadevice)d54上启动:
# metaroot d54
重新启动系统,然后将添加第二个子镜像d54。这就强制了”镜像同步”,将第一块盘的内容复制到了第二块盘。这将在一小段时间内影响系统

的性能。
# metattach d54 d52
为了避免在从第二块盘上紧急启动时发生错误信息,交换分区必须做成相同样式的镜像。否则,交换分区在损坏的磁盘上,/etc/vfstab仍然会

定位到c0t0d0s1。
现在系统已经可以从第一块盘(boot disk),也可以从第二块盘(boot disk1)上启动了。
如果有一块磁盘损坏,Solstice DiskSuite会停止启动程序。这是因为如果要在一次错误以后成功地启动系统,纪录复制数据库的大部分必须

依然”幸存”。在我们的两块镜像盘上仅仅需要六个复制中的三个依然存活。
超过两块盘的服务需要有第三块盘来用记录复制数据库来配置。两块盘的工作站必须手动地修复,下面的例子描述了这个过程:
?记录数据库复制在c0t0d0s7和c0t1d0s7上配置,c0t0d0盘发生故障。
?启动程序被Solstice DiskSuite停止,并转换进入到单用户模式。
?现在记录数据库复制希望发生错误的盘没有被配置:
metadb -d -f c0t0d0s7
?在下一次重启之后,对重置的磁盘进行分区,使它和仍然活动的磁盘的分区一致。
?做完这些之后,在重置的硬盘上创建记录数据库复制文件:
metadb -a -c 3 c0t0d0s7
?在下次的重启之后,镜像又可以重新同步了。
注意:
如果你有一个两块盘的系统,在一块盘上创建三个记录数据库复制,在另一块上面创建四个。在理论上有50%的机会可以在一次错误后重新启动

系统而不需要手动地去使用元数据。
如果你能接受在2盘系统下发生错误后无人职守的重启,在两块盘上创建相同数量的记录数据库复制并且创建/etc/system条目:
set md:mirrored_root_flag=1
关于这方面内容更多的讨论可以在Sun的蓝皮书”Configuring Boot Disks With Solaris[tm] Volume Manager

Software”(http://www.sun.com/blueprints/1002/817-0407-10.pdf)上找到。

3 SWAP交换空间
3.1 固定配置文件 /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes ?C
/dev/dsk/c0t0d0s1 – – swap – no ?C
/usr/local/swapfile.1 – – swap – no ?C

swap – /tmp tmpfs – yes ?C
交换文件系统可以使用像/dev/dsk/c0t0d0s1这样的裸分区或者象/usr/local/swapfil.1的空文件。
你可以定义多个交换文件系统,所有这些都在逻辑上绑定并挂接到/tmp挂接点。这就意味着只要物理内存是可用的,向/tmp中写文件将写入内

存并耗尽内存(not very sure)
例如:
/dev/dsk/c0t0d0s1 – – swap – no ?C
/dev/dsk/c0t1d0s1 – – swap – no ?C
/dev/dsk/c0t2d0s1 – – swap – no ?C

swap – /tmp tmpfs – yes ?C
上面创建了另外的6GB的虚拟内存(假设所有的分区大小为2G).Solaris将条带访问对所有的磁盘。
3.2 “裸分区”和空文件的比较
最快速的交换就是不进行交换,假如物理交换不可避免,使用在多可磁盘上条带后的分区。如果实在需要内存或者没有可用的分区或磁盘,则

使用空文件系统。
3.3 临时配置
在标准的SOLARIS操作中,空文件可以加入到交换空间。
# mkfile 100m /usr/local/swapfile.1
# swap -a /usr/local/swapfile.1
# swap -l
在系统重启之前,这些额外的空间是临时的。可以使用命令swap -d /usr/local/swapfile.1去掉这些额外的交换空间

4 系统安装和维护
4.1 CD安装
在安装过程中,你尽可以轻松地按照屏幕的提示进行,但也许会有一些小的缺陷;
- Name Service:选择 NONE.如果你这时候选择象NIS这样的内容,因为网络还没有安装好,所以没有NIS服务可用,这时系统可能会”挂起”

等待NIS服务器响应,在基本的网络安装完成后再配置NIS或DNS会更好些。
- 安装群集:对于工作站而言,应该始终选择”Entire Plus OEM Software”项来确保安装所有的内容。对于专用服务器,去掉不必要的服务包

可以最大降低安全风险。参考 SUN 蓝皮书《Minimizing the Solaris[tm] Operating Environment for Security: Updated for Solaris 9

Operating Environment>>
(http://www.sun.com/blueprints/1102/816-5241.pdf) 可获得更多内容
- 磁盘分区:根据再”分区”这一章所提供的建议,为了能够对磁盘进行分区,当提示安装方式时,选择”定制”方式而不是”默认”方式。
从 Solaris 7 OE版本开始,安装CD内含有预打包的Solaris映像.如果需要升级以前的季度升级包到该映像文件的版本,参考”维护升级”
例如:安装”维护升级 7″(同Solaris 8 02/02 OE发布)到Solaris 8 07/01 OE版本需要升级Solaris 补丁包(只这些,没有功能的增强)

到在02/02版本上的状态。升级安装在/etc/release文件中写入如下标记:”Solaris 8 07/01 Maintenance Update 7″ “推荐补丁集”采用另

外的方式,用户每月在”推荐补丁集”上可以看到不同补丁包和补丁版本。 这些可以从http://www.sun.com/bigadmin下载并且在Solaris安装

后安装。
安装完毕后,root用户只能从system控制台登录,这种终端方式直接连接到系统或键盘。为了允许通过TELNET,RSH等从远程登录,必须修改一

个文件:注释该行:CONSOLE=/dev/console!in!/etc/default/login.注意:这是一项安全分险。

4.2 包的安装
包是通过tar/compress/zip等工具压缩的一些目录文件,其命名规则名字如下:前面的四个大写字母代表发行该包公司的US股票代码,后面的

小写字母代表其功能。例如SUNWspci2这个软件包,就是SUN-pci卡的驱动程序包,前面的SUNW是SUN的股票代码,后面的spci2是其功能(PCI卡

驱动)。
安装命令如下(后面的目录里必须包含这个包)
pkgadd -d /cdrom/cdrom0
pkginfo 打印该包的信息,pkgrm <Package-Name>删除(卸载)已经安装的包。
例如:你的机器原来安装的显示卡是Creator3D(ffb)换成了Elite3D(afb),这样开机的时候会提示”no console framebuffer”(没有显示卡

),说明没安装Elite3D驱动程序。使用
pkginfo | grep -i afb
命令检查,没有输出,说明安装系统的时候没有安装Elite3D显示卡的驱动,而Elite3D的驱动程序在安装盘的s0/Solaris/Product. 进入这个

目录,使用下面命令安装即可:
pkgadd -d . *afb*
重新启动机器,新安装的显示卡就可以正常显示了。
4.3补丁安装
补丁的数字代码包含了两个部分,6位数字的补丁号,后面是两位数字的版本号,人员123456-78。
Solaris8使用的是*.zip格式的补丁压缩,以前使用的是*.tar.Z的格式的包。安装补丁的时候,先拷贝到/tmp下面,然后接压缩,安装之后要

删除这些临时文件。解压缩办法:
zcat 123456-78.tar.Z | tar xvf –
unzip 123456-78.zip
然后使用patchadd 123456-78这样的命令安装这个补丁。使用patchadd 123456-78安装的补丁可以使用pkgrm删除(卸载),/var/sadm/patch

纪录了这些安装纪录,这个目录没有的话,pkgrm就不能正常删除补丁了。
showrev -p | grep <patch number>可以查找到已经安装的补丁包。

5 X-Server和CDE用户接口
5.1 常见的需要注意的问题
X-Server或者CDE总是按照以下顺序搜索配置文件:
1. $HOME/.dt/…
2. /etc/dt/…
3. /usr/dt/…
注意,永远不要改动在整个系统范围内都生效的/usr/dt/中的内容。如果系统的X-Server或CDE出现 问题,总是使用/etc/dt/下的文件去维护

或恢复设置。用户自己的配置如扩展按钮或面板的改变等,配置总是保存在$HOME/.dt/目录下。在本节以下的内容中,将用<DT>来代替这些目

录($HOME/.dt, /etc/dt,/usr/dt)。
5.2 定制登陆界面
文件:<DT>/config/$LANG/Xresources
Logo(象素图或位图,24位色或以下,广泛装载时间):
Dtlogin*logo*bitmapFile: /usr/local/lib/X11/dt/bitmaps/Mylogo.bm
通用欢迎登陆语句:
Dtlogin*greeting*labelString: Heres %LcoalHost%!
输入用户名后的欢迎:
Dtlogin*greeting*persLabelString: Hello %s
5.3 从多屏幕登陆,Xinerama,和24位色
首先查看 /dev/fbs,找出有几个显示卡可用,它们是如何命名的. 确认有 /dev/fbs/ifb0和/dev/fbs/ifb1,两个 Expert 3D显示卡。
然后,把X-Server文件从/usr/dt/config复制到/etc/dt/config,编辑该文件,确认最后一行与以下内容相同:
:0 Local local_uid@console root /usr/openwin/bin/Xsun :0 -nobanner
5.3.1 多屏幕
多屏幕是指CDE在每个屏幕中运行一个完整的用户面板。鼠标可以在两个屏幕间移动,而各屏幕上的窗口不能在两个屏幕间移动。ifb0的的显示

屏幕被称为: :0.0, ifb1的显示屏幕被称为: :0.1
:0 Local local_uid@console root /usr/openwin/bin/Xsun :0 -dev /dev/fbs/ifb0 -dev /dev/fbs/ifb1 -nobanner
5.3.2 Xinerama
Xinerama(Solaris 7 11/99 OE以后的版本有效)是一个覆盖多个显示屏幕的的虚拟显示屏幕。鼠标和程序窗口可以在多个显示屏幕之间移动

, CDE只生成一个用户前端面板。只有一个显示号码: 0:0. Xinerama 只在使用相同的显示卡时才可用。
:0 Local local_uid@console root /usr/openwin/bin/Xsun :0 +xinerama -dev /dev/fbs/ifb0 -dev/fbs/ifb1 -nobanner
Xinerama 允许定义一X和Y方向的重叠,这种设置使显示画面边扩展到多个显示器上,使两个显示器显示一个图形窗口(Xoverlap=<水平解析象

素>),下面是一个在1280像素的的水平分辨率,20%边缘重叠显示的配置例子:
:0 Local local_uid@console root /usr/openwin/bin/Xsun :0 = xinerama -xoverlap 256 -dev /dev/fbs/ifb0 -dev /dev/fbs/ifb1

-nobaaner
5.3.3 使用24位色深
CDE本身默认使用8位色深(256色). 不过这没有问题,因为每个窗口可以使用单独的颜色位深设置。某些显示卡只有一个颜色表,这可能导致在

某些应用中出现程序窗口颜色闪烁的现象。只需要将CDE修改成使用24位色深。如果使用PGX显卡,需要使用命令
fbconfig -degth 24
将框架缓冲区切换到24位。
注意:由于某些老的应用只支持8位色深,不是24位色深,可能会出现问题。
:0 Local local_uid@concole root /usr/openwin/bin/Xsun :0 -dev /dev/fbs/ifb0 defdepth 24 -dev /dev/fbs/ifb1 defdepth 24

?Cnobanner
5.4 用户定制CDE面板
CDE中的应用启动机制叫做”活动”。当用户将鼠标点到一个CDE图标是,”活动”发生预定义的行为,一旦定义以后,”活动”的关联到环境

变量中:Menus, file manager, MIME-types 和定义文件
5.4.1 活动(Actions)
CDE 按照以下顺序搜索*.dt-files配置文件:
$HOME/.dt/types
/etc/dt/types/$LANG/
/usr/dt/types/$LANG/
例如,StarOffice52.dt(这是在$HOME/.dt/types下安装完StarOffice之后)
ACTION StarOffice52
{
LABEL StarOffice 5.2
TYPE COMMAND
EXEC_STRING “/opt/Office52/program/soffice” “%(File)Args%”
ICON So52
WINDOW_TYPE NO_STDIO
DESCRIPTION StarOffice
}
5.4.2 图标
一个活动的的定义还包含一个图标名。图标名按照以下顺序解析:
$HOME/.dt/icons
/etc/dt/icons/$LANG/
/usr/dt/icons/$LANG/
naming scheme: <name>.<size=m|t|l>.<format=bm|pm>
例如StarOffice52的图标文件存在以下位置: $HOME/.dt/icons/So52.m.bm
5.4.3 用户前面板
通过添加*.fp-files文件到$HOME/.dt/types目录下,可以方便简单的扩展用户前面板。默认定义存储在:
. /etc/dt/types/$LANG/
. /usr/dt/types/$LANG/
例如($HOME/.dt/types/tools.fp)
CONTROL Tools (Always define the main control before sub panel)
{
TYPE icon
CONTAINER_TYPE BOX
CONTAINER_NAME Top
POSITION_HINTS first
ICON Dtagen (This is a folder icon, Icon must exist!)
LABEL Tools
}
SUBPANEL Toolspanel
{
CONTAINER_NAME Tools
TITLE My Tools
}
CONTROL StarOffice52
{
TYPE icon
CONTAINER_TYPE SUBPANEL
CONTAINER_NAME Toolpanel
ICON So52
LABEL Star Office 5.2
PUSH_ACTION StarOffice52 (compare ACTION StarOffice52)
DROP_ACTION StarOffice52
}
你可以通过在子面板(SUBPANEL)里添加额外的控制(CONTROLs),来建立整个菜单按钮

6 显示卡和OpenGL

6.1 Fbconfig
在Solaris 8 系统环境中,fbconfig是配置显示卡的唯一的程序接口,每个显示卡有自己的专用配置工具。在Solaris 8 软件中,通过有规则

的命名方式来与/dev/fbs下的设备名对应。
下面是一些显示卡配置命令及对应的显示卡类型
. ffbconfig Creator, Creator3D
. afbconfig Elite3D
. ifbconfig Expert3D, Expert3Dlite
. m64config PGX24 (onboard U5, U10), PGX64
. gfxconfig PGX32
在下面的内容中,只提及fbconfig,其他命令的参数都是一样的。如果没有在配置中把某个设备指定给某个显示卡,fbconfig工作在默认的显

示卡(接主屏幕的显示卡)。
可以使用 ls /dev/fbs命令查找系统中安装了哪些显示卡。另外,可以使用下列命令通过设备名直接列出系统中安装了的显示卡。
fbconfig -res /dev/fbs/afb1 -propt -prconf
这个命令可以列出第二个Elite3D显示卡的配置信息,例如显示卡的类型、分辨率等。第一个Elite3D显示卡使用的设备名是 afb0。
fbconfig -res \?
这条命令将列出该显示卡支持的分辨率,指定的分辨率可以”剪切&拷贝” 到下面命令里面:
fbconfig -res “1280x1024x86” -try -now
-try和-now都是选项。
-try将只会改变10秒钟的分辨率。可以使用这个方法测试显示器和改变之后的视频信号是否同步。-now参数使分辨率改变立即生效,不需要重

启X-Server。然而,有些时候使用-now选项改变分辨率后,屏幕显示会有一点几何失真,可以用退出用户再重新登陆来重新启动X-Server的方

法来解决。
fbconfig -g 1.7
命令将gamma因子设定到1.7,默认值是2.2,通常看起来可能太亮了。
新的gamma因子设定,不用重启X-Server就可以立刻生效,而且重启后依然有效。
6.2 ogl_install_check
尽管在Solaris 2.5.1以后的版本的CD中都有OpenGL软件包,但在Solaris系统安装过程中,不会自动安装。 使用以下命令检查该系统上是否正

确安装了OpenGL,以及OpenGl软件的版本:
/usr/openwin/demo/GL/ogl_install_chech
注意:在正确的设置了gamma因子后,OPENGL的测试环的设置也很简单了。
推荐使用最新版本的OpenGL。 例如Xinerama只能支持OpenGL1.2.1以后的版本。OpenGL的下载地址
http://www.sun.com/solaris/opengl

6.3 和图形卡相关的补丁
下面是和显示卡有关的补丁列表,它和Solaris版本、OpenGL版本和显示卡类型有关系。
下表只列出来补丁号。请到http://sunsolve.sun.com下载最新版本的合适的布丁。补丁的安装顺序如下
1.显示卡补丁
2.X-Server补丁
3.OpenGl
4.OpenGL补丁

显示卡补丁列表:(详细列表参见原版21页)
显示卡类型 Solaris 9 OE Solaris 8 OE Solaris 7 OE
Expert3D (lite) 112540 108576 108787
XVR-500 112540 108576 不支持
XVR-1000 112565 112564 不支持
Elite3D 111620 108604 106144
– and XFB 106148
– and VIS 109872 106147
Creator3D 112621 108605 106145
– and XFB 106148
– and VIS 109872 106147
OpenGL 1.2.2 32 Bit: 111993 32 Bit: 111993 32 Bit: 111993
64 Bit: 111994 64 Bit: 111994 64 Bit: 111994

OpenGL 1.2.3 32 Bit: 112628 32 Bit: 112628 32 Bit: 112628
64 Bit: 112629 64 Bit: 112629 64 Bit: 112629
XSun 112785 108652 108376
PGX32 /64 112622 109154 107716

7 管理
7.1 主机
你可以用admintool或者smc创建主机列表文件hosts,直接编辑/etc/inet/hosts文件更简单。提示:/etc/hosts文件是/etc/inet/hosts文件的

连接。
使用复制命令cp /etc/host.old /etc/hosts不会覆盖正确的文件。Solaris默认安装方式启动sendmail守护进程。如果主机名不包含点号(.)

的话,sendmail守护进程会输出错误信息。为了抑制错误信息,在/etc/inet/hosts文件里应该像下面这样定义主机信息: 192.168.0.2

myhost myhost.domain.com loghost
7.2 串口
同样,常用的最佳工具是admintool或者是Solaris 9环境下的”Solaris 管理控制台(Solaris Management Console)”smc。
7.3 打印机
同样,常用的最佳工具是admintool。Solaris 9环境下,有系统自带的”打印机设置向导”/usr/sadm/admin/bin/printmgr。
7.4 创建用户
创建用户常用的最佳工具是admintool。从Solaris 9平台开始,使用”Solaris 管理控制台”smc。当创建新用户时不要指定/home/<username>

作为用户的起始目录(须禁止autofs)。用下面的更好: /export/home/<username>。
/home/<username>目录默认作为Solaris自动装载器(automounter)的目标目录,因此不可写。一些第三方软件试图使用/home/xyz目录。为避

免出错,应该关闭自动装载器或者改变它的默认设置。
7.5 Shell和环境变量
正确的设置环境变量是系统设置中最有效的减少错误的方法之一。不幸的是,在使用不同的shell的情况下,如何设置变量以及针对特定用户的

性能优化所用的语法各不相同。
最常用的命令解释器是sh,ksh和csh。从Solaris 8开始,流行的bash也可以使用了。sh是安装完成后root用户默认的命令解释器。一般情况下

,用户的默认命令解释器在/etc/passwd文件中定义,例如:demo:x:2003:10:Demo User:/export/home/demo:/bin/csh 下表描述如何在不同的

命令解释器中设置变量:表1(见附件)
所有命令解释器在启动时读取一系列文件。登录命令解释器(login shell,通常在用户使用telnet,ssh等登录系统后启动)与子命令解释器

(subshell,即sh,ksh,csh或者bash的统称)读取的文件不同。下表描述了不同命令解释器所读取的文件:表2(见附件)
表格在原文P23页。

8 网络连接
8.1 /etc目录下的文件
Solaris

软件在/etc目录下存放网络配置文件。所有的配置数据比如ip地址、网关等可以被定义或者在运行层进行修改,而只有那些存放在/etc目录文

件中的定义可以在系统重启后可以保存下来,永久生效。
可以在这些文件中找到主机名(hostname):
/etc/nodename
/etc/hostname.<interface-name>
/etc/inet/hosts
/etc/net/{ticlts,ticots,ticotsord}/hosts
/etc/nodename 这个文件定义了系统名,从网络的观点看,一个有多块网卡和多个ip地址的系统可以有多个名字。每个都在/etc/inet/hosts中

有定义。 这些名字中的任何一个都等价于系统名( nodename),但是他们不是必须的 。
有些文件产生了ip地址跟网卡接口名之间的连接。他们是/etc/hostname.<interface-name><number>。
最常见interface name是:
le 老式sparc系统上的以太网网卡名
hme Ultra sparc系统上的快速以太网网卡名
eri UltraSPARC-III 系统上的快速以太网网卡名
qfe 基于四口扩展以太网卡上的快速以太网网卡名
举例: 一台有QFE (QuadFastEthernet)的Ultra 60 工作站有五个网络接口: hme0 (on board),qfe0,qfe1,qfe2 and qfe3 (on the

QFE-card)。主机名是 hermione, 则 /etc/inet/hosts文件的内容如下:
127.0.0.1 localhost
157.168.34.12 hermione hermione.domain.com loghost
191.133.23.10 dumbledore
在公司的局域网上地址是157.168.34.12的系统就叫hermione,相应的,文件 hostname.hme0 必须包含 hermione 这个名字。
Dumbledore(191.133.23.10)是网络服务提供商分配的地址。这根缆线连接到QFE的第一个端口 qfe0 ,所以文件 hostname.qfe0 包含

dumbledore 这个字符串。
qfe1-3 现在没有使用。为了避免solaris出现”没有缆线连接”这种错误信息,对于没有使用的接口不要生成hostname.* 这种文件。
一个具有多个网络接口的系统会在各个子网之间自动路由,例如在我们例子中的157.168.*.* 和 191.133.*.* 子网之间。在系统启动的时候,

会显示出来”machine is a router”这条信息。 如果不希望启动路由服务,手工生成一个空文件 /etc/notrouter 接着重新启动系统就可以了


Ip地址的子网掩码定义在文件/etc/netmasks中。在X-Server运行时不要更改nodename,最好更改nodename或hostname之前,从当前的会话中退

出来然后使用命令行界面重新登陆。
8.2 虚拟网络接口
有时候,对于只有一块网卡的系统定义2个ip地址是很有用的。例如,商业演示用的demo工作站了为了与其它的主机通信而需要添加另一个地址

的同时也需要保留自己公司的ip地址,这个需求可以通过虚拟网络接口得以实现。实现方法就和上一章节描述2块物理网卡的情形一样, 仅有

的不同是我们这次不使用 hme0 和 qfe0 ,而是使用 hme0 和 hme0:1,所以如果你写dumbledore 字符串到/etc/hostname.hme0:1 文件,在商

业演示时ISP提供的网线就可以接到 hme0, QFE网卡就不再需要了。
8.3 ifconfig工具
ifconfig -a 列出所有物理和虚拟的接口定义,包括ip地址和子网掩码。 另外在系统运行期间我们还可以用ifconfig去定义ip地址和子网掩码

(在hpux系统中这样的定义当系统重新启动后就不存在了,不知solaris是不是这样)。 让我们再来看Ultra 60 工作站的例子,这次首先假定

dumbledore在/etc/inet/hosts中没有定义,那么 qfe0 在系统重新启动后就不再被使用。
现在第一步是去激活qfe0(加载驱动):ifconfig qfe0 plumb
开始配置这种网络接口:
ifconfig qfe0 191.133.23.10 netmask 255.255.255.0 up
ifconfig -a 可以看到新的配置
对于虚拟网络接口这个步骤是相同的:
ifconfig hme0:1 plumb
ifconfig hme0:1 191.133.23.10 netmask 255.255.255.0 up
8.4路由
可以将IP地址加入/etc/defaultrouter文件来设定默认路由(或者是标准网关)。如果在此文件中加入的是主机名,要确认/etc/inet/hosts文

件中已经定义了此主机名。 等价的命令是:
*删除所有当前路由:route flush
*将1.2.3.4定义为默认路由:route add default 1.2.3.4
*用netstat -r命令可以查看更改结果。
如果机器上有两个以上可用的网络接口,Solaris会自动启用IP转发。
要检查IP转发是否已经启用:ndd -get /dev/ip_forwarding
启用IP转发:ndd -set /dev/ip_forwarding 1
关闭IP转发:ndd -set /dev/ip_forwarding 0
另一种关闭IP转发的方法是创建/etc/norouter文件,例如touch /etc/norouter
8.5NIS客户机
-首先将NIS域名加入/etc/defaultdomain文件(区分大小写)
-然后在/etc/inet/hosts文件中加入NIS服务器
-运行ypinit -c,输入NIS服务器名称 -运行/usr/lib/netsvc/yp/ypstart或者重启。
现在要告诉Solaris操作环境,对于哪些项目(主机名,用户等等)使用NIS。/etc/nsswitch.conf文件对此进行控制。要使Solaris软件在/etc

/inet/hosts文件中找不到主机名时查询NIS服务器,可以在hosts开头的行中在files后面加上nis。
在/etc目录中有名为nsswitch.nis的预设文件,对于所有可用项目都带有nis定义。
8.6 DNS客户机
1. 在/etc/resolv.conf文件中输入DNS服务器地址:
nameserver 192.168.0.1
现在可以用nslookup www.sun.com测试DNS服务。
2. 告知Solaris解析主机名时使用DNS。编辑/etc/nsswitch.conf,在hosts开头的行的files后面加上dns。现在不只是可以使用nslookup

www.sun.com,也可以ping www.sun.com
8.7 DHCP客户机
如果创建两个空文件/etc/hostname.<网络接口名称>和/etc/dhcp.<网络接口名称>,此接口就配置为使用DHCP。Solaris会用30秒等待DHCP服务

器应答。可以在/etc/dhcp.<网络接口名称>修改此时间: WAIT <以秒计的时间>
可以在网络接口运行时启用DHCP(在此例中是对接口qfe0):
ifconfig qfe0 plumb
ifconfig qfe0 dhcp start
8.8 sys-unconfig
如果要更改网络配置,但是对相关的文件不确定,有一个简单的方法:sys-unconfig,关闭机器。在下一次重启(在OK提示符下输入boot)时所

有Solaris安装时网络相关的问题都会再次问到。(IP地址,网关,掩码等等)。
8.9 10Mb还是100Mb,全双工还是半双工?
可以用ndd /dev/<interface-driver>命令查询网络接口状态。<interface-driver>一般是le, hme, eri或者是qfe。
-ndd /dev/eri link_status: 0=down, 1=up
-ndd /dev/eri link_speed: 0=10Mb, 1=100Mb
Solaris对于所有网络接口的参数默认为”自适应”。如果添加的网络设备不支持自适应,就要手动设置参数。将多余的参数设为0。
10Mb半双工的例子:
ndd -set /dev/eri adv_100fdx_cap 0
ndd -set /dev/eri adv_100hdx_cap 0
ndd -set /dev/eri adv_10fdx_cap 0
ndd -set /dev/eri adv_10hdx_cap 1
ndd -set /dev/eri adv_autoneg_cap 0
用ifconfig unplumb关闭网络接口然后用ifconfig plumb重启接口。也可以在/etc/system文件中定义这些设置。(set eri:

eri_adv_10hdx_cap=1)

9.网络文件系统
9.1 NFS服务器
Solaris将目录信息存储在/etc/dfs/dfstab 中,以便于在网络上的其他系统安装。该文件是一个被share命令使用的脚本。
如果这个文件没有包含任何share命令,Solaris OE(OE,操作系统引擎??)在重起时不会自动开始共享网络文件系统,

即使明确的调用执行了/etc/init.d/nfs.server start命令,dfstab也是空的。
例如:共享/export/home
1、 添加share /export/home 到/etc/dfs/dfstab中
2、 如果这是第一次添加该文件中的内容,执行/etc/init.d/nfs.server start命令
3、 输入shareall
4、 如果/export/home被正确共享的话,使用share命令检查
9.2NFS客户端
一个NFS客户端不需要制定任何域,但是,NFS服务器名是重要的。一个IP地址 (mount 192.168.0.1:/export/home)是不够的,所有的NFS服务

器必须在/etc/inet/hosts,NIS或者DNS中定义。
你能够安装(mount)一个网络目录,使用命令 mount server:/export/home /tmp/home。如果这个安装点需要在下次系统重起的时候自动的安装

的话,在文件/etc/vfstab中插入该安装点的相关内容。
注意:当使用root用户在网络目录中拷贝文件的时候,注意,本地的root和网络目录上的root是不同的,都是作为”nobody”(除非在服务器上使

用了anon=0)。网络目录下的文件没有”other”用户的读权限是禁止拷贝的,为了使用root用户从网络文件目录中拷贝所有的文件,不要使用下

列命令:
root# cd server:/verz;tar cvf – | (cd verz;tar xvf -)
最好使用 rsh来在该服务器上获得 root用户的读权限:
root# rsh server “cd /verz; tar cvf -“|(cd verz;tar xvf -)
9.3 与其他的流行的UNIX系统的区别
在Solaris上的NFS系统与其他流行的UNIX版本中(Linux,AIX等)的实现不完全相同:
1)文件:Solaris 系统中文件/etc/dfs/dfstab,由/etc/exports取代;
2) 命令:Solaris 系统中的命令shareall由exportfs -a取代。
9.4 自动加载(AutoMounter)
自动加载功能可以实现在用户访问相关目录的时候自动的将文件系统加载(mount)。在大型网络环
境中,如果大量主机和用户的具有如下目录路径/net/<hostname>或/home/<username>是,将会非常有帮助。
两个文件定义自动加载的基本操作:/etc/auto_master和/etc/auto_home.
auto_master文件预定义了上述自动加载的行为。
目录/net将会在访问相关的主机是自动加载。
/home目录的自动加载功能在/etc/auto_home文件中定义。
/net -hosts -nosuid,nobrowse
/home auto_home -nobrowse
如果/etc/auto_home文件包含以下行
/export/home/&
当有人访问/home/joe目录时,自动加载功能将起作用,把/export/home/joe 加载到这个加载点
(/home/joe)

10 工具
10.1 编译器
c, c++和fortran编译器通常安装在/opt/SUNWspro/bin目录, 通用工具象make安装在/usr/ccs/bin下.
10.2 GNU工具包
几乎所有GNU工具包都有基于solaris平台的预编译包. 它们可以从http://www.sunfreeware.com下载.从solaris 8 OE开始,

一些重要工具象perl,gzip或apache是自动安装的, 剩下的绝大多数GNU工具包都作为预编译包存放于solaris companion CD上.
10.3 SUN PCi和SUNPCi-II
很多工作站都装备有SUNPCi卡. 这是一个运行WINDOWS(98,ME,NT,2000,XP)系统的完整PC.这里有一些关于操作SUNPCi卡的提示.
*封装/opt/SUNWspci2/bin/sunpci进一个小脚本以设置一些环境变量:
setenv NVL_INTERFACE=hme0 (如果SUNPCi要用hme0网络界面)
setenv LANG=C
setenv KBCP=850 (例如:德国键盘/代码页)
setenv KBTYPE=GR (还记得MS-DOS吗?)
*不但让root可写c:映像, 而且这个工作站上的每一个用户都要有666权限.当sunpci由一个用户启动时, 一个叫pc的子目录在该用户的HOME下产

生.为让该用户同全局c:映像协同工作, 中断随后的特定用户映像的创建, 并且编辑sunpci.ini文件以指向那个全局映像(例如:

/pc/C.diskimage).
10.4 staroffice 软件
如果staroffice软件由root执行setup /net安装, 所有用户能在他们的个别安装期间选择”工作站安装”选项. 工作站安装仅仅拷贝1MB数据进

该用户的home目录, 而其他的情况使用集中式安装. 如果staroffice软件安装在/opt/Office60, 用户能用/opt/Office60/program/soffice来

启动他的工作站安装.
10.5 netscape navigator浏览器
从solaris 8开始, netscape navigator作为标准浏览器. 它被安装在/usr/dt/bin/netscape.
10.6 杂项
提示: 当启动桌面时, 那个注册提醒器能用”more information”中的”never register”选项禁止.
要禁止所有用户中出现的的警告信息, 在/etc/default/solregis文件中加入一行:DISABLE=1

11.提示集
11.1 3个首要提示
l c-shell: 在~/.cshrc中定义 set filec和set history=100 savehist=50, 一旦你按下esc键, shell将完成文件名和目录名. History列出最

后的100条命令, 用!13用让编号13的命令重新出现.!$用于列出先前命令的最后一个参数, 象: mkdir /export/home/demo/test后键入cd !$.

从solaris 8开始, tcsh有效了, 它有用光标键编辑命令行和浏览历史命令的功能.
l 进程控制 : 从solaris 8 O以后, 可以用pkill <搜索文本> 去替代由ps ?Cef|grep <搜索文本>, 然后kill <搜索文本的PID>所能达到的功

能. Kill -9 -1中断属于当前用户的所有进程.
l 文件编辑: 不喜欢vi的人可用CDE的编辑器dtpad.
11.2 硬件配置分析
11.2.1 prtdiag
/usr/platform/`uname ?Ci`/sbin/prtdiag ?Cv命令显示CPU的数量及类型, RAM, 扩展卡等硬件配置信息.
11.2.2 prtcon/path_to_inst
prtconf 以阶层的形式列出设备目录. 用逻辑设备(驱动程序在/dev)映射物理设备(在/devices下指定)的说明在/etc/path_to_inst文件中. 当

执行boot ?Cr或devfsadm时, 这个文件被重写. 在把一张卡从一个PCI槽移到另一个槽后, 必须编辑这个文件. 在该文件中, /dev/hme1被连接

到一个特定槽. Reboot不能重新定义这个关系.
警告: 手工编辑/etc/path_to_inst需要设备路径操作的高级经验. 编辑错误会导致系统不能引导!
11.2.3 explorer
该工具能从SunSolve(http://sunsolve.sun.com/pub-cgi/show.pl?target=explorer/explorer) 下载. 它搜集所有重要的系统信息. 它能用于

准备服务命令, 备份配置数据和快照配置等.

11.3 运行时数据分析
11.3.1 time/ptime
较简单的运行时分析工具有time(0.1sec解析)和ptime(1msec解析), 它们能加入命令行. time gzip j2sdk.tar.gz 的结果分成用户(程序)时间

, 系统时间和用去的时间.
11.3.2 top/prstat/ps
solaris下的prstat类似于其他平台下的top工具./usr/ucb/ps ?Caux显示相近的结果, 但它没有排序且不能自动更新.
ps ?CL ?Cp <process-ID>列出有线程的进程及其线程数.
11.3.3 vmstat/mpstat
vmstat <以秒计频率>列出系统负载明细. 下面行列出大多数有趣的:
free: 空闲内存(直到solaris 7此值接近零, 因为有用磁盘缓存. 从solaris8开始反映了的正确值.)
page pi/po: 页面调度行为. 系统不交换直到在交换设备上i/o流量被报告!
Cpu us: user-time. 被应用程序消耗的百分比.
Cpu sy: system-time.被solaris系统消耗的百分比.
Cpu id: idle-time.
Vmstat参数输出结果解释(原文没有,RACE注)
procs 报表下面三种状态的进程数:
r–在运行队列中等候运行
b–被资源阻塞(I/0,页面调度,等等.)
w–可运行但是被换出的
memory 报告虚拟内存和实存信息:
swap–以千字节为单位的当前可用交换空间的数量
free–以千字节为单位的页自由表大小
page 报告每秒页面调度活动数量的信息:
re-从自由表回收页
mf–次要的错误;地址空间或硬件地址转换错误
pi–页入的千字节数
po -页出的千字节数
fr- 释放的千字节数
de–以千字节为单位的可接受的短期内存不足数
sr–页由时钟算法扫描
disk 可以为四个磁盘报告每秒磁盘I/O的数量
faults 报告每秒系统软件中断和硬件中断的速率
in-设备中断,不包括系统时钟中断
sy-系统调用
cs-CPU任务(上下文)交换
cpu– CPU故障时间的百分比,在多处理器系统上,这是全部处理器的平均值:
us- 用户时间
sy– 系统时间
id– 闲置时间

mstat 打印类似信息, 每个处理器一行.
mpstat输出结果解释(原文没有,RACE注)
*CPU――处理器ID
*minf――一般故障
*mjf ――重大故障
*xcal――处事器间的交叉调用
*intr――中断
*ithr――线程中断,不计时钟中断
*csw――任务交换
*icsw――非主动任务交换
*migr――向另一处理器的线程转移
*smtx――互斥信号旋转(第一次时不要求锁定)
*srw――读/写锁定旋转(第一次时不要求锁定)
*syscl――系统调用
*usr ――用户时间百分比
*sys――系统时间百分比
*wt――等待时间百分比
*idd――空闲时间百分比

11.3.4 iostat
iostat ?CxtcP <以秒计频率>列出系统i/o负载.每一个分区或NFS装载打印一行. “kr/s”和”kw/s”行显示以千字节/秒为单位的读写吞吐量.

若”svc_t”大于100表明那磁盘用于磁头(?)分配的时间多过数据传送的时间.
iostat输出结果解释(原文没有,RACE注)
tin每秒输入的字符数
tout每秒输出的字符数
kps每秒传输的千字符数
tps每秒传输的操作次数
serv以毫秒计的的平均服务时间
最后一组报告了CPU使用率:
us用户状态所占百分比
sy系统状态所占百分比
wt等待状态所占百分比
id空闲时间所占百分比
us用户状态所占百分比
ni用于运行nice或renice的进程的时间所占百分比
sy系统状态所占百分比
id空闲时间所占百分比
r/s每秒的读传输操作
w/s每秒的写传输操作
kr/s每秒的千字节数
kw/s每秒写的千字节数
wait在设备队列中等待命令的平均数目
actv在处理中的命令的平均数目
svc_t服务时间(* 是指为一条命令服务的平均时间,这里包括为等待在处理队列中前面的命令所耗费的时间)
%w在队列等待时间的百分比
%b设备忙的时间的百分比

11.3.5 sdtperfmeter, sdtprocess
sdtperfmeter是一个图形工具, 它将vmstat的数据作为柱形或条形图. 该工具的最小化版本显示在CDE面板. Sdtprocess显示用某种方式排序的

所有进程. 可用于深入察看进程特性, 中断进程等.
11.3.6 32或64位?
Isainfo ?Ckv 显示系统内核是32还是64位. UltraSPACR-II系统自动启动64位内核 ; 在ok状态下, 用boot kernel/unix而不是boot

kernel/sparcv9/unix可以明确地装入32位内核 . 而UltraSPARC III只有64位内核.
11.4 调试
11.4.1 Truss,
命令truss <command> 列表应用程序执行过程中所有的系统调用,由于列表中还包含系统调用的参数和返回,因而我们可看到应用程序调用的

共享库和配置文件以及它们的文件位置。
11.4.2 pstack,pmap
“p*-command” 输出属于该进程的详细信息
pstack <PID> 显示进程的最后一个子程序名
pldd <PID> 显示共享连接库列表
pmap -x <PID> 显示该进程与它的装载模块的内存使用情况
11.4.3 snoop
snoop 输出通过网卡所有的包

11.5 常见问题

1. 启动进程过长
OBP 设置:ls diag-swith?=true ??
2. 不能用FTP登陆,但telnet、ssh可以
在/ect/ftpuser中设置不允许用户FTP登陆
3. VI 不能正确的显示
查看变量term 是否定义,如果没有,设置term=vt100
12 相关参考书籍和站点
12.1 参考书
A valuable collection of Hints&Tricks for UNIX:
Jerry Peek, Tim OReilly, Mike Loukides “UNIX Power Tools”
ISBN 1565922603
A detailed view on all UNIX-variants incl. Solaris software and Linux
Evi Nemeth, Garth Snyder, Scott Seebass, Trent R. Hein “UNIX System
Administration Handbook”
ISBN 0130206016
12.2 站点
http://www.sun.com Homepage of Sun Microsystems
http://www.sun.com/bigadmin Everything a sys admin needs
http://www.sun.com/blueprints Blueprints on various topics, monthly additions
http://docs.sun.com All documentation for Sun products online
http://sunsolve.sun.com Technical faqs, infodocs, symptom/resulution database,
patch download etc.
http://www.sunfreeware.com All Freeware-Tools for Solaris, precompiled
http://www.sunhelp.org FAQ portal, other information
http://bhami.com/rosetta.html A Sysadmins Unixersal Translator (ROSETTA STONE)
OR What do they call that (command) in this world (Unix)?

使用 Solaris 的初步设置

August 21, 2006

1.配置root用户SSH登陆
# vi /etc/ssh/sshd_config
ListenAddress 192.168.0.10
PermitRootLogin yes
# > /etc/motd
# vi /etc/default/init
LANG=zh

2.取消几个影响系统启动的TIMEOUT

# vi /etc/bootrc
set boot_timeout 0
# vi /boot/solaris/bootenv.rc
setprop auto-boot-timeout 0
setprop boottimeout ‘0’
# vi /boot/solaris/strap.rc
Options timeout=0

3.取消自动关机

# vi /etc/power.conf
#autoshutdown 30 9:00 9:00 default

4.设置用户的环境变量

# vi /etc/passwd
root:x:0:1:Super-User:/:/usr/bin/bash
# vi /.bashrc
PS1='[\u@\H \W]\$’
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/ucb:/usr/sbin:/etc:/usr/local/bin:/usr/local/sbin:/usr/ccs/bin:/usr/sfw/bin
MANPATH=$MANPATH:/usr/man:/usr/local/man:/opt/sfw/man
LD_LIBRARY_PATH=/usr/lib:/usr/dt/lib:/usr/openwin/lib:/usr/sfw/lib:
/usr/local/lib:/usr/local/ssl/lib
CC=gcc
export PS1 PATH MANPATH LD_LIBRARY_PATH CC
export EDITOR=vim
umask 022
TMOUT=1800
# vi .bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

5.安装常用软件包

TOP工具:
# gzip -d top-3.5beta12.5-sol9-intel-local.gz
# pkgadd -d top-3.5beta12.5-sol9-intel-local

VIM工具:
# gzip -d ncurses-5.3-sol9-intel-local.gz
# pkgadd -d ncurses-5.3-sol9-intel-local
# gzip -d vim-6.2-sol9-intel-local.gz
# pkgadd -d vim-6.2-sol9-intel-local
# mv /bin/vi /bin/vi.bak
# ln -s /usr/local/bin/vim /bin/vi
# cp /usr/local/share/vim/vim62/vimrc_example.vim /.vimrc
# vi /.vimrc
把其中的:
set backup ” keep a backup file
修改为:
set nobackup ” keep a backup file
# vi /etc/hosts
加一条记录:
192.168.0.15 win2k

GCC工具:
# gzip -d libiconv-1.8-sol9-intel-local.gz
# gzip -d gcc-3.3.2-sol9-intel-local.gz
# pkgadd -d libiconv-1.8-sol9-intel-local
# pkgadd -d gcc-3.3.2-sol9-intel-local

MAKE工具:
# gzip -d make-3.80-sol9-intel-local.gz
# gzip -d automake-1.7.2-sol9-intel-local.gz
# pkgadd -d make-3.80-sol9-intel-local
# pkgadd -d automake-1.7.2-sol9-intel-local

MOZILLA:
# pkgrm SUNWnsb SUNWnsm SUNWnspsm SUNWnsxp
# gzip -d mozilla-i386-pc-solaris2.8-1.6.pkg.tar.gz
# tar -vxf mozilla-i386-pc-solaris2.8-1.6.pkg.tar
# cd mozilla-1.6-x86
# pkgadd -d MOZmozilla.pkg
# gzip -d flash_player_6_solaris_intel.tar.gz
# tar vxf flash_player_6_solaris_intel.tar
# cd install_flash_player_6_solaris
# cp * /usr/local/lib/mozilla-1.6/plugins
# cd /usr/local/lib/mozilla-1.6/plugins
# ln -s /usr/j2se/jre/plugin/i386/ns610/libjavaplugin_oji.so
# /usr/local/bin/mozilla

OTHERS:
# pkgadd -d expat-1.95.5-sol9-intel-local
# pkgadd -d gdbm-1.8.3-sol9-intel-local
# pkgadd -d openssl-0.9.7d-sol9-intel-local
# pkgadd -d libgcc-3.3-sol9-intel-local
# pkgadd -d libpcap-0.8.1-sol9-intel-local
# pkgadd -d tcp_wrappers-7.6-sol9-intel-local
# pkgadd -d tcpdump-3.8.1-sol9-intel-local
# pkgadd -d zlib-1.2.1-sol9-intel-local
# pkgadd -d lsof-4.68-sol9-intel-local

6.安装APACHE-2.0.49

# pkgrm SUNWapchd SUNWapchr SUNWapchu
# gzip -d apache-2.0.49-sol9-intel-local.gz
# pkgadd -d apache-2.0.49-sol9-intel-local
# cp /usr/local/apache2/bin/apachectl /etc/rc3.d/S50apache
# chmod 744 /etc/rc3.d/S50apache
# chown root:sys /etc/rc3.d/S50apache
# 配置/usr/local/apache2/conf/httpd.conf过程略。
# SMCapach2

7.安装OPENSSH-3.8

# pkgrm SUNWsshcu SUNWsshdr SUNWsshdu SUNWsshr SUNWsshu
# gzip -d openssh-3.8p1-sol9-intel-local.gz
# pkgadd -d openssh-3.8p1-sol9-intel-local
# mkdir /var/empty
# chown root:sys /var/empty
# chmod 755 /var/empty
# groupadd sshd
# useradd -g sshd -c “arthur sshd privsep” -d /var/empty -s /bin/false sshd
# ssh-keygen -t rsa1 -f /usr/local/etc/ssh_host_key -N “”
# ssh-keygen -t dsa -f /usr/local/etc/ssh_host_dsa_key -N “”
# ssh-keygen -t rsa -f /usr/local/etc/ssh_host_rsa_key -N “”
# vi /etc/init.d/sshd
===========================sshd============================
#!/sbin/sh
#
# Copyright (c) 2001 by Sun Microsystems, Inc
# All rights reserved.
#
#ident “@(#)sshd 1.1 01/09/24 SMI”

case “$1” in
start)
/usr/local/sbin/sshd
;;
stop)
pkill sshd
;;
*)
echo “Usage: $0 { start | stop }”
exit 1
;;
esac
exit 0
===========================sshd============================
# chmod 750 /etc/init.d/sshd
# chown root:sys /etc/init.d/sshd
# ln -s /etc/init.d/sshd /etc/rc2.d/S98sshd
# vi /etc/hosts.deny
sshd:ALL
# vi /etc/hosts.allow
sshd:192.168.0.15
# rm /.ssh/*

8.安装SAMBA-3

# cp /etc/rc3.d/S90samba bak.S90samba
# pkgrm SUNWsmbac SUNWsmbar SUNWsmbau
# gzip -d samba-3.0.2a-sol9-intel-local.gz
# gzip -d popt-1.7-sol9-intel-local.gz
# pkgadd -d popt-1.7-sol9-intel-local
# pkgadd -d samba-3.0.2a-sol9-intel-local
# cd /usr/local/samba/doc/samba/examples/
# cp smb.conf.default /usr/local/samba/lib/smb.conf
# 设置smb.conf文件过程略
# mv /etc/rc3.d/bak.S90samba S90samba
# chown root:sys /etc/rc3.d/S90samba
# vim /etc/rc3.d/S90samba
=======================S90samba========================
#!/sbin/sh
#
# Copyright (c) 2001 by Sun Microsystems, Inc
# All rights reserved.
#
#ident “@(#)samba 1.1 01/09/24 SMI”

case “$1” in
start)
[ -f /usr/local/samba/lib/smb.conf ] || exit 0

/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/nmbd -D
;;
stop)
pkill smbd
pkill nmbd
;;
*)
echo “Usage: $0 { start | stop }”
exit 1
;;
esac
exit 0
=======================S90samba========================

9.初步的系统安全设置

为安全起见在/etc/inetd.conf中注释掉除下列服务的所有服务

ftp
echo
echo
discard
discard
rstatd/2-4
fs
100083/1

在只需要不多图形操作的服务器或是要保证相当的安全,你也许应该关掉字体服务fs,也可以关掉系统性能监视器rstatd和tooltalk服务器ttd

bserverd(100083/1),查找剩下需要关闭的端口的进程用这个命令:
# /usr/local/bin/lsof -i | grep port

为安全起见在防止堆栈溢出

# cp /etc/system /etc/system.BACKUP
# vi /etc/system
在文件的最后,加上以下两行:
set noexec_user_stack=1
set noexec_user_stack_log=1

禁用自动启动DESKTOP

# /usr/dt/bin/dtconfig -d

为安全起见停掉几个系统服务:

卸载SENDMAIL:
# pkgrm SUNWsndmr SUNWsndmu
卸载TELNET:
# pkgrm SUNWtnetc SUNWtnetd SUNWtnetr
# cd /etc/rc2.d
# mv S71ldap.client _S71ldap.client
# mv S72inetsvc _S72inetsvc
# mv S74autofs _S74autofs
# mv S74xntpd _S74xntpd
# mv S80lp _S80lp
# mv S71rpc _S71rpc
# mv S73nfs.client _S73nfs.client

# cd /etc/rc3.d
# mv S34dhcp _S34dhcp
# mv S15nfs.server _S15nfs.server
# mv S76snmpdx _S76snmpdx

卸载PCMCIA支持:
# pkgrm SUNWpcelx SUNWpcmci SUNWpcmcu SUNWpcmem SUNWpcser SUNWpsdpr

安装PORT扫描工具NMAP

# gzip -d nmap-3.50-sol9-intel-local.gz
# gzip -d pcre-4.5-sol9-intel-local.gz
# pkgadd -d nmap-3.50-sol9-intel-local
# pkgadd -d pcre-4.5-sol9-intel-local
扫描本机端口:
# nmap -P0 -sT localhost

安装网络漏洞扫描工具NESSUS:

# gzip -d nessus-2.0.9-sol9-intel-local.gz
# pkgadd -d nessus-2.0.9-sol9-intel-local
建立SSL证书:
# nessus-mkcert
添加NESSUS用户:
# nessus-adduser
以ROOT启动NESSUS服务器:
# nessus -D
启动NESSUS的GUI客户端:
# nessus

使用 Solaris 的初步设置

August 21, 2006

1.配置root用户SSH登陆
# vi /etc/ssh/sshd_config
ListenAddress 192.168.0.10
PermitRootLogin yes
# > /etc/motd
# vi /etc/default/init
LANG=zh

2.取消几个影响系统启动的TIMEOUT

# vi /etc/bootrc
set boot_timeout 0
# vi /boot/solaris/bootenv.rc
setprop auto-boot-timeout 0
setprop boottimeout ‘0’
# vi /boot/solaris/strap.rc
Options timeout=0

3.取消自动关机

# vi /etc/power.conf
#autoshutdown 30 9:00 9:00 default

4.设置用户的环境变量

# vi /etc/passwd
root:x:0:1:Super-User:/:/usr/bin/bash
# vi /.bashrc
PS1='[\u@\H \W]\$’
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/ucb:/usr/sbin:/etc:/usr/local/bin:/usr/local/sbin:/usr/ccs/bin:/usr/sfw/bin
MANPATH=$MANPATH:/usr/man:/usr/local/man:/opt/sfw/man
LD_LIBRARY_PATH=/usr/lib:/usr/dt/lib:/usr/openwin/lib:/usr/sfw/lib:
/usr/local/lib:/usr/local/ssl/lib
CC=gcc
export PS1 PATH MANPATH LD_LIBRARY_PATH CC
export EDITOR=vim
umask 022
TMOUT=1800
# vi .bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

5.安装常用软件包

TOP工具:
# gzip -d top-3.5beta12.5-sol9-intel-local.gz
# pkgadd -d top-3.5beta12.5-sol9-intel-local

VIM工具:
# gzip -d ncurses-5.3-sol9-intel-local.gz
# pkgadd -d ncurses-5.3-sol9-intel-local
# gzip -d vim-6.2-sol9-intel-local.gz
# pkgadd -d vim-6.2-sol9-intel-local
# mv /bin/vi /bin/vi.bak
# ln -s /usr/local/bin/vim /bin/vi
# cp /usr/local/share/vim/vim62/vimrc_example.vim /.vimrc
# vi /.vimrc
把其中的:
set backup ” keep a backup file
修改为:
set nobackup ” keep a backup file
# vi /etc/hosts
加一条记录:
192.168.0.15 win2k

GCC工具:
# gzip -d libiconv-1.8-sol9-intel-local.gz
# gzip -d gcc-3.3.2-sol9-intel-local.gz
# pkgadd -d libiconv-1.8-sol9-intel-local
# pkgadd -d gcc-3.3.2-sol9-intel-local

MAKE工具:
# gzip -d make-3.80-sol9-intel-local.gz
# gzip -d automake-1.7.2-sol9-intel-local.gz
# pkgadd -d make-3.80-sol9-intel-local
# pkgadd -d automake-1.7.2-sol9-intel-local

MOZILLA:
# pkgrm SUNWnsb SUNWnsm SUNWnspsm SUNWnsxp
# gzip -d mozilla-i386-pc-solaris2.8-1.6.pkg.tar.gz
# tar -vxf mozilla-i386-pc-solaris2.8-1.6.pkg.tar
# cd mozilla-1.6-x86
# pkgadd -d MOZmozilla.pkg
# gzip -d flash_player_6_solaris_intel.tar.gz
# tar vxf flash_player_6_solaris_intel.tar
# cd install_flash_player_6_solaris
# cp * /usr/local/lib/mozilla-1.6/plugins
# cd /usr/local/lib/mozilla-1.6/plugins
# ln -s /usr/j2se/jre/plugin/i386/ns610/libjavaplugin_oji.so
# /usr/local/bin/mozilla

OTHERS:
# pkgadd -d expat-1.95.5-sol9-intel-local
# pkgadd -d gdbm-1.8.3-sol9-intel-local
# pkgadd -d openssl-0.9.7d-sol9-intel-local
# pkgadd -d libgcc-3.3-sol9-intel-local
# pkgadd -d libpcap-0.8.1-sol9-intel-local
# pkgadd -d tcp_wrappers-7.6-sol9-intel-local
# pkgadd -d tcpdump-3.8.1-sol9-intel-local
# pkgadd -d zlib-1.2.1-sol9-intel-local
# pkgadd -d lsof-4.68-sol9-intel-local

6.安装APACHE-2.0.49

# pkgrm SUNWapchd SUNWapchr SUNWapchu
# gzip -d apache-2.0.49-sol9-intel-local.gz
# pkgadd -d apache-2.0.49-sol9-intel-local
# cp /usr/local/apache2/bin/apachectl /etc/rc3.d/S50apache
# chmod 744 /etc/rc3.d/S50apache
# chown root:sys /etc/rc3.d/S50apache
# 配置/usr/local/apache2/conf/httpd.conf过程略。
# SMCapach2

7.安装OPENSSH-3.8

# pkgrm SUNWsshcu SUNWsshdr SUNWsshdu SUNWsshr SUNWsshu
# gzip -d openssh-3.8p1-sol9-intel-local.gz
# pkgadd -d openssh-3.8p1-sol9-intel-local
# mkdir /var/empty
# chown root:sys /var/empty
# chmod 755 /var/empty
# groupadd sshd
# useradd -g sshd -c “arthur sshd privsep” -d /var/empty -s /bin/false sshd
# ssh-keygen -t rsa1 -f /usr/local/etc/ssh_host_key -N “”
# ssh-keygen -t dsa -f /usr/local/etc/ssh_host_dsa_key -N “”
# ssh-keygen -t rsa -f /usr/local/etc/ssh_host_rsa_key -N “”
# vi /etc/init.d/sshd
===========================sshd============================
#!/sbin/sh
#
# Copyright (c) 2001 by Sun Microsystems, Inc
# All rights reserved.
#
#ident “@(#)sshd 1.1 01/09/24 SMI”

case “$1” in
start)
/usr/local/sbin/sshd
;;
stop)
pkill sshd
;;
*)
echo “Usage: $0 { start | stop }”
exit 1
;;
esac
exit 0
===========================sshd============================
# chmod 750 /etc/init.d/sshd
# chown root:sys /etc/init.d/sshd
# ln -s /etc/init.d/sshd /etc/rc2.d/S98sshd
# vi /etc/hosts.deny
sshd:ALL
# vi /etc/hosts.allow
sshd:192.168.0.15
# rm /.ssh/*

8.安装SAMBA-3

# cp /etc/rc3.d/S90samba bak.S90samba
# pkgrm SUNWsmbac SUNWsmbar SUNWsmbau
# gzip -d samba-3.0.2a-sol9-intel-local.gz
# gzip -d popt-1.7-sol9-intel-local.gz
# pkgadd -d popt-1.7-sol9-intel-local
# pkgadd -d samba-3.0.2a-sol9-intel-local
# cd /usr/local/samba/doc/samba/examples/
# cp smb.conf.default /usr/local/samba/lib/smb.conf
# 设置smb.conf文件过程略
# mv /etc/rc3.d/bak.S90samba S90samba
# chown root:sys /etc/rc3.d/S90samba
# vim /etc/rc3.d/S90samba
=======================S90samba========================
#!/sbin/sh
#
# Copyright (c) 2001 by Sun Microsystems, Inc
# All rights reserved.
#
#ident “@(#)samba 1.1 01/09/24 SMI”

case “$1” in
start)
[ -f /usr/local/samba/lib/smb.conf ] || exit 0

/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/nmbd -D
;;
stop)
pkill smbd
pkill nmbd
;;
*)
echo “Usage: $0 { start | stop }”
exit 1
;;
esac
exit 0
=======================S90samba========================

9.初步的系统安全设置

为安全起见在/etc/inetd.conf中注释掉除下列服务的所有服务

ftp
echo
echo
discard
discard
rstatd/2-4
fs
100083/1

在只需要不多图形操作的服务器或是要保证相当的安全,你也许应该关掉字体服务fs,也可以关掉系统性能监视器rstatd和tooltalk服务器ttd

bserverd(100083/1),查找剩下需要关闭的端口的进程用这个命令:
# /usr/local/bin/lsof -i | grep port

为安全起见在防止堆栈溢出

# cp /etc/system /etc/system.BACKUP
# vi /etc/system
在文件的最后,加上以下两行:
set noexec_user_stack=1
set noexec_user_stack_log=1

禁用自动启动DESKTOP

# /usr/dt/bin/dtconfig -d

为安全起见停掉几个系统服务:

卸载SENDMAIL:
# pkgrm SUNWsndmr SUNWsndmu
卸载TELNET:
# pkgrm SUNWtnetc SUNWtnetd SUNWtnetr
# cd /etc/rc2.d
# mv S71ldap.client _S71ldap.client
# mv S72inetsvc _S72inetsvc
# mv S74autofs _S74autofs
# mv S74xntpd _S74xntpd
# mv S80lp _S80lp
# mv S71rpc _S71rpc
# mv S73nfs.client _S73nfs.client

# cd /etc/rc3.d
# mv S34dhcp _S34dhcp
# mv S15nfs.server _S15nfs.server
# mv S76snmpdx _S76snmpdx

卸载PCMCIA支持:
# pkgrm SUNWpcelx SUNWpcmci SUNWpcmcu SUNWpcmem SUNWpcser SUNWpsdpr

安装PORT扫描工具NMAP

# gzip -d nmap-3.50-sol9-intel-local.gz
# gzip -d pcre-4.5-sol9-intel-local.gz
# pkgadd -d nmap-3.50-sol9-intel-local
# pkgadd -d pcre-4.5-sol9-intel-local
扫描本机端口:
# nmap -P0 -sT localhost

安装网络漏洞扫描工具NESSUS:

# gzip -d nessus-2.0.9-sol9-intel-local.gz
# pkgadd -d nessus-2.0.9-sol9-intel-local
建立SSL证书:
# nessus-mkcert
添加NESSUS用户:
# nessus-adduser
以ROOT启动NESSUS服务器:
# nessus -D
启动NESSUS的GUI客户端:
# nessus

Some useful link for Unix/Linux Information …

August 21, 2006

August 21, 2006

Dojo, A JavaScript Toolkit

August 13, 2006

Dojo is an Open Source DHTML toolkit written in JavaScript. It builds on several contributed code bases (nWidgets, Burstlib, f(m)), which is why we refer to it sometimes as a “unified” toolkit. Dojo aims to solve some long-standing historical problems with DHTML which prevented mass adoption of dynamic web application development.

Dojo allows you to easily build dynamic capabilities into web pages and any other environment that supports Javascript sanely. You can use the components that Dojo provides to make your web sites more useable, responsive, and functional. With Dojo you can build degradeable user interfaces more easily, prototype interactive widgets quickly, and animate transitions. You can use the lower-level APIs and compatibility layers from Dojo to write portable Javascript and simplify complex scripts. Dojo’s event system, I/O APIs, and generic language enhancement form the basis of a powerful programming environment. You can use the Dojo build tools to write command-line unit-tests for your Javascript code. You can use the Dojo package system to make your code easier to maintain and less platform dependent. The Dojo build process helps you optimize your Javascript for deployment by grouping sets of files together and reuse those groups through “profiles”.

 Sources for Dojo:

Officical Website : http://www.dojotoolkit.org/

Dojo Manual: http://manual.dojotoolkit.org/index.html

Dojo wiki: http://dojo.jot.com/WikiHome