2008-10-24

Solaris下几个常用的进程查询命令

维护后台程序的时候经常要详加了解进程的相关信息,下面是几个常用的进程管理
命令:

/usr/ucb/ps -auxww 这样ps出来的内容会显示完整command信息
pldd pid 显示链接到每个进程的动态链接库 *
pstack pid 显示每个lwp的十六进制与符号堆跟踪 *
ptree pid  显示包含指定PID的进程树
pwdx pid 显示当前工作目录 * (AIX下:procwdx pid)
后面加*的必须是超级用户执行。这些工具在/usr/proc/bin/里面。

先找出进程编号:
root@xinx_db2 # ps -ef | grep parfile5 | grep -v grep
root 146 145 5 20:26:36 pts/7 10:55 exp wacos/oss
file=wacos_nousage5.dmp parfile=parfile5.txt consistent=y log=wac
root@xinx_db2 #

显示完整command信息,上面的ps -ef不会显示完整命令信息:
root@xinx_db2 # /usr/ucb/ps -auxww | grep parfile5 | grep -v grep
root 146 4.8 0.116088 8616 pts/7 R 20:26:36 20:19 exp wacos/oss
file=wacos_nousage5.dmp parfile=parfile5.txt consistent=y
log=wacos_nousage5.log compress=n
root@xinx_db2 #

显示该进程的进程树信息,可获知前后调用关系,特别对于不清楚是应用进程ID还
是由应用进程衍生的oracle进程的时候,如下面的147号进程才是真正的oracle进程:
root@xinx_db2 # ptree 146
145 sh ./nousage_exp5.sh
146 exp wacos/oss file=wacos_nousage5.dmp parfile=parfile5.txt
consistent=y log=wac
147 oracleORCL (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root@xinx_db2 #

显示该进程的当前工作目录:
root@xinx_db2 # pwdx 146
146: /backup/exp20080114
root@xinx_db2 #

显示该进程用到了哪些动态链接库,如果库缺失就会有提示:
root@xinx_db2 # pldd 146
146: exp wacos/oss file=wacos_nousage5.dmp parfile=parfile5.txt consistent=
/opt/oracle/db01/app/oracle/product/9.2.0/lib/libclntsh.so.9.0
/opt/oracle/db01/app/oracle/product/9.2.0/lib/libwtc9.so
/usr/lib/sparcv9/libnsl.so.1
/usr/lib/sparcv9/libsocket.so.1
/usr/lib/sparcv9/libgen.so.1
/usr/lib/sparcv9/libdl.so.1
/usr/lib/sparcv9/libc.so.1
/usr/lib/sparcv9/libaio.so.1
/usr/lib/sparcv9/librt.so.1
/usr/lib/sparcv9/libkstat.so.1
/usr/lib/sparcv9/libm.so.1
/usr/lib/sparcv9/libmp.so.2
/usr/platform/sun4u-us3/lib/sparcv9/libc_psr.so.1
root@xinx_db2 #

2008-10-23

windows+linux双系统互相访问硬盘分区的方法

很多朋友的电脑都是装的双系统,其中windows * +Linux模式的很多,双系统能为
大家提供更强的功能,但是在一个系统中需要用到另一个系统下的资料的情况在所
难免,如何实现双系统下资源共享呢?
重点讲windows下访问linux的分区:

1.Linux下访问Windows的资源
其实这个不难,大部分Linux的发行版都支持访问windows的硬盘分区,好一点的像
ubuntu等,安装完后会自动挂载windows的分区到目录下,有些版本稍微麻烦一点
点,需要mount 一下,手动挂载windows下的分区(这种情况可以设置成开机自动
挂载,google上很多很多例子),也不麻烦。
有些发行版只支持挂载FAT格式的分区(比如我前两天装的红帽(Redhat
Enterprise Linux)),这个不要紧,到网上下载一个内核扩展包安装一下就可以
了。或者重新编译内核,编译的过程中选中对NTFS的支持。(具体见我的上一篇文章)

2.windows下访问linux的分区
方法一(只读):
下载最新的Explore2fs,下载地址: http://www.chrysocome.net/explore2fs
启动文件浏览器可以看到linux下的分区文件,但是只能读,不可写。
方法二(只读):到http://www.diskinternals.com/linux-reader ,下载并安装
DiskInternals Linux Reader 安装完后自动扫描你的linux分区,列出分区下的文件。
方法三(可读可写):到http://www.fs-driver.org/index.html 下载 Ext2
Installable File System For Windows (它支持ext2ext3!)
安装过程中提示你是否 enable write,选中该选项可以对linux分区进行写操作,
不选中只能读不可以写。
然后提示你是否支持大文件的操作,如果不选中只能在两个操作系统中操作不大于
2G的文件,大于2G的文件禁止在linux和windows两个系统之间复制等操作。
然后提示你为linux分区选择一个盘符,一般选择L (代表Linux分区),swap分区
就不要选择盘符了,这是Linux下的交换分区,相当于windows下的虚拟内存,不要
使用它存文件。
然后一路NEXT,最后FINISH.查看我的电脑下有没有L盘,如果没有,重启一下就是。
我就是使用的这种办法。当初我给Linux操作系统预留的空间不多,现在使用Linux
操作系统比较顺手了,经常有许多文件需要两个操作系统之间来回搬动,重装系统
又麻烦,我就使用了这种方法。在linux下可以访问windows,windows下也可以访
问linux。
我在自己电脑上试过,Perfect !如有不当,恳请指点!!

2008-10-21

Solaris和Linux下面查看硬件配置信息的命令

我整理的关于硬件信息查看的命令:
linux:
内存: cat /proc/meminfo
cpu: cat /proc/cpuinfo
硬盘: df -h -T(no device的设备看不到)
fdisk -l可以在redhat9.0中看; redhat企业版不行.


solaris:
网卡速度: dmesg |grep link
CPU频率: psrinfo -v 或者mpstat
cpu\内存等:prtdiag -v (大部分信息全部列出) 需要先进入
/usr/platform/sun4u/sbin
硬盘: iostat -E

linux下还有几个命令可以看很多硬件设备的信息.
lspci -v
dmidecode
dmesg

solaris查看系统硬件信息


1. 获得系统信息:
# uname -X
System = SunOS
Node = Test_SunOS
Release = 5.9
KernelID = Generic_112234-03
Machine = i86pc
BusType = <unknown>
Serial = <unknown>
Users = <unknown>
OEM# = 0
Origin# = 1
NumCPU = 1

2.CPU的信息:
# psrinfo -v 0
Status of processor 0 as of: 09/08/2006 14:42:33
Processor has been on-line since 09/08/2006 14:12:03.
The i386 processor operates at 1733 MHz,
and has an i387 compatible floating point processor.

3.内存的信息
# prtconf |grep Memory
Memory size: 128 Megabytes

问题总结:
1. 交换分区的大小:
swap -s 命令的结果, 每次返回的swap的大小(tatol = used + available),都不
一样, 不明白 :-<


2. 硬盘的属性
我运行的结果如下, 很费解.
# iostat -E
sd0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: NECVMWar Product: VMware IDE CDR10 Revision: 1.00 Serial No:
VMware IDE CDR10
Size: 0.00GB <0 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0

3. 网卡的信息 ,
netstat -np 只能看到可用的网卡信息 包括, 名称, MAC, IP 信息, 没有配置IP
的网卡,看不到, 还有别的方法吗?
# kstat -c net|grep name
name: lo0 class: net
name: pcn0 class: net
name: pcn1 class: net
name: zero_copy class: net

【转】Java虚拟机支持的最大内存限制

最近在开发Java的程序。本来我是一直很喜欢Java的内存管理的,不需要担心分配
内存,只管分配,垃圾收集器自己会给你回收内存的。现在开发的程序数据量很
大,为了速度快,我准备把所有的信息加载进内存,这样可以保证快速响应。我还
在反复算内存,想想自己的数据量,现在刚开始的时候应该够了(我的机器是4G内
存,虽然Windows就认3.5G,但是比起我现在的数据量应该没问题)。

没想到第一个实验的程序,跑了几个小时,就遇到了Out of Memory Exception
了。看看自己的虚拟机设置,我设置的是-Xms512M -Xmx1024M。想都没想,直接改
成-Xms512M -Xmx2048M,结果直接就Could not reserve enough space for
object heap。程序都起不来了。这才发现原来最大内存还有限制。上网搜了一
下,发现很多讨论这个问题的文章。最终在BEA的DEV2DEV论坛发现了最有用的一篇
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=
35704&start=0&tstart=0

这里的版主YuLimin 做了测试,得出结论:

公司 JVM版本 最大内存(兆)client 最大内存(兆)server
SUN 1.5.x 1492 1520
SUN 1.5.5(Linux) 2634 2660
SUN 1.4.2 1564 1564
SUN 1.4.2(Linux) 1900 1260
IBM 1.4.2(Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902

我现在用的是JDK1.6. 0_05,测试了一下。在Client状态下最大是,我的JDK不认-
Server参数,测试不了Server状态。估计差不多。

SUN 1.6.0 1442 N/a

看样子用Java想用大内存也是不可能的了。而且一般的说法是内存太大了,垃圾收
集的时间就会长。这也可以理解,一般是内存不够用了才收集的,扫描2G内存比1G
当然要慢多了,而且内存对象多了,估计关系是指数上升的。

下面附上YuLimin的测试方法和测试记录。

测试方法:在命令行下用 java -XmxXXXXM -version 命令来进行测试,然后逐渐
的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息。

测试记录:

我在Windows 2000 ADS上面测试内存使用的结果如下
SUN的1.2.2、1.3.1、1.4.2、1.5.0、IBM1.4.2、BEA JRockit 1.4.2


F:\JDK\1.2.2\bin>java -Xmx700000255M -version
java version "1.2.2″
Classic VM (build JDK-1.2.2_017, native threads, symcjit)

F:\JDK\1.2.2\bin>java -Xmx700000256M -version
Bad max heap size: -Xmx700000256M
Could not create the Java virtual machine.
=====================================================================

F:\JDK\1.3.1\bin>java -version
java version "1.3.1_18″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)
Java HotSpot(TM) Client VM (build 1.3.1_18-b01, mixed mode)

F:\JDK\1.3.1\bin>REM If present, the option to select the VM must be first.

F:\JDK\1.3.1\bin>REM The default VM is -hotspot.

F:\JDK\1.3.1\bin>java -hotspot -Xmx1554M -version
java version "1.3.1_18″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)
Java HotSpot(TM) Client VM (build 1.3.1_18-b01, mixed mode)

F:\JDK\1.3.1\bin>java -hotspot -Xmx1555M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap

F:\JDK\1.3.1\bin>java -server -Xmx1522M -version
java version "1.3.1_18″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)
Java HotSpot(TM) Server VM (build 1.3.1_18-b01, mixed mode)

F:\JDK\1.3.1\bin>java -server -Xmx1523M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap

F:\JDK\1.3.1\bin>java -classic -Xmx2047M -version
java version "1.3.1_18″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_18-b01)
Classic VM (build 1.3.1_18-b01, native threads, nojit)

F:\JDK\1.3.1\bin>java -classic -Xmx2048M -version
Bad max heap size: -Xmx2048M
Could not create the Java virtual machine.
=====================================================================

F:\JDK\1.4.2\bin>java -version
java version "1.4.2_12″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)
Java HotSpot(TM) Client VM (build 1.4.2_12-b03, mixed mode)

F:\JDK\1.4.2\bin>REM The default VM is client.

F:\JDK\1.4.2\bin>java -client -Xmx1308M -version
java version "1.4.2_12″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)
Java HotSpot(TM) Client VM (build 1.4.2_12-b03, mixed mode)

F:\JDK\1.4.2\bin>java -client -Xmx1309M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap

F:\JDK\1.4.2\bin>java -server -Xmx1308M -version
java version "1.4.2_12″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)
Java HotSpot(TM) Server VM (build 1.4.2_12-b03, mixed mode)

F:\JDK\1.4.2\bin>java -server -Xmx1309M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap

F:\JDK\1.4.2\bin>REM -hotspot is a synonym for the "client" VM [deprecated]

F:\JDK\1.4.2\bin>java -hotspot -Xmx1308M -version
java version "1.4.2_12″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_12-b03)
Java HotSpot(TM) Client VM (build 1.4.2_12-b03, mixed mode)

F:\JDK\1.4.2\bin>java -hotspot -Xmx1309M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
=====================================================================

F:\JDK\1.5.0\bin>java -version
java version "1.5.0_07″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode, sharing)

F:\JDK\1.5.0\bin>java -client -Xmx1492M -version
java version "1.5.0_07″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)

F:\JDK\1.5.0\bin>java -client -Xmx1493M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

F:\JDK\1.5.0\bin>java -server -Xmx1504M -version
java version "1.5.0_07″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Server VM (build 1.5.0_07-b03, mixed mode)

F:\JDK\1.5.0\bin>java -server -Xmx1505M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

F:\JDK\1.5.0\bin>REM -hotspot is a synonym for the "client" VM [deprecated]

F:\JDK\1.5.0\bin>java -hotspot -Xmx1492M -version
java version "1.5.0_07″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)

F:\JDK\1.5.0\bin>java -hotspot -Xmx1493M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
=====================================================================

F:\JDK\IBM142\bin>java -version
java version "1.4.2″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2)
Classic VM (build 1.4.2, J2RE 1.4.2 IBM Windows 32 build cn1420-20040626
(JIT enabled: jitc))

F:\JDK\IBM142\bin>REM The default VM is client.

F:\JDK\IBM142\bin>java -Xmx2047M -version
java version "1.4.2″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2)
Classic VM (build 1.4.2, J2RE 1.4.2 IBM Windows 32 build cn1420-20040626
(JIT enabled: jitc))

F:\JDK\IBM142\bin>java -Xmx2048M -version
[ Unable to allocate an initial java heap of 2147483648 bytes. ]
[ **Out of memory, aborting** ]
[ ]
[ *** panic: JVMST016: Cannot allocate memory for initial java heap ]

abnormal program termination
=====================================================================

F:\BEA\JRockit\bin>java -version
java version "1.4.2_05″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)
BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build
ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)

F:\BEA\JRockit\bin>REM The default VM is jrockit.

F:\BEA\JRockit\bin>java -Xmx1617M -version
java version "1.4.2_05″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)
BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build
ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)

F:\BEA\JRockit\bin>java -Xmx1618M -version
Unable to acquire some virtual address space - reduced from 1656832 to
1640260 KB!
java version "1.4.2_05″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)
BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build
ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)

F:\BEA\JRockit\bin>REM -jrockit to select the "jrockit" VM

F:\BEA\JRockit\bin>java -jrockit -Xmx1617M -version
java version "1.4.2_05″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)
BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build
ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)

F:\BEA\JRockit\bin>java -jrockit -Xmx1618M -version
Unable to acquire some virtual address space - reduced from 1656832 to
1640260 KB!
java version "1.4.2_05″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)
BEA WebLogic JRockit(TM) 1.4.2_05 JVM R24.4.0-1 (build
ari-38120-20041118-1131-win-ia32, Native Threads, GC strategy: parallel)


我的测试记录:

C:\Documents and Settings\xiaoyuma>java -client -Xmx1441M -version
java version "1.6.0_05″
Java(TM) SE Runtime Environment (build 1.6.0_05-b13)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode)

C:\Documents and Settings\xiaoyuma>java -client -Xmx1442M -version
java version "1.6.0_05″
Java(TM) SE Runtime Environment (build 1.6.0_05-b13)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode)

C:\Documents and Settings\xiaoyuma>java -client -Xmx1443M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

C:\Documents and Settings\xiaoyuma>java -server -Xmx1443M -version
Error: no `server' JVM at `C:\Program
Files\Java\jre1.6.0_05\bin\server\jvm.dll'.

2008-10-20

【原】修改windows系统默认目录的绝对路径

regedit修改注册表:HKEY_USERS\S-1-5-21-2245916863-1077698140-2963151952-500\ Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders中的值,即可修改系统默认文件夹的位置。




【转】Linux启动过程综述

Linux启动过程综述

  内容:
  一. Bootloader
  二.Kernel引导入口
  三.核心数据结构初始化--内核引导第一部分
  四.外设初始化--内核引导第二部分
  五.init进程和inittab引导指令
  六.rc启动脚本
  七.getty和login
  八.bash
  附:XDM方式登录 作者:杨沙洲
  本文以Redhat 6.0 Linux 2.2.19 for Alpha/AXP为平台,描述了从开机到登录的
Linux 启动全过程。该文对i386平台同样适用。
  一. Bootloader
在Alpha/AXP平台上引导Linux通常有两种方法,一种是由MILO及其他类似的引导程序引 导,另一种是由Firmware直接引导。MILO功能与i386平台的LILO相近,但内置有基本的磁盘
驱动程序(如IDE、SCSI等),以及常见的文件系统驱动程序(如ext2,iso9660等), firmware有ARC、SRM两种形式,ARC具有类BIOS界面,甚至还有多重引导的设置;而SRM则具
有功能强大的命令行界面,用户可以在控制台上使用boot等命令引导系统。ARC有分区 (Partition)的概念,因此可以访问到分区的首扇区;而SRM只能将控制转给磁盘的首扇区。
两种firmware都可以通过引导MILO来引导Linux,也可以直接引导Linux的引导代码。
"arch/alpha/boot"下就是制作Linux Bootloader的文件。"head.S"文件提供了对
OSF PAL/1的调用入口,它将被编译后置于引导扇区(ARC的分区首扇区或SRM的磁盘0扇区), 得到控制后初始化一些数据结构,再将控制转给"main.c"中的start_kernel(),
start_kernel()向控制台输出一些提示,调用pal_init()初始化PAL代码,调用openboot() 打开引导设备(通过读取Firmware环境),调用load()将核心代码加载到START_ADDR(见
"include/asm-alpha/system.h"),再将Firmware中的核心引导参数加载到ZERO_PAGE(0) 中,最后调用runkernel()将控制转给0x100000的kernel,bootloader部分结束。

"arch/alpha/boot/bootp.c"以"main.c"为基础,可代替"main.c"与"head.S"
生成用于BOOTP协议网络引导的Bootloader。
Bootloader中使用的所有"srm_"函数在"arch/alpha/lib/"中定义。


以上这种Boot方式是一种最简单的方式,即不需其他工具就能引导Kernel,前提是按照 Makefile的指导,生成bootimage文件,内含以上提到的bootloader以及vmlinux,然后将
bootimage写入自磁盘引导扇区始的位置中。


当采用MILO这样的引导程序来引导Linux时,不需要上面所说的Bootloader,而只需要 vmlinux或vmlinux.gz,引导程序会主动解压加载内核到0x1000(小内核)或0x100000(大
内核),并直接进入内核引导部分,即本文的第二节。
对于I386平台
i386系统中一般都有BIOS做最初的引导工作,那就是将四个主分区表中的第一个可引导 分区的第一个扇区加载到实模式地址0x7c00上,然后将控制转交给它。



在"arch/i386/boot"目录下,bootsect.S是生成引导扇区的汇编源码,它首先将自己 拷贝到0x90000上,然后将紧接其后的setup部分(第二扇区)拷贝到0x90200,将真正的内核
代码拷贝到0x100000。以上这些拷贝动作都是以bootsect.S、setup.S以及vmlinux在磁盘上 连续存放为前提的,也就是说,我们的bzImage文件或者zImage文件是按照bootsect,setup,
vmlinux这样的顺序组织,并存放于始于引导分区的首扇区的连续磁盘扇区之中。


bootsect.S完成加载动作后,就直接跳转到0x90200,这里正是setup.S的程序入口。 setup.S的主要功能就是将系统参数(包括内存、磁盘等,由BIOS返回)拷贝到
0x90000-0x901FF内存中,这个地方正是bootsect.S存放的地方,这时它将被系统参数覆盖。 以后这些参数将由保护模式下的代码来读取。



除此之外,setup.S还将video.S中的代码包含进来,检测和设置显示器和显示模式。最 后,setup.S将系统转换到保护模式,并跳转到0x100000(对于bzImage格式的大内核是
0x100000,对于zImage格式的是0x1000)的内核引导代码,Bootloader过程结束。
对于2.4.x版内核
没有什么变化。
  二.Kernel引导入口


在arch/alpha/vmlinux.lds的链接脚本控制下,链接程序将vmlinux的入口置于 \"arch/alpha/kernel/head.S\"中的__start上,因此当Bootloader跳转到0x100000时,
__start处的代码开始执行。__start的代码很简单,只需要设置一下全局变量,然后就跳转 到start_kernel去了。start_kernel()是\"init/main.c\"中的asmlinkage函数,至此,启
动过程转入体系结构无关的通用C代码中。
对于I386平台
在i386体系结构中,因为i386本身的问题,在\"arch/alpha/kernel/head.S\"中需要更多的设置,但最终也是通过call
SYMBOL_NAME(start_kernel)转到start_kernel()这个体系结构无关的函数中去执行了。


所不同的是,在i386系统中,当内核以bzImage的形式压缩,即大内核方式 (__BIG_KERNEL__)压缩时就需要预先处理bootsect.S和setup.S,按照大核模式使用$(CPP)
处理生成bbootsect.S和bsetup.S,然后再编译生成相应的.o文件,并使用 \"arch/i386/boot/compressed/build.c\"生成的build工具,将实际的内核(未压缩的,含
kernel中的head.S代码)与\"arch/i386/boot/compressed\"下的head.S和misc.c合成到一起,其中的 head.S代替了\"arch/i386/kernel/head.S\"的位置,由Bootloader引导执行
(startup_32入口),然后它调用misc.c中定义的decompress_kernel()函数,使用 \"lib/inflate.c\"中定义的gunzip()将内核解压到0x100000,再转到其上执行
\"arch/i386/kernel/head.S\"中的startup_32代码。
对于2.4.x版内核
没有变化。
  三.核心数据结构初始化--内核引导第一部分

start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。 这些动作有的是公共的,有的则是需要配置的才会执行的。

在start_kernel()函数中,
输出Linux版本信息(printk(linux_banner))
设置与体系结构相关的环境(setup_arch())
页表结构初始化(paging_init())
使用\"arch/alpha/kernel/entry.S\"中的入口点设置系统自陷入口(trap_init())
使用alpha_mv结构和entry.S入口初始化系统IRQ(init_IRQ())
核心进程调度器初始化(包括初始化几个缺省的Bottom-half,sched_init())
时间、定时器初始化(包括读取CMOS时钟、估测主频、初始化定时器中断等,time_init())
提取并分析核心启动参数(从环境变量中读取参数,设置相应标志位等待处理,(parse_options())
控制台初始化(为输出信息而先于PCI初始化,console_init())
剖析器数据结构初始化(prof_buffer和prof_len变量)
核心Cache初始化(描述Cache信息的Cache,kmem_cache_init())
延迟校准(获得时钟jiffies与CPU主频ticks的延迟,calibrate_delay())
内存初始化(设置内存上下界和页表项初始值,mem_init())
创建和设置内部及通用cache(\"slab_cache\",kmem_cache_sizes_init())
创建uid taskcount SLAB cache(\"uid_cache\",uidcache_init())
创建文件cache(\"files_cache\",filescache_init())
创建目录cache(\"dentry_cache\",dcache_init())
创建与虚存相关的cache(\"vm_area_struct\",\"mm_struct\",vma_init())

块设备读写缓冲区初始化(同时创建\"buffer_head\"cache用户加速访问,buffer_init())
创建页cache(内存页hash表初始化,page_cache_init())
创建信号队列cache(\"signal_queue\",signals_init())
初始化内存inode表(inode_init())
创建内存文件描述符表(\"filp_cache\",file_table_init())
检查体系结构漏洞(对于alpha,此函数为空,check_bugs())
SMP机器其余CPU(除当前引导CPU)初始化(对于没有配置SMP的内核,此函数为空,smp_init())
启动init过程(创建第一个核心线程,调用init()函数,原执行序列调用cpu_idle() 等待调度,init())
至此start_kernel()结束,基本的核心环境已经建立起来了。
对于I386平台
i386平台上的内核启动过程与此基本相同,所不同的主要是实现方式。
对于2.4.x版内核
2.4.x中变化比较大,但基本过程没变,变动的是各个数据结构的具体实现,比如Cache。
  四.外设初始化--内核引导第二部分
init()函数作为核心线程,首先锁定内核(仅对SMP机器有效),然后调用 do_basic_setup()完成外设及其驱动程序的加载和初始化。过程如下:

总线初始化(比如pci_init())
网络初始化(初始化网络数据结构,包括sk_init()、skb_init()和proto_init()三部分,在proto_init()中,将调 用protocols结构中包含的所有协议的初始化过程,sock_init())

创建bdflush核心线程(bdflush()过程常驻核心空间,由核心唤醒来清理被写过的内存缓冲区,当bdflush()由 kernel_thread()启动后,它将自己命名为kflushd)

创建kupdate核心线程(kupdate()过程常驻核心空间,由核心按时调度执行,将内存缓冲区中的信息更新到磁盘中,更新的内容包括超级块和 inode表)

设置并启动核心调页线程kswapd(为了防止kswapd启动时将版本信息输出到其他信息中间,核心线调用kswapd_setup()设置 kswapd运行所要求的环境,然后再创建
kswapd核心线程)
创建事件管理核心线程(start_context_thread()函数启动context_thread()过程,并重命名为keventd)

设备初始化(包括并口parport_init()、字符设备chr_dev_init()、块设备 blk_dev_init()、SCSI设备scsi_dev_init()、网络设备net_dev_init()、磁盘初始化及分区检查等等, device_setup())

执行文件格式设置(binfmt_setup())
启动任何使用__initcall标识的函数(方便核心开发者添加启动函数,do_initcalls())
文件系统初始化(filesystem_setup())
安装root文件系统(mount_root())
至此do_basic_setup()函数返回init(),在释放启动内存段(free_initmem())并给内核解锁以后,init()打开 /dev/console设备,重定向stdin、stdout和stderr到控制台,最后,搜索文件系统中的init程序(或者由init=命令行参 数指定的程序),并使用
execve()系统调用加载执行init程序。


init()函数到此结束,内核的引导部分也到此结束了,这个由start_kernel()创建的第一个线程已经成为一个用户模式下的进程了。此时系统 中存在着六个运行实体:



start_kernel()本身所在的执行体,这其实是一个\"手工\"创建的线程,它在创建了init()线程以后就进入cpu_idle()循环 了,它不会在进程(线程)列表中出现

init线程,由start_kernel()创建,当前处于用户态,加载了init程序
kflushd核心线程,由init线程创建,在核心态运行bdflush()函数
kupdate核心线程,由init线程创建,在核心态运行kupdate()函数
kswapd核心线程,由init线程创建,在核心态运行kswapd()函数
keventd核心线程,由init线程创建,在核心态运行context_thread()函数
对于I386平台
基本相同。
对于2.4.x版内核
这一部分的启动过程在2.4.x内核中简化了不少,缺省的独立初始化过程只剩下网络 (sock_init())和创建事件管理核心线程,而其他所需要的初始化都使用__initcall()宏
包含在do_initcalls()函数中启动执行。
  五.init进程和inittab引导指令

init进程是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空 间内加载init程序,它的进程号是1。
init程序需要读取/etc/inittab文件作为其行为指针,inittab是以行为单位的描述性(非执行性)文本,每一个指令行都具有以下格式:



id:runlevel:action:process其中id为入口标识符,runlevel为运行级别,action为动作代号,process为具 体的执行程序。

id一般要求4个字符以内,对于getty或其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。



runlevel 是init所处于的运行级别的标识,一般使用0-6以及S或s。0、1、6运行级别被系统保留,0作为shutdown动作,1作为重启至单用户模式,6 为重启;S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台 (/dev/console)上运行/sbin/sulogin。



在一般的系统实现中,都使用了2、3、4、5几个级别,在Redhat系统中,2表示无NFS支持的多用户模式,3表示完全多用户模式(也是最常用的级 别),4保留给用户自定义,5表示XDM图形登录方式。7-9级别也是可以使用的,传统的Unix系统没有定义这几个级别。runlevel可以是并列的 多个值,以匹配多个运行级别,对大多数action 来说,仅当runlevel与当前运行级别匹配成功才会执行。



initdefault是一个特殊的action值,用于标识缺省的启动级别;当init由核心激活 以后,它将读取inittab中的initdefault项,取得其中的runlevel,并作为当前的运行级
别。如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入 runlevel。


sysinit、boot、bootwait等action将在系统启动时无条件运行,而忽略其中的runlevel,其余的action(不含 initdefault)都与某个runlevel相关。各个action的定义在inittab的man手册中有详细的描述。

在Redhat系统中,一般情况下inittab都会有如下几项:
id:3:initdefault:
#表示当前缺省运行级别为3--完全多任务模式;
si::sysinit:/etc/rc.d/rc.sysinit
#启动时自动执行/etc/rc.d/rc.sysinit脚本
l3:3:wait:/etc/rc.d/rc 3
#当运行级别为3时,以3为参数运行/etc/rc.d/rc脚本,init将等待其返回
0:12345:respawn:/sbin/mingetty tty0
#在1-5各个级别上以tty0为参数执行/sbin/mingetty程序,打开tty0终端用于
#用户登录,如果进程退出则再次运行mingetty程序
x:5:respawn:/usr/bin/X11/xdm -nodaemon
#在5级别上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行

  六.rc启动脚本
上一节已经提到init进程将启动运行rc脚本,这一节将介绍rc脚本具体的工作。


一般情况下,rc启动脚本都位于/etc/rc.d目录下,rc.sysinit中最常见的动作就是激活交换分区,检查磁盘,加载硬件模块,这些动作无论 哪个运行级别都是需要优先执行的。仅当rc.sysinit执行完以后init才会执行其他的boot或bootwait动作。



如果没有其他boot、bootwait动作,在运行级别3下,/etc/rc.d/rc将会得到执行,命令行参数为3,即执行/etc/rc.d /rc3.d/目录下的所有文件。rc3.d下的文件都是指向/etc/rc.d/init.d/目录下各个Shell脚本的符号连接,而这些脚本一般能 接受start、stop、restart、status等参数。rc脚本以start参数启动所有以S开头的脚本,在此之前,如果相应的脚本也存在K打 头的链接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先启动K开头的脚本,以stop作为参数停止这些已经 启动了的服务,然后再重新运行。显然,这样做的直接目的就是当init谋湓诵屑侗鹗保��邢喙氐姆�穸冀�仄簦�词故峭�桓黾侗稹

rc程序执行完毕后,系统环境已经设置好了,下面就该用户登录系统了。
  七.getty和login
在rc返回后,init将得到控制,并启动mingetty(见第五节)。mingetty是getty的简化,不能处理串口操作。getty的功能一般 包括:

打开终端线,并设置模式
输出登录界面及提示,接受用户名的输入
以该用户名作为login的参数,加载login程序
缺省的登录提示记录在/etc/issue文件中,但每次启动,一般都会由rc.local脚本根据系统环境重新生成。
注:用于远程登录的提示信息位于/etc/issue.net中。
login程序在getty的同一个进程空间中运行,接受getty传来的用户名参数作为登录的用户名。


如果用户名不是root,且存在/etc/nologin文件,login将输出nologin文件的内容,然后退出。这通常用来系统维护时防止非 root用户登录。



只有/etc/securetty中登记了的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录。 /etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。



当用户登录通过了这些检查后,login将搜索/etc/passwd文件(必要时搜索 /etc/shadow文件)用于匹配密码、设置主目录和加载shell。如果没有指定主目录,将默认为根目录;如果没有指定shell,将默认为 /bin/sh。在将控制转交给shell以前,
getty将输出/var/log/lastlog中记录的上次登录系统的信息,然后检查用户是否有新邮件(/usr/spool/mail/ {username})。在设置好shell的uid、gid,以及TERM,PATH
等环境变量以后,进程加载shell,login的任务也就完成了。
  八.bash
运行级别3下的用户login以后,将启动一个用户指定的shell,以下以/bin/bash为例继续我们的启动过程。


bash 是Bourne Shell的GNU扩展,除了继承了sh的所有特点以外,还增加了很多特性和功能。由login启动的bash是作为一个登录shell启动的,它继承了 getty设置的TERM、PATH等环境变量,其中PATH对于普通用户为\"/bin:/usr/bin:/usr/local/bin\",对于 root
为\"/sbin:/bin:/usr/sbin:/usr/bin\"。作为登录shell,它将首先寻找/etc/profile
脚本文件,并执行它;然后如果存在~/.bash_profile,则执行它,否则执行 ~/.bash_login,如果该文件也不存在,则执行~/.profile文件。然后bash将作为一个交互式shell执行~/.bashrc文件 (如果存在的话),很多系统中,~/.bashrc都将启动
/etc/bashrc作为系统范围内的配置文件。


当显示出命令行提示符的时候,整个启动过程就结束了。此时的系统,运行着内核,运行着几个核心线程,运行着init进程,运行着一批由rc启动脚本激活的 守护进程(如
inetd等),运行着一个bash作为用户的命令解释器。
  附:XDM方式登录
如果缺省运行级别设为5,则系统中不光有1-6个getty监听着文本终端,还有启动了一个XDM的图形登录窗口。登录过程和文本方式差不多,也需要提供 用户名和口令,XDM
的配置文件缺省为/usr/X11R6/lib/X11/xdm/xdm-config文件,其中指定了 /usr/X11R6/lib/X11/xdm/xsession作为XDM的会话描述脚本。登录成功后,XDM将执行这个脚本以运行一个会话管理器,比 如gnome-session等。

除了XDM以外,不同的窗口管理系统(如KDE和GNOME)都提供了一个XDM的替代品,如gdm和kdm,这些程序的功能和XDM都差不多。

2008-10-14

SQL文的特殊字符变换

用户输入如果没有任何限制的话,则必须对特殊字符进行变换。
如果对单引号不进行变换,则会发生数据库错误,甚至可能导致系统崩溃。  不过回避方法却非常简单,只要将单引号[']转换成两个单引号['']就可以了。
例:SELECT * FROM TBL WHERE COL = 'ABC''DEF';
模糊查询的语句虽然不会发生SQL错误,但是不进行回避的话,则无法得到要检索的值。  回避方法较单引号复杂。需要使用转义符。将[%]转为[\%][_]转为[\_],  然后再加上[ESCAPE '\']就可以了。
例:SELECT * FROM TBL WHERE COL LIKE 'ABC\%\_%' ESCAPE '\';     最后一个%是通配符。
如果做日文项目的话,会出现全角字符的[][_],  而这两个全角字符同样会作为半角通配符处理。  所以在变换时,同时需要将全角的[][_]进行变换。
例:SELECT * FROM TBL WHERE COL LIKE 'ABC\%\_\\_%' ESCAPE '\';

变换成这样似乎结束了,可是不要忘了还有转义符自身,万一用户输入转义符的话,
以上的处理就会发生
SQL错误。所以也必须对转 义符进行变换。变换方法就是将[\]转换为[\\]

例:SELECT * FROM TBL WHERE COL LIKE 'ABC\%\_\\\\_%' ESCAPE '\';
以上的操作都针对于一般的数据类型,如CHARVARCHAR2。  如果出现NCHARNVARCHAR2的话,以上的处理就会出现ORA-01425错误。    如果改成以下写法,则会发生ORA-01424错误。
SELECT * FROM TBL WHERE COL LIKE '%\_%' ESCAPE TO_NCHAR('\')
正确的写法应该是
SELECT * FROM TBL WHERE COL LIKEC '%\_%' ESCAPE TO_NCHAR('\')
  最后要说明的是每个like都应该写ESCAPE语句。
例:  SELECT * FROM TBL   WHERE COL1 LIKE '%\_%' ESCAPE '\' OR COL2 LIKE '%\_%' ESCAPE '\'

2008-10-11

【转载】分享国企内部员工总结食品危机下的健康饮食方式

Subject: FW: 总结的来了!

蒙牛伊力的产品我从来不喝

不喝乳饮料,基本是水兑出来的,乳饮料一定会在标签上面标出来,尽管饮料两个字可能印刷得很小

尽量吃比较干的食品 或者糖度比较高易保存的
如果含水量高 货架期又长的 不要买 全是靠防腐剂 而不是低水分活度保存的

有些产品会用复合防腐剂 就是几种联合抗腐败的 这种少吃

光明的乳制品比其他国企的都要好 (aw补充:个人认为国内的奶制品现在需要观察一段时间,政府重视之后,肯定会有改善,目前还是不要轻信任何奶制品公司,我对他们非常失望 。)

香精有天然来源的 也有化工合成的 建议少吃 适量也无所谓
很多香精公司直接接触香精的调香师 应用工程师普遍过早出现白头发 就是频繁接触香精的结果

不要喝出了纯鲜奶之外的任何产品 UHT的不要喝
有些奶
香――奶味香精
浓――增稠剂,淀粉或胶体 

酸奶:有条件的话 注意一下标签 买配料表里没有"复原乳、奶粉"字样的

冷冻的水饺之类
首先 一定不能买散装的 很可能是混有过期的解冻的坏包的拆开来卖的
第二包装上的生产日期如果是黑色打印的 最好也不要买 要买就要买是凹凸版的
第三 解过冻的最明显的就是 粘连 皮上有白霜 最简单的区分方法是皮上没白霜 一个一个独立的是一直保持在温度要求的  汤圆碎开的裂开的就是解冻过的  丸子上有霜也是解冻过的 鱼饺由于机器问题所以最后一道工序都是手工弯的 一定要买大品牌 

湾仔码头是美国通用磨房的产品 对肉类的控制比较好

99%的蟹肉棒是香精+淀粉+色素+蛋白做的

超市里散装的冷冻食品其实污染也不小的

康师傅方便面 防腐剂肯定有 但是要买原厂的就是杭州厂的 不要买其他厂的东西
看包装上的日期是黑色还是凹凸版的 如果有黑有凹凸就买凹凸的  所有包装食品都一样的啊

大桶的正广和水 你一定要跟正广和订而不是送水站 如果你能不喝桶装水更好因为桶装水的桶是反复使用的 怕消毒不够  而且要尽快喝完时间久了会有细菌

罐装王老吉,难办喝喝ok 因为是凉茶所以里面有中草药成分 所以多喝了对人体不好

靖江的猪肉浦  大包的肯定有问题,因为猪肉的位置不好 也就是我们说的下脚料  要买就要买双鱼的独立小包装 这个肉比较好 而且一定要注意生产日期 还有这个东西添加剂不会少少吃点

百威暂时没问题 酒原是美国过来的而且要喝就喝听装和小瓶装  700cc供应外面饭店的少喝为妙所有品牌哦 

但是最近朝日的原料污染不要喝了

雪花是国内的酒料但是要看厂 以前我做采购的时候不喝的

反正 同志们 我现在所有零食基本不吃 幺么就吃销售量最大的当季吃 过了季节就不吃了 还有蜜饯大家不要吃了 生产过程太脏了真的 

简单的说 从我们日常来看 能做到的是尽量吃热的食物 营养损失不谈 饭菜之类从冰箱拿出来之后先热一下 冰箱里的污染通常被忽略

小店的东西尽量少吃 如果你参与过饭店卫生检查 你会非常震惊的

有些东西怀疑 要坏掉了就不要吃 尤其是肉类 因为可怕的不是微生物 而是肉类常见菌的产物:毒素,轻者腹泻 种者死亡

没持续打乙肝疫苗的tx赶紧去补 我国是乙肝大国

大家不要忽略卫生 以为拉拉肚子就没事了 对你肠道系统免疫系统的伤害是会累积的

马口铁和罐头食品,一般不含防腐剂  罐头的工艺已经非常非常成熟了 杀菌后有的可以保存很多年 不考虑营养问题 可以买哦

马口铁罐装,防腐剂少,但罐头食品的营养其实是比较少了,卫生问题,只要看不鼓起,应该是没啥问题。午餐肉主要问题是亚硝盐的问题,亚硝盐有致 癌作用,越少吃越好。唉,我也爱吃,只能偶尔吃吃,解馋 

冷饮推荐和路雪 

烟熏的东西尽量少吃 还有肠类 有些肠为了颜色好看 除了色素问题 还有硝酸盐超标问题

饭店里的海鲜问题也很多 最简单的就是福尔马林泡了 看起来新鲜肉质又好又筋道

记得无锡有三白的特产 其中的银鱼 有些饭店里吃到的颜色好看到透明 都是泡出来的 

我再爆一个外面饭店红烧肉的问题
红烧肉出锅前,加入乙基麦芽酚,加热后产生有光泽的铁锈红,并且会增加红烧肉醇厚的香气。。。
至于加热后乙基麦芽酚是否会产生有毒物质,我不了解。。。反正饭店里红烧肉烧得比我老妈烧得好吃的,我就尽量克制不吃。。。 

果汁
货架上的 所有果汁 除了盒装的 其他的都表买
透明包装的 瓶装的 都防腐剂 而且很多
因为果汁的特殊性 见光就开始变质 所以要喝好果汁就要买利乐包装的  而且一定要买100%的 稍微好点 防腐剂肯定有
如果有条件 自己榨果汁吃 苹果生梨洗洗干净去皮去核 

说到西红柿 不要买那种屁股突出来的 是打激素的
也不要买畸形的很大的原理和草莓一样

做妈妈的 不要给小孩吃果冻了 

所有菜 水果 都买当季的  有句老话 水果要吃中间上市的 蔬菜要吃新鲜上市额 太早和太晚或者反季节的 最好不要买
蔬菜上有点虫不要紧 拿回来洗干净 就好了
蔬菜上有洞洞眼 多泡泡 没洞洞眼 穷炮
能买到本地人自己提着篮子的蔬菜最好 很可能是自留地里多出来的

不要吃翅尖
记得学医的老师曾经告诉我 鸡从小到大打过的激素之类不会完全代谢掉 一般会在肢体末端累积就是鸡翅尖~

冷饮能不吃就不吃
1。冷链可能有漏洞 当然大品牌的自己送货还可以
2。热量高
3。对肠胃有刺激
4。营养难说,看一下营养成分表就知道啦 

还有 巧克力 不是越甜越好 是要吃纯的
在瑞士 意大利 最值钱的巧克力叫黑薄片 最差的巧克力是果仁

中国已经把全麦的概念毁掉了
国外的全麦 是真的whole wheat  面粉本身在加工的时候保留了一部分麸 磨出的面粉发暗 但是营养全面  这种产品价格也不便宜
国内很多偷换概念 所谓全麦就是普通产品加上点看得见的麸皮之类 就叫全麦了 价格也低很多

有钱的话 就买贵的。。。价格是王道 (我个人不认同,欢迎食品行业内的人来说说)

海苔要看原料来源的 哎 否则色素和淀粉填充物也很多

讲到葡萄 我来八一下吧 尽管也是听别人说的我老爸的死党 XX市环保局局长 如今退休自己承包果园了 他曾经对我说过 吃什么都不要吃葡萄 那个打的农药实在太多了.

旁友说,葡萄的确是要打很多农药的,从一开始种藤起,就要打驱虫药水啊,否则藤都要死光了.打药水的时候,他家都是用环保纸袋套牢的,以免药水 和葡萄接触.有些黑心果农,为了提早让葡萄上市,就要打催熟针.要果子大,就要打膨大剂(尤其是乒乓和巨峰),一直打到上市前几天才歇手  .

我旁友家有四亩果园,就她公公一个人在忙,所以除了驱虫外,根本来不及做那些手脚,就算是驱虫药水,在葡萄上市前一个多月就要停止打了.所以她 家的葡萄都要比外面上市的慢起码大半个月,而且个子和卖相也明显有些逊色,但是好歹人吃了放心呢.
朋友说,好的葡萄,刚采下来,哪怕不放冰箱放了外面,两天也不会变质.如果码子大的葡萄摸上去皮软软的,么有光泽和弹性的,很有可能是注射了膨大剂,那个 经不住放的.
有白霜的都是打过农药的。。洗完还有的。。用纸巾擦擦

葡萄,橘子最恶心,不知道要打多少的农药

蔬菜 就吃颜色深额蔬菜比如  踏库菜  叶子颜色越深越好 越排毒 不过爆难吃 
有条件最好吃有机产品.
水果当中农药含量最高的: 苹果, 生梨, 桃子, 葡萄, 草莓…
水果当中农药含量较底的; 香焦, 菠罗, 弥猴桃…
绿叶蔬菜相对而言, 农药的含量都老高的. 

还有一个非常值得重视大家也都知道的 控制钠摄入量 饼干之类的 尤其是苏打 不要给父母吃  里面钠太多了  钠的控制其实是个养身过程  中国人普遍钠摄入超标~

火腿就肯定有亚硝酸类  不超标就可以 这类食品要经常注意的是 
第一 表多吃 少吃点可以
第二 买颜色不好看的 你要好看就表健康 要健康就表好看
第三 要买新鲜 销量好的品牌 

香草精和香草粉都是化学合成,以尽量少用为好,可以买干的香草叶来用。

泡打粉是小苏打(碳酸氢钠)和硫酸铝,淀粉的混合物,其中铝对儿童大脑发育不利。

烧烤不好的原因是糖,蛋白质烧焦致癌,自己烧一样会焦。尽量不要焦,但口味肯定是略焦的好。 

康师傅的老板说的表喝他们的东西,他自己都不会喝

脉动,维体等,都是功能性饮料,补充体液的,如果不运动的时候喝会增加肾脏负担,减分不加分哦!! 

我以前在KFC打过工,他们用的不是我们平时见到的桶装油……是一种类似黄油一样的物质,.经过温度熔化形成的………!!!!!!!!!!!  是棕榈油,本身熔点高,常温下是固态。但是氢化植物油最常用原料是棕榈油 

露露的杏仁露和椰树的椰奶可以放心吃吃  肯定没问题的 我老早就是做这个采购的
而且只有椰树和露露 这两个牌子过关 ok  但是露露没有椰树好

蛋白粉这种东西还是不要吃得好, 早两年就听说有人吃蛋白粉吃出问题了

吃果冻和粉丝。。就是在吃马夹袋

【转载】吴宗宪超扯的55个冷谜语

01. 有一只熊走过来            有备而来(有bear来)
02. 第十一本书              不可思议(book11)
03. 哪一种蝙蝠不用休息          不修边幅(不休蝙蝠)
04. 一个人被刷成金色           一鸣惊人(一名金人)
05. 羊停止了呼吸             扬眉吐气(羊没吐气)
06.手机不可以掉到马桶里          机不可失(湿)
07.小玉对小明说她爸爸性无能        欲罢不能(玉爸不能)
08.狗过了独木桥就不叫了          过目不忘(过木不汪)
09.蜜蜂停在日历上             风和日丽(蜂和日历)
10.两个男人坐在石头上           一石二鸟
11.一群女人在聊天             无稽之谈(无鸡之谈)
12.一群人拿鸡蛋砸枪            枪林弹雨(枪淋蛋雨)
13.画家喜欢画粗的绳子不喜欢画细的绳子   出神入化(粗绳入画)
14.搬建中的钢琴             一见钟情(移建中琴)
15.拿筷子吃饭               脍炙人口(筷至人口)
16.鸡与鸭的对话              鸡同鸭讲
17.一百零一了               一了百了
18.有十只羊,九只蹲在羊圈,一只蹲在猪圈  抑扬顿挫(一羊蹲错)
19.羊打电话给老鹰,老鹰接起电话说 喂   阳奉阴违(羊phone 鹰 喂)
20.谁家没有电话?             天衣(天衣无缝 phone)
21.谁最了解鸟类?             惊弓(惊弓之鸟)知鸟
22.古人为什么要卧冰求鲤?         冰冰有鲤(礼)
23.为什么公马跑的比母马快?        快马加鞭
24.为什么帽子脏了要翻面再戴?       张冠李戴(脏冠里戴)
25.为什么刚出生的小孩就死了?       出生入死
26.为什么把刀涂成蓝色的枪就会很忧郁?   刀枪不入(blue)
27.为什么老师从小就叮咛我们要珍惜四支箭? 光阴似箭(四箭)
28.为什么附中?              胎死腹中(附中)
29.怎样让鸭子不会飞走?          插一只翅膀给�(插翅难飞)
30.怎样使麻雀安静下来?          压�一下(鸦雀无声 压雀无声)
31.怎样把胸部变大?           (很冷)有容乃大
32.哪一种蛇有很多嘴巴?          七嘴八舌(蛇)
33.洗脸的叫脸盆 那洗手的呢?       金盆(金盆洗手)
34.喝哪一种果汁最辛苦?          绞尽脑汁
35.在地狱的断头台看得到什么?       鬼头鬼脑
36.谁可以很轻松的混完高中三年?      锐先生(锐不可当 请念ㄉㄤ�)
37.如何分辨香肉店***肉店的不同?     狗肉店店门口会挂羊头(挂羊头卖
狗肉)
38.为什么冷笑话一次要讲三遍?       三思而后行(三ㄙ~~而后行)
39.猫为什么喜欢打人?          (这题够白烂)因为�是猫喜欢人家
拳猫
40.星星有多重?              8 公克 (starbucks 星八克)
41.溜马队的miller死了以后会变什么?    弥勒佛
42.为什么"七上八下"七在八的上面?   (超欠打的~~)因为 八在七的下面
43.为什么你看不到上帝的老二?      天机不可泄漏(天鸡)
44.哪一首歌歌词有"李玟"?       月亮代表我的心[李玟我爱你有多深.)
45.哪一种�右帽常è浓?的?      (这更 *** ) jan sport
46.哪一种蛇生命力最强?         三�不烂之舌(蛇)
47.为什么冰山只有一角 ?        另一只脚被铁达尼号撞断了
48.为什么汉子不出门?          因为 出了门就变 门外汉
49.坐什么椅子最享受?           enjoy
50.为什么我生下来就是要耍冷?      因为 我思故我在(我ㄙ~~故我在)
51.为什么放焰火不会打到星星? 因为星星会闪。
52.避孕药的主要成分是什么? 抗生素
53.哈里波特为什么会住在灯泡里? 因为哈里波特是巫师(钨丝)
54.什么麒麟最好吃? 冰淇淋
55.什么麒麟跑最快? 米其林

2008-10-10

修改Sybase最大连接数的方法有两种

修改Sybase最大连接数的方法有两种,如下:
1、进Sybase central, 鼠标右键选择数据库服务器(要处理的服务器),然后选择
右键菜单中的配置选项,修改其中的number or user connetions。
2、isql登录数据库服务器后,执行如下语句:
sp_configure "user connections",100
go

SOLARIS CDE下的环境变量设置

用root登录以后用env显示出来的和系统中所有的.profile文件的内容都不相同,毫无联系,这是什么原因?
如果启动之后要使得/etc/.profile中的设置起作用,该怎么做?

~/.profile 是在用户的主目录下的一个文件,每次用户登陆都会执行这里边的ENV环境变量设置。
/etc/profile是一个全局的环境变量设置,只要登陆系统的用户都会执行里面的ENV环境变量设置
~/.kshrc是在用户的主目录下面的,每次执行KSH下面的子shell的时候,都会执行这里面的ENV环境变量设置。
~/.dtprofile是在用户的主目录下面的,在这里设置你进入CDE时的一些变量设置,如果用户没有通过CDE进入过系统,那么将不会产生这个文 件,只有用户曾经用CDE进入过系统后就会自动生成一个.dtprofile文件,然后还可以对里边的变量进行设置。。
                如果在这个文件里的DTSOURCEPROFILE的变量设置为true则会读取用户瞩目路下的.profile文件里的变量设置,如果没有这个变量或者 设置为false,那么将不读取.profile里的环境变量。

如果想让刚刚改变的.profile .kshrc里面的设置马上生效使用,可以使用以下的命令:
                . ~/.profile
                . ~/.kshrc


2008-10-08

《施氏食狮史》

《施氏食狮史》是一篇由赵元任所写的设限文章。全文共九十一字(连标题九十六字),每字的普通话发音都是shi。


原文:
《施氏食狮史》
这篇短文都能看懂,可是如果你读给别人听,他是无论如何也听不懂的!

石室诗士施氏,嗜狮,誓食十狮。施氏时时适市视狮。十时,适十狮适市。是时,适施氏适市。氏视是十狮,恃矢势,使是十狮逝世。氏拾是十狮 尸,适石室。石室湿,氏使侍拭石室。石室拭,氏始试食是十狮。食时,始识是十狮,实十石狮尸。试释是事。
只用一个发音来叙述一件事,除了中文,怕是再无其他语言能做到了。
白话文译文::

《施氏吃狮子的故事》
石室里住着一位诗人姓施,爱吃狮子,决心要吃十只狮子。
他常常去市场看狮子。
十点钟,刚好有十只狮子到了市场。
那时候,刚好施氏也到了市场。
他看见那十只狮子,便放箭,把那十只狮子杀死了。
他拾起那十只狮子的尸体,带到石室。
石室湿了水,施氏叫侍从把石室擦干。
石室擦干了,他才试试吃那十只狮子。
吃的时候,才发现那十只狮子,原来是十只石头的狮子尸体。
试试解释这件事吧。


背景
话说50年代初期,有人提议汉字全部拼音,以解除小学生识数千汉字的痛苦。语言学大师赵元任老先生大不以为然,戏写一文施氏食狮史。全文共92字,每字的 普通�发音都是shi。�篇文言作品在阅读时并没有问题,但当用拼音朗读本作品�,问题便出现了,这是古文同音字多的缘故。�元任希望通过篇文字,引证中 文拉丁化所带来的荒谬。









羿裔熠缢
羿裔熠,邑彝,义医,艺诣。 熠姨遗一裔伊,伊仪迤,衣旖,异奕矣。熠意伊矣,易衣以贻伊,伊遗衣,衣异衣以意异熠,熠抑矣。伊驿邑,弋一翳,弈毅,毅仪奕,诣弈,衣异,意逸。毅诣 伊,益伊,伊怡,已臆毅矣,毅亦怡伊。翌,伊亦弈毅。毅以蜴贻伊,伊亦贻衣以毅。伊疫,呓毅,癔异矣,倚椅咿咿,毅亦咿咿。毅诣熠,意以熠,议熠医伊,熠 懿毅,意役毅逸。毅以熠宜伊,翼逸。熠驿邑以医伊,疑伊胰痍,以蚁医伊,伊遗异,溢,伊咦。熠移伊,刈薏以医,伊益矣。伊忆毅,亦呓毅矣,熠意伊毅已逸, 熠意役伊。伊异,噫,缢。 熠癔,亦缢。




<<于瑜与余欲渔遇雨>>
于瑜欲渔,遇余于寓。语余:"余欲渔于渝淤,与余渔渝欤?"
余语于瑜:"余欲鬻玉,俞禹欲玉,余欲遇俞于俞寓。"
  余与于瑜遇俞禹于俞寓,逾俞隅,欲鬻玉于俞,遇雨,雨逾俞宇。余语于瑜:"余欲渔于渝淤,遇雨俞寓,雨逾俞宇,欲渔欤?鬻玉欤?"
  于瑜与余御雨于俞寓,俞鬻玉于余禹,雨愈,余与于瑜踽踽逾俞宇,渔于渝淤。



《季姬击鸡记》
  季姬寂,集鸡,鸡即棘鸡。棘鸡饥叽,季姬及箕稷济鸡。鸡既济,跻姬笈,季姬忌,急咭鸡,鸡急,继圾几,季姬急,即籍箕击鸡,箕疾击几伎,伎即齑,鸡叽 集几基,季姬急极屐击鸡,鸡既殛,季姬激,即记《季姬击鸡记》。 4、《遗镒疑医》
  伊姨殪,遗亿镒。伊诣邑,意医姨疫,一医医伊姨。翌,亿镒遗,疑医,以议医。医以伊疑,缢,以移伊疑。伊倚椅以忆,忆以亿镒遗,以议伊医,亦缢。噫! 亦异矣!


1、《施氏食狮史》
石室诗士施氏,嗜狮,誓食十狮。施氏时时适市视狮,十时,适十狮适市。是时,适施氏适市,氏视是十狮,恃矢势,使是十狮逝世。氏拾十狮尸,适石室,石室 湿,氏使侍试石室,石室试,氏始试食是十狮尸。食时,始识是十狮尸,实十石狮尸。试释是事。



2、《季姬击鸡记》
季姬寂,集鸡,鸡即棘鸡。棘鸡饥叽,季姬及箕稷济鸡。鸡既济,跻姬笈,季姬忌,急咭鸡,鸡急,继圾几,季姬急,即籍箕击鸡,箕疾击几伎,伎即齑,鸡叽集几 基,季姬急极屐击鸡,鸡既殛,季姬激,即记《季姬击鸡记》。



3、《遗镒疑医》
伊姨殪,遗亿镒。伊诣邑,意医姨疫,一医医伊姨。翌,亿镒遗,疑医,以议医。医以伊疑,缢,以移伊疑。伊倚椅以忆,忆以亿镒遗,以议伊医,亦缢。噫!亦异 矣!



4、《易姨医胰》
易姨悒悒,依议诣夷医。医疑胰疫,遗意易姨倚椅,以异仪移姨胰,弋异蚁一亿,胰液溢,蚁殪,胰以医。易胰怡怡,贻医一夷衣。医衣夷衣,怡怡奕奕。噫!以蚁 医胰,异矣!以夷衣贻夷医亦宜矣!



5、《于瑜与余欲渔遇雨》
作者:杨富森
于瑜欲渔,遇余于寓。语余:"余欲渔于渝淤,与余渔渝欤?"余语与瑜:"余欲鬻玉,俞禹欲玉,余欲遇俞于俞寓。"余与于瑜遇俞禹于俞寓,逾俞隅,欲鬻玉于 俞,遇雨,雨逾俞宇。余语于瑜:"余欲渔于渝淤,遇雨俞寓,雨逾俞宇,欲渔欤?鬻玉欤?"于瑜与余御雨于俞寓,俞鬻玉于余禹,雨愈,余与于瑜踽踽逾俞宇, 渔于渝淤。



6、《熙戏犀》赵元任
西溪犀,喜嬉戏。席熙夕夕携犀徙,席熙细细习洗犀。犀吸溪,戏袭熙。席熙嘻嘻希息戏。惜犀嘶嘶喜袭熙。



7、《饥鸡集矶记》
唧唧鸡,鸡唧唧。几鸡挤挤集矶脊。机极疾,鸡饥极,鸡冀己技击及鲫。机既济蓟畿,鸡计疾机激几鲫。机疾极,鲫极悸,急急挤集矶级际。继即鲫迹极寂寂,继即 几鸡既饥,即唧唧



8、芝之稚侄郅,至智,知制纸,知织帜,芝痔炙痔,侄至芝址,知之知芷汁治痔,至芷址,执芷枝,
蜘至,踯侄,执直枝掷之,蜘止,侄执芷枝至芝,芝执芷治痔,痔止。



9、最后也是最变态的:
《羿裔熠邑彝》
羿裔熠①,邑②彝,义医,艺诣。
熠姨遗一裔伊③,伊仪迤,衣旖,异奕矣。
熠意④伊矣,易衣以贻伊,伊遗衣,衣异衣以意异熠,熠抑矣。
伊驿邑,弋一翳⑤,弈毅⑥。毅仪奕,诣弈,衣异,意逸。毅诣伊,益伊,伊怡,已臆⑦毅矣,毅亦怡伊。
翌,伊亦弈毅。毅以蜴贻伊,伊亦贻衣以毅。
伊疫,呓毅,癔异矣,倚椅咿咿,毅亦咿咿。
毅诣熠,意以熠,议熠医伊,熠懿⑧毅,意役毅逸。毅以熠宜伊,翼逸。
熠驿邑以医伊,疑伊胰痍⑨,以蚁医伊,伊遗异,溢,伊咦。熠移伊,刈薏⑩以医,伊益矣。
伊忆毅,亦呓毅矣,熠意伊毅已逸,熠意役伊。伊异,噫,缢。
熠癔,亦缢。
注解:
①熠:医生,据说为后羿的后裔。
②邑:以彝为邑,指居住在一个彝族聚居的地方。
③伊:绝世佳丽,仪态万方,神采奕奕。
④意:对伊有意思,指熠爱上了伊。
⑤翳:有遮蔽的地方,指伊游弋到了一个阴凉的地方。
⑥毅:逍遥不羁的浪人,善于下棋,神情坚毅,目光飘逸。
⑦臆:主观的感觉,通"意",指对毅有好感。
⑧懿:原意为"懿旨",此处引申为要挟,命令。
⑨胰痍:胰脏出现了疮痍。
⑩刈:割下草或者谷物一类。薏:薏米,白色,可供食用,也可入药。



2008-10-06

mysql修改root远程登录

默认情况下,MySQL之允许本地登录,需要修改/etc/mysql/my.cnf文件:
注释这一行:
bind-address=127.0.0.1 ==> #bind-address=127.0.0.1
对于需要远程登录的用户执行如下命令:
mysql> grant all privileges on *.* to root@"%" identified by "";
mysql> flush privileges;