星期一, 1 二月 2010

postgresql-8.3.3-1-binaries-no-installer.zip 的安装问题

这个是熟练的用户自己手工安装用的,以前安装没成功,今天仔细看了一下说明。发现如下的说明:

Microsoft Visual C++ 8.0 runtimes to be installed on your system. A
seperate installer can be downloaded from:

http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&DisplayLang=en

原来需要 VC 8.0运行时库,下载安装之后,就可以初始化PostgreSQL数据库了,如果你没装initdb命令会出错。

Posted by xiaojf at 8:07 下午 in 未分类

Solaris 10下启用sshd服务

首先查看ssh服务有没有启动。

bash-3.00# svcs -a | grep ssh
disabled       20:51:27 svc:/network/ssh:default
可以看到ssh 服务没有启动。

可以使用如下命令,启动和停止sshd。

启动 sshd

svcadm enable svc:/network/ssh:default

停止 sshd

svcadm disable svc:/network/ssh:default

sshd的配置文件在/etc/ssh下。

默认的配置文件是不允许root账号登录的,可以编辑sshd_config文件。把 PermitRootLogin no 改成 PermitRootLogin yes即可。

windows下可以使用putty登录到Solaris上。

Posted by xiaojf at 8:06 下午 in 未分类

Roller4.0 不能上传大于2MB的文件

  传了一个6MB的歌曲,发现不能上传,虽然在Roller的管理后台设置了可以上传最大10MB的文件。提示如下:

Roller the request was rejected because its size (...) exceeds the configured maximum (2097152)

  解决办法,修改 struts.properties文件,添加:

struts.multipart.maxSize=10485760

 如果有了就是修改了,呵呵,这个变量的单位是字节!保存,重起Tomcat,问题解决。

Posted by xiaojf at 8:03 下午 in 未分类

ulimit 使用简介

ulimit用于shell启动进程所占用的资源,是shell内建命令
语法格式:
ulimit [-acdfHlmnpsStvw] [size]
参数介绍:
-H 设置硬件资源限。
-S 设置软件资源限制。
-a 显示当前所有的资源限制。
-c size:设置core文件的最大值。单位:blocks
-d size:设置数据段的最大值。单位:kbytes
-f size:设置创建文件的最大值。单位:blocks
-l size:设置在内存中锁定进程的最大值。单位:kbytes
-m size:设置可以使用的常驻内存的最大值。单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值。单位:n
-p size:设置管道缓冲区的最大值。单位:kbytes
-s size:设置堆栈的最大值。单位:kbytes
-t size:设置CPU使用时间的最大上限。单位:seconds
-v size:设置虚拟内存的最大值。单位:kbytes

Posted by xiaojf at 8:02 下午 in 未分类

Tomcat 配置SSI来支持shtml

Tomcat5.5

1.将 Tomcat5.5\server\lib\servlets-ssi.renametojar文件重命名为servlets-ssi.jar。

2. 修改conf\web.xml文件,将对SSI支持的注释去掉。

<!--
    <servlet>
        <servlet-name>ssi</servlet-name>
        <servlet-class>
          org.apache.catalina.ssi.SSIServlet
        </servlet-class>
        <init-param>
          <param-name>buffered</param-name>
          <param-value>1</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>expires</param-name>
          <param-value>666</param-value>
        </init-param>
        <init-param>
          <param-name>isVirtualWebappRelative</param-name>
          <param-value>0</param-value>
        </init-param>
        <load-on-startup>4</load-on-startup>
    </servlet>
-->

<!--
    <servlet-mapping>
        <servlet-name>ssi</servlet-name>
        <url-pattern>*.shtml</url-pattern>
    </servlet-mapping>
-->

<!--
    <filter>
        <filter-name>ssi</filter-name>
        <filter-class>
          org.apache.catalina.ssi.SSIFilter
        </filter-class>
        <init-param>
          <param-name>contentType</param-name>
          <param-value>text/x-server-parsed-html(;.*)?</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>expires</param-name>
          <param-value>666</param-value>
        </init-param>
        <init-param>
          <param-name>isVirtualWebappRelative</param-name>
          <param-value>0</param-value>
        </init-param>
    </filter>
-->

 

<!--
    <filter-mapping>
        <filter-name>ssi</filter-name>
        <url-pattern>*.shtml</url-pattern>
    </filter-mapping>
-->

<!--

    <mime-mapping>
        <extension>shtml</extension>
        <mime-type>text/x-server-parsed-html</mime-type>
    </mime-mapping>

-->

找到上面的内容,去掉相应的注释即可。

Tomcat6直接修改conf/web.xml中的相应内容即可。

Posted by xiaojf at 8:00 下午 in 未分类

Solaris 下FTP限制用户在自己的主目录

Solaris 10 X86自带的FTP是改进的WU-FTPD。例子配置文件如下:

# ident    "@(#)ftpaccess    1.2    03/05/14 SMI"
#
# FTP server configuration file, see ftpaccess(4).
#

class        realusers    real        *
class        guestusers    guest        *
class        anonusers    anonymous    *

loginfails    3
passwd-check    trivial        warn
private        no
shutdown    /etc/ftpd/shutdown.msg
# email        user@hostname
# guestuser    username
# rhostlookup    no

keepalive    yes
recvbuf        65536        real,guest,anonymous
sendbuf        65536        real,guest,anonymous
# flush-wait    no        anonymous
# passive    ports        0.0.0.0/0    32768    65535
# timeout    data        600
# timeout    idle        300

banner        /etc/ftpd/banner.msg
greeting    brief
message        /etc/ftpd/welcome.msg    login
message        .message        cwd=*
readme        README*            login
readme        README*            cwd=*
# quota-info    *

chmod        no        anonymous
delete        no        anonymous
overwrite    no        anonymous
rename        no        anonymous
umask        no        anonymous

compress    yes        realusers guestusers anonusers
tar        yes        realusers guestusers anonusers

path-filter    guest,anonymous    /etc/ftpd/filename.msg    ^[[:alnum:]._-]*$ ^[.-]

noretrieve    relative    class=anonusers        /
allow-retrieve    relative    class=anonusers        /pub

upload        class=anonusers    *    *      no  nodirs
# upload    class=anonusers    *    /incoming yes ftpadm ftpadm 0440 nodirs

# log        commands    real,guest,anonymous
# log        security    real,guest,anonymous
# log        transfers    real,guest,anonymous    inbound,outbound
# xferlog    format    %T %Xt %R %Xn %XP %Xy %Xf %Xd %Xm %U ftp %Xa %u %Xc %Xs %Xr

# limit-time    anonymous    30
# limit        anonusers    10    Wk0730-1800      /etc/ftpd/toomany.msg
# limit        anonusers    50    SaSu|Any1800-0730 /etc/ftpd/toomany.msg
restricted-uid    *
defumask    077    realusers    guestusers    anonusers

最后面的 restricted-uid    * 会把FTP用户目录限制在自己的主目录。

如果你安装的是VSFTPD,例子文件如下:

listen=YES
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
#xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to NetJSP FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#

chroot_local_user=YES

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES

userlist_enable=yes
userlist_deny=yes
userlist_file=/etc/vsftpd.ftpusers

pasv_enable=yes
pasv_min_port=10001
pasv_max_port=10500

 

其中chroot_local_user=YES会把FTP用户限制在其主目录。

Posted by xiaojf at 7:59 下午 in 未分类

Solaris 10下PostgreSQL的安装

  Solaris 10上已经安装有PostgreSQL,只是还没有初始化,现在让我们看看如何将其启动起来。PostgreSQL服务是使用SMF管理的,让我们看看 PostgreSQL的当前状态:

bash-3.00# svcs -a | grep sql
disabled       16:38:04 svc:/application/database/postgresql:version_81
disabled       19:33:19 svc:/application/database/postgresql:version_82

  我们现在启动PostgreSQL8.2,输入如下命令:

bash-3.00#svcadm enable svc:/application/database/postgresql:version_82

  在查看一下当前的状态:

bash-3.00# svcs -a | grep sql
disabled       16:38:04 svc:/application/database/postgresql:version_81
maintenance       19:33:19 svc:/application/database/postgresql:version_82

  PostgreSQL8.2处于维护状态(maintenance),没有启动起来。让我们来看看没有启动的原因:

bash-3.00#svcs -x

svc:/application/print/server:default (LP print server)
 状态:disabled 自 2008年01月21日 星期一 16时37分59秒 开始
原因:管理员已将其禁用。
   参见:http://sun.com/msg/SMF-8000-05
   参见:lpsched(1M)
影响:2 相关服务未运行。  (使用 -v 列出)。

svc:/application/database/postgresql:version_82 (PostgreSQL RDBMS)
 状态:maintenance 自 2008年01月21日 星期一 16时38分32秒 开始
原因:启动方法 退出,代码为 $SMF_EXIT_ERR_CONFIG。
   参见:http://sun.com/msg/SMF-8000-KS
   参见:postgres_82(1)
   参见:/var/svc/log/application-database-postgresql:version_82.log
影响:此项服务未运行。

 

  提示我们查看 /var/svc/log/application-database-postgresql:version_82.log文件,看看这个文件中内容:

 bash-3.00#cat  /var/svc/log/application-database-postgresql:version_82.log

[ Nov 28 15:58:35 Disabled. ]
[ Nov 28 15:58:36 Rereading configuration. ]
[ 11月 28 16:39:03 Rereading configuration. ]
[  1月 21 16:26:30 Enabled. ]
[  1月 21 16:26:30 Executing start method ("/lib/svc/method/postgresql start") ]
postgresql/data directory /var/postgres/8.2/data is not a valid PostgreSQL data directory
postgresql/data directory /var/postgres/8.2/data may not have been initialized
To initialize the postgresql/data directory /var/postgres/8.2/data run 'initdb /var/postgres/8.2/data'
[  1月 21 16:26:30 Method "start" exited with status 96 ]
[  1月 21 16:38:31 Executing start method ("/lib/svc/method/postgresql start") ]
postgresql/data directory /var/postgres/8.2/data is not a valid PostgreSQL data directory
postgresql/data directory /var/postgres/8.2/data may not have been initialized
To initialize the postgresql/data directory /var/postgres/8.2/data run 'initdb /var/postgres/8.2/data'
[  1月 21 16:38:32 Method "start" exited with status 96 ]
  

 

  这回知道原因了,我们没有初始化数据库。PostgreSQL安装在/usr/postgres/8.2/下,我们进入这个目录,我们会看到 initdb这个用来初始化数据库的可执行文件,这个命令必须使用postgres这个账号来运行,让我们切换到postgres账号,来执行这个命令:

bash-3.00#su postgres

$ initdb /var/postgres/8.2/data

  如果不出什么意外,安装完毕后我们就可以使用 svcadm enable svc:/application/database/postgresql:version_82 命令来启动PostgreSQL8.2。启动之后我们可以使用默认的数据库帐号postgres登录,默认的密码是空的。

   PostgreSQL对安全限制的很严,如果你要从其它计算机登录,必须修改配置文件。 配置文件在/var/postgres/8.2/data目录下,修改postgres.conf,添加listen_addresses = '*',表示允许从所有计算机登录,还要修改 pg_hba.conf,添加一行host    all         all         192.168.1.0/24        trust ,注意这个ip要是你所在机器的网络范围,由于我对PostgreSQL不是很熟,具体有关PostgreSQL的配置自己研究吧,希望对你有所帮助!

  补充:下面我机器上的用于定义PostgreSQL的SMF服务的postgresql.xml文件,在/var/svc/manifest /application/database目录下。内容如下:

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
 Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 Use is subject to license terms.

 ident    "@(#)postgresql.xml    1.1    07/01/31 SMI"

        NOTE:  This service manifest is not editable; its contents will
        be overwritten by package or patch operations, including
        operating system upgrade.  Make customizations in a different
        file.
-->

<service_bundle type='manifest' name='postgresql'>

<service
        name='application/database/postgresql'
        type='service'
        version='1'>

    <!--
       Wait for network interfaces to be initialized.
    -->
        <dependency
                name='network'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/milestone/network:default' />
        </dependency>

    <!--
       Wait for all local filesystems to be mounted.
    -->
        <dependency
                name='filesystem-local'
                grouping='require_all'
                restart_on='none'
                type='service'>
                <service_fmri value='svc:/system/filesystem/local:default' />
        </dependency>

        <exec_method
                type='method'
                name='start'
                exec='/lib/svc/method/postgresql start'
                timeout_seconds='60' />

        <exec_method
                type='method'
                name='stop'
                exec='/lib/svc/method/postgresql stop'
                timeout_seconds='60' />

        <exec_method
                type='method'
                name='refresh'
                exec='/lib/svc/method/postgresql refresh'
                timeout_seconds='60' />

        <!--
          Both action_authorization and value_authorization are needed
          to allow the framework general/enabled property to be changed
          when performing action (enable, disable, etc) on the service.
        -->
        <property_group name='general' type='framework'>
        <propval name='value_authorization' type='astring'
            value='solaris.smf.value.postgres' />
        <propval name='action_authorization' type='astring'
            value='solaris.smf.manage.postgres' />
        </property_group>

        <!--
          We define two instances of PostgreSQL as examples (8.1 & 8.2).
        -->

        <instance name='version_81' enabled='false'>

            <method_context>
                    <method_credential user='postgres' group='postgres' />
            </method_context>

        <!--
           Make sure the data configurable property points to the
           appropriate database directory.
        -->
            <property_group name='postgresql' type='application'>
                    <propval name='bin' type='astring'
                           value='/usr/bin' />
                    <propval name='data' type='astring'
                           value='/var/lib/pgsql/data' />
                    <propval name='log' type='astring'
               value='server.log' />
            <propval name='value_authorization' type='astring'
               value='solaris.smf.value.postgres' />
            </property_group>

        </instance>

        <instance name='version_82' enabled='false'>

            <method_context>
                    <method_credential user='postgres' group='postgres' />
            </method_context>

        <!--
           Make sure the data configurable property points to the
           appropriate database directory and port number in
           postgresql.conf is different than the first instance.
        -->
            <property_group name='postgresql' type='application'>
                    <propval name='bin' type='astring'
                           value='/usr/postgres/8.2/bin' />
                    <propval name='data' type='astring'
                           value='/var/postgres/8.2/data' />
                    <propval name='log' type='astring'
               value='server.log' />
            <propval name='value_authorization' type='astring'
               value='solaris.smf.value.postgres' />
            </property_group>

        </instance>

        <stability value='Evolving' />

        <template>
                <common_name>
                        <loctext xml:lang='C'>
                                PostgreSQL RDBMS
                        </loctext>
                </common_name>
                <documentation>
                        <manpage title='postgres_82' section='1' />
                        <doc_link name='postgresql.org'
                                uri='http://postgresql.org' />
                </documentation>
        </template>

</service>

</service_bundle>

Posted by xiaojf at 7:58 下午 in 未分类

Solaris 更换自己使用的shell

usermod -s shell 帐号

例如:

usermod -s /bin/csh root

Posted by xiaojf at 7:57 下午 in 未分类

Solaris touch /reconfigure 检测新安装的软件


touch /reconfigure

  这个命令就是创建一个空的reconfigure文件,solaris在重新启动否发现这个文件,会重新检测硬件。

Posted by xiaojf at 7:55 下午 in 未分类

Solaris 关机命令shutdown

/usr/sbin/shutdown [ -y ] [ -g<grace> ] [ -i<initstate> ] [ message ]

-y 预先回答确认问题,不需要用户干涉命令就可运行

-g 关机之前的停留秒数,默认是60

-i 状态信号 0 1 s 5 6

message 是发给登录用户的消息

例如 /usr/sbin/shutdown -y -g30 -i0 "System Power Off"

Posted by xiaojf at 7:55 下午 in 未分类

Solaris 10中一些默认内置帐号的用途

安装了Solaris 10之后,系统里就有了一些内置帐号,都有什么用途呢?下面的内容做个参考。

登录帐户 GID 用法
root 0 几乎没有任何限制。可覆盖所有其他登录、保护和权限。root 帐户具有访问整个系统的权限。应该非常谨慎地保护root 登录口令。root 帐户(即超级用户)有权使用大多数Solaris 命令。
daemon 1 控制后台处理。
bin 2 有权使用部分Solaris 命令。
sys 3 有权访问许多系统文件。
adm 4 有权访问某些管理文件。
lp 71 有权访问打印机的对象数据文件和假脱机数据文件。
uucp 5 有权访问UUCP(UNIX 对UNIX 复制程序)的对象数据文件和假脱机数据文件。
nuucp 9 供远程系统用于登录到系统并启动文件传输。

Posted by xiaojf at 7:54 下午 in 未分类

Solaris 10 8/07容器的增强

Solaris 10 8/07容器的增强
  ●Solaris 10 8/07增强了容器的资源管理能力。一些是新的资源管理能力,一些是用户接口的增强。首先我们谈谈三个新的"RM"功能。
  早期的 Solaris 10包括了RCP(Resource Capping Daemon)。这个工具能让你设置一个应用程序、用户或者组可用内存的软限制。当超出这个限制,实体占用的物理内存会被page out(就是影射到硬盘的缓存上),直到其占用的内存低于这个软限制。虽然你可以在区域上使用这个工具,它是相当麻烦的,需要你和容器的管理员协作。也就是说,容器的root帐号可以改变这个软限制。这在某些潜在的恶意环境下就存在着很高的风险。Solaris 10 8/07可以让系统管理员通过rcapd在容器上设置一个硬限制,这样就没必要和容器的管理员协作了。而且,设置也是相当的简单,语法如下:
global# zonecfg -z myzone
zonecfg:myzone> add capped-memory
zonecfg:myzone:capped-memory> set physical=500m
zonecfg:myzone:capped-memory> end
zonecfg:myzone> exit
  下一次容器启动后,这个容器就只能使用不超过500MB的物理内存。在容器运行的时候,这个限制也可以更改:
global# rcapadm -z myzone -m 600m
  虚拟内存(例如swap空间)也可以限制,如下:
global# zonecfg -z myzone
zonecfg:myzone> add capped-memory
zonecfg:myzone:capped-memory> set swap=1g
zonecfg:myzone:capped-memory> end
zonecfg:myzone> exit
  这个限制也可以在容器运行的时候进行更改:
global# prctl -n zone.max-swap -v 2g -t privileged   -r -e deny -i zone myzone
  和物理内存限制一样,如果你想修改正在运行的容器或者下次启动的容器的阀值,你必须使用zonecfg、prctl或者rcapadm工具。
  第三个新的内存限制就是锁定内存(locked memory)。这个容器占用的物理内存会被锁住,防止其被page out(也就是防止其内存被转储到磁盘缓存中)。下面是一个例子:
global# zonecfg -z myzone
zonecfg:myzone> add capped-memory
zonecfg:myzone:capped-memory> set locked=100m
zonecfg:myzone:capped-memory> end
zonecfg:myzone> exit
  ●简化的资源管理功能
○Dedicated CPUs
  很多已经存在的资源管理功能有了新的简化的用户接口。例如,"dedicated-cpus"就是利用了已经存在的Dynamic Resource Pools功能。但是命令更加简化:
global# zonecfg -z myzone
zonecfg:myzone> add dedicated-cpu
zonecfg:myzone:dedicated-cpu> set ncpus=1-3
zonecfg:myzone:dedicated-cpu> end
zonecfg:myzone> exit
  使用了上述命令,容器重启后,Solaris:
1.从默认池移出一个CPU。
2.指派这个CPU到一个最近创建的临时池中。
3.关联容器到那个池等等,仅安排那个容器的进程到那个CPU上。
  更进一步,如果那个CPU的负载超过了默认的阀值,将会从另一个池中移出来一个CPU,最大会使用3个CPU。最后,当容器停止的时候,临时池被销毁,它的CPU被放回默认的池中。
  另外,三个已经存在的资源控制选项也可以应用到容器上:
global# zonecfg -z myzone
zonecfg:myzone> set max-shm-memory=100m
zonecfg:myzone> set max-shm-ids=100
zonecfg:myzone> set max-msg-ids=100
zonecfg:myzone> set max-sem-ids=100
zonecfg:myzone> exit

○Fair Share Scheduler(公平共享调度器)
  另一个通用的方法是限制CPU被一个负载过分占用,一个相对的数值指定到区域,保证了区域的CPU份额。在过去,设置需要通过好几步。现在只需要两步。系统必须使用FSS作为默认的调度器。这个命令告诉系统下次启动后使用FSS作为默认的调度器。
global# dispadmin -d FSS
  同时,必须给容器指定一定数量的共享:
global# zonecfg -z myzone
zonecfg:myzone> set cpu-shares=100
zonecfg:myzone> exit
○Shared Memory Accounting(共享内存统计)
  这个功能不是减少了命令数量,但是减少了资源监视的复杂度。在Solaris 10 8/07之前,共享内存页的统计不是很准确。如果在一个容器中那个的两个进程共享一些内存,每个进程的共享内存都会被统计一次,所以显示的会比实际的高。这个在Solaris 10 8/07中得到了改变。现在,每容器使用pestat和类似工具,共享内存页对于每个容器仅计算一次。
  ●全局区域资源管理
  Solaris 10 8/07 现在可以控制全局区域及其进程的资源。这个控制包括:
    ◆ pool
    ◆ cpu-shares
    ◆ capped-memory: physical, swap, locked
    ◆ dedicated-cpu: ncpus, importance
例如:
global# zonecfg -z global
zonecfg:myzone> set cpu-shares=100
zonecfg:myzone> set scheduling-class=FSS
zonecfg:myzone> exit
  使用这些设置要注意。例如,指派一个100MB的物理内存限制到全局区域,会导致问题发生。
  ●新的启动参数
参数或者选项  意义
-s    启动一个单用户的里程碑。
-m <milestone>    启动指定的里程碑。
-i </path/to/init>    以'init'启动程序。这仅在标记区域中可用。
允许的语法包括:
global# zoneadm -z myzone boot -- -s
global# zoneadm -z yourzone reboot -- -i /sbin/myinit
ozone# reboot -- -m verbose
另外,这些启动参数可以通过zonecfg保存,用于下次启动用:
global# zonecfg -z myzone
zonecfg:myzone> set bootargs="-m verbose"
zonecfg:myzone> exit
  ●可配置的特权
  关于已经存在的三个DTrace特权、dtrace_proc和dtrace_user现在可以被指派给容器。这允许在一个容器内试用DTrace。当然,在一个容器中的root用户仍然不能查看和改变内核数据,但是DTrace可以在一个容器中被用来查看系统调用信息和用户进程的原数据。
  另外,proc_priocntl 可以被添加到容器中,允许其root用户改变它的进程的调度类。
  ●IP实例
  这个新的功能允许一个容器独占一个或者多个网络接口,即使全局区域也不能在其独占的网络接口存取数据。这允许一个容器控制其自己的网络配置,包括路由、IP Filter、使用DHCP客户端等等。语法例子如下:
global# zonecfg -z myzone
zonecfg:myzone> set ip-type=exclusive
zonecfg:myzone> add net
zonecfg:myzone:net> set physical=bge1
zonecfg:myzone:net> end
zonecfg:myzone> exit

Posted by xiaojf at 7:53 下午 in 未分类

Solaris 10 下修改帐号密码的加密方式

Solaris 10默认使用传统的unix密码加密方式,这个很脆弱,无论你密码设置的多长,都是前8位有效。例如你设置的密码是 0123456789,那么后面的89两个字母不起任何作用。怎么办呢,修改密码的加密方式吧,改成md5。这需要编辑/etc/security /policy.conf文件

把 #CRYPT_ALGORITHMS_DEPRECATE=__unix__  这个注释去掉,CRYPT_DEFAULT修改其为md5。如下:

CRYPT_ALGORITHMS_DEPRECATE=__unix__
CRYPT_DEFAULT=md5
修改之后不需要重启系统,但是密码要重新设置一边即可。

Posted by xiaojf at 7:52 下午 in 未分类

apache2+Tomcat5.5+mod_jk1.2 时URL中无法传递中文的问题

  解决的办法是在 JkOptions中加 +ForwardURICompatUnparsed ,就可以了。意思应该是apache不对url进行解析,直接传给Tomcat。看看下面mod_jk文档的解释。

   ForwardURICompatUnparsed, 传递URI而不解析。它是规范兼容并安全的。它总是传递原始的URI,因此mod_rewrite来重写URI不能工作。

  JkOptions     +ForwardURICompatUnparsed

  ForwardURICompat, 传递的URI被Apache httpd解码.这个缺少规范兼容,如果你使用前缀JkMount它是不安全的。但是它允许使用mod_rewrite对URI重写。

  JkOptions     +ForwardURICompat
 

Posted by xiaojf at 7:51 下午 in 未分类

UNIX 下通过umask来设置新文件的默认权限

在unix中,新文件的默认权限是通过umask环境变量来控制的。umask设置的权限位是被屏蔽掉的权限位,就是被限制的权限。例如 umask是 222,那么所有者、组、其它就都没修改的权限了。 0表示不限制,在umask中,0对目录和文件的作用是不同的。对于目录就是可读取、修改和运行,但是对文件就是只有读取和修改。这是因为,大部分文件默认就不需要运行的权限,而且默认赋予文件运行权限是很危险的。所以要授予文件运行权限必须使用chmod来进行明确的授权!

Posted by xiaojf at 7:49 下午 in 未分类

MySQL 表修复

重启服务器后程序抛出如下错误:

--- Cause: java.sql.SQLException: Incorrect key file for table './nj040/viewpagetime.MYI'; try to repair it
看来表造成了损坏,运行如下命令:

repair table viewpagetime;
问题得到解决。

Posted by xiaojf at 7:49 下午 in 未分类

Solaris 10 下编译PHP-5.2.5遇到的问题

  在Solaris 10 8/07下安装了Apache2.2.8、MySQL5.0.51和PHP5.2.5。需要的相应扩展包是在 www.sunfreeware.com下载的。MySQL5.0.51是从MySQL网站下载的二进制包tar.gz,直接配置安装的,apache2.2.8和php5.2.5编译安装。

  Apache的编译参数:

./configure --prefix=/usr/apache2.2 --with-mpm=worker --enable-so --enable-mods-shared=all --enable-modules=all --enable-ssl=shared --enable-ssl --with-ssl=/usr/local/ssl --with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/ --enable-proxy --enable-proxy-connect --enable-proxy-ftp  --enable-proxy-http  --enable-proxy-ajp --enable-proxy-balancer

  因为要使用tomcat,所以在编译apache之前,你要编译 apr和apr-util,apache网上有说明。

  编译php要加入libmcrypt扩展,这个也得自己下载源码编译。否则使用phpmyadmin会出现"无法载入 mcrypt 扩展,<br />请检查 PHP 配置"的提示。编译参数如下:

./configure --prefix=/usr/local/libmcrypt --disable-posix-threads --enable-dynamic-loading

  php5.2.5的编译参数:

./configure --prefix=/usr/local/php --with-apxs2=/usr/apache2.2/bin/apxs --with-mysql=/usr/mysql/mysql5.0.51 --with-curl --enable-ftp --with-libxml-dir=/usr/local  --enable-soap --with-xsl  --with-zlib-dir=/usr/local --with-freetype-dir=/usr/local  --enable-mbstring --enable-sockets --with-ldap --enable-exif --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-mcrypt=/usr/local/libmcrypt

  好像遇到了 ***c++找不到的提示,需要设置LD_LIBRARY_PATH。

Posted by xiaojf at 7:49 下午 in 未分类

Solaris 10下安装apache2.2.8和PHP5.2.6的问题

首先已经从 www.sunfreeware.com 下载了需要的扩展包,我只想编译apache和php。

编译apache,使用如下配置参数:

./configure --prefix=/usr/apache2.2 --with-mpm=worker --enable-so --enable-mods-shared=all --enable-modules=all --enable-ssl=shared --enable-ssl --with-ssl=/usr/local/ssl --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --enable-proxy --enable-proxy-connect --enable-proxy-ftp  --enable-proxy-http  --enable-proxy-ajp --enable-proxy-balancer

顺利通过。

编译PHP使用如下参数:

./configure --prefix=/usr/local/php \
--with-apxs2=/usr/apache2.2/bin/apxs \
--with-mysql=/usr/mysql/mysql5 \
--with-curl=/usr/local \
--enable-ftp \
--with-libxml-dir=/usr/local  \
--enable-soap \
--with-xsl=/usr/local  \
--with-zlib-dir=/usr/local \
--with-freetype-dir=/usr/local  \
--enable-mbstring \
--enable-sockets \
--with-ldap=/usr/local \
--enable-exif \
--with-gd=/usr/local \
--with-jpeg-dir=/usr/local \
--with-png-dir=/usr/local \
--with-mcrypt=/usr/local/libmcrypt

注意,libmcrypt也是编译的,适用如下参数:

./configure --prefix=/usr/local/libmcrypt --disable-posix-threads --enable-dynamic-loading

编译时,你需要设置变量 LD_LIBRARY_PATH。

LD_LIBRARY_PATH=/usr/local/lib

export LD_LIBRARY_PATH

在编译php时,最后出现如下错误:

libtool: link: warning: library `/usr/local/lib/libfreetype.la' was moved.
libtool: link: warning: library `/usr/local/lib/libfreetype.la' was moved.
ld: fatal: library -lnet: not found
ld: fatal: File processing errors. No output written to sapi/cli/php
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1

研究了半天发现,只有使用 --with-ldap时出现这个问题。

在Google搜索了半天,无具体方法,但是找到了一点提示,哈哈,发现找不到libnet.so,搜索了一下,发现其是java下的库。

通过设置  LD_LIBRARY_PATH=/usr/jdk/instances/jdk1.5.0/jre/lib/i386,再编译问题得到解决!

Posted by xiaojf at 7:48 下午 in 未分类

SQL Server 2005中xp_cmdshell的启用

SQL Server 2005中,xp_cmdshell默认情况下被禁用了,可以使用如下命令来启用。

USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure  'show advanced options', 0

这个存储过程现在没法删除了,如果你不想用了,可以把xplog70.dll的权限禁止掉吧,有了问题再打开。

Posted by xiaojf at 7:46 下午 in 未分类

Solaris 10 中禁用和启用桌面

使用 /usr/dt/bin/dtconfig 命令,语法如下:

用法: 需要一个实参
 
 CDE 配置公用程序
 
  /usr/dt/bin/dtconfig -d     (禁用自动启动)
  /usr/dt/bin/dtconfig -e     (允许自动启动)
  /usr/dt/bin/dtconfig -kill  (终止 dtlogin)
  /usr/dt/bin/dtconfig -reset (复位 dtlogin)
  /usr/dt/bin/dtconfig -p     (打印机动作更新)
 /usr/dt/bin/dtconfig -inetd    (inetd.conf /usr/dt 守护程序)
 /usr/dt/bin/dtconfig -inetd.ow (inetd.conf /usr/openwin 守护程序)

Posted by xiaojf at 7:46 下午 in 未分类

Solaris 10下的关机命令

命令:/usr/sbin/shutdown  [-y] [-g 等待时间] [-i 状态值] [消息]

例如:

 shutdown -y -g 60 -i 5 "要关机了,保存好文件!"

Posted by xiaojf at 7:45 下午 in 未分类

Solaris 10下使用ntpdate命令将系统时间和时间服务器同步

Solaris 10 系统长时间运行后,其时间多少和世界的标准时间有些偏差,如何正确的设置时间呢?当然如果你表很准确可以时间date命令进行设置,但是这个也不太方便,在你设置的时候,时间在流失。可以使用ntpdate命令方便地将系统和时间上的时间服务器同步,命令如下:

ntpdate  time.windows.com

后面的 time.windows.com应该是微软的时间服务器,当然也可以使用其它的时间服务器,例如

 time.nist.gov、 time-nw.nist.gov、time-a.nist.gov、time-b.nist.gov等。

Posted by xiaojf at 7:42 下午 in 未分类

Solaris10下查看硬件RAID的磁盘情况

命令:raidctl
例子

bash-3.00# raidctl -l -g 0.1.0 0
Disk    Vendor  Product         Capacity        Status  HSP
----------------------------------------------------------------
0.1.0   ATA     WDC WD5001ABYS- 464.7G          GOOD    N/A

bash-3.00# raidctl -l -g 0.0.0 0
Disk    Vendor  Product         Capacity        Status  HSP
----------------------------------------------------------------
0.0.0   ATA     WDC WD5001ABYS- 464.7G          GOOD    N/A

bash-3.00# raidctl -l c0t0d0
Volume                  Size    Stripe  Status   Cache  RAID
        Sub                     Size                    Level
                Disk
----------------------------------------------------------------
c0t0d0                  464.7G  N/A     OPTIMAL  ON     RAID1
                0.1.0   464.7G          GOOD
                0.0.0   464.7G          GOOD
bash-3.00#

Posted by xiaojf at 7:41 下午 in 未分类

开源的 SQL Server JDBC驱动-jTDS

jTDS是一个开源的纯 Java的Microsoft SQL Server (6.5, 7, 2000 和 2005) 和 Sybase (10, 11, 12, 15)的JDBC 3.0 驱动。jTDS基于 FreeTDS ,它是现在最快的产品级别的SQL Server和Sybase驱动器。jTDS 100% 兼容JDBC 3.0,支持只读向前和可滚动/可更新的结果集,并发(完全独立的)Statements,实现了所有DatabaseMetaData和ResultSetMetaData方法。

  相当多的商业JDBC驱动基于jTDS (或者说 FreeTDS), 即使他们不再承认这些。jTDS已经在实际在所有基于JDBC的数据库管理工具上测试过,是大多数这些工具驱动的选择(推荐为 DbVisualizer 和 SQuirreL SQL, 随同 Aqua Data Studio and DataDino 发布)。jTDS也正在变为企业级应用程序的选择:: 它已经通过 J2EE 1.3 certification 和 Hibernate 测试, 被推荐给 JBoss, Hibernate, Atlassian JIRA 和 Confluence 和 Compiere。

  据说这个驱动比微软本身提供的强,因为微软为了限制java的用户,不过这个是我听别人说的,还希望大家自己来体验了。

Posted by xiaojf at 7:39 下午 in 未分类

使用tail命令从文件尾部开始查看文件内容

以前查看文件不是cat就是more,都是重文件头部开始查看内容。首先说明,我对这些命令用的还不是很精通,都是用到现研究。对于大文件这样就不太方便了,可以使用tail命令。

例如 tail -5 my.txt

会输出 my.txt文件尾部的5行。

Posted by xiaojf at 7:38 下午 in 未分类

Solaris 10 下查看在线的登录用户

可以使用who和finger显示当前正在在线的用户。

bash-3.00# who
root       pts/2        10月 30日 13:57 (zone:global)
ja00078    pts/3        10月 30日 14:14 (60.16.166.241)


bash-3.00# finger
Login       Name               TTY         Idle    When    Where
root     Super-User            pts/2            Thu 13:57  zone:global
ja00078         ???            pts/3          1 Thu 14:14  60.16.166.241

Posted by xiaojf at 7:38 下午 in 未分类

由表引擎不一致导致的MySQL性能降低

最近发现服务器反应迟钝,用户反应MySQL响应很慢。这个服务器使用Windows Server 2003安装的MySQL5.0数据库。不但MySQL响应慢,连磁盘拷贝文件的速度也明显降低。服务器内存足够,还有空余5GB内存。百思不得其解,什么原因呢?难道磁盘有问题?出现了坏道?但是又没发现如何文件读取失败的日志消息。进入MySQL,发现有一用户的某些连接一直处于 sending data、sorting result的状态。打开这个用户的数据库,发现某些表使用MyISAM引擎,某些使用InnoDB引擎,将表的引擎都改为MyISAM引擎,一切恢复正常!!

Posted by xiaojf at 7:37 下午 in 未分类

一个JSP乱码的问题

  一个客户,遇到了乱码问题。他的程序为了国际化而采用UTF-8编码,通过page 指令设置了字符编码为UTF-8,大致内容如下:

<%@ page contentType="text/html; charset=UTF-8" %>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title> 测试</title>
</head>

<body>
测试文字
</body>

</html>
发现执行之后,依然乱码。什么原因?经过研究,发现是文件保存的编码格式不对。


保存时,选择UTF-8编码,乱码解决。

Posted by xiaojf at 7:34 下午 in 未分类

基于WEB的FTP客户端工具 -- net2ftp

如果你为客户提供FTP服务,或者提供虚拟主机服务,这需要架设FTP服务器。访问FTP服务,有很多基于GUI的FTP客户端,这个就需要访问FTP服务的21端口。如果你的客户在局域网内部,21端口被封闭,那客户就没法使用FTP服务了。那怎么办呢?net2ftp是使用php编写的基于WEB的客户端,可以上传、修改和删除文件,只要客户能访问网站就可以管理FTP了。

用户功能:

 ● 浏览FTP服务器
      登录之后,你可以浏览所有目录及其子目录和文件。
 ● 上载文件
      有三种方式上载文件:标准上载、上载并解压(unzip)、Java Applet。
 ● 下载文件
      点击文件名迅速下载一个文件。
      选择多个文件下载,下载的文件将被放在一个zip中。
 ● Zip文件
      ... 保存zip文件到FTP服务器,或者通过邮件发给其它人。
 ● Unzip文件
      支持不同的格式: .zip, .tar, .tgz and .gz.
 ● 安装软件
      选择一个常用软件列表(PHP需要在目标服务器上)。
 ● 拷贝、移动和删除
      目录背递归处理,这就是说它的内容(子目录及文件)将被拷贝、移动和删除。
 ● 拷贝或者移动到另一个FTP服务器
      输入文件到你的FTP服务器,或者从你的FTP服务器输出文件到另一个FTP服务器。
 ● 改名或者chmod
      Chmod会对目录递归处理。
 ● 会对代码进行愈发加亮
      PHP函数会连接到php.net上文档说明上。
 ● 文本编辑器
      在浏览器中编辑文本:每次保存,改变会被传输到FTP服务器上。
 ● HTML编辑器
      以所见即所得方式编辑HTML;有两个不同的编辑器可供选择(FCKEditor 和 TinyMCE)。
 ● 代码编辑器
      以语法加亮编辑HTML 和 PHP (CodePress)。
 ● 搜索单词或者短语
      基于文件名、最后修改时间和文件大小过滤文件。
 ● 计算文件大小
      计算文件和目录的大小。


管理功能:

 ● 安全模式
      net2ftp完美地工作在安全模式下。
 ● MySQL数据库
      ... 可选的。MySQL数据库仅用来记录日志和日常限制(看下面)。
 ● 授权
      允许用户连接到所有的FTP服务器或者一个预先定义的FTP服务器列表。登录页面的输入框会相应改变。
 ● 日志
      激活或者禁止3种日志: 请求的页面、登录和错误。
 ● 日常限制
      限制每个用户每日的传输容量和脚本执行时间。一旦用户到达了他的限制,他仍能浏览服务器,但是传输数据会被禁止。
 ● 大文件限制
      大于此尺寸的文件不能被下载、上载和拷贝等等,但是仍可以重命名、删除和chmod。
 ● 禁止相应关键字
      目录或者文件包含禁止的关键词不能被处理。这个用来避免net2ftp被用来上载Paypal和Ebay欺骗。
 ● 模版
      你可以使用模版文件修改net2ftp布局。
 ● 把它集成在其它的PHP应用程序中
      net2ftp能够被简单地集成在其它的PHP应用程序中。Mambo、 Drupal 和 Xoops模块被提供在zip文件中。

Posted by xiaojf at 7:34 下午 in 未分类

TinyMCE 所见即所得的HTML编辑器

TinyMCE也是一个所见即所得的可视化HTML编辑器,虽然不如FCKEditor有名,但是功能绝对不差。

TinyMCE 功能:

 ● 易于集成,仅需两行代码。
 ● 通过主题和插件进行定制。
  ● 可定制的XHTML 1.0输出。阻止无效的元素和强制属性。
 ● 国际化(多语言)支持(语言包)。
 ● 支持多种浏览器(Mozilla、MSIE、FireFox、Opera and Safari)。
 ● PHP/.NET/JSP/Coldfusion GZip压缩,使TinyMCE缩小75%,装载更快。
 ● 你可以容易地使用AJAX保存和装载内容!

Posted by xiaojf at 7:33 下午 in 未分类

ProFTPD 另一款更加容易配置的FTP服务器

ProFTPD 是在UINX下使用的FTP服务器。虽然wu-ftpd使用广泛,性能也不错,但其缺少WIN32平台的FTP服务器的特色,而且其也存在一定的漏洞。ProFTPD作者曾经在弥补wu-ftpd漏洞和增加新功能方面花了很多时间,最后发现如果克服这方面的缺点,就需要整个重写wu-ftpd。ProFTPD是一个完全重新编写的FTP服务器,旨在克服wu-ftpd的缺陷。 ProFTPD支持在数据库上的虚拟用户认证,设置也很方便,现在支持MySQL和PostgreSQL。

Posted by xiaojf at 7:33 下午 in 未分类

Derby ij tool 支持的命令

Derby ij tool 是一个JDBC工具,允许执行脚本和查询,支持的命令包括:

 PROTOCOL 'JDBC protocol' [ AS ident ];
                              - 设置缺省协议或已命名的协议
 DRIVER 'class for driver';   - 装入已命名的类
 CONNECT 'url for database' [ PROTOCOL namedProtocol ] [ AS connectionName ];
                              - 连接至数据库 URL
                              - 可以指定标识
 SET CONNECTION connectionName; - 切换到指定的连接
 SHOW CONNECTIONS;            - 列示所有连接
 AUTOCOMMIT [ ON | OFF ];     - 设置连接的自动落实方式
 DISCONNECT [ CURRENT | connectionName | ALL ];
                              - 删除当前连接、已命名的连接或所有连接;
                              - 缺省值是 CURRENT

 SHOW SCHEMAS;                - 在当前数据库中列示所有模式
 SHOW [ TABLES | VIEWS | PROCEDURES | SYNONYMS ] { IN schema };
                              - 列示表、视图、过程或同义词
 SHOW INDEXES { IN schema | FROM table };
                              - 列示模式中的索引或表的索引
 DESCRIBE name;               - 列示已命名表中的列

 COMMIT;                      - 落实当前事务
 ROLLBACK;                    - 回滚当前事务

 PREPARE name AS 'SQL-J text'; - 准备 SQL-J 文本
 EXECUTE { name | 'SQL-J text' } [ USING { name | 'SQL-J text' } ] ;
                              - 使用来自 USING 结果集行的
                              - 参数值执行语句
 REMOVE name;                 - 除去已命名的先前预编译语句

 RUN 'filename';              - 从命名文件运行命令

 ELAPSEDTIME [ ON | OFF ];    - 设置 ij 的耗用时间方式
 MAXIMUMDISPLAYWIDTH integerValue;
                              - 将每列的最大显示宽度设置为
                              - 整数值

 ASYNC name 'SQL-J text';     - 在另一个线程中运行命令
 WAIT FOR name;               - 等待 ASYNC'd 命令的结果

 GET [SCROLL INSENSITIVE] CURSOR name AS 'SQL-J query';
                              - 在查询中获取游标(JDBC 结果集)
                              - SCROLL 游标仅适用于
                              - JDBC 2.0 和更高版本。
                              -(在 JDBC 1.X. 中忽略游标滚动类型)
 NEXT name;                   - 从已命名的游标获取下一行
 FIRST name;                  - 从已命名的滚动游标获取第一行
 LAST name;                   - 从已命名的滚动游标获取最后一行
 PREVIOUS name;               - 从已命名的滚动游标获取前一行
 ABSOLUTE integer name;       - 在绝对行号上定位已命名的滚动游标
                              -(负数表示从最后一行起算的位置。)
 RELATIVE integer name;       - 相对与当前行定位已命名的滚动游标
                              -(整数是行号)
 AFTER LAST name;             - 将已命名的滚动游标定位于最后一行的后面
 BEFORE FIRST name;           - 将已命名的滚动游标定位于第一行的前面
 GETCURRENTROWNUMBER name;    - 返回已命名的滚动游标当前位置的行号
                              --(当游标的位置不在一个行上时返回 0。)
 CLOSE name;                  -- 关闭已命名的游标
 LOCALIZEDDISPLAY [ ON | OFF ];
                              -- 控制语言环境敏感数据表示法

 EXIT;                        -- 退出 ij
 HELP;                        -- 显示此消息

任何无法识别的命令都将被视为可能的 SQL-J 命令并直接执行。

Posted by xiaojf at 7:31 下午 in 未分类

Derby 数据库的两种布置方式

  Derby数据库发布版提供了两种基本的布置方式:简单的内嵌方式和Derby网络服务器方式。

●内嵌

  在这种方式下,Derby数据库和应用程序运行在相同的Java虚拟机(JVM)中。它对终端用户是不可见的,因为它是通过应用程序启动和停止的,通常不需要管理。

●客户端/服务器

  Derby运行在一个单独的Java虚拟机中。应用程序从不同的Java虚拟机来访问数据库。这种方式和我们平常使用的MySQL和SQL Server一样。

Posted by xiaojf at 7:30 下午 in 未分类

UNIX 中JAVA执行命令

在使用java编写程序时候,我们可能需要执行shell命令,怎么办呢?看下面的例子:

import java.io.IOException;

public class ExecDemo {

        static void doExec1() throws IOException {

                // use pipes and I/O redirection
                // but without using a shell

                Runtime runtime = Runtime.getRuntime();
                runtime.exec("ls | wc >out1");
        }

        static void doExec2() throws IOException {

                // invoke a shell and give command to it

                Runtime runtime = Runtime.getRuntime();
                String[] args =
                        new String[]{"sh", "-c", "ls | wc >out2"};

                Process p = runtime.exec(args);
        }

        public static void main(String[] args) throws IOException {
                doExec1();
                doExec2();
        }
}

doExec1()不会正常执行,doExec2()可以正常执行。下面原文节选:

The problem with doExec1 is that Runtime.exec invokes actual executable binary programs. Syntax such as | and > are part of a particular command processor, and are only understood by that processor. ls is executed, but the rest of the shell command is not. However, doExec2 succeeds because it invokes a command processor or shell (sh), and gives the shell the input containing the | and > characters. Note that Runtime.exec could have been invoked with a single string argument like this:

    "sh -c 'ls | wc >out2'"

Posted by xiaojf at 7:30 下午 in 未分类

关于eclipse中使用hibernate的数据库名及表所有者的问题

我们jsp虚拟主机在开通时,数据库已经创建好了,就是名称不能更改。近段时间发现,很多用户说这很不方便,因为他们使用eclipse的hibernate连接的数据库,数据库名称如果更改不能运行。我看了他们的类影射文件,发现了问题所在。

<class
        name="ClassName"                              (1)
        table="tableName"                             (2)
        discriminator-value="discriminator_value"     (3)
        mutable="true|false"                          (4)
       schema="owner"                          (5)
       catalog="catalog"                       (6)
        proxy="ProxyInterface"                        (7)
        dynamic-update="true|false"                   (8)
        dynamic-insert="true|false"                   (9)
        select-before-update="true|false"             (10)
        polymorphism="implicit|explicit"              (11)
        where="arbitrary sql where condition"         (12)
        persister="PersisterClass"                    (13)
        batch-size="N"                                (14)
        optimistic-lock="none|version|dirty|all"      (15)
        lazy="true|false"                             (16)
        entity-name="EntityName"                      (17)
        check="arbitrary sql check condition"         (18)
        rowid="rowid"                                 (19)
        subselect="SQL expression"                    (20)
        abstract="true|false"                         (21)
        entity-name="EntityName"                      (22)
        node="element-name"                           (23)
/>

schema="owner" 和 catalog="catalog" 是可选的,一般没必要指定,如果你在这里指定,数据库名称和表所有者更改之后,在这里必须修正。所以你一般可以不要设置这个参数,这样就是使用默认的,那么数据库名称改变后就不用在这里修正了。eclipse和netbean创建的,就默认生成了这两个参数,所以如果你不清楚这里,布置程序就会遇到麻烦。我对这些ide开发工具不熟,所以对于如何修改这些ide默认设置我就不知道了,我相信,绝对可以修改默认参数的。

Posted by xiaojf at 7:28 下午 in 未分类

FCKeditor 在JSP中通过API方式实现图片和Flash的上传


  最近接触了一下FCKeditor,感觉非常不错,使用这个在线编辑器,编辑网站的内容非常轻松。我看了FCKeditor的JSP程序例子代码,JSP Sample 1 是通过API方式的示例,JSP Sample 2 是使用JSP Taglib的示例。我发现第一个例子上传图片和Flash就会出现错误,而第二个例子就不会。研究了下,发现使用了JSP Taglib的例子传递了参数,而API方式没有传递参数。

 看了下文档,发现参数的类是 FCKeditorConfigurations 。只要传递了合适的参数就可以了,下面是我的部分代码:

<%
String contextPath = request.getContextPath();
FCKeditor oFCKeditor ;
FCKeditorConfigurations fckCfg = new FCKeditorConfigurations();
fckCfg.put("ImageBrowserURL",contextPath+"/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector");
fckCfg.put("LinkBrowserURL",contextPath+"/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector");
fckCfg.put("FlashBrowserURL",contextPath+"/editor/filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector");
fckCfg.put("ImageUploadURL",contextPath+"/editor/filemanager/upload/simpleuploader?Type=Image");
fckCfg.put("LinkUploadURL",contextPath+"/editor/filemanager/upload/simpleuploader?Type=File");
fckCfg.put("FlashUploadURL",contextPath+"/editor/filemanager/upload/simpleuploader?Type=Flash");
oFCKeditor = new FCKeditor( request, "content" ) ;
oFCKeditor.setConfig(fckCfg);
oFCKeditor.setBasePath( request.getContextPath()+"/" ) ;
oFCKeditor.setValue( "" );
out.println( oFCKeditor.create() ) ;
%>

Posted by xiaojf at 7:28 下午 in 未分类

FCKeditor 和TinyMCE比较

  这两天终于有了心情研究了下,FCKeditor和 TinyMCE,感觉这两个可视化web工具太好了,真是做网站不可缺少的组件啊,那个网站不需要编辑有格式的内容啊?不需要的不多吧。

  我感觉FCKeditor提供的功能更强一些,它可以在需要插入图片或者Flash的时候,把本地的图片或者Flash上传到服务器,而进行插入,非常不错,很方便,TinyMCE好像没提供这个代码。

Posted by xiaojf at 7:27 下午 in 未分类

FCKeditor 中开启图片和Flash上传后的安全问题

  如果你使用FCKeditor时,开启了图片和 Flash上传,那么你就需要对安全进行限制,默认是没有权限控制的。现在让我们看看例子中的web.xml内容:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
  <display-name>FCKeditor Test Application</display-name>
 
    <servlet>
        <servlet-name>Connector</servlet-name>
        <servlet-class>com.fredck.FCKeditor.connector.ConnectorServlet</servlet-class>
        <init-param>
            <param-name>baseDir</param-name>
            <param-value>/UserFiles/</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>SimpleUploader</servlet-name>
        <servlet-class>com.fredck.FCKeditor.uploader.SimpleUploaderServlet</servlet-class>
        <init-param>
            <param-name>baseDir</param-name>
            <param-value>/UserFiles/</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>enabled</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>AllowedExtensionsFile</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>DeniedExtensionsFile</param-name>
            <param-value>php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi</param-value>
        </init-param>
        <init-param>
            <param-name>AllowedExtensionsImage</param-name>
            <param-value>jpg|gif|jpeg|png|bmp</param-value>
        </init-param>
        <init-param>
            <param-name>DeniedExtensionsImage</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>AllowedExtensionsFlash</param-name>
            <param-value>swf|fla</param-value>
        </init-param>
        <init-param>
            <param-name>DeniedExtensionsFlash</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

  <servlet-mapping>
    <servlet-name>Connector</servlet-name>
    <url-pattern>/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
  </servlet-mapping>
 
  <servlet-mapping>
    <servlet-name>SimpleUploader</servlet-name>
    <url-pattern>/editor/filemanager/upload/simpleuploader</url-pattern>
  </servlet-mapping>

</web-app>

看了这个web.xml中的定义,你就知道文件的管理有两个url负责分别是/editor /filemanager/browser/default/connectors/jsp/connector和/editor/filemanager/upload/simpleuploader。我们就需要对它们的访问进行限制,我得方法是,添加了一个过滤器,只有授权用户才能访问它们。关于这个安全问题更完善的方法,以后再慢慢研究。

Posted by xiaojf at 7:26 下午 in 未分类

JDBC- ODBC不能打开注册表关键字

[Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 ''Temporary (volatile) Jet DSN for process 0x1844 Thread 0x1b40 DBC 0x554cc59c Jet''。

网上找到了解决方法,用户必须对系统的Temp目录具有写权限。

Posted by xiaojf at 7:25 下午 in 未分类

使用jTDS联接SQL Server实例的数据源配置例子

  如果你对微软提供的SQL Server JDBC驱动不满意,怎么办?开源让我们有了更好的选择,jTDS就是一个支持SQL Server和Sybase的JDBC驱动,具体信息可参看其官方网站。

jTDS的URL格式:
    jdbc:jtds:<server_type>://<服务器>[:<端口>][/<数据库>] [;<属性>=<值>[;...]]

server_type是 sqlserver或者sybase。

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Resource
    name="jdbc/TEST"
    type="javax.sql.DataSource"
    password="密码"
    driverClassName="net.sourceforge.jtds.jdbc.Driver"
    maxIdle="2"
    maxWait="5000"
    username="sa"
    url="jdbc:jtds:sqlserver://localhost:1433/Northwind;instance=NetSDK;tds=8.0;lastupdatecount=true;"
    maxActive="4"/>
</Context>

Posted by xiaojf at 7:24 下午 in 未分类

在Solaris 10上获取区域列表

bash-3.00# locale -a
C
POSIX
hi_IN.UTF-8
iso_8859_1
ja
ja_JP.PCK
ja_JP.UTF-8
ja_JP.eucJP
ko
ko.UTF-8
ko_KR.EUC
ko_KR.EUC@dict
ko_KR.UTF-8
ko_KR.UTF-8@dict
th
th_TH
th_TH.ISO8859-11
th_TH.TIS620
th_TH.UTF-8
zh
zh.GBK
zh.UTF-8
zh_CN.EUC
zh_CN.EUC@pinyin
zh_CN.EUC@radical
zh_CN.EUC@stroke
zh_CN.GB18030
zh_CN.GB18030@pinyin
zh_CN.GB18030@radical
zh_CN.GB18030@stroke
zh_CN.GBK
zh_CN.GBK@pinyin
zh_CN.GBK@radical
zh_CN.GBK@stroke
zh_CN.UTF-8
zh_CN.UTF-8@pinyin
zh_CN.UTF-8@radical
zh_CN.UTF-8@stroke
zh_HK.BIG5HK
zh_HK.BIG5HK@radical
zh_HK.BIG5HK@stroke
zh_HK.UTF-8
zh_TW
zh_TW.BIG5
zh_TW.BIG5@pinyin
zh_TW.BIG5@radical
zh_TW.BIG5@stroke
zh_TW.BIG5@zhuyin
zh_TW.EUC
zh_TW.EUC@pinyin
zh_TW.EUC@radical
zh_TW.EUC@stroke
zh_TW.EUC@zhuyin
zh_TW.UTF-8
bash-3.00#

Posted by xiaojf at 7:24 下午 in 未分类

Solaris RBAC 的四个主要控制文件

/etc/security/exec_attr 指定了与配置文件关联的执行属性。这通常包括用户和组 ID、命令以及缺省/限制权限。
/etc/security/prof_attr 包含一组执行配置文件名称、描述以及其他属性。
/etc/security/auth_attr 包含授权定义和描述。
/etc/user_attr 包含用户和角色定义,以及为其分配的授权、配置文件和项目。

Posted by xiaojf at 7:23 下午 in 未分类

Your version of vmware tools is out of date

将VMware升级到6.0.3 build-80004之后,发现底部显示Your version of vmware tools is out of date发现底部显示。意思VMware tools过期了,看来需要使用这个版本的VMware来重新安装。点击 VM->Install VMware Tools ..把它自动挂载到光盘,把vmware-solaris-tools.tar.gz解压。进入到vmware-tools-distrib/bin目录,首先使用vmware-uninstall-tools.pl卸载,然后重启Solaris 10,再进入vmware-tools-distrib目录,使用vmware-install.pl安装即可!

Posted by xiaojf at 7:22 下午 in 未分类

PHP- 5.2.6中php_pgsql.dll的问题

安装PostgreSQL8.3.1和PHPPGADMIN,发现PHP5.2.6中的php_pgsql.dll无法加载!!浪费了很多时间,后来将 PHP5.2.5中的php_pgsql.dll中拷贝过去,问题得到解决。PHP5.2.5中的比PHP5.2.6中的php_pgsql.dll文件要大!估计PHP5.2.6中的php_pgsql.dll编译的有问题。我的环境是 Windows2003+IIS6+PHP5.2.6+PostgreSQL8.3.1+phppgamin4.2.

Posted by xiaojf at 7:22 下午 in 未分类

Solaris 中的 LD_LIBRARY_PATH 环境变量

使用 LD_LIBRARY_PATH 环境变量指定链接程序应在哪些目录路径中搜索用 -llibrary 选项指定的库。

可以指定多个目录,其间用冒号分隔。通常,LD_LIBRARY_PATH 变量包含两个用冒号分隔的目录列表,列表间用分号隔开:

dirlist1;dirlist2

首先搜索 dirlist1 中的目录,接着是命令行上用任何显式 -Ldir 指定的目录,再接着是 dirlist2 以及标准目录。

也就是说,如果使用多个 -L 调用编译器,如下所示:

f95 ... -Lpath1 ... -Lpathn ...

则搜索顺序是:

dirlist1 path1 ... pathn dirlist2 standard_paths

当 LD_LIBRARY_PATH 变量只包含一个用冒号分隔的目录列表时,它会被解释为 dirlist2。

在 Solaris 操作环境中,当搜索 64 位依赖性时,可以用相似的环境变量 LD_LIBRARY_PATH_64 来替代 LD_LIBRARY_PATH。有关详细信息,请参见 Solaris《链接程序和库指南》以及 ld(1) 手册页。

    *在 32 位 SPARC 处理器上,会忽略 LD_LIBRARY_PATH_64。
    *如果只定义了 LD_LIBRARY_PATH,它将被同时用于 32 位和 64 位链接。
    *如果同时定义了 LD_LIBRARY_PATH 和 LD_LIBRARY_PATH_64,则 32 位链接将用 LD_LIBRARY_PATH 来完成,而用 LD_LIBRARY_PATH_64 进行 64 位链接。
      
注 –

强烈建议不要对生产软件使用 LD_LIBRARY_PATH 环境变量。尽管它作为一种影响运行时链接程序搜索路径的临时机制很有用,但是任何可以引用该环境变量的动态可执行文件的搜索路径都会被改变。您可能会看到了意想不到的结果或性能降低。

Posted by xiaojf at 7:21 下午 in 未分类

Solars 10 exec_attr数据库结构

位置 /etc/security/exec_attr
每行记录的格式为
名称:策略:类型:保留字段1:保留字段2:id:属性

名称 大小写敏感

策略 当前有效的策略为suser

类型 当前有效的类型为cmd

id 惟一的字符串。如果type为cmd,id应该为一个全路径的命令,或者  *   来允许所有的命令

属性 逗号分割的列表。有效的关键字为euid, uid, egid, and gid

Posted by xiaojf at 7:20 下午 in 未分类

Solaris 中的pfsh

pfexec、pfsh、pfcsh、pfksh执行一个在型文件中的命令

语法

      /usr/bin/pfexec  command
      /usr/bin/pfsh [ options ] [ argument ...]
      /usr/bin/pfcsh [ options ] [ argument ...]
      /usr/bin/pfksh [ options ] [ argument ...]

pfexec程序用来执行在exec_attr数据库中用户profile文件中指定属性的命令,属性例如用户和组id等。

Posted by xiaojf at 7:20 下午 in 未分类

Windows 下的whoami

WhoAmI 有三种使用方法:

语法 1:
    WHOAMI [/UPN | /FQDN | /LOGONID]

语法 2:
    WHOAMI { [/USER] [/GROUPS] [/PRIV] } [/FO format] [/NH]

语法 3:
    WHOAMI /ALL [/FO format] [/NH]

描述:
    这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,以及相应的安全标识符(SID)、特权和登录标识符(logon ID)。例如,谁是当前登录的用户? 如果没有指定开关,工具用 NTLM 格式(域\用户名)显示用户名。

参数列表:
    /UPN                    用用户主体 (User Principal) 格式显示用户名名称 (UPN)格式。

    /FQDN                   用完全合格的 (Fully Qualified) 格式显示用户名可分辨名称(FQDN) 格式。

    /USER                   显示当前用户的信息以及安全标识符 (SID)。

    /GROUPS                 显示当前用户的组成员信息、帐户类型和安全标识符 (SID) 和属性。

    /PRIV                   显示当前用户的安全特权。

    /LOGONID                显示当前用户的登录 ID。

    /ALL                    显示当前用户名、属于的组以及安全标识符(SID) 和当前用户访问令牌的特权。

    /FO       format        指定要显示的输出格式。有效值为 TABLE、LIST、CSV。CSV 格式不显示列标题。默认格式是 TABLE。

    /NH                     指定在输出中不显示列标题。只对 TABLE 和 CSV格式有效。

    /?                      显示该帮助消息。

示例:
    WHOAMI
    WHOAMI /UPN
    WHOAMI /FQDN
    WHOAMI /LOGONID
    WHOAMI /USER
    WHOAMI /USER /FO LIST
    WHOAMI /USER /FO CSV
    WHOAMI /GROUPS
    WHOAMI /GROUPS /FO CSV /NH
    WHOAMI /PRIV
    WHOAMI /PRIV /FO TABLE
    WHOAMI /USER /GROUPS
    WHOAMI /USER /GROUPS /PRIV
    WHOAMI /ALL
    WHOAMI /ALL /FO LIST
    WHOAMI /ALL /FO CSV /NH
    WHOAMI /?

示例:
C:\SIS>whoami /all

用户信息
----------------

用户名                        SID
============================= =============================================
webheader01\administrator     S-1-5-21-1843009038-2250131686-1841566999-500


组信息
-----------------

组名                             类型   SID                                            属性

================================ ====== ============================================== ==========================================
Everyone                         已知组 S-1-1-0                                        必需的组, 启用于默认, 启用的组

WEBHEADER01\Debugger Users       别名   S-1-5-21-1843009038-2250131686-1841566999-1008 必需的组, 启用于默认, 启用的组

BUILTIN\Administrators           别名   S-1-5-32-544                                   必需的组, 启用于默认, 启用的组,
组的所有者
BUILTIN\Users                    别名   S-1-5-32-545                                   必需的组, 启用于默认, 启用的组

NT AUTHORITY\INTERACTIVE         已知组 S-1-5-4                                        必需的组, 启用于默认, 启用的组

NT AUTHORITY\Authenticated Users 已知组 S-1-5-11                                       必需的组, 启用于默认, 启用的组

NT AUTHORITY\This Organization   已知组 S-1-5-15                                       必需的组, 启用于默认, 启用的组

LOCAL                            已知组 S-1-2-0                                        必需的组, 启用于默认, 启用的组

NT AUTHORITY\NTLM Authentication 已知组 S-1-5-64-10                                    必需的组, 启用于默认, 启用的组



特权信息
----------------------

特权名                          描述                       状态
=============================== ========================== ======
SeChangeNotifyPrivilege         跳过遍历检查               已启用
SeSecurityPrivilege             管理审核和安全日志         已禁用
SeBackupPrivilege               备份文件和目录             已禁用
SeRestorePrivilege              还原文件和目录             已禁用
SeSystemtimePrivilege           更改系统时间               已禁用
SeShutdownPrivilege             关闭系统                   已禁用
SeRemoteShutdownPrivilege       从远程系统强制关机         已禁用
SeTakeOwnershipPrivilege        取得文件或其他对象的所有权 已禁用
SeDebugPrivilege                调试程序                   已禁用
SeSystemEnvironmentPrivilege    修改固件环境值             已禁用
SeSystemProfilePrivilege        配置系统性能               已禁用
SeProfileSingleProcessPrivilege 配置单一进程               已禁用
SeIncreaseBasePriorityPrivilege 增加计划优先级             已禁用
SeLoadDriverPrivilege           装载和卸载设备驱动程序     已禁用
SeCreatePagefilePrivilege       创建页面文件               已禁用
SeIncreaseQuotaPrivilege        调整进程的内存配额         已禁用
SeUndockPrivilege               从扩展坞中取出计算机       已禁用
SeManageVolumePrivilege         执行卷维护任务             已禁用
SeImpersonatePrivilege          身份验证后模拟客户端       已启用
SeCreateGlobalPrivilege         创建全局对象               已启用

C:\SIS>

Posted by xiaojf at 7:18 下午 in 未分类

Windows 下的Query

我们在Windows下查询一个用户的进程或者会话等信息,可以通过图形界面的任务管理器。如果通过命令怎么办呢?这个命令就是query,语法:

QUERY { PROCESS | SESSION | TERMSERVER | USER }

例如:

C:\SIS>query process
 用户名                会话名              ID    PID  映像
>admin.microso.com     console              0   2836  explorer.exe
>admin.microso.com     console              0   2964  bcmsmmsg.exe
>admin.microso.com     console              0   3008  jusched.exe
>admin.microso.com     console              0   3020  vmware-tray.exe
>admin.microso.com     console              0   3028  hqtray.exe
>admin.microso.com     console              0   3036  ctfmon.exe
>admin.microso.com     console              0   3052  msnmsgr.exe
>admin.microso.com     console              0   3064  daemon.exe
>admin.microso.com     console              0   3072  googletoolba...
>admin.microso.com     console              0   3084  acrotray.exe
>admin.microso.com     console              0   3740  conime.exe
>admin.microso.com     console              0   3512  firefox.exe
>admin.microso.com     console              0   1116  cmd.exe
>admin.microso.com     console              0   2504  taskmgr.exe
>admin.microso.com     console              0    360  textpad.exe
>admin.microso.com     console              0   1308  mmc.exe
>admin.microso.com     console              0   1012  query.exe
>admin.microso.com     console              0   3544  qprocess.exe

 

C:\SIS>query session
 会话名            用户名                   ID  状态    类型        设备
>console           admin.microso.com         0  运行中  wdcon
 rdp-tcp                                 65536  侦听    rdpwd

Posted by xiaojf at 7:17 下午 in 未分类

在Windows 2003用户和组里你一般看不到的账号或者组

NT AUTHORITY\Authenticated Users (S-1-5-11)

NT AUTHORITY\INTERACTIVE (S-1-5-4)

NT AUTHORITY\NETWORK SERVICE (S-1-5-20)

NT AUTHORITY\SERVICE (S-1-5-6)

NT AUTHORITY\SYSTEM (S-1-5-18)

CREATOR GROUP

CREATOR OWNER

Everyone

Posted by xiaojf at 7:16 下午 in 未分类

Solaris 10下修改Tomcat的初始堆内存和最大堆内存

修改tomcat/bin/catalina.sh文件,添加一行,也就是设置一个环境变量:

JAVA_OPTS=" -Xms128m -Xmx256m "

上例,设置java的初始堆内存128兆,最大堆内存256兆。

Posted by xiaojf at 7:16 下午 in 未分类

dos2unix 和unix2dos

如果你在unix下打开windows发来的文本文件,可能会发现每行尾多出来一个^M,^M代表回车。windows的文本文件,每行尾使用回车和新行,就是\r\n。unix下却只有\n。dos2unix 就是用来把windows的文本文件转换成unix使用的文本,unix2dos功能正好相反。

Posted by xiaojf at 7:15 下午 in 未分类

修改Solaris 10自带ftpd的默认文件掩码


Solaris自带的ftpd是WU-FTPD,使用 SMF管理来启动和停止。默认文件上传使用的umask是022,如果需要修改怎么办呢?ftpaccess文件中设置的umask是是否允许用户执行 umask,达不到我们的目的。这个就需要修改ftpd的启动参数,因此需要ftpd有关的smf配置信息。

通过svccfg修改有关ftpd配置的inetd_start/exec参数,例如

setprop inetd_start/exec =  astring:"/usr/sbin/in.ftpd -a -u 077 "

下面是定义ftp服务的xml文件。

<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>

<!--
    Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
    Use is subject to license terms.

    ident    "@(#)ftp.xml    1.4    04/12/09 SMI"

    NOTE:  This service manifest is not editable; its contents will
    be overwritten by package or patch operations, including
    operating system upgrade.  Make customizations in a different
    file.

    Service manifest for in.ftpd
-->

<service_bundle type='manifest' name='SUNWftpr:ftp'>

<service
    name='network/ftp'
    type='service'
    version='1'>

    <create_default_instance enabled='false' />

    <restarter>
        <service_fmri value='svc:/network/inetd:default' />
    </restarter>

    <exec_method
        type='method'
        name='inetd_start'
        exec='/usr/sbin/in.ftpd -a'
        timeout_seconds='0'>
        <method_context>
            <method_credential user='root' group='root' />
        </method_context>
    </exec_method>

    <exec_method
        type='method'
        name='inetd_disable'
        exec=':kill'
        timeout_seconds='0'>
    </exec_method>

    <property_group name='inetd' type='framework'>
        <stability value='Evolving' />
        <propval name='endpoint_type' type='astring' value='stream' />
        <propval name='name' type='astring' value='ftp' />
        <propval name='proto' type='astring' value='tcp6' />
        <propval name='wait' type='boolean' value='false' />
        <propval name='isrpc' type='boolean' value='false' />
    </property_group>

    <stability value='Unstable' />

    <template>
        <common_name>
            <loctext xml:lang='C'>
                FTP server
            </loctext>
        </common_name>
        <documentation>
            <manpage title='in.ftpd' section='1M'
                manpath='/usr/share/man' />
            <manpage title='ftpd' section='1M'
                manpath='/usr/share/man' />
        </documentation>
    </template>

</service>

</service_bundle>
 

Posted by xiaojf at 7:14 下午 in 未分类

UNIX 文件的七种类型

-(减号) 文本或程序
b 块特殊文件
c 字符特殊文件
d 目录
l 符号链接
s 套接字
D 门
P 命名管道(FIFO)

Posted by xiaojf at 7:13 下午 in 未分类

UNIX 目录的缺省ACL 项

缺省ACL项                    说明                                
d[efault]:u[ser]::perms         缺省文件属主权限。
d[efault]:g[roup]::perms        缺省文件组权限。
d[efault]:o[ther]:perms         文件属主或文件组成员之外的用户的缺省权限。
d[efault]:m[ask]:perms          缺省ACL 掩码。
d[efault]:u[ser]:uid:perms      特定用户的缺省权限。对于uid,可以指定用户名或数字UID。
d[efault]:g[roup]:gid:perms     特定组的缺省权限。对于gid,可以指定组名或数字GID。

Posted by xiaojf at 7:11 下午 in 未分类

UNIX 下复制ACL

通过重定向getfacl 输出,将文件的ACL 复制到另一个文件。
% getfacl filename1 | setfacl -f - filename2
filename1 指定将从其中复制ACL 的文件。
filename2 指定要对其设置所复制的ACL 的文件。
复制ACL
在以下示例中,会将ch2.sgm 中的ACL 复制到ch3.sgm。
% getfacl ch2.sgm | setfacl -f - ch3.sgm

Posted by xiaojf at 7:10 下午 in 未分类

Solaris 10下使用snoop抓包

看看下面的命令:

snoop -v -x0  > snoop.txt

此命令会把详细的数据输出到snoop.txt文件中。

-v 表示详细的输出

-x 参数的格式是 -xoffset [ , length] 如果offset为0,你没指定长度,那就显示整个的数据包。

  自己抓抓吧,看看出来的数据,对于了解这个命令很有帮助。对于此命令的更详细解释,参看sun的文档吧。

Posted by xiaojf at 7:09 下午 in 未分类

Windows 2003 磁盘管理命令 - fsutil.exe

fsutil.exe
behavior        控制文件系统行为
dirty           管理卷的被损坏的位数
file            文件特定命令
fsinfo          文件系统信息
hardlink        硬链接管理
objectid        对象 ID 管理
quota           配额管理
reparsepoint    重分析点管理
sparse          稀疏文件控制
usn             USN 管理
volume          卷管理

例子

C:\>fsutil fsinfo drives
驱动器: C:\ D:\ E:\ F:\ G:\

C:\>fsutil fsinfo drivetype G:\
G:\ - CD-ROM 驱动器

C:\>fsutil quota query C:
卷 C: 上的配额没有启用

Posted by xiaojf at 7:08 下午 in 未分类

Solaris 下刷新(清空)DNS缓存

使用命令:nscd -i hosts

Posted by xiaojf at 7:07 下午 in 未分类

Solaris 10 下查询端口被某个程序占用

下面是脚本:

#!/bin/ksh

line='---------------------------------------------'
pids=$(/usr/bin/ps -ef -o pid=)

if [ $# -eq 0 ]; then
read ans?"Enter port you would like to know pid for: "
else
ans=$1
fi

for f in $pids
do
/usr/proc/bin/pfiles $f 2>/dev/null | /usr/xpg4/bin/grep -q "port: $ans"
if [ $? -eq 0 ]; then
echo $line
echo "Port: $ans is being used by PID:\c"
pargs -l $f
#/usr/bin/ps -o pid,args -p $f
fi
done
exit 0

Posted by xiaojf at 7:06 下午 in 未分类

Tomcat6.0.16 之前版本ServletContextListener不能加载的bug

INFO: The listener "listeners.ContextListener" is already configured for this context. The duplicate definition has been ignored. 2008/08/06 05:26:13 org.apache.catalina.core.StandardContext addApplicationListener INFO: The listener "listeners.SessionListener" is already configured for this context. The duplicate definition has been ignored.

提示已经加载,被忽略。下载了最新的Tomcat6.0.18得到解决。

Posted by xiaojf at 7:06 下午 in 未分类

UNIX 查找属于某一用户的文件并清除

如果你想删除某一目录下,某一用户的文件可以使用如下的命令:

find /var -user test -exec rm -R {} \;

如果你想删除test用户大于1M的文件,可以这样:

find /var -user test -size +2048 -exec rm -R {} \;

备注,unix下文件的大小默认一般是以块为单位,为512字节。

Posted by xiaojf at 7:05 下午 in 未分类

Windows 本地服务数量的限制

最近将某一程序安装成多个服务供多个用户使用,当启动到第74个服务时,服务无法启动,但是本地系统账号的服务可以启动,普通服务的账号已经无法启动,看来能够启动的服务数量是有限制的。查了很多资料终于搞清楚了。

Win32k.sys 驱动程序为桌面堆分配 48 MB 的缓冲区地址空间。 确保您执行不具有许多桌面, 占用整个 48 MB 的缓冲区地址空间。

在windows 2003中,默认的非交互式堆栈大小为512k,那么96个服务就是极限了,呼呼!系统本身的服务也要占用这48MB的空间,所以我运行到75个就不行了。 估计64位的windows会支持更大的桌面堆栈!

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows=%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16

Posted by xiaojf at 7:04 下午 in 未分类

MySQL 的大小写敏感问题

平常在windows下使用MySQL,库、表、列、别名的名称都是不区分大小写的。最近把程序放到UNIX下的主机中,发现日志提示,表不存在,最后把把select语句中的表名和库里的表名大小写保持一致,问题得到解决。看来MySQL大小写是否敏感与操作系统有关系。Windows下不区分,UNIX和Linux下区分。

Posted by xiaojf at 7:04 下午 in 未分类

一个超强的JSP文件浏览器(Jsp File Browser)

一个德国人编写的JSP文件浏览器(JSP File Browser),功能很全面:

1. 创建、拷贝、移动、重命名和删除文件及目录

2.查看文件内容

3.编辑文本文件

4.上载和下载文件

5. 可以将文件及文件夹压缩成zip来下载

6.执行本地命令

7.受限制文件和不受限制的文件通过颜色区分,很直观

Posted by xiaojf at 7:03 下午 in 未分类

Windows 2003 无法删除文件 无法读源文件或磁盘

今天发现一个目录xiaoying,零字节,一删除就提示"无法删除文件 无法读源文件或磁盘"。什么玩意,明明在,怎么删不了?查了资料,原来是windows允许路径有空格,造成混乱。仔细看看,原来xiaoying后面还有一个空格。在控制太,进入其父目录。使用dir /a /x 利用8.3格式显示文件,看到了吧,哪个XIAOYI~1。

D:\dl001\dl001037\webapps\ROOT\resource\works\qita\gongzuoshiriji>dir /a /x
 驱动器 D 中的卷是 D
 卷的序列号是 14F0-A26B

 D:\dl001\dl001037\webapps\ROOT\resource\works\qita\gongzuoshiriji 的目录

2008-10-11  19:20    <DIR>                       .
2008-10-11  19:20    <DIR>                       ..
2008-10-11  18:50    <DIR>          XIAOYI~1     xiaoying
               0 个文件              0 字节
               3 个目录 64,689,065,984 可用字节

然后利用 rd /s 删除。

D:\dl001\dl001037\webapps\ROOT\resource\works\qita\gongzuoshiriji>rd /s XIAOYI~
XIAOYI~1, 是否确认(Y/N)? y

D:\dl001\dl001037\webapps\ROOT\resource\works\qita\gongzuoshiriji>dir
 驱动器 D 中的卷是 D
 卷的序列号是 14F0-A26B

 D:\dl001\dl001037\webapps\ROOT\resource\works\qita\gongzuoshiriji 的目录

Posted by xiaojf at 7:02 下午 in 未分类

Windows 中的权限管理的命令行工具SubInACL

这个命令和unix中的find命令类似,能够让管理员获得文件、注册表键值和服务的权限信息,并可以把这些信息在用户到用户、本地或全局的组到组和域到域之间进行传送。例如,如果一个用户从一个域(DomainA)移到了另一个域 (DomainB),管理员可对于用户文件的安全信息可以使用DomainB\User来替换DomainB\User。这样用户在新域中就可以存取相同的文件。

管理员可以使用SubInACL做如下工作:

1.显示文件、注册键值或者服务的安全信息。这些信息包括所有者、组和ACL

2.改变对象的所有者

3. 替换安全信息

4.迁移安全信息

Posted by xiaojf at 7:01 下午 in 未分类

Windows 下查看端口被那个程序占用

对于服务器,起码开放了那些端口自己要清楚,如果知道了某个端口开放了,但是不知道是那个程序打开的,可使用netstat -anb命令:

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:21             0.0.0.0:0              LISTENING       1304
  [inetinfo.exe]

  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       1120
  [Apache.exe]

  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       692
  RpcSs
  [svchost.exe]

  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  [System]

  TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       432
  [lsass.exe]

  TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING       1304
  [inetinfo.exe]

  TCP    0.0.0.0:1433           0.0.0.0:0              LISTENING       2536
  [sqlservr.exe]

  TCP    0.0.0.0:2383           0.0.0.0:0              LISTENING       2604
  [msmdsrv.exe]

  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       2624
  [mysqld.exe]

  TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       3532
  TermService
  [svchost.exe]

  TCP    127.0.0.1:1031         0.0.0.0:0              LISTENING       3712
  [alg.exe]

  TCP    127.0.0.1:1434         0.0.0.0:0              LISTENING       2536
  [sqlservr.exe]

  TCP    192.168.1.11:139       0.0.0.0:0              LISTENING       4
  [System]

  TCP    192.168.1.11:3389      192.168.1.5:2953       ESTABLISHED     3532
  TermService
  [svchost.exe]

  UDP    0.0.0.0:3456           *:*                                    1304
  [inetinfo.exe]

  UDP    0.0.0.0:500            *:*                                    432
  [lsass.exe]

  UDP    0.0.0.0:445            *:*                                    4
  [System]

  UDP    0.0.0.0:161            *:*                                    2828
  [snmp.exe]

  UDP    0.0.0.0:4500           *:*                                    432
  [lsass.exe]

  UDP    0.0.0.0:1434           *:*                                    2848
  [sqlbrowser.exe]

  UDP    127.0.0.1:123          *:*                                    772
  W32Time
  [svchost.exe]

  UDP    127.0.0.1:3456         *:*                                    1304
  [inetinfo.exe]

  UDP    192.168.1.11:138       *:*                                    4
  [System]

  UDP    192.168.1.11:123       *:*                                    772
  W32Time
  [svchost.exe]

  UDP    192.168.1.11:137       *:*                                    4
  [System]

Posted by xiaojf at 6:59 下午 in 未分类

查询Solaris 10运行了多长时间与何时启动

uptime 显示运行了多长时间

who -b 显示何时启动的服务器

Posted by xiaojf at 6:56 下午 in 未分类

Solaris 10下查看被内核和应用程序占用的内存

我们在使用vmstat和top命令查看内存时,会发现空闲内存会越来越少,但是运行的应用程序确没有占用那么多内存,那么内存被什么占用了呢?这是因为,vmstat和top显示的是确实没有使用的空闲内存,unix原则就是尽量利用内存,例如文件缓存等。所以vmstat和top命令看到的空闲内存会随着系统运行时间的增长会越来越少,几乎会接近0。如何查看被内核和应用程序占用的内存呢?这要使用mdb -k 命令。

bash-3.00# mdb -k
Loading modules: [ unix krtld genunix specfs dtrace cpu.generic uppc pcplusmp ufs mpt ip hook neti sctp arp usba uhci fcp fctl nca lofs zfs random sppp crypto ipc md cpc fcip logindmux ptm ]
> ::memstat
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                     833924              3257   10%
Anon                      1449322              5661   17%
Exec and libs               17831                69    0%
Page cache                  32513               127    0%
Free (cachelist)           213700               834    3%
Free (freelist)           5837973             22804   70%

Total                     8385263             32754
Physical                  8176401             31939
> ::memstat
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                     844621              3299   10%
Anon                      1480708              5784   18%
Exec and libs               21242                82    0%
Page cache                  36978               144    0%
Free (cachelist)           217071               847    3%
Free (freelist)           5784643             22596   69%

Total                     8385263             32754
Physical                  8176401             31939
>

bash-3.00# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    1045197              4082   12%
Anon                      1549615              6053   18%
Exec and libs               20779                81    0%
Page cache                  27785               108    0%
Free (cachelist)           357311              1395    4%
Free (freelist)           5384576             21033   64%

Total                     8385263             32754
Physical                  8176401             31939
bash-3.00#

# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    1349622              5271   16%
Anon                      1793102              7004   21%
Exec and libs               21171                82    0%
Page cache                 150905               589    2%
Free (cachelist)           384448              1501    5%
Free (freelist)           4686015             18304   56%

Total                     8385263             32754
Physical                  8176401             31939
#

bash-3.00# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    2099121              8199   25%
Anon                      2278980              8902   27%
Exec and libs               20450                79    0%
Page cache                 163090               637    2%
Free (cachelist)           268669              1049    3%
Free (freelist)           3554953             13886   42%

Total                     8385263             32754
Physical                  8176401             31939

# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    2311342              9028   28%
Anon                      2387556              9326   28%
Exec and libs               20852                81    0%
Page cache                 262364              1024    3%
Free (cachelist)           487156              1902    6%
Free (freelist)           2915993             11390   35%

Total                     8385263             32754
Physical                  8176401             31939
#

===================================================================

bash-3.00# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                     234867               917    3%
Anon                       168477               658    2%
Exec and libs               16892                65    0%
Page cache                  29174               113    0%
Free (cachelist)            38915               152    0%
Free (freelist)           7896938             30847   94%

Total                     8385263             32754
Physical                  8176401             31939
bash-3.00# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                     571332              2231    7%
Anon                      1266194              4946   15%
Exec and libs               17549                68    0%
Page cache                 109679               428    1%
Free (cachelist)            63888               249    1%
Free (freelist)           6356621             24830   76%

Total                     8385263             32754
Physical                  8176401             31939
bash-3.00# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                     572888              2237    7%
Anon                      1277415              4989   15%
Exec and libs               17589                68    0%
Page cache                 109316               427    1%
Free (cachelist)            64360               251    1%
Free (freelist)           6343695             24780   76%

Total                     8385263             32754
Physical                  8176401             31939

===========================================================

bash-3.00# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    1256922              4909   15%
Anon                      1798233              7024   21%
Exec and libs               17866                69    0%
Page cache                 144120               562    2%
Free (cachelist)           158014               617    2%
Free (freelist)           5010108             19570   60%

Total                     8385263             32754
Physical                  8176401             31939

Posted by xiaojf at 6:55 下午 in 未分类

为Solaris 10打补丁

开始使用Solaris 10的时候,因为是在JDS桌面上使用的Update Manager这个GUI工具,一直没有使用命令来升级。服务器在远程了,只能使用命令来升级了。现在介绍一下,很简单。

这个命令就是 smupdate。

首先使用 smupdate analyze ,这个返回的结果就是可用来升级的补丁的列表。

然后使用 smupdate download ,这个会将可升级的补丁下载到本地服务器。

最后使用 smupdate update ,这个就会升级了。

如果你直接运行 smupdate update这个自己会分析、下载、安装,全部在一个命令下就完成了。

上面是最偷懒的做法,安装了所有补丁。

你可以通过在smupdate download和smupdate update命令中指定 -i 参数,来升级你需要的补丁。

有些补丁会提示冲启服务器才能安装,记住不用使用reboot!

应该使用  shutdown -y -g 0 -i 6 或者 init 6 来重启才行。

Posted by xiaojf at 6:53 下午 in 未分类

在 Solaris 操作系统中解决 32 位 stdio 只支持 256 个文件描述符的限制(转)

过去,运行于 Solaris 操作系统上的 32 位应用程序只能通过 C 库中的标准 I/O 使用最多 255 个文件描述符。Solaris 10 及更高版本操作系统中的 FILE 扩展工具允许行为良好的 32 位应用程序通过标准的 I/O 功能使用任何有效的文件描述符。

行为良好的应用程序指满足以下所有三个要求的应用程序:

    ● 不直接访问 FILE 结构中任何由与任何标准 I/O 流相关的 FILE 指针指向的成员字段。
    ● 检查所有标准 I/O 函数的返回值以便发现错误状态
    ● 当报告错误状态时表现正常

本文详细介绍了 FILE 扩展工具所引入的运行时和编程解决方案。以下讨论仅针对 32 位应用程序,因为 64 位应用程序不受 256 个文件描述符限制的影响。

背景资料

在网上快速搜索 Solaris stdio open file descriptors 将会产生无数个 Solaris 操作系统限制 Stdio 最多只能使用 256 个指示符的结果。1992 Request for Enhancement (RFE) 解释了该问题:32 位标准输入输出例程应该支持大于 255 个文件指示符。错误报告链接到少数其他与标准输入输出的 256 个文件指示符限制相关的问题。

Solaris 操作系统上有此限制,是因为 unsigned char 用于存储与标准输入输出流相关的文件指示符的值。查看您可以在 Solaris 操作系统上的头部 /usr/include/stdio_impl.h 中发现的 FILE 结构的定义(该 Solaris 操作系统没有本文讨论的 解决方案):

struct __FILE_TAG       
{
#ifdef _STDIO_REVERSE
        unsigned char   *_ptr;
        int             _cnt;   
#else
        int             _cnt;  
        unsigned char   *_ptr;  
#endif
        unsigned char   *_base;
        unsigned char   _flag;
        unsigned char   _file;  
            /* UNIX System file descriptor */
        unsigned        __orientation:2;
        unsigned        __ionolock:1;   
        unsigned        __seekable:1;
        unsigned        __filler:4;
};

 

名称 __FILE_TAG 只是 FILE 的别名。请参阅 /usr/include/stdio_tag.h。

成员字段 _file 保存了文件描述符,该文件描述符被声明为 unsigned char 类型。一个 unsigned char 在内存中占 8 位。因此 _file 可以保存的最大值为 2^8 = 256。换句话说,_file 对每个 32 位进程限制访问 256 个文件描述符。该限制被清楚地记录在 stdio(3C) 的手册页。

Sun 过去没有从 8 位 unsigned char 转变为 16 位 int 来适应更多的文件描述符。这样做会破坏与早期 Solaris 操作系统版本的双边兼容性,因为这会更改 FILE 结构的大??/p>

解决方案

从2007年7月发布的Solaris 10开始,Sun将会以扩展的 FILE 工具的形式提供运行时和编程解决方案,以减轻 stdio(标准输入输出)的256个文件描述符限制。运行 Solaris Express 版本或任何 OpenSolaris OS distribution after build 39 将会拥有这些功能。本文的 补丁和缺陷 一节包含了在任何运行从 Solaris 10 3/05 到 Solaris 10 11/06 版本的系统上安装扩展的 FILE 工具的说明。

运行时解决方案

像这一节的标题暗示的一样,运行时解决方案不需要更改任何源代码或重新编译对象,以克 服stdio(3C) C 库函数的 256 个文件描述符限制。但是,现有 32 位应用程序的默认行为将不会更改,除非您明确启动扩展的 FILE 工具。启用了此功能的应用程序将可以关联任何具有标准 I/O -- 或 stdio -- 流的有效文件描述符。任何 3 以内的值以及由 ulimit -n 从用于启动应用程序的 shell 返回的值都是有效的文件描述符。文件描述符 0、1、和 2 被保留用作默认 stdin、stdout 和 stderr I/O流。

您可以增加 shell 中每个流程的最大文件描述符数目,从默认的 256 到任何少于或等于该命令的返回值的值均可。

echo 'rlim_fd_max/D' | mdb -k | awk '{ print $2 }'

 

要调整 shell 中的文件描述符限制,请在 sh/ksh/bash 运行 ulimit -n <max_file_descriptors> 或者在 csh运行 limit descriptors <max_file_descriptors> ,这里 max_file_descriptors为您想要的文件描述符的最大数目。

每个进程任何时候可以打开的文件的数目的默认限制为 65,536。您可以使用系统可调节的参数 rlim_fd_max 来调节此限制。尽管可以通过调节 rlim_fd_max 参数来打开大量文件,但是当打开成百上千的文件时,虚拟内存空间会成为32位进程的限制。当进程达到虚拟内存的限制时,stdio 会调用失败,出现 Not enough space(没有足够空间)错误。

在运行 32 位应用程序之前,通过执行以下操作启用扩展的 FILE 工具:

   1. 调高 shell 中文件描述符的最大数目。
   2. 预载扩展的 FILE 工具,/usr/lib/extendedFILE.so.1。

注意:extendedFILE.so.1 不是库,而是扩展的 FILE 工具的启用程序。

这里是如何从 ksh 启用扩展的 FILE 工具的方法:

% ulimit -n
256

% echo 'rlim_fd_max/D' | mdb -k | awk '{ print $2 }'
65536

% ulimit -n 65537
ksh: ulimit: exceeds allowable limit

% ulimit -n 65536

% ulimit -n
65536

% export LD_PRELOAD_32=/usr/lib/extendedFILE.so.1
% application [arg1 arg2 .. argn]

 

以下示例显示了启用或未启用扩展的 FILE 工具的简单 32 位进程的行为。用于测试的是一个简单的 C 程序,尝试使用 fopen() 接口打开 65,536 个文件。

% cat fopentestcase.c

#include <stdio.h>
#include <stdlib.h>

#define NoOfFILES 65536

int main()
{
        char filename[10];
        FILE *fds[NoOfFILES];
        int i;

        for (i = 0; i < NoOfFILES; ++i)
        {
                sprintf (filename, "/tmp/%d.log", i);
                fds[i] = fopen(filename, "w");

                if (fds[i] == NULL)
                {
                        printf("\nNumber of open files = %d. " \
               "fopen() failed with error:  ", i);
                        perror("");
                        exit(1);
                }
                else
                {
                        fprintf (fds[i], "some string");
                }
        }
        return (0);
}

 

使用 shell 中文件描述符的默认最大数目重现失败:

% cc -o fopentestcase fopentestcase.c

% ulimit -a | grep descriptors
nofiles(descriptors) 256

% ./fopentestcase
Number of open files = 253. fopen() failed with error:
Too many open files

 

提高文件描述符限制,启用扩展的 FILE 工具,并运行再次运行测试,查看运行时解决方案的运行。

% ulimit -n 5000

% ulimit -a | grep descriptors
nofiles(descriptors) 5000

% export LD_PRELOAD_32=/usr/lib/extendedFILE.so.1

% ./fopentestcase
Number of open files = 4996. fopen() failed with error:
Too many open files

% ulimit -n 65536

% ulimit -a | grep descriptors
nofiles(descriptors) 65536

% ./fopentestcase
Number of open files = 65532. fopen() failed with error:
Too many open files

 

看到缺少一个文件描述符 -- 不包括 stdin、stdout 和 stderr 各自的 0、1 和 2 -- 在上述示例中。当启用扩展的 FILE 工具时,文件描述符 196 默认将变得不可分配,以最小化无记录的数据损坏。有关更多信息,请参阅下一节 环境变量。

这里是确认此陈述的 pfiles 输出:

% pfiles `pgrep fopentestcase` | egrep "log|:"
 ...
 195: S_IFREG mode:0644 dev:102,7 ino:7380 uid:209044 ...
      /tmp/192.log
 197: S_IFREG mode:0644 dev:102,7 ino:7381 uid:209044 ...
      /tmp/193.log
 ...

 

环境变量

两个环境变量控制扩展的 FILE 工具的行为:_STDIO_BADFD和_STDIO_BADFD_SIGNAL。

    ● _STDIO_BADFD -- 该变量使用任何 3 至 255 之间的整数值,该值将作为文件描述符变得不可分配。设置此环境变量将对行为未知的软件提供一种保护机制,比如没有源代码的第三方库,这样应用程序将不会经历没有记录的数据损坏。缺少此环境变量时,默认的值 196 将会在运行时被标记为不可分配的文件描述符。

      如您所知,在扩展的 FILE 工具出现之前,在 Solaris 操作系统上构建的对象代码将不会期望任何不符合 8 位 unsigned char 的文件描述符,并且将无法理解如何处理扩展的FILE指针。因为这些原因,范围被限制在3 至 255,所以当实际的描述符其实是扩展的文件描述符时(即,任何大于255的值),通过重新引用 FILE -> _file 而不是 fileno(3C) 函数查询文件描述符值的代码将会收到不能分配或错误的文件描述符。
    ● _STDIO_BADFD_SIGNAL -- 此环境变量用于当未经检查的代码尝试修改不能分配的文件描述符时指定发送到进程的信号。此变量使用代表任何有效信号的整数或字符串。有关 Solaris 操作系统上所有支持的信号的有效值或字符串的更多信息,请参阅 signal.h(3HEAD)。如果在该扩展 FILE 工具的使用期间检测到某个意外事件发生,则该变量使指定的信号被发送到应用程序。默认信号为 SIGABRT。

何时不使用此解决方案

如果应用程序执行以下操作,则不要启用扩展的 FILE 工具:

    ● 直接取消引用FILE结构的 _file 成员。
    ● 使用 fileno() 宏(已从 Solaris 2.7 版的头部去除)而不是 fileno(FILE) 函数来获取底层文件描述符的值。

当启用此功能后,大于 255 的文件描述符将被存储在一个应用程序未知的备用位置,而环境变量 _STDIO_BADFD 保存的不可分配或错误文件描述符将被存储在 FILE -> _file 成员字段中。当实际的底层文件描述符大于 255 时,应用程序不恰当地访问 FILE -> _file 成员字段将会产生不可分配的错误文件描述符,因此导致未记录的数据错误。

如果进程截断了由 fileno(FILE) 函数返回的值,也会发生数据损坏。例如,如果 fileno() 函数返回的 16 位或 32 位的 int 值被存储在一个 8 位的 unsigned char 变量中,则会进行截断。访问被截断的文件描述符可能会产生错误。

以下运行时的错误消息就清楚显示了应用程序修改 stdio 中的 FILE 结构的内部文件描述符成员字段。

Application violated extended FILE safety mechanism.
Please read the man page for extendedFILE.
Aborting

 

当您收到这样的错误消息时,请停止对应用程序使用扩展的 FILE 工具。如果可能,通过将所有对 FILE -> _file 的引用替换为对 fileno(FILE) 的调用来修复资源。忽略此运行时错误将会导致数据损坏。

示例

以下的小示例展示了两个环境变量 _STDIO_BADFD 和 _STDIO_BADFD_SIGNAL 的用法,并其显示了当代码违反FILE安全机制时后续程序崩溃。

在任何运行于没有扩展的 FILE 解决方案的 Solaris 操作系统上编译以下代码并构建一个库。注意:运行 Solaris 10 3/05 到 Solaris 10 11/06 版本的未打补丁的系统不包含扩展的 FILE 解决方案。但是,通过应用最新的 kernel 和 libc 补丁,在这些系统上安装扩展的 FILE 工具是可以的。相关说明请参阅本文的 补丁和缺陷 一节。

% cat thirdpartysrc.c

#include <stdio.h>

void manipulatefd (FILE *fptr)
{
        ;
        ;
        fprintf(stdout, "\n%s : manipulatefd(): " \
        "underlying file descriptor = %d\n", \
        __FILE__, fptr -> _file);
        fptr -> _file = 123;
        fprintf(fptr, "This call is gonna fail!\n");
        ;
        ;
}

% cc -G -o /tmp/libthirdparty.so thirdpartysrc.c

 

在任何运行具有扩展的 FILE 解决方案的 Solaris 操作系统的系统上,通过将对象代码和上一步中创建的库链接起来编译以下代码并建立一个可执行文件:

% cat enableextfile.c

#include <stdio.h>
#include <stdlib.h>

#define NoOfFiles 500

void manipulatefd(FILE *);

int main ()
{
        FILE *fptr;
        int i;

        for (i = 0; i < NoOfFiles; i++)
        {
                fptr = fopen("/tmp/enable_test.txt", "w");

                if (fptr == NULL)
                {
                        perror("fopen failed. ");
                        exit(1);
                }

                printf("\nfd = %d", fileno(fptr));

                if (fileno(fptr) % 400 == 0)
                {
                        manipulatefd(fptr);
                }
        }

        return(0);
}

% export LD_LIBRARY_PATH=/tmp:$LD_LIBRARY_PATH
% cc -o enableextfile -lthirdparty enableextfile.c

 

将每个进程最大文件描述符限制提高为任何大于 255 的数字,设置环境变量 _STDIO_BADFD 和 _STDIO_BADFD_SIGNAL,通过预载 /usr/lib/extendedFILE.so.1 启动扩展的 FILE 工具,最后运行可执行文件:

% ulimit -n
256

% ulimit -n 500

% ulimit -n
500

% export _STDIO_BADFD=196
% export _STDIO_BADFD_SIGNAL=SIGABRT
% export LD_PRELOAD_32=/usr/lib/extendedFILE.so.1

% ./enableextfile
fd = 3
fd = 4
fd = 5
...
...
fd = 398
fd = 399
fd = 400
thirdpartysrc.c : manipulatefd():
    underlying file descriptor = 196
Application violated extended FILE safety mechanism.
Please read the man page for extendedFILE.
Aborting
Abort(coredump)

% /usr/bin/pstack core
core 'core' of 10172:   ./enableextfile
 d1f28e65 _lwp_kill (1, 6) + 15
 d1ee2102 raise    (6) + 22
 d1ec0dad abort    (0, 80677e0, d1f60000, ...) + cd
 d1f01d54 _file_get (80677e0) + b4
 d1efeb21 _findbuf (80677e0) + 31
 d1ef2f16 _ndoprnt (d1f70344, 80471d4, 80677e0, 0) + 46
 d1ef669f fprintf  (80677e0, d1f70344) + 9f
 d1f702cb manipulatefd (80677e0) + 3b
 0805097f main     (1, 8047214, 804721c) + 9f
 0805084a _start   (1, 8047360, 0, 8047370, ... ) + 7a

 

如果应用程序没有显示任何以前提到的参数,则它可以利用此运行时解决方案而不管其年纪 -- 即,即使在 Solaris 7 或更早版本上建立的应用程序也可能继续正常工作。

有关更多示例,请参阅 extendedFILE(5) 的手册页面。

编程解决方案

此节用于新应用程序以及开发人员可以轻易修改的应用程序。

两个编程接口将允许访问大于 256 的文件描述符 FILE 池,提供的最大文件描述资源限制已经被提高了。注意默认的最大文件描述符限制仍为 256。

增强的标准 I/O 打开调用:fopen(3C)、fdopen(3C)和popen(3C)

为了降低修改现有资源以利用扩展的 FILE 功能的工作量,stdio 打开调用(比如 fopen(3C)、fdopen(3C) 和 popen(3C))的现有模式字符串增加了新标记:F。例如:

FILE *fptr = fopen("dummy.txt", "rF");

int fd = creat("dummy2.txt", S_IWUSR);
FILE *stream = fdopen(fd, "wF");

FILE *ptr = popen("/usr/bin/ls *.txt", "rF");

 

如果该模式字符串的最后一个字符为 F,则 32 位应用程序将被允许将流和通过值大于 255 的文件描述符访问的文件关联起来。在 64 位应用程序的情况下,应用程序将不加记录地忽略模式字符串中的字符F。除了这个小的增强,stdio 打开调用的现有语法没有更改。

stdio 打开调用的模式字符串中的F仅用于不执行以下操作的代码:

    ● 直接取消引用 FILE 结构的成员字段。
    ● 返回一个 FILE 指针给调用程序

如果应用程序展示了任何以前提到的模式,则字符 F 一定不能附加到模式字符串中以启动扩展的 FILE 功能。当模式的最后一个字符是F时,如果 32 位的应用程序直接使用 FILE 结构中的成员字段,则会出现数据损坏。

当扩展的 FILE 指针被返回到用户未知的二进制代码(即意外代码)时也可能出现数据损坏,因为调用程序可能不知道怎么处理它。该接口没有对误操作 FILE 指针提供任何保护。如果 FILE 指针必须返回到任何意外代码,请考虑在代码中以高水平使用 启用扩展的_FILE_stdio(3C)。

要用法实例,更改下行后重建测试:

fds[i] = fopen(filename, "w");

 

更改为:

fds[i] = fopen(filename, "wF");

 

现在提高 shell 中的文件描述符限制,然后再次运行测试查看结果:

% cc -o fopentestcaseF fopentestcase.c

% ulimit -n 10000

% ulimit -a | grep descriptors
nofiles(descriptors) 10000

% ./fopentestcaseF
Number of open files = 9996. fopen() failed with error:
Too many open files

 

记下对任何特定库缺少的连接以使其工作。所有 stdio 例程仍是 libc 的一部分。

有关详细信息,请参阅手册页 fopen(3C)、fdopen(3C) 和 popen(3C)。

新的编程接口:enable_extended_FILE_stdio(3C)

如果 FILE 指针不是被限制在单个功能环境内,您可以使用新的编程接口 enable_extended_FILE_stdio(3C) 来启用扩展的 FILE 功能。此接口通过对行为未知的软件提供一些保护机制来最小化数据损坏,比如没有源代码的第三方库。例如,通过使用此接口,当应用程序不适当地取消对 FILE -> _file 的引用时,用户可以选择任何信号在运行时发送到进程。

该新接口在 /usr/include/stdio_ext.h头部中定义如下:

int enable_extended_FILE_stdio(int, int);

 

第一个参数是整数,指定了应用程序想要选择作为不可分配的文件描述符的文件描述符(从 3 至 255)。相反,将其设置为-1将会要求 enable_extended_FILE_stdio(3C) 选择一个合理的不可分配的文件描述符。这等同于当为扩展的 FILE 启用 runtime solution 时设置环境变量 _STDIO_BADFD。

第二个参数是整数,指定当不可分配的文件描述符被用作所有系统调用(除了 close(2) 或 closefrom(3C))的文件描述符时,要发送给进程的信号。一些应用程序可能尝试关闭它们没有打开的文件描述符。该例外可防止应用程序因为这样无害的调用崩溃。

如果忽略 -1,则默认的信号 SIGABRT 将被发送到进程。值 0 会通过禁止发送信号忽略任何 FILE -> _file 取消引用。否则,指定的信号将被发送到进程。有关 Solaris 操作系统上完整的信号了列表,请参阅 signal.h(3HEAD) 手册页。这等同于当为扩展的FILE启用运行时解决方案时设置环境变量 _STDIO_BADFD_SIGNAL。

enable_extended_FILE_stdio(3C) 功能只在 32 位编译环境下可用。

要使扩展的 FILE 工具发挥作用,将进程的文件描述符默认最大限制从 256 提高到任何小于或等于进程在任何时间可以打开的文件数的硬性限制。有关详细信息,请查看 kernel 可调节的 rlim_fd_max。您这么做,您可以从 shell 中使用 ulimit/limit 命令,或者通过在 /usr/include/sys/resource.h 中定义的函数 getrlimit(2)/setrlimit(2) 才有编程来进行。

接下来的小编程实例展示了三点:

    ● 通过 getrlimit(2)/setrlimit(2) 接口设置文件描述符限制。
    ● 此新功能启用扩展的 FILE 工具的用法
    ● 当某个意外代码通过直接更改 FILE -> _file 的值滥用底层文件描述符时,应用程序会崩溃

编译以下代码,并通过链接对象代码和库 libthirdparty.so(在本文的 运行时解决方案一节中创建)建立一个可执行文件。

% cat enableextfilestdio.c

#include <stdio.h>
#include <stdio_ext.h>
#include <stdlib.h>
#include <sys/resource.h>

#define NoOfFiles 500

void manipulatefd(FILE *);

int main ()
{
        FILE *fptr;
        struct rlimit rlp;
        int i;

        (void) getrlimit (RLIMIT_NOFILE, &rlp);
    /* set the desired number of file descriptors */
        rlp.rlim_cur = NoOfFiles;

        if (setrlimit (RLIMIT_NOFILE, &rlp) == -1)
        {
                perror ("setrlimit(): ");
                exit (1);
        }

        if (enable_extended_FILE_stdio (-1, -1) == -1)
        {
                perror ("enable_extended_FILE_stdio(3C): ");
                exit (1);
        }

        for (i = 0; i < NoOfFiles; i++)
        {
                fptr = fopen ("/tmp/enable_test.txt", "w");

                if (fptr == NULL)
                {
            perror("\nfopen failed. ");
                        exit (1);
                }

                printf ("\nfd = %d", fileno(fptr));

                if (fileno (fptr) % 400 == 0)
                {
                        manipulatefd (fptr);
                }
        }

        return (0);
}

% export LD_LIBRARY_PATH=/tmp:$LD_LIBRARY_PATH
% cc -o enableextfilestdio -lthirdparty enableextfilestdio.c

% ./enableextfilestdio
fd = 3
fd = 4
fd = 5
...
...
fd = 398
fd = 399
fd = 400
thirdpartysrc.c : manipulatefd():
    underlying file descriptor = 196
Application violated extended FILE safety mechanism.
Please read the man page for extendedFILE.
Aborting
Abort (core dumped)

 

有关更多信息,请参阅 enable_extended_FILE_stdio(3C) 的手册页面。

警告:在 Solaris 操作系统的下一个主要客户版中,_file 变成了 _magic

为了确保使用扩展的 FILE 机制的安全性,FILE 结构中的 _file 成员已经在 Solaris Express 操作系统 中被有意地重命名为 _magic(正在开发的 Solaris 操作系统的下一个主要客户版本的每月快照),并且在 OpenSolaris 源代码基础中也是如此(建立39后)。这个更改将破坏包含任何对FILE -> _file的引用的源代码的兼容性。注意:此警告不适用于 Solaris 10 操作系统,包括更新版本。

以下 diff 输出显示了在 FILE 结构的定义中引入以适应扩展的 FILE 工具的更改:

- unsigned char _file;  /* UNIX system file descriptor */
+ unsigned char _magic; /*Old home of the file descriptor*/
+          /* Only fileno(3C) can retrieve the value now */

- unsigned  __filler:4;
+ unsigned  __extendedfd:1; /* enable extended FILE */
+ unsigned  __xf_nocheck:1; /*no extended FILE runtime check*/
+ unsigned  __filler:10;

 

因此,在运行 Solaris Express OS 或任何 OpenSolaris OS distribution after build 39 的系统上以及在 Solaris 10 以后版本上(当其可用时)编译具有对 FILE -> _file 的引用的代码会失败,错误代码如下。

"filename.c", line xx: undefined struct/union member: _file
cc: acomp failed for filename.c

 

正式名称为 _file 的字段中的值可能不再包含 FILE 的文件描述符。如果该代码只是读取 _file 的值,使用更合适的 fileno(FILE) 函数代替所有这些引用。请参阅 fileno(3C) 的手册页。不应该再向 _file 指定新值。

对运行时性能的影响

当启用扩展的 FILE 工具后,访问小于或等于 255 的文件描述符时对性能没有影响。但是在访问大于或等于 256 的文件描述符时,由于在备用位置存储和检索文件描述符,性能会有轻微降低。

补丁和缺陷

如果您的系统运行的是 Solaris 10 操作系统的任何现有版本 -- 即,Solaris 10 3/05 到 Solaris 10 11/06 -- 您可以在系统上使用以下三个用于硬件平台的补丁(或更高版本)安装扩展的 FILE 工具:

SPARC 平台:

    ● 125100-04 Kernel Update Patch
    ● 120473-05 libc nss ldap PAM zfs Patch
    ● 125800-01 Fault Manager Patch

x86/x64 平台:

    ● 125101-04 Kernel Update Patch
    ● 120037-15 libc nss ldap PAM zfs Patch
    ● 125801-01 Fault Manager Patch

如果应用程序代码与 STLport 链接,则 Sun Studio 软件编译器套件随附的 C++ 标准库,使用 -library=stlport4 编译器选项,确保在 SPARC 平台上为 Sun Studio 11 软件打上 121017-07 或更新补丁,在 x86/x64 平台上打上 121018-07 或更新补丁,以便利用扩展的 FILE。

将扩展的 FILE 的缺陷(如果有)报告到 OpenSolaris 操作系统缺陷页面,并使用OpenSolaris操作系统 讨论论坛 进行任何声明。
参考资料以及建议的阅读材料

PSARC/2006/162:Extended FILE Space for 32-Bit Solaris Processes

Posted by xiaojf at 6:52 下午 in 未分类

Apache 和Resin整合问题多多啊

1.某些限制带宽和并发的模块对 Resin不适用。

2.Resin模块会引起带;jsessionid的URL重定向,造成JSF某些功能不正常

为加载Resin模块访问记录
119.119.242.236 - - [05/Feb/2009:17:05:45 +0800] "GET /test/page1.faces HTTP/1.1" 200 1076
119.119.242.236 - - [05/Feb/2009:17:05:51 +0800] "POST /test/page1.faces;jsessionid=92D95959F8CD7F0A320EF29CA9C392D4 HTTP/1.1" 200 616

加载Resin模块时的访问记录
119.119.242.236 - - [05/Feb/2009:17:07:26 +0800] "GET /test/page1.faces HTTP/1.1" 200 1076

119.119.242.236 - - [05/Feb/2009:17:07:28 +0800] "POST /test/page1.faces;jsessionid=6491B2E023B7E03F8FB5FCE21A95DA74 HTTP/1.1" 301 257
119.119.242.236 - - [05/Feb/2009:17:07:28 +0800] "GET /test/page1.faces HTTP/1.1" 200 1032

119.119.242.236 - - [05/Feb/2009:17:07:29 +0800] "POST /test/page1.faces HTTP/1.1" 200 616

Posted by xiaojf at 6:33 下午 in 未分类

用 smpatch给Solaris安装补丁,应该使用如下的关机方式

某些补丁在系统是多用户模式下不能安装,因此需要重启,但是不能使用reboot !

您需要执行系统关机才能激活已安装的一项或者多项。要启动系统关机操作,你必须使用以下命令之一:
○ 切换到固件提示符 - init 0 或 shutdown -i 0
○ 关闭系统电源 - init 5 或 shutdown -i 5
○ 重新启动系统 - init 6 或 shutdown -i 6

Posted by xiaojf at 6:33 下午 in 未分类

Solaris 错误提示:libpkcs11: open /var/run/kcfd_door: 权限被否定

Feb 15 11:23:40 wh000-01 java[5761]: [ID 523743 user.error] libpkcs11: /usr/lib/security/pkcs11_softtoken.so unexpected failure in ELF signature verification. System may have been tampered with. Cannot continue parsing /etc/crypto/pkcs11.conf
Feb 15 11:23:40 wh000-01 java[5761]: [ID 360798 user.error] libpkcs11: open /var/run/kcfd_door: 权限被否定

这个信息经常在 /var/adm/messages 中出现,查了一下,这是一个bug,无关紧要,忽略即可。

Posted by xiaojf at 6:31 下午 in 未分类

Solaris 10双网卡遇到的问题

由于服务器有两个网卡,所以在安装Solaris 10的时候,对这两个网卡都进行了设置。

主网卡  bnx0 192.168.1.80

附属网卡  bnx1 192.168.1.81

这两个网络接口都在同一个网段,发现一个有意思的现象。

如果主网卡不通,那么附属网卡也会不通。仅连接附属网卡到网络上,网络不通。这个问题以后再继续研究,暂时先把现象记录下来。

Posted by xiaojf at 6:31 下午 in 未分类

chmod 的使用

样例:
chmod A+group:hostuser:pdDxrcaRsWwACo:deny /var

Posted by xiaojf at 6:29 下午 in 未分类

Solaris 查询那个程序占用了你的流量

最近发现某个程序在访问外网的资源,占用了流量。

通过iftop命令

bash-3.00# /usr/local/sbin/iftop
interface: bnx0
IP address is: 211.160.54.147
MAC address is: 00:22:19:56:c4:b8
                  195Kb             391Kb              586Kb             781Kb         977Kb
└─────────────────┴─────────────────┴─────────────
211.160.54.148                   => 61.129.54.172                    78.0Kb  74.6Kb  54.8Kb
                                 <=                                   797Kb   786Kb   577Kb
211.160.54.148                   => 220.181.61.229                   34.3Kb  12.2Kb  13.2Kb
                                 <=                                  3.10Kb   826b    984b
211.160.54.148                   => 220.181.61.216                    336b   3.88Kb  3.87Kb
                                 <=                                  2.17Kb   573b    564b
wh002                            => 119.119.255.200                  2.92Kb  3.00Kb  2.80Kb
                                 <=                                   160b    160b    160b
211.160.54.148                   => 66.232.97.145                       0b    479b    120b
                                 <=                                     0b   1.92Kb   491b
211.160.54.148                   => 220.181.19.171                      0b   1.19Kb  1.19Kb
                                 <=                                     0b    430b    430b
211.160.54.148                   => 58.50.3.51                          0b    239b    239b
                                 <=                                     0b    431b    431b
255.255.255.255                  =>  *                                  0b      0b      0b
                                 <=                                  1.28Kb   262b     66b
211.160.54.148                   => 61.178.84.244                       0b     83b   7.58Kb
                                 <=                                   320b    147b    930b
211.160.54.148                   => 203.208.60.9                        0b     83b   1.75Kb
                                 <=                                     0b     83b    194b
wh002                            => 219.150.32.132                    292b     58b     44b
                                 <=                                   528b    106b     26b
──────────────────────────────────────────────────
TX:             cumm:  4.24MB   peak:    341Kb              rates:    116Kb  96.0Kb   115Kb
RX:                    13.6MB            887Kb                        805Kb   791Kb   584Kb
TOTAL:                 17.9MB           0.99Mb                        921Kb   887Kb   699Kb

发现某个程序向 61.129.54.172服务器请求数据。


通过  pfiles /proc/* > /pf.out 命令将进程信息输出到文件 /pf.out

打开这个文件搜索  61.129.54.172能够看到请求这个ip的进程的id

在通过 ps命令查看是那个程序,杀死它,问题得到解决!

Posted by xiaojf at 6:28 下午 in 未分类

java 的JDBC-ODBC驱动在jdk x86和 jdk x64下出现的问题

在Windows Server 2003 64位下,安装了JDK X86和JDK X64。

因为ODBC的驱动是32位的,所以java在JRE x86下使用JDBC-ODBC正常工作,但是在JDK X64下JDBC-ODBC不能正常运行。

微软没有提供64位的 ODBC 驱动。

Posted by xiaojf at 6:20 下午 in 未分类

FreeBSD 非交互式修改密码

echo theNewPasswordInPlainText | pw usermod username -h 0

Posted by xiaojf at 6:19 下午 in 未分类

Linux 下通过脚本修改密码

方法 1: passwd
利用管道,如下:
echo -e "NEW_PASSWORD\nNEW_PASSWORD" | passwd user

方法 2: chpasswd
另一种是使用chpasswd, 如下:
echo "USER:PASSWORD" | chpasswd

注意第一种方式,也可以用来修改一个基于Samba的系统:
echo -e "NEW_PASSWORD\nNEW_PASSWORD" | smbpasswd -a -s USER

Posted by xiaojf at 6:18 下午 in 未分类

Ubuntu8下安装Tomcat

使用

sudo apt-get install tomcat5.5

就会完成安装。 Tomcat的配置文件为/etc/tomcat5.5目录下,例如server.xml文件。

tomcat程序安装到了 /usr/share/tomcat5.5 下。

其实自己安装tomcat也很容易,只需到apache下载相应版本的tomcat,修改catalina.sh,设置好JAVA_HOME变量就可以运行了。

Posted by xiaojf at 9:52 上午 in 未分类

« First  « Prev   1 2 3 4 5   Next »  Last »
« 二月 »
星期日星期一星期二星期三星期四星期五星期六
 123456
78910111213
14151617181920
21222324252627
28