solaris基础和常用知识FAQ中篇

来源:岁月联盟 编辑:zhu 时间:2008-03-13
solaris基础和常用知识FAQ中篇内容简介:47 Q: 1.问题描述:RouterLanSwitch的日志管理依赖系统的syslogd进程来实现。 通过设置/etc/syslog.conf文件, 可以控制syslogd把日志存入特定的文本 文件中。然后日志后台就可以周期性的轮询这些文件并导入数据库。按

47 Q: 1.问题描述:Router&LanSwitch的日志管理依赖系统的syslogd进程来实现。
  通过设置/etc/syslog.conf文件, 可以控制syslogd把日志存入特定的文本
  文件中。然后日志后台就可以周期性的轮询这些文件并导入数据库。按照sun
  的man页说明,当向syslogd进程发HUP信号时,进程将重读配置文件
  /etc/syslog.conf,然后继续运行。 但在Solaris2.7以下实际的效果是:发
  HUP信号将导致syslogd进程不能正常工作(有的试验结果是,信号导致进程
  终止),后续设备日志全部丢失。
  2.解决建议:
  我们的建议是,修改系统的脚本文件/usr/lib/newsyslog,不让其向syslogd
  发HUP信号,而是TERM(终止信号),然后重启。此种方法的弊端是,如果用
  户主动向进程发HUP信号,仍然存在问题。而且也不能解决syslogd意外退出
  的情况。第二种建议是由综合统一做一个检测进程,这样各项目就不会产生
  冲突。但仍然存在用户主动向进程发HUP信号使syslogd失效的问题。由上述
  可以看出,无论何种方法,都不能彻底解决问题。
  A: 问题的产生可能是由于程序员定义了新的日志文件并企图 使用newsyslog 脚
  本来处理,这个脚本备份日志文件再发送 HUP信号。newsyslog 脚本在处理系
  统文件时不会有问题,很可能是由于syslogd对这些文件做过专门的处理。但
  不能认为我们自己的文件也会得到同样的照顾,事实上,这样做通常是危险
  的。 我认为建议2 是可行的, 因syslogd打开的是新的日志文件,不会发
  生异常。而用户发送的 HUP 命令只是使 syslogd重读 syslog.conf 文件
  ,也不会发生意外.为了比较好的定位问题,建议在一个比较干净的系统上进
  行测试,在测试之前最好停掉自己的程序,
  
  简化/etc/syslog.conf,我是这样测试的:
  
  # /usr/lib/newsyslog
  # logger -p deamon.notice "12345"
  # cat /var/adm/messages
  
  # kill -HUP `cat /etc/syslog.id`
  # logger -p deamon.notice "aaaa"
  # cat /var/adm/messages
  
  结果正常.
  
  48 Q: Solaris 8中,为什么不可以用如下命令给网卡增加逻辑地址?
  ifconfig hme0:1 xxx.xxx.xxx.xxx up
  A: Solaris 8 对ifconfig 作了一些改动,在这个命令之前,先执行下面的命令就可
  以了: ifconfig hme0:1 plumb
  
  49 Q: 为什么Solaris 中的多个网卡显示的以太网地址都是一样的?
  A: 缺省情况下,系统使用本机的MAC地址作为各网卡的MAC地址,可以用如下
  OpenBoot 命令让系统使用网卡自带的MAC地址.
  ok setenv local-mac-address? true
  
  50 Q: 如何在一台机器里如何实现用多块网卡容错?
  A: Solaris8 新增了一个daemon叫mpathd将网卡管理分组管理来完成这样的功能.
  原理是给每个网卡分配两个地址,多出的一个逻辑IP地址由mpathd用来检查个网
  卡的工作情况.下面一两块网卡为例介绍配置过程,这里两块网卡分别是hme0和
  hme1,
  1. ifconfig hme0 group test
  ifconfig hme1 group test
  2. ifconfig hme0 addif 19.16.85.21 netmask + broadcast + -failover deprecated up
  ifconfig hme1 addif 19.16.85.22 netmask + broadcast + -failover deprecated up
  3. 检查hme0:1和hme1:1看是否有逻辑IP
  ifconfig hme0:1
  ifconfig hme1:1
  这里要注意,给网卡增加的逻辑IP应当与实际分配的IP地址在同一个网段并
  且不能与网上其他主机IP地址冲突.
  
  51 Q: 一个进程里最多可以打开多少文件?
  A: 操作系统为每个进程维护一个所打开文件的数组,进程能够打开的文件与此数组
  的大小有关.此数组的大小由两个系统变量限制: rlim_fd_max , rlim_fd_cur,
  这两个变量可以用limit或ulimit 命令察看和修改,要扩大rlim_fd_max需要
  root权限,rlim_fd_cur不能超过rlim_fd_max. 编程时则有库函数 getrlimit
  和 setrlimit 可以使用. 另外一种改法是在 /etc/system文件中修改. 如果是
  调用stdio函数打开文件,则还有另外一种限制,32位内核Solaris 的 FILE 结构
  中的 文件句柄是一个字节,所以同时打开文件的上限是256
  
  52 Q: 如何改变登录CDE时的语言环境?
  A: 修改/usr/dt/config/Xconfig文件中的变量 Dtlogin*language即可.
  
  53 Q: 如何防止用户通过CDE 环境中的 suspend 菜单关闭计算机?
  A: 修改 /usr/openwin/bin/sys-suspend的执行权限就可以了.
  
  54 Q: 我安装完solaris5.7之后(安装时选择简体中文),运行C语言编译器cc不成功
  ,提示“language optional software package not installed.”。请问这是
  怎么回事,该如何解决?
  A: Solaris本身带有adb,mdb,make工具,但不带C语言编译器.若要使用需要单独购
  买软件包及license.
  
  55 Q: 想修改ROOT的缺省PATH,在哪改?不要告诉我LOCAL.PROFILE,不管用.
  A: 如果以root用户身份登录或者用 su - 命令进行切换,则修改 home目录下
  .profile是管用的. 如果是简单的 用 su 进行切换, 则系统保留除 PATH之外
  的所有环境变量, PATH被设为 /etc/default/su 中的 SUPATH ,缺省时为
  /usr/sbin:/usr/bin

56 Q: 问一下,现在在Solaris下有什么比较好的测试程序语句以及条件覆盖率的工具
  A: prof 和 gprof 都有. 如果您使用workshop 或者 Forte 6.0,则其中有
  performence analysis tools 可以使用.
  
  57 Q: 怎么样让系统启动时就自动在一个网卡上绑定两个IP地址
  A: 创建文件 /etc/hostname.hme0:1,其中写上第二个ip地址.
  
  58 Q: Sun solaris7系统中有一下几种SHELL,sh,csh,ksh,另外还有一个jsh.
  我的问题是:jsh是什麽SHELL?另外有bash SHELL吗?
  A: jsh 就是 sh, 只不过是激活了job control 模式. 但现在 sh 本身就有job
  control 功能,所以只用 sh 就可以了. bash 是 sh 的增强, 如果你的系统没
  有这个shell, 可以到 www.sunfreeware.com 下载.
  ls /bin/*sh 可以看到系统所有存在的shell.
  
  59 Q: 我的光驱无法读取光盘?且总是显示设备忙,如何搞定?mount显示没有被
  mount.
  A: 查找进程 vold 并将其杀死,就可以手工打开光驱.
  
  60 Q: 如何将root用户的shell改掉,我知道一般用户可在admintool下修改,但root
  用户不能。
  A: 1. chmod 666 /etc/passwd (一定要让普通用户有些权限,切记!)
  2. vi /etc/passwd(最后一个字段试root 的 shell,要确保该程序存在方可改
  掉它. )
  
  61 Q: 我在安装Solaris 8时启用了DHCP,现在我的主机名是unknown,在启动时工作
  站启用DHCP并分配IP,主机名也自动改为unknow。请问怎样改主机名?
  A: DHCP in Solaris8
  1. # touch /etc/dhcp.hme0,hme0:请用相应的网卡设备名;
  2. 修改/etc/init.d/network,/etc/init.d/inetsvc
  先备份
  # cp /etc/init.d/network /etc/init.d/network.org
  # cp /etc/init.d/inetsvc /etc/init.d/inetsvc.org
  修改/etc/init.d/network第278行:
  "dhcp") #hostname=`/sbin/dhcpinfo Hostname`
  hostname=`cat /etc/nodename`
  修改/etc/init.d/inetsvc第168行:
  hostname=`/sbin/dhcpinfo Hostname`
  if [ -z "$hostname" ]; then
  #hostname="unknown"
  hostname=`cat /etc/nodename`
  fi
  修改/etc/init.d/inetsvc第82行:
  if [ "$_INIT_NET_STRATEGY" = "dhcp" ]; then
  #dnsdomain=`/sbin/dhcpinfo DNSdmain`
  dnsdomain=`cat /etc/defaultdomain`
  else
  dnsdomain=
  fi
  if [ -n "$dnsdomain" ]; then
  #dnsservers=`/sbin/dhcpinfo DNSserv`
  dnsservers=`cat /etc/dnsservers`
  修改/etc/init.d/inetsvc第220行:
  /usr/bin/mv /tmp/hosts_clear.$$ /tmp/hosts.$$
  mydomain=`cat /etc/defaultdomain`
  echo "${ipaddr}/t${hostname}/t${hostname}.${mydomain}/t# Added by DHCP" >>/tmp/hosts.$$
  在/etc/init.d/inetsvc第一行加入如下语句:
  if [ -f /etc/dhcp.*[0-9] ]; then
  _INIT_NET_STRATEGY="dhcp"
  export _INIT_NET_STRATEGY
  fi
  3.创建/etc/defaultdomain,内容为huawei.com.cn
  4.创建/etc/nodename,内容为你的机器名
  5.创建/etc/dnsservers:129.9.111.100 10.15.1.3
  
  62 Q: 我用msgget建一消息队列:
  ret = msgget(IPC_PRIVATE, (0660)|IPC_CREAT);
  在一个线程用msgsnd发消息,另一个msgrcv收:
  ulReturnCode = msgsnd( QueueID, pBufferAddr, 8 ,IPC_NOWAIT);
  当消息队列中的消息个数等于40时(每个消息尺寸为8字节),msgsnd函数返
  回-1,errno= 11,请问是什么原因。是消息队列满吗?怎样调整系统参数,使
  消息队列能大些。
  A: msgmap : 100 maximum size of resource map for messages
  msgmax : 2048 maximum size ,in byte, of a massages
  msgmnb: 4096 maximum number of bytes on a message queue.
  msgmni: 50 maximum size of message queue identifiers.
  msgssi: 8 message segment size.
  msgtql: 40 maximum number of message headers
  msgseg: 1024 maximum number of message segments.
  
  msgseg 最大为 32k, 其他参数最大值都是 2 billion.
  
  63 Q: license server 如何启动?
  A: run /opt/SUNWste/bin/lmgrd.ste 可启动 license server
  
  64 Q: 在Solaris8下,如何修改一个目录的大小。安装时系统自动的设置
  /export/home目录空间很大,而其他目录空间很小。
  A: 1, 备份 /export/home,
  2. umount /export/home,
  3. 用 format 修改盘片大小,
  4. 备份要增大的目录,
  5, umount
  5. 用 format 增加盘片大小.
  6. 重新mount.
  
  65 Q: 请问用什么命令可以确定是否有磁带设备?多谢。
  A: 看一下 /dev/rmt 如果是空就没有.
  .
  66 Q: 在solaris 8下安装Forte Developer 6 到达:
  installing Forte C++ Entep Ed 6/SPARC
  installing Forte Developer 6
  时死掉应如何解决
  A: 在安装之前,应当清除所有以前安装时添加进系统的package.
  另外,不用缺省目录 /opt , 换一个新建的空目录也有效.
  
  67 Q: Forte c/c++版本可以用在solaris2.6操作系统上吗?
  A: 可以
  
  68 Q: 在输入用户名后启动很慢,有时甚至进不了,停在启动画面,不知如何解决(我用
  过fsck,也不好使,有没有更好的办法)!能否重装操作系统,而不影响现有的已装
  软件.谢谢!
  A: 一般说来, 这与家目录下配置文件有关.新建一个用户试一试.
  
  69 Q: 现在远程维护的解决方式是通过Modem拨号,建立连接,通过我们自己编写的IP
  代理转发程序,完成对传输设备远程维护。在PC机上的拨号网络,拨号程序运
  行都比较正常,对连接速度,稳定性方面目前使用还算可以。但是在设置Sun工
  作站的拨号程序的时候,我常常会遇到一些“奇怪”的问题, 比如Modem不握
  手,没有拨号音等。现在我们的拨号设置是自己编写的脚本文件方式。可能对
  各种情况考虑的不全面,因此请问是否有相应的软件包(程序)可以帮助我们
  机型拨号设置,保证拨号成功?
  A. 连接失败通常与配置参数有关,由于硬件种类繁多,很难保证一个程序在所有的
  硬件环境下都能顺利配置成功.我们只能针对具体情况进行分析.但我们发现,改
  变串口的流倥方式经常有助于问题的解决.Sun solstice 中有一个拨号软件据
  说比aspppd 更容易使用,我没有用过,或许您愿意试一试?
  
  70 Q: 我这多线程程序,我用ftime得到函数的调用时间,发现在一个线程中,增加一
  个printf后,调用时间为5毫秒。去掉这个printf,调用时间却为15毫秒。增加
  了一个printf为什么后使该函数的执行更快了?
  A: ftime 得到系统当前时间,但具体到线程的执行时间,是和系统的调度情况有关
  的, 请用调试工具来检查准确的执行时间.

  71 Q: 我们的技术支持人员遇到一个问题,向您请教:在安装时没有选择安装网络,
  现在需要安装网络,怎样增加一个interface。目前只有lo0,没有hme0。
  A: 在 /etc 下 touch 一个空文件 hostname.hme0, 用 boot -r 命令重起.
  
  72 Q: 在Sun Ultra 5工作站(安装SOLARIS 2.6),每次开机时,都出现以下问题:
  Restoring the system.Please Wait ... cpr_read_bitmap:Can't
  cpr_alloc bitmap0
  Can't read statefile bitmap,please reboot
  Program terminated
  {0} OK
  
  每次开机都需要boot才能进入。
  请问如何解决?
  A: 首先, 在 ok 状态下检查 boot-file 参数:
  printenv boot-file
  如果是 boot-file = -F cprboot 之类, 用如下命令:
  set-default boot-file
  再检查一下.应该是空才对.
  如果不是, 则需要设置:
  setenv boot-file -F ufsboot
  重新启动.
  
  73 Q: 经实验,两台Sun工作站之间通过网络发Syslog日志,也不支持汉字,该问题可
  能是syslogd的问题。
  A: 估计是由于syslogd在望上传输时丢掉了字节的最高位.
  
  74 Q: 如果需要ID:105181-15的patch,请问ID:105181-19可以代替吗?ID毫最好两位
  是不是patch的版本号,如果是版本号有没有前项兼容性?
  A: 可以, 后两位表示同一patch的版本号.
  
  75 Q: 以下代码在Forte C++下导致编译错误,请问如何解决?
  
  template<typename p1, typename p2>
  void testimpl(int i1, int i2, p1* n1 = 0, p2* n2 = 0)
  {
  p1* pReq = new p1;
  p2* pRsp = new p2;
  }
  void test()
  {
  int i = 0;
  int j = 0;
  testimpl<int, int>( i, j);
  }
  A: 请下载新的patch更新Forte C++
  
  76 Q: 请问:如何设置工作站的最大客户端数?现有一台测试用机,使用人较多,经
  常出现“无法得到pty”的提示。
  A: 在/etc/system ,可以用参数 maxusers 设置,最大2048,如果这里没有设置,默
  认为与系统内存容量相同(以M记,最大为1024),
  
  77 Q: I install visibroker into my solaris 2.7.
  When I execute a example program,it cannot execute and tell me:
  ld.so.1: Server: 致命的: liborb64r_so:打开失败:无此文件或目录
  被杀掉
  
  (Server is my program)
  Can you tell me how to settle it?
  
  A: you should set this envirnment variable: LD_LIBRARY_PATH
  
  78 Q: 贵处有无磁带机的使用手册或指导说明?
  A: answerbook 中系统管理员手册 I 有使用说明.
  answerbook 的文档不是html格式,需要一个服务器程序转换, 察看本机http进
  程看有没有下面这个:
  
  # ps -ef |grep http
  # /usr/lib/ab2/dweb/sunos5/bin/dwhttpd /usr/lib/ab2/dweb/data
  
  79 Q: 在 solaris 2.5.1 上 把 系统时间 改为 2004 年,无问题,然后把时间再改回
  来后,整个UNIX 死机,请SUN工程师答复. 具体操作为: 将操作系统时间设为
  2004年3月1日,然后再将操作系统时间改回当前的时间,则系统的cpu资源被两个
  进程dtwm,dtfile严重占用,X Window反应非常缓慢,在低配置的系统上导致系统
  不可操作.同时显示 "Warning:selected failed;error code 22.
  A: 在窗口环境下或多用户模式下来回切换时间,会导致不可预测的结果,所以,
  如果当真要执行此类操作,请在单用户模式下进行.
  
  80 Q: shell 文件中如何从文件中读参数?
  A: cat yourfile`
  
  81 Q: 如何分析网络负载,在SUN上面有没有相应的工具
  A: netstat -i
  
  82 Q: 请问目前SUN E250,E450,E3500支持的CPU主频和缓存分别是多少?您能将这
  些配置列表发给我吗?
  A: docs.sun.com 有 硬件的answerbook ,可以参考一下。
  现在支持的CPU到400M, 480M 产品已有.but still have not released
  
  83 Q: mt -f /dev/rmt/0 有个参数:retension中文为“拉紧”,在磁带操作中具体
  做什么?
  A: the man page of this command said it clearly:
  Rewind the cartridge tape completely, then wind it
  forward to the end of the reel and back to beginning-
  of-tape to smooth out tape tension.
  so ,it is not 拉紧, but 放松 instead.
  
  84 Q: 具体问题是:有一个进程不停的向该文件增加内容,同时另外一个进程建立了
  与该文件的管道,从该文件中读取一行记录进行处理。然后删除该行记录。因
  此需要保持该文件i-node不能改变,否则,向该文件写的进程就不能将信息写
  入该文件了。有没有解决方法,请指教。
  A: I don't know if I have understood you :
  If you want save this file for later use, you should not remove its'
  content,if you don't need these content, you don't need this file as
  well, you can use pipe only, or other interprocess communication
  methods.
  
  85 Q: 我用dos2unix转换一文件,却不成功,提示信息如下:(我用PC机通过rexec远
  程登陆的)
  $dos2unix filename1 filename2
  could not open /dev/kbd to get keyboard type US keyboard assumed
  could not get keyboard tyep US keyboard assumed
  
  请问此问题是怎麽回事?如何解决?
  A: 权限问题, 检查一下 /dev/kbd 读写权限

图片内容