Archive for category Unix

用FreeBSD建立安全网关

 
由于本人曾使用过FreeBSD,感觉这个系统还可以—曾用其作服务器,连续运行几个月都没有出过问题,所以打算用FreeBSD来做安全网关。
       在网上查阅了一些资料,花了半天的时间,将基于FreeBSD的网关搞定:
现分享如下:
一网络环境:
通过1M ADSL上网,动态IP,不向外提供服务。内部有几十台电脑,要共享上网。FreeBSD5.3,两块网卡,8139(rl0),对外,同ADSL猫相连,530tx(vr0),对内,同交换机相连。
二系统安装:
  至于系统的安装网上有很多资料,在此不细说。
 详情请看http://www.xyinfo.ha.cn/netschool/freebsd/index.htm
三编译内核:
加上ipfilter支持,去掉系统默认的 ipfirewall。
#cd  /usr/src/sys/i386/conf
#cp GENERIC DAFEI
#ee DAFEI
修改这一行,红色的部分要和该文件名相同。
ident           DAFEI
在末尾加入一下几行:
#禁用ipfirewall。
#options        IPFIREWALL
#options        IPFIREWALL_VERBOSE
#options        IPFIREWALL_VERBOSE_LIMIT=90
#options        IPFIREWALL_DEFAULT_TO_ACCEPT
#options        IPDIVERT

#支持ipfilter
options         BRIDGE
options         IPFILTER
options         ACCEPT_FILTER_DATA
options         ACCEPT_FILTER_HTTP
由于ipfirewall和ipfilter都运行在内核,二者不能同时共存,所以必须注释掉ipfirewall,其他内核优化选项这里就不细说了。
编译内核:
#cd /usr/src
#make kernel KERNCONF=DAFEI
编译成功后要重新启动计算机。
四 配置拨号上网:
修改ppp.conf文件
#cd /etc/ppp
#cp ppp.conf cpp.conf.bak
#ee ppp.conf
修改如下:
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
set redial 15 28800
set reconnect 15 28800
set dial "ABORT BUSY ABORT NOsCARRIER TIMEOUT 5
          "" AT OK-AT-OK ATE1Q0 OK dATDTT TIMEOUT 40 CONNECT"                     

adsl:
set device PPPoE:rl0
set mru 1492
set mtu 1492
set speed sync
enable lqr
set lqrperiod 5
set cd 5
set dial
set login
set timeout 0
set authname YOURUSERNAME used to login
set authkey  YOURPASSWORD used to login

set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR                  
enable dns
红色的部分是需要修改的
五 定制防火墙规则:
#cd /etc
#touch ipf.rules
#ee ipf.rules
加入如下内容:
block in log quick all with short
block in log quick all with ipopts
block in log quick all with frag
block in log quick all with opt lsrr
block in log quick all with opt ssrr

pass out on vr0 all
pass in on vr0 all
pass out quick on lo0 all
pass in quick on lo0 all

block out on rl0 all

pass out quick on rl0 proto tcp from any to any flags S keep state keep frags
pass out quick on rl0 proto udp from any to any keep state
pass out quick on rl0 proto icmp all keep state

block in quick on rl0 all

由于空间的限制,删去了一些规则。
六 配置地址转换(实现NAT功能):
#cd /etc
#touch ipnat.rules
#ee ipnat.rules
加入如下内容:
map rl0 192.168.0.0/16 -> 0/32 proxy port ftp ftp/tcp
map rl0 192.168.0.0/24 -> 0/32 portmap tcp/udp 10000:30000
map rl0 192.168.0.0/24 -> 0/32

七 配置rc.conf文件:

#cd /etc
#ee rc.conf
修改如下:
gateway_enable="YES"
hostname="ginifab-gatway.ginifab.com"
ifconfig_vr0="inet 192.168.1.1  netmask 255.255.255.0"
kern_securelevel="1"
kern_securelevel_enable="YES"
inetd_enable="YES"
linux_enable="NO"
sendmail_enable="NO"

keyrate="fast"
nisdomainname="NO"
sshd_enable="YES"
usbd_enable="NO"

ppp_enable="YES"
ppp_mode="ddial"
ppp_mode="background"
ppp_profile="adsl"
firewall_enable="NO"
firewall_logging_enable="NO"
ipfilter_enable="YES"
ipnat_enable="YES"

网关为192.168.1.1
八: #reboot now

一切OK。
注意:
编译内核时可根据自己机子的配置优化。本人的这个网关开机后总共使用不到30M内存。
定制防火墙规则可参考网上资料,定制的更加安全,高效。
在实现该网关的过程中,参考了很多网上的资料,本人仅把自己的配置过程写出来。

,

No Comments

用FreeBSD的ports安装apache+php+mysql

看到网上有很多介绍apache+php+mysql安装的教程,但大多都是基于源代码编译或者给予RPM包的方式,对于FreeBSD自带的ports安装却鲜有提及,有方便的干嘛弄得复杂呢?

首先确定主机联网

cvsup -h cvsup.freebsd.org /usr/share/example/cvsup/ports-supfile #同步ports

Read the rest of this entry »

, , ,

2 Comments

基于FreeBSD下KDE桌面的汉化

1.安装kde-i18n-zh_CN:
#cd /usr/ports/chinese/kde3-i18n-zh_CN
#make install clean
2.安装字体
1)#cd /usr/ports/x11-fonts/ttmkfdir
#make install clean
2)#mkdir -p /usr/X11R6/lib/X11/fonts/TrueType
#cp Simsun.ttf /usr/X11R6/lib/X11/fonts/TrueType
#cp tahoma.ttf /usr/X11R6/lib/X11/fonts/TrueType
3) #cd /usr/X11R6/lib/X11/fonts/TrueType
#ttmkfdir >fonts.dir
#cp fonts.dir fonts.scale

3.修改/etc/X11/XF86Config
注释掉
Load "freetype"
Load "record"
Load "type1"
添加 Load "xtt
注:如果把考虑粗体斜体等的需求,使用 ttmkfdir + Load "freetype" 会有更好的品
质。
4.修改/usr/X11R6/etc/fonts/fonts.conf

1)在 <dir>/usr/X11R6/lib/X11/fonts/Type1</dir>
<dir>/usr/X11R6/lib/X11/fonts/TrueType</dir>
<dir>/usr/X11R6/lib/X11/fonts/Type1</dir>
<dir>/usr/X11R6/lib/X11/fonts/OTF</dir>
<dir>~/.fonts</dir>
前添加<dir>/usr/X11R6/lib/X11/fonts/TrueType</dir>

2)在/usr/X11R6/etc/fonts/fonts.conf里添加:(为了小字不使用 antialias)
<match target="pattern">
<test qual="any" name="size" compare="l">
<int>12</int>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>
注:如果要用 Xft2,安装完字体后最好做 fc-cache -f -v 比较安全。

5.(注意先备份,即:cp /usr/X11R6/share/themes/Default/gtk/gtkrc.zh_CN
/usr/X11R6/share/themes/Default/gtk/gtkrc.zh_CN.bak)
1)替换/usr/X11R6/share/gnome/gtkrc.zh_CN为下面的内容:

style "gtk-default-zh-cn" {
fontset = "-*-*-medium-r-normal–12-*-*-*-*-*-iso10646-1,*-r-*"
}
class "GtkWidget" style "gtk-default-zh-cn"
2)同样再替换掉/usr/X11R6/share/themes/Default/gtk/gtkrc.zh_CN

3)cp /usr/X11R6/share/themes/Default/gtk/gtkrc.zh_CN ~/.gtkrc.zh_CN

6.1)在kde控制中心(KDE Control Center)的"区域与辅助功能
(Regional & Accessibility)"的国家/地区和语言(Country/Region & Language)里面
设置国家(Country)为"中国"和Languages为"简体
中文(Simplifiled Chinese)"
2)在kde的"控制中心"–"外观与主题"的"字体"里面全设置
字体为Simsun,12。并去掉"使用字体平滑"。
3) 在Gnome的字体设置里面设置字体为Tahoma,12

7.安装fcitx输入法:
1).#cd /usr/ports/chinese/fcitx
2)#make install clean
3).修改~/.profile,添加:
LANG=zh_CN.EUC
LC_ALL=zh_CN.EUC
export LANG LC_ALL
4).我用csh所以:
#setenv LC_ALL zh_CN.EUC
#setenv LANG zh_CN.EUC
如果用的是bash则相应的为
#LANG=zh_CN.EUC
#LC_ALL=zh_CN.EUC
#export LANG LC_ALL
5).在~/.cshrc中加入:
setenv LC_ALL zh_CN.EUC
setenv LANG zh_CN.EUC
(PS: 如果使用Gnome桌面,改动此配置后再次登录将显示中文界面)

6).修改~/.xinitrc及~/.xsession.均添加:
export XMODIFIERS=@im=fcitx
fcitx&
至文件的开头处。
7).#qtconfig
然后选择–>Interface—>XIM Input Style 选Over the Spot(上面的复选框也选
上)–>File–Save

8.xmms的问题:
1)cp -r /usr/X11R6/share/locale/zh_CN.GB2312
/usr/X11R6/share/locale/zh_CN.EUC
2)在xmms里面设置使用字体为
-isas-fangsongti-medium-r-normal-*-*-160-*-*-c-*-gb2312.1980-0,
-misc-fixed-medium-r-semicondensed-*-*-130-*-*-c-*-koi8-r
或者:-sony-*-*-*-*-*-16-*-*-*-*-*-iso8859-0,-*-*-*-*-*-*-16-*-*-*-*-*-gbk-1

9.终端的中文显示:cce解决方案:
http://www.sourceforge.net/projects/cce2k
FreeBSD/NetBSD/OpenBSD 都可以运行(console下), 不过还有一些bug.
支持多种编码: GB2312/GBK/Shift-JIS/JIS/KSC/UTF-8
可以支持许多OS: Linux, *BSD, Solaris, QNX, LynxOS, Hurd, Minix, etc
加入了 SDL/GGI 的支持, 可以在X Windows下运行, 支持点阵字体和TrueType字体.
输入法也做了一些升级, 把许多Big5的加上了, 有智能拼音和注音输入.
#tar -zxvf cce-0.50-11242003-dist.tgz,
#configure && make && make install
cce的这个版本支持framebuffer了,可以上1024×768,当然要你显示器支持
10.Windows分区及光盘文件的中文显示:
1)升级ports:如何升级见:这里
2)安装gbfs:
#cd /usr/ports/chinese/gbfs
#make install clean
3)编辑内核,注释掉MSDOSFS、CD9660、CD9660_ROOT即:
#options MSDOSFS
#options CD9660
#options CD9660_ROOT
注解来自于 statue大哥.
1)chinese/gbfs 的 ntfs 似乎有问题,不建议玩家级用户使用
2)cce 因为有安全问题而被移出 ports tree,我尝试过使用 cce2k,不幸的是他并并
支持 FreeBSD,所以作罢。
http://sourceforge.net/projects/cce2k/
3)zhcon 使用与传统 kon2 不同的调用 VGA mode 方式,在 4-STABLE 下没问题,但是
在 5-CURRENT 就是不 work,还有另外一个地方是是 /dev/vga 要自己弄出?,简单的
方法像是 ln -s /dev/ttyv0 /dev/vga,或是改 src 都可以。

4)另外,如果发现示的效果很差,把 print/freetype2 和 x11-fonts/fontconfig 重
装看看,4.8-STABLE 后的版本对中文才有比较好的支持。

5)而中文 XIM Server 可以看看 miniChinput,应该会有许多好玩的输入法

xmms 的问题是因为在 XFree86 4.3.0 之后的 locale.dir 和 locale.alias 漏掉了,
如果按照标准的 X programming 的话,目前大部分的软件都不能用才对(针对
zh_CN.EUC),幸运的是,大部分的软件都不走标准写法。
于是另外一种解法可以试试:

源码
:—————————————————————————
—–locale.dir
 - zh_CN/XLC_LOCALE                     zh_CN.eucCN
 + zh_CN/XLC_LOCALE   zh_CN.EUC
 - zh_CN/XLC_LOCALE:   zh_CN.eucCN
 + zh_CN/XLC_LOCALE:   zh_CN.EUC

 locale.alias
 - zh_CN.EUC    zh_CN.eucCN
 + # zh_CN.EUC    zh_CN.eucCN
 - zh_CN.EUC:    zh_CN.eucCN
 + # zh_CN.EUC:    zh_CN.eucCN
 —————————————————————————
—–

11.xpdf的汉化:来自于xiaoniao9312兄
1)#cd /usr/ports/chinese/xpdf
#make install clean

2)修改/etc/X11R6/xpdfrc这样的一段,

源码
:—————————————————————————
—–
cidToUnicode Adobe-GB1 /usr/X11R6/share/xpdf/chinese-simplified
/Adobe-GB1.cidToUnicode
unicodeMap ISO-2022-CN /usr/X11R6/share/xpdf/chinese-simplified/
ISO-2022-CN.unicodeMap
unicodeMap EUC-CN /usr/X11R6/share/xpdf/chinese-simplified/EUC-CN.unicodeMap
unicodeMap GBK /usr/X11R6/share/xpdf/chinese-simplified/GBK.
unicodeMap
cMapDir Adobe-GB1 /usr/local/share/ghostscript/Resource/CMap
toUnicodeDir /usr/local/share/ghostscript/Resource/CMap
displayCIDFontX Adobe-GB1 "-misc-simsun-medium-r-normal–12
-*-*-*-*-*-gb2312.1980-0"
ISO-2022-CN—————————————————————–
—————

为:-misc-simsun-medium-r-normal–12-*-*-*-*-*-gb2312.1980-0

,

No Comments

FreeBSD 6.0总算Release了!

盼望了好久,终于在今天下午更新到了FreeBSD6.0的RELEASE版本,总算有了6.x的release了,这是不是意味着5.x行将就木了呢?

发稿时系统正在编译新的内核,估计会在17:00左右系统会重启n次。

No Comments

FreeBSD 5.3 下Raid的制作(GEOM)

从FreeBSD5.3开始引进了对geom的支持

FreeBSD 5.3下面用geom来创建raid是很方便的
除开可以用geom这个程序来创建,还提供了个单独的程序,例如
gconcat, gmirror, graid3, gstripe. 另外还有个尚未完成的gvinum(即将代替vinum)

CONCAT版RAID

concat其实并不算是raid,因为没有性能上的提升,也没有数据保护作用。只是简单的将各磁盘串起来利用磁盘空间。

下面例子将对ipsd1,ipsd2这两个磁盘系统进行concat

首先重置这两个磁盘
bsdlabel -r -w ipsd1 auto
bsdlabel -r -w ipsd2 auto

使用gconcat连接两个磁盘,并且命名为data
gconcat label -v data /dev/ipsd1 /dev/ipsd2

使用gconcat以后,将会在/dev/concat下面多出一个设备名叫data,对应早先命令的data名字
ls /dev/concat

格式化,如果你需要关闭Soft-Update,只需要去掉-U
newfs -U /dev/concat/data

创建mount point
mkdir /data

挂上新建的concat
mount /dev/concat/data /data

修改fstab让系统重启后自动mount
vi /etc/fstab
内容
/dev/concat/data /data ufs rw 2 2

增加开机自动装载geom_concat.ko这个模块
vi /boot/loader.conf
内容
geom_concat_load="YES"

很简单的concat已经做好了

stripe raid (RAID0)
创建一个stripe raid (RAID0)
RAID0具有最高性能,也是最差安全性的

使用gmirror连接两个磁盘,并且命名为data
gstripe label -v -s 4096 data /dev/da1 /dev/da2
-s 4096: 是分开在每个磁盘的块大小为4k

创建mount point
mkdir /data

挂上新建的Raid

mount /dev/concat/data /data

增加开机自动装载geom_mirror.ko这个模块
vi /boot/loader.conf
内容
geom_stripe_load="YES"

kern.geom.stripe.fast
设置是否使用fast模式.gstripe有两个模式,一个是fast,一个是economic.
fast模式消耗更多的内存,但是速度更快.当内存不足的时候会自动切换到economic模式.

kern.geom.stripe.maxmem
设置fast模式下面最大使用内存数,该选项是只读.只能在启动时候才能设置.因此如果需要更改该选项,需放在 /boot/loeader.conf

kern.geom.stripe.fast_failed
记录了fast模式失败次数,如果次数很大,你就要调大kern.geom.stripe.maxmem的数值

MIRROR raid (raid1)

创建一个mirror raid (也就是俗称的RAID1)
RAID1具有最高的安全性,具有快速的读操作,不提高磁盘的写性能

下面例子将对da0 da1这两个磁盘系统进行mirror

首先重置这两个磁盘
bsdlabel -r -w da0 auto
bsdlabel -r -w da1 auto

使用gmirror连接两个磁盘,并且命名为data
gmirror label -v -b split -s 2048 data da0 da1
稍微解释一下上面的命令,详细的查询man gmirror
-b split: 告诉gmiiror创建的mirror,在读取的时候将读操作分开到各磁盘上面,这样能够提高读取性能
-s 2048: 告诉mirror只分开读取大于2k 的文件
除开spilit,还有其他平衡形式.split比较适合大众
round-robin : 在各磁盘轮流读取数据
prefer: 更高优先权的读取数据
load: 更低负荷的读取数据

使用gmirror以后,将会在/dev/concat下面多出一个设备名叫data,对应早先命令的data名字
ls /dev/concat

格式化,如果你需要关闭Soft-Update,只需要去掉-U
newfs -U /dev/concat/data

创建mount point
mkdir /data

挂上新建的Raid

mount /dev/concat/data /data

修改fstab让系统重启后自动mount

vi /etc/fstab
内容
/dev/concat/data /data ufs rw 2 2

增加开机自动装载geom_mirror.ko这个模块
vi /boot/loader.conf
内容
geom_mirror_load="YES"

mirror raid已经做好了

创建一个当前磁盘的mirror:

gmirror label -v -b round-robin data da0
gmirror insert data da1


除开上面,geom还提供了raid3的制作
graid3 label -v -r data da0 da1 da2

上面贴子说的gconcat,gmirror,gstripe都可以用geom一个来搞定
例如
geom stripe label -v -s 4096 data /dev/da0 /dev/da1 /dev/da2
等于
gstripe label -v -s 4096 data /dev/da0 /dev/da1 /dev/da2

,

No Comments

Solaris中的酷命令

Solaris 中的命令非常之多,以致很难从中分离出那些很酷的命令。例如,有些命令报告程序进行每个系统调用时所要花费的时间,有些命令动态地显示系统活动信息,而且 这些命令大部分都同时包含在了 Solaris 8 和 Solaris 9 中。这里,我将重点介绍其中一些命令,您或许会发现它们特别有用。

    系统管理员是工具的使用者。通过实践经验,我们掌握了更多工具,并且增强了诊断问题以及实施解决方案的能 力。本次专栏中包含的命令是通过经验、朋友、熟人以及出席 9 月举行的 SunNetwork 2002 大会收集到的。Solaris 内核的开发人员 Brian Cantrill 和 Mike Shapiro 所讲的"The /procodile Hunter"让人很有启发并令人感到惊恐,因为 Cantrill 编写代码来说明一个观点的速度比 Shapiro 能够讲解该观点的速度还要快!

有用的 Solaris 命令

truss -c (Solaris >= 8):这是个令人震惊的 truss 选项,它提供了被追踪命令的全面概要信息:

$ truss -c grep asdf work.docsyscall               seconds   calls  errors_exit                   .00       1read                    .01      24open                   .00       8      4close                   .00       5brk                     .00      15stat                     .00       1fstat                    .00       4execve                  .00       1mmap                   .00      10munmap                 .01       3memcntl                 .00       2llseek                   .00       1open64                  .00       1                         ----     ---    ---sys totals:               .02      76      4usr time:                .00elapsed:                 .05

它还能显示正在运行的进程的概要数据。在本例中,数据表明了从启动 truss 命令到用 control-c 来终止 truss 执行的期间,进程到底做了些什么。这对于判断进程为何被挂起是很理想的,因为您无须费力浏览整个 truss 的输出。

truss -d 和 truss -D (Solaris >= 8):这两个选项表明与truss显示的每个系统调用相关的时间信息。这对于找出定制代码或商业代码中的问题很有帮助。例如:

$ truss -d whoBase time stamp:  1035385727.3460  [ Wed Oct 23 11:08:47 EDT 2002 ] 0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64)  argc = 1 0.0032 stat("/usr/bin/who", 0xFFBEFA98)                = 0 0.0037 open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENT 0.0042 open("/usr/local/lib/libc.so.1", O_RDONLY)      Err#2 ENOENT 0.0047 open("/usr/lib/libc.so.1", O_RDONLY)            = 3 0.0051 fstat(3, 0xFFBEF42C)                            = 0. . .truss -D 对于显示系统调用间的延迟时间更加有用:

Dilbert> truss -D who 0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64)  argc = 1 0.0028 stat("/usr/bin/who", 0xFFBEFA98)                = 0 0.0005 open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENT 0.0006 open("/usr/local/lib/libc.so.1", O_RDONLY)      Err#2 ENOENT 0.0005 open("/usr/lib/libc.so.1", O_RDONLY)            = 3 0.0004 fstat(3, 0xFFBEF42C)                            = 0

这个例子中,stat 这个系统调用要比其他系统调用占用更长的时间。

truss -T:这是个很棒的调式帮助选项。在执行指定的系统调用时,它可以终止进程("-U"也执行同样的操作,不过是在进行用户级的函数调用时)。此时,将会获取用于进一步分析的 core 文件,或者使用一些 /proc 工具来确定进程各个方面的状态。

truss -l(在 Solaris 9 中已改进):显示多线程进程中每个调用的线程号。Solaris 9 中的 truss -l 经过了改进,最后还可以监视多线程的应用程序的执行。

Truss 的确是个功能强大的工具。例如,可在 core 文件中用于分析问题产生的原因。还可以通过"-u"选项来显示用户级的库(既可以为系统库,也可为程序员库)调用的详细信息。

pkg-ge:这是个用于自动获取免费软件包的好工具(http: //www.bolthole.com/solaris)。它通过 /etc/pkg-get.conf 来配置。一旦配置好并运行后,就运行 pkg-get -a 来获取可用包的列表以及运行 pkg-get -I 来获取并安装给定的包。

Plimit (Solaris >= 8):这个命令用于显示并设置正在运行的进程中的每个进程的限制。如果一个长时间运行的进程超过了某个限制(如打开的文件数目),使用该命令就十分方便。 因为无须使用 limit 命令后重新运行该进程,plimit 就可以修改正在运行的进程。

coreadm (Solaris >= 8):在以前没有 coreadm 命令时,core dumps 被置于进程的工作目录下。并且 core 文件将会互相覆盖。而这个问题和其他更多问题都可以由 coreadm 来处理,它是一个管理 core 文件生成的工具。您可以通过该工具指定是否保存 core、core存储的位置和应保留的版本数目,等等。所有这些设置信息都是在重启前通过 coreadm 修改 /etc/coreadm.conf 来保存的。

pgrep (Solaris >= 8):pgrep 在 /proc 中搜索符合给定规则的进程,并返回进程的 ID。其中一个很棒的选项是"-n",它返回的是最新的满足条件的进程号。

preap (Solaris >= 9):除去僵尸进程。任何困于"z"状态(由 ps 命令显示)的进程,该命令都可将之从系统中清除。

pargs (Solaris >= 9):显示进程的参数及环境变量。

nohup -p (Solaris >= 9):nohup 命令可以用于启动一个进程,因此即使用于启动进程的 shell 被关闭(即进程获得"SIGHUP"信号),该进程仍然可以继续运行。这对于让一个后台任务不管碰到何种情况仍然可以继续运行是很有用的。但是如果您已经 启动了一个进程,但稍后希望使它免受 HUP 信号的影响,该怎么办呢?在Solaris 9中, nohup -p 可以获取进程 ID 并使之忽略 SIGHUP 信号。

prstat (Solaris >= 8):prstat 也是 top 命令,但拥有更多功能。这两个命令都可以提供一个屏幕的关于进程的有用信息以及其他的相关信息,并且能频繁地更新,总之是个很棒的显示系统性能的窗口。但 prstat 要比 top 更加精确。它还提供了一些很好的选项。"-a"可以同时显示进程与用户的信息(默认由 CPU hog 排序)。"-c"使其执行很像 vmstat(在前一个报告下面接着显示新的报告)。"-C"显示在处理器集中的进程。"-j"显示一个"工程"中的进程。"-L"显示每个线程和每个进 程的信息。"-m"和"-v"显示每个进程的很多详细的性能信息(包括 pages、traps、lock wait 和 CPU wait)。所有输出数据都可以按照在内存中设置的大小、虚拟内存大小、运行时间等等条件来排列。prstat 在没有 top 的系统中是个十分有用的工具,并且由于它的精确性,所以很可能取代 top(有些地方考虑到它是个被支持的程序而使用它)。

trapstat (Solaris >= 9):trapstat 以及 lockstat 和 kstat 是 Solaris 中最难以理解的命令。它们显示一个运行的操作系统内部中最具体的细节信息。每个命令对于解决 Solaris 系统中发生的古怪问题都是必不可少的。最好是将它们的输出随错误报告一起提交,但进一步的研究揭示,它们也能为一般应用提供有用信息。

vmstat -p (Solaris >= 8):在这个选项可以使用之前,要确定是哪种类型的内存命令导致系统页面调度几乎是不可能的(请查阅"se toolkit")。vmstat -p 可以解决此问题,因为它不但显示您的系统是否处于内存紧缺的情况(通过"sr"栏),而且还显示是否是由以下内容导致的:应用程序的代码,应用程序的数据 或 I/O 。"-p"能够真正帮助找出 Solaris 中导致神秘的内存问题的原因。

pmap -x (Solaris >= 8,Solaris >= 9中进行了错误修复):如果已经得知进程中有内存问题,并且需要获得更多内存使用的详细信息,就可以使用 pmap -x。该命令将解释指定 ID 的目标进程的整个内存映射信息,如下:

# pmap -x 17791779:   -ksh Address  Kbytes     RSS    Anon  Locked Mode   Mapped File00010000     192     192       -       - r-x--  ksh00040000       8       8       8       - rwx--  ksh00042000      32      32       8       - rwx--    [ heap ]FF180000     680     664       -       - r-x--  libc.so.1FF23A000      24      24       -       - rwx--  libc.so.1FF240000       8       8       -       - rwx--  libc.so.1FF280000     568     472       -       - r-x--  libnsl.so.1FF31E000      32      32       -       - rwx--  libnsl.so.1FF326000      32      24       -       - rwx--  libnsl.so.1FF340000      16      16       -       - r-x--  libc_psr.so.1FF350000      16      16       -       - r-x--  libmp.so.2FF364000       8       8       -       - rwx--  libmp.so.2FF380000      40      40       -       - r-x--  libsocket.so.1FF39A000       8       8       -       - rwx--  libsocket.so.1FF3A0000       8       8       -       - r-x--  libdl.so.1FF3B0000       8       8       8       - rwx--    [ anon ]FF3C0000     152     152       -       - r-x--  ld.so.1FF3F6000       8       8       8       - rwx--  ld.so.1FFBFE000       8       8       8       - rw---    [ stack ]-------- ------- ------- ------- -------total Kb    1848    1728      40       -

这里,我们可以看到每一块内存,它们被用于做什么,占用了多大的(虚拟的和真实的)空间以及其模式信息。

df -h (Solaris >= 9):这个命令在 Linux 上已经应用十分普遍,刚刚转移到了 Solaris 平台。df -h 以一种方便阅读的形式显示文件系统的概要信息:

$ df -hFilesystem             size   used  avail capacity  Mounted on/dev/dsk/c0t0d0s0      4.8G   1.7G   3.0G    37%    //proc                    0K     0K     0K     0%    /procmnttab                   0K     0K     0K     0%    /etc/mnttabfd                       0K     0K     0K     0%    /dev/fdswap                   848M    40K   848M     1%    /var/runswap                   849M   1.0M   848M     1%    /tmp/dev/dsk/c0t0d0s7       13G    78K    13G     1%    /export/home

No Comments