2009年5月21日星期四

linux的free命令详解-内存是拿来用的不是拿来看的

linux的内存是很说究的.
如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看.
$ free -m

total used free shared buffers cached
Mem: 1002 769 232 0 62 421
-/+ buffers/cache: 286 715
Swap: 1153 0 1153

第一部分Mem行:
total 内存总数: 1002M
used 已经使用的内存数: 769M
free 空闲的内存数: 232M
shared 当前已经废弃不用,总是0
buffers Buffer 缓存内存数: 62M
cached Page 缓存内存数:421M

关系:total(1002M) = used(769M) + free(232M)

第二部分(-/+ buffers/cache):
(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used - buffers -
cached)
(+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers +
cached)

可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

第三部分是指交换分区, 我想不讲大家都明白.

我想大家看了上面,还是很晕.第一部分(Mem)与第二部分(-/+
buffers/cache)的结果中有关used和free为什么这么奇怪.
其实我们可以从二个方面来解释.
对操作系统来讲是Mem的参数.buffers/cached
都是属于被使用,所以它认为free只有232.
对应用程序来讲是(-/+ buffers/cach).buffers/cached
是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

所以,以应用来看看,以(-/+
buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家一些常识.Linux为了提高磁盘和内存存取效率,
Linux做了很多精心的设计,
除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),
还采取了两种主要Cache方式:Buffer Cache和Page
Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了
I/O系统调用(比如read,write,getdents)的时间。
记住内存是拿来用的,不是拿来看的.不象windows,无论你的真实物理内存有多少,他都要拿硬盘交换文件来读.这也就是
windows为什么常常提示虚拟空间不足的原因.你们想想,多无聊,在内存还有大部分的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.所以
我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内
存是否够用的标准哦.

让man手册显示颜色

让man手册显示颜色,在bashrc或者bash_profile中添加以下几行。

# man color
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

VIM中常用的替换模式总结

0,:g/null/d
找到null的行并且删掉
1,简单替换表达式
替换命令可以在全文中用一个单词替换另一个单词:
:%s/four/4/g
"%" 范围前缀表示在所有行中执行替换。最后的 "g"
标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可
如果你有一个象 "thirtyfour"
这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成"thirty4″。要解决这个问题,用
"\<" 来指定匹配单词开头:
:%s/\<four/4/g
显然,这样在处理 "fourty" 的时候还是会出错。用 "\>" 来解决这个问题:
:%s/\<four\>/4/g
如果你在编码,你可能只想替换注释中的
"four",而保留代码中的。由于这很难指定,可以在替换命令中加一个 "c"
标记,这样,Vim 会在每次替换前提示你:
:%s/\<four\>/4/gc
2,删除多余的空格
要删除这些每行后面多余的空格,可以执行如下命令:
:%s/\s\+$//
命令前面指明范围是 "%",所以这会作用于整个文件。"substitute"
命令的匹配模式是
"\s\+$"。这表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的 "to"
部分是空的:"//"。这样就会删除那些匹配的空白字符。
3,匹配重复性模式
星号项 "*" 规定在它前面的项可以重复任意次。因此:
/a*
匹配 "a","aa","aaa",等等。但也匹配 ""
(空字串),因为零次也包含在内。星号 "*"
仅仅应用于那个紧邻在它前面的项。因此 "ab*" 匹配
"a","ab","abb","abbb",等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加
"\(",后面加 "\)"。因此这个命令:
/\(ab\)*
匹配: "ab","abab","ababab",等等。而且也匹配 ""。
要避免匹配空字串,使用 "\+"。这表示前面一项可以被匹配一次或多次。
/ab\+
匹配 "ab","abb","abbb",等等。它不匹配 后面没有跟随 "b" 的 "a"。
要匹配一个可选项,用 "\="。 例如:
/folders\=
匹配 "folder" 和 "folders"。
4,指定重复次数
要匹配某一项的特定次数重复,使用 "\{n,m}" 这样的形式。其中 "n" 和 "m"
都是数字。在它前面的那个项将被重复 "n" 到 "m" 次 (|inclusive| 包含 "n" 和
"m")。例如:
/ab\{3,5}
匹配 "abbb","abbbb" 以及 "abbbbb"。
当 "n" 省略时,被默认为零。当 "m" 省略时,被默认为无限大。当 ",m"
省略时,就表示重复正好 "n" 次。例如:
模式 匹配次数
\{,4} 0,1,2,3 或 4
\{3,} 3,4,5,等等
\{0,1} 0 或 1,同 \=
\{0,} 0 或 更多,同 *
\{1,} 1 或 更多,同 \+
\{3} 3
5,多选一匹配
在一个查找模式中,"或" 运算符是 "\|"。例如:
/foo\|bar
这个命令匹配了 "foo" 或 "bar"。更多的抉择可以连在后面:
/one\|two\|three
匹配 "one","two" 或 "three"。
如要匹配其多次重复,那么整个抉择结构须置于 "\(" 和 "\)" 之间:
/\(foo\|bar\)\+
这个命令匹配 "foo","foobar","foofoo","barfoobar",等等。
再举个例子:
/end\(if\|while\|for\)
这个命令匹配 "endif","endwhile" 和 "endfor"。

通过代理访问blogspot.com

不知缘由,blogspot被封,国内无法访问。
正常的博客发布、订阅、浏览都受到影响。
最简单的方法,通过代理访问。
最新的代理:google.cn,端口80
可访问blogspot.com 和 blogger.com,速度挺快, 不过仅限于 google 的相关网站。

另外,推荐几个速度快的在线代理:
http://proxy-12345.appspot.com/
https://soproxy.appspot.com/
http://www.sneakme.net

Vim技巧 - 替换的巧妙使用

如何将一串十进制数字转换为16进制数字,使用VIM完成转换的最简单方法如下:
:%s/\d\+/\=printf("%X", submatch(0))/g

这条命令的原理是,把一串数字,用printf()函数的输出替换掉,printf()函数输出的正是这串数字的16进制形式。

分解如下:
%s 在整个文件中替换 (:help :s )
\d\+ 匹配一个或多个数字 (:help /\d :help /\+ )
\= 使用表达式的结果进行替换 (:help /\w )
printf 按指定格式输出 (:help printf() )
submatch() 返回:s命令中的指定匹配字符串 (:help submatch() )
g 替换行内所有出现的匹配 (:help :s_flags)

看来,替换命令的巧妙使用可以完成很多意想不到的功能!

下面这个技巧是在VIM邮件列表中看到的,非常实用。

这里以编写C语言程序为例, 假设,我们最终想完成的代码如下:
#define BIT_MASK_1 (1 << 0)
#define BIT_MASK_2 (1 << 1)
#define BIT_MASK_3 (1 << 2)
#define BIT_MASK_4 (1 << 3)
#define BIT_MASK_5 (1 << 4)
#define BIT_MASK_6 (1 << 5)
#define BIT_MASK_7 (1 << 6)
#define BIT_MASK_8 (1 << 7)
#define BIT_MASK_9 (1 << 8)
#define BIT_MASK_10 (1 << 9)
#define BIT_MASK_11 (1 << 10)
#define BIT_MASK_12 (1 << 11)
#define BIT_MASK_13 (1 << 12)
#define BIT_MASK_14 (1 << 13)
#define BIT_MASK_15 (1 << 14)
#define BIT_MASK_16 (1 << 15)
#define BIT_MASK_17 (1 << 16)
#define BIT_MASK_18 (1 << 17)
#define BIT_MASK_19 (1 << 18)
#define BIT_MASK_20 (1 << 19)
#define BIT_MASK_21 (1 << 20)
#define BIT_MASK_22 (1 << 21)
#define BIT_MASK_23 (1 << 22)
#define BIT_MASK_24 (1 << 23)
#define BIT_MASK_25 (1 << 24)
#define BIT_MASK_26 (1 << 25)
#define BIT_MASK_27 (1 << 26)
#define BIT_MASK_28 (1 << 27)
#define BIT_MASK_29 (1 << 28)
#define BIT_MASK_30 (1 << 29)
#define BIT_MASK_31 (1 << 30)
#define BIT_MASK_32 (1 << 31)

我们不需要一行一行的去写,只需要先写好第一行,如下:
#define BIT_MASK_1 (1 << 0)

然后,我们回到Normal模式,在这一行上输入"Y31p",拷贝此行,然后粘贴31次。这样,我们得到总共32行上面的内容。
现在使用"V31j"命令选中这32行,然后使用两次替换命令:
:'<,'>s/BIT_MASK_\zs\d*\ze/\=line(".") - line("'<") + 1
:'<,'>s/\zs\d*\ze)$/\=line(".")-line("'<")

这样,我们就得到了我们想要的结果。
这种方式还可以用于数组下标的自动增加,以及文本的章节自动编号等功能。只要你能够用正则表达式准确的定位出你想要自动编号的的数字,那么就可以使用这种方法来自动编号。

以第一条命令为例,第二条命令和第一条命令类似:

:'<,'>s/BIT_MASK_\zs\d*\ze/\=line(".") - line("'<") + 1

这条命令在我们选中的区域内进行替换,查找以"BIT_MASK_"开头,后面跟任意多个数字的字符串,并把匹配位置放在数字上,然后使用后面表达式计算出来的数字替换这些匹配的数字。
下面是这条命令中每个元素的含义:
'<,'> 我们所选中的区域 (:help '<,:help '> )
s 在选中的区域中进行替换 (:help :s )
\zs 指明匹配由此开始 (:help /\zs )
\d* 查找任意位数的数字 (:help /\d )
\ze 指明匹配到此为止 (:help /\ze )
\= 指明后面是一个表达式 (:help :s\= )
line(".") 当前光标所在行的行号 (:help line() )
line("'<") 我们所选区域中第一行的行号 (:help line() )

"'<"和"'>"是我们使用了"v","V"命令选中一个visual区域后,VIM设置的标记,分别用来标识visual区域的开始和结束。
"BIT_MASK_\zs\d*\ze"是一个正则表达式,用来查找以"BIT_MASK_"开头,后面跟任意多个数字的字符串。其中"\zs"、"\ze"用来指定匹配的开始和结束位置,因为我们只打算替换"BIT_MASK_0"中的数字,所以在查找时只把匹配区域置在数字上。
由于我们的替换操作要把不同行的数字替换成不同的值,所以在这里需要使用一个表达式来计算出替换后的值。当":s"命令的替换字符串是以"\="开头时,表明使用一个表达式计算的结果进行替换。我们这里的表达式就是"line(".")
- line("'<") +
1",其中"line()"函数用来获得行号,它可以获得当前行的行号,以及指定的标记(mark)所在的行号。"line(".")"用来获得当前光标所在行的行号,"line("'<")"则用来获得"'<"标记所在行的行号。这两个行号的差加上1就是我们想替换的值。

在上面的例子中,我们使用VIM的替换功能,实现高效的代码编写。现在介绍另外一种方法,实现相同的功能。

我们先看例子:
UniqueID2 = lview.focusedItem.subItems.opIndex(0).text;
Parent = lview.focusedItem.subItems.opIndex(0).text;
Children = lview.focusedItem.subItems.opIndex(0).text;
login = lview.focusedItem.subItems.opIndex(1).text;
txtCust.text = lview.focusedItem.subItems.opIndex(2).text;
txtProj.text = lview.focusedItem.subItems.opIndex(3).text;
txtbDate.text = lview.focusedItem.subItems.opIndex(4).text;
txtdDate.text = lview.focusedItem.subItems.opIndex(5).text;
txteDate.text = lview.focusedItem.subItems.opIndex(6).text;
txtPM.text = lview.focusedItem.subItems.opIndex(7).text;
txtLang.text = lview.focusedItem.subItems.opIndex(8).text;
txtVendor.text = lview.focusedItem.subItems.opIndex(9).text;
txtInvoice.text = lview.focusedItem.subItems.opIndex(10).text;
txtPMFund.text = lview.focusedItem.subItems.opIndex(11).text;
txtProjFund.text= lview.focusedItem.subItems.opIndex(12).text;
txtA_No.text = lview.focusedItem.subItems.opIndex(13).text;
txtNotes.text = lview.focusedItem.subItems.opIndex(14).text;
txtStatus.text = lview.focusedItem.subItems.opIndex(15).text;

我们要把上面代码中括号中的数字,替换成由0开始的一个顺序递增序列,例如:
UniqueID2 = lview.focusedItem.subItems.opIndex(0).text;
Parent = lview.focusedItem.subItems.opIndex(1).text;
Children = lview.focusedItem.subItems.opIndex(2).text;
……

实现以上需求,除了用前面介绍的方法外,还可以用下面的命令:
:let n=0 | g/opIndex(\zs\d\+/s//\=n/|let n+=1

这条命令同上一篇介绍的命令类似,它也使用了VIM的替换功能和表达式,不同之处在于它并不需要事先选中替换区域,因为它没有使用"line()"函数来计算当前位置的偏移,而是直接使用变量来进行赋值。
下面简单讲解一下这条命令各个组成元素:
let 为变量赋值 (:help let )
| 用来分隔不同的命令 (:help :bar )
g 在匹配后面模式的行中执行指定的ex命令 (:help :g )
\zs 指明匹配由此开始 (:help /\zs )
\d\+ 查找1个或多个数字 (:help /\d )
s 对匹配模式进行替换 (:help :s )
\= 指明后面是一个表达式 (:help :s\= )

所以,这条命令的执行过程为:
1. 给变量n赋值为0;
2. 查找模式" opIndex(\zs\d\+",使用变量n的值替换匹配的模式字符串;
3. 给变量n加1;

需要说明一下"|",它用来分隔不同的命令。
另外,在substitute命令中,如果省略匹配模式字符串,它会使用之前定义的匹配模式字符串,在本例中就是由"global"命令定义的"opIndex(\zs\d\+"。

除了上面介绍的方法外,还有一个VIM插件专门实现数字、日期等的增、减,可以在下面的网址下载此插件:
http://vim.sourceforge.net/scripts/script.php?script_id=670

http://mysite.verizon.net/astronaut/vim/index.html#VISINCR

linux的ln命令使用方法

ln 命令
用途 : 链接文件。
语法
1>将某个文件链接到一个文件上
ln [ -f | -n] [ -s ] SourceFile [ TargetFile ]
2>将一个或多个文件链接到一个目录上
ln [ -f | -n] [ -s ] SourceFile ... TargetDirectory
描述
ln 命令将在 SourceFile 参数中指定的文件链接到在 TargetFile
参数中指定的文件,或将其链接到在 TargetDirectory
参数中指定的另一个目录中的文件。
在缺省情况下,ln 命令会创建硬链接。如果需要使用 ln
命令来创建符号链接,请指明 -s 标志。
符号链接是指向文件的一个间接指针;它的目录项中包含了它所链接的文件名。符号链接可能会跨越文件系统,可能指向目录。
如果正在将某个文件链接到新的名字,那么只能列出一个文件。如果链接到一个目录,那么可以列出多个文件。
TargetFile 参数是可选的。
如果不指定目标文件,ln
命令会在当前的目录中创建一个新的文件。新的文件继承了指定在 SourceFile
参数中的文件名。
注意:
如果不使用 -s 标志,就不能在文件系统之间链接文件。
如果 TargetDirectory 已经是链接到目录上的一个符号链接,那么 ln
命令将现有的目标视为文件。
这意味着,类似于 ln -fs somepath/lname symdir 的命令不会遵循现有的 symdir
符号链接,作为代替,它会创建一个从 somepath/lname 到 symdir
的新的符号链接。
参数
-f 促使 ln
命令替换掉任何已经存在的目的路径。如果目的路径已经存在,而没有指定 -f
标志,ln
命令不会创建新的链接,而是向标准错误写一条诊断消息并继续链接剩下的
SourceFiles。
-n 指定,如果链接是一个现有的文件,那么不要覆盖文件的内容。 -f
标志重设了这个标志。这是缺省的行为。
-s 促使 ln
命令创建符号链接。符号链接中包含了它所链接的文件的名字。当对链接执行打开操作的时候,会使用到引用文件。对符号链接的
stat 调用会返回链接的目标文件;必须完成lstat
调用来获取链接的信息。可以使用 readlink
调用来读取符号链接的内容。符号链接可能跨越文件系统,指向目录。
注意:当为 -s 标志指定 SourceFile
参数的时候,必须使用绝对路径。如果没有指明绝对路径,那么当 SourceFile 和
TargetFile
参数位于不同的目录中的时候,可能会发生意外的结果。在创建符号链接之前,不需要存在源文件。
退出状态
此命令返回以下的退出值:
0 所有指定的文件都成功链接上了。
> 0 出现一次错误。
示例
1>为了创建到一个文件的另一个链接(别名),请输入:
ln -f file1 file2
这会将 file1 链接到新的名称, file2。如果 file2
不存在,那么会创建该文件名。如果 file2
已经存在了,那么这个文件会被替换为指向 file1的一个链接。然后 file1 和
file2
文件名会指向同一个文件。对其中任何一个的更改都会出现在另一个中。如果一个文件名被
rm 命令删除,那么该文件并没有完全被删除,因为它仍然以其它的名字存在。
2>为了将文件链接为另一个目录中的相同名字,请输入:
ln index dir1
这会将 index 链接到新的名称,dir1/index。
注意:在示例 1 中的 file2 是一个文件的名称;在示例 2 中的 dir1
是一个已经存在的目录。
3>为了将几个文件链接为另一个目录中的名称,请输入:
ln file2 dir2/file3 /home/dir1
这会将 file2 链接到新的名称 /home/dir1/file2;将 dir2/file3 链接到新的名称
/home/dir1/file3。
4>如果想要在 ln 命令中使用模式匹配字符,请输入:
ln dir1/* .
这会将 dir1 目录中的所有文件链接到当前目录中, . (点),给他们在 dir1
目录中同样的名称。
注意: 必须在星号和句点之间输入一个空格。
5>为了创建一个符号链接,输入:
ln -s /tmp/test test
这会在当前的目录中创建符号链接 test。 test 文件指向 /tmp/test 文件。如果
/tmp/test 文件已经存在了,那么 cat test 命令可以列出其内容。
6>如果想要在不指明 TargetFile 参数的情况下得到相同的结果,请输入:
ln -s /tmp/test

文件
/usr/bin/ln 包含了 ln 命令。

linux软链接和硬链接的区别

A "hard link" is another name for an existing file; the link and the
original are indistinguishable. Technically speaking, they share the
same inode, and the inode contains all the information about a
file--indeed, it is not incorrect to say that the inode _is_ the file.
On all existing implementations, you cannot make a hard link to a
directory, and hard links cannot cross file system boundaries. (These
restrictions are not mandated by POSIX, however.)

"Symbolic links" ("symlinks" for short), on the other hand, are a
special file type (which not all kernels support: System V release 3
(and older) systems lack symlinks) in which the link file actually
refers to a different file, by name. When most operations (opening,
reading, writing, and so on) are passed the symbolic link file, the
kernel automatically "dereferences" the link and operates on the target
of the link. But some operations (e.g., removing) work on the link
file itself, rather than on its target. *Note Symbolic Links:
(libc)Symbolic Links.

约翰・博格:投资者应吸取的六个教训

投资者几乎能把历史教训忘得一干二净,去年这让他们深受其害。以下列出最重要的六点教训:
1. 小心对待市场预期,即使是专家的预期。2008年初,华尔街12家大型公司的策略师对标准普尔500指数年底的收盘点位和收益水平作出预期。他们平均预计,该指数年底收于1,640点,去年的每股收益为97美元。这些专业人士的见解相差无几。
而事实情况是,标准普尔500指数收于903点,每股收益估计为50美元。
策略师并非总是错的。但他们总是年一年地预计市场将上涨,而且涨幅通常在10%左右。所以,2004、2006和2007年他们的预测基本准确,但完全没有预料到2000、2001和2002年的市场下挫,也大大低估了2003年市场的反弹力度。
别理睬那些一贯看涨的策略师的预期。看跌人士无法在华尔街长期立足。
2. 永远不要低估资产配置的重要性。投资并不是只持有普通股。股市的历史回报也无法作为判断未来收益的可靠依据。实际上,投资者应该在投资组合中保留部分短期或中期优质债券。没能认识到这一点的投资者会在2008年这样的困难时期栽跟头。
那么持有多少债券呢?建议投资组合中债券所占百分比与您的年龄相当。尽管我并非绝对遵守这个规定;2000年初,债券在我的个人投资组合中大约占65%;由于从那时起,我的债券投资累计盈利50%,股票投资为亏损25%,所以现在我的投资组合中债券占75%,仍然比较接近我的年龄。
在全心关注股票可观历史回报的同时,也不要忽略债券。不仅要看到股票投资将来赚钱的希望,同时也要考虑一旦判断失误的后果。
3. 历史业绩出众的共同基金经常遇挫。去年就是一个极端的例子。标准普尔500指数全年累计下跌37%,美盛值信托基金(Legg Mason
Value Trust)下跌55%。富达麦哲伦基金(Fidelity Magellan Fund)
2007年表现良好,2008年却损失49%。由专业机构管理的基金也蒙受损失:Dodge and Cox
Stock跌43%;第三大道价值基金(Third Avenue Value)跌46%;CGM
Focus跌48%;Clipper跌50%;长叶松合伙人基金(Longleaf
Partners)下跌51%。(充分披露:先锋集团(Vanguard)旗下四只较为活跃的股票型基金也远远落后于市场表现)。
这些基金遭遇的惨痛损失能否在将来得到弥补,这些基金经理是否已经是江郎才尽,或者他们的运气是否已经不复存在,只有时间能告诉我们答案。不管怎样,追踪历史表现通常是失败者的做法。寻求战胜市场表现的基金经理应当对投资者说明,他们必须做好每三年中至少有一年的时间落后、甚至是大幅落后市场的准备。
4. 投资整个市场依然是首选策略。这种策略确保投资者的回报率仅略低于市场水平,而大大高于较为活跃的股票型基金整体回报率。原因何在?因为较为活跃的股票型基金投资者每年承担的繁重成本很容易就能达到2%-3%:管理费率通常为1%-1.5%;变换投资组合的潜在成本一般在0.5%-1.0%;5%的前端费率分摊在5-10年的持有期中;再加上每年0.5%-1.0%的其他成本。
作为一个整体,投资者就是构成指数的个体(也就是说,他们拥有整个市场)。所以指数化投资获胜并不是因为市场有效(市场有时候是有效的,但有时候没有),而是因为其每年所有成本加起来只有0.1%-0.2%。
2008年指数化投资显示出明显优势。低成本、低换手率、零佣金的标准普尔500指数基金表现超出所有股票型基金近70%,超出美国所有大型股基金(公认为一种更合理的比较对象)60%以上。这延续了33年前第一只指数基金创立时的情况,只是略有不同。债券指数基金的表现更好,2008年的收益率为5%,强于80%以上的应税债券型基金。
总的来说,积极管理策略整体失败是因为成本高昂;被动的指数化投资策略胜出则是因为成本低廉。
5. 在投资替代资产类别前要三思而行。2006-2007年,专注于发达国际市场和新兴市场的股票型共同基金收益高于美国股市。在此期间,美国投资者净买入2,850亿美元投资非美国股票的共同基金,净抛售大约350亿美元专注美国股市的基金。
这种"追逐业绩"的极端案例很难有什么值得辩护的。但基金销售人士却鼓吹称这增加了非相关性资产或降低了波动性风险。2008年,除美国以外的发达市场基金下跌45%,新兴市场基金跌去55%;这再次说明,就在我们最需要国际分散化投资的时候,它却让我们失望了。
大宗商品市场也与此类似。随着全球经济衰退不断加剧,商品类基金下挫,其中规模最大的基金下跌了50%。一定要记住:不要总是这山望着那山高,要三思而行。
6. 当心金融创新。为什么呢?因为大部分金融创新工具的设计目的在于充实创新者的腰包,而非投资者。想想需要向出售抵押贷款支持债券的销售人员、服务机构、银行、承销商和经销商支付的多层费用吧。这些新产品(例如信用违约掉期)在2005-2007年间令其销售者富裕起来,但持有这些产品的客户在2008年损失惨重。
我们的金融体系是由一个庞大的市场机器所驱动,其中卖方和买方的利益存在直接冲突。卖方仍然享有信息优势,几乎总是胜出。
可以说我们不是没有被警告过忽视历史教训的危险。两千多年前,罗马演说家加图(Cato)指出,人类本性中一定有很多愚蠢的特质,否则人们不会千百次地落入相同的圈套;虽然人们还记得过去的不幸遭遇,他们却继续追逐并鼓励那些导致其不幸的因素,而那又会带来新的不幸。
2008年的市场状况则再次证明了他的预言,也许这些多次重复的深刻教训能够帮助投资者避免2009年和以后再犯下类似的错误吧。

??????????

太阳能
  天威保变(600550)形成太阳能原材料、电池组件的全产业布局
  小天鹅 (000418) 大股东参股无锡尚德太阳能电力
  岷江水电(600131) 参股西藏华冠科技涉足太阳能产业
  生益科技(600183)控股的东海硅微粉公司是国内最大硅微粉生产企业
  维科精华(600152) 成立的宁波维科能源公司专业生产各种动力、太阳能电池
  安泰科技(000969) 与德国ODERSUN公司合作薄膜太阳能电池产业'
  长城电工(600192) 参股长城绿阳太阳能公司涉足太阳能领域股参网,
  乐山电力(600644) 参股四川新光硅业主要生产多晶硅太阳能硅片
  华东科技(000727) 国内最大的太阳能真空集热管生产商
  春兰股份(600854) 大股东计划投资30亿开发新能源
  威远生化(600803) 实际控股股东新奥集团从事太阳能等新能源产品生产
  力诺太阳(600885) 太阳能热水器的原材料供应商
  西藏药业(600211) 发起股东之一为西藏科光太阳能工程技术公司
  新华光(600184)太阳能特种光玻基板股参网
  特变电工(600089) 控股的新疆新能源从事太阳能光伏组件制造
  航天机电(600151) 控股的上海太阳能科技电池组件产能迅速提升
  南玻A(000012) 05年10月拟首期2亿元建设年产能30兆瓦太阳能光伏电池生产线。
  交大南洋(600661) 控股的交大泰阳从事太阳能电池组件生产
  杉杉股份(600884) 参股尤利卡太阳能,掌握单晶硅太阳能硅片核心技术
  王府井(600859)全资子公司深圳王府井(600859行情,爱股)联合了中国最大的太阳能专业研究开发机构--北京太阳能研究所成立了北京桑普光电技术公司
  风帆股份(600482) 投巨资参与太阳能电池组件生产,

  金山股份(600396) 风力发电,风力发电设备安装及技术服务
  湘电股份(600416) 控股股东与德国莱茨鼓风机有限公司签订了合资生产离心风机协议,目前风电资产主要在控股股东中
  粤电力 (000539)风力发电
  特变电工(600089)与沈阳工业大学等设立特变电工沈阳工大风能有限公司
  京能热电(600578)为国华能源第二大股东,间接参与风能建设
  东方电机(600875) 风电设备制造
金风科技(002202) 风电设备制造
天奇股份(002009) 风电设备制造
华仪电气(600290) 风电设备制造发电场

核能
  中核科技(000777)大股东为中国核工业总公司
  G申能(600642)投资33601万元收购核电秦山联营公司12%股权以及投资10559万元收购秦山第三核电公司10%的股权

乙醇汽油
  丰原生化(000930)是安徽省唯一一家燃料乙醇供应单位
  华润生化(600893) . 控股股东华润集团控股吉林燃料乙醇和黑龙江华润酒精二大定点企业
  广东甘化(000576)利用甘蔗、玉米等可再生性糖料资源生产燃油精,成为汽油代替品
  华资实业(600191) 利用可再生性糖料资源生产燃油精,成为纯车用汽油代替品
  荣华实业(600311赖氨酸(豆粕的替代品)新增产能最大的企业之一
  华冠科技(600371)在国内率先拥有了玉米深加工多项最新技术的所有权或使用权
氢能
  同济科技(600846)公司与中科院上海有机化学研究所、上海神力科技合资组建中科同力化工材料有限公司开发燃料电池电动车。
  中炬高新(600872)子公司中炬森莱生产动力电池
  春兰股份(600854)春兰集团研发20-100AH系列的大容量动力型高能镍氢电池
  力元新材(600478)主要生产泡沫镍

锂电池
  稀土高科(600111)利用1997年首次发行股票募集的资金开发镍氢电池项目锂电池
  澳柯玛(600336)子公司澳柯玛(600336)新能源技术公司为锂电池行业标准制订者
  杉杉股份(600884) 生产锂电池材料,为国内排名第一供应商
  TCL集团(000100) 子公司生产锂电池
  维科精华(600152)成立工业园,生产动力电池、锂电、太阳能

垃圾发电
  岁宝热电(600864)参股公司黑龙江新世纪能源有限公司主营垃圾发电
  东湖高新(600133) 主营转变为生活垃圾发电、生物质能源等在内清洁再生能源业务
  凯迪电力(000939)公司在垃圾发电领域处领先地位
  泰达股份(000652) 公司双港垃圾焚烧发电项目进入商业阶段

节能LED照明
  方大A(000055) 氮化镓基半导体照明材料及其器件项目技术和规模居国内领先水平
  联创光电(600363)国家"铟镓氮LED外延片、芯片产业化"示范工程企业
  华微电子(600360)半导体电子大功率器件生产基地
  上海科技(600608)合资的子公司主营高亮度蓝光、绿光、白光LED芯片规模化制造和封装
  长电科技(600584)与北京工大智源科技组建光电子公司,研制高亮度白光芯片
  ST福日(600203)与中科院半导体研究所合作投资氮化镓基高亮度芯片与发光器件项目

绿色照明
  浙江阳光(600261)公司是目前亚洲最大的节能制造厂商,也是飞利浦贴牌灯的最大生产商
  佛山照明(000541)照明产业龙头企业,开发新一代节能荧光灯
  双良股份(600481)公司是溴化锂制冷机国家标准制定者,国内最大的溴化锂制冷机制造商之一,该产品具备节能环保优势
  同方股份(600100)清华同方人工环境有限公司提供建筑节能系统
  方大A(000055)开发高科技节能环保幕墙