以下是网站 shiroko.cn 在 2010-12 的历史页面存档,小提示:CTRL+U 查看源码
本站和 shiroko.cn 的作者无关,不对其内容负责。本历史页面谨为网络历史索引,不代表被查询网站的即时页面。 *号[x]表示已屏蔽显示的敏感字。
原网页标题:~水晶其源~

~水晶其源~

2010年12月6日

Flash的通信

Filed under: ActionScript,JavaScript,PHP,编程 — 水晶其源 @ 18:54

关键词

fla:flash的源文件,可以方便修改,然后重新编译

swf:fla编译后的文件

as:actionscript,flash使用的脚本语言

一、Flash和容器

Flash和容器之间的通信,多指swf和html之间的通信。

由于ie和ff下加载swf的的方式不一样,结果造就了加载swf需要两端代码,一段ie用,一段ff用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="400" height="300">
<param name="movie" value="./swf/common.swf?1.5" />
<param name="quality" value="high" />
<param name="swfversion" value="10.0.0" />
<!-- 此 param 标签提示使用 Flash Player 6.0 r65 和更高版本的用户下载最新版本的 Flash Player。如果您不想让用户看到该提示,请将其删除。 -->
<param name="expressinstall" value="/swf/expressInstall.swf" />
<param name="wmode" value="transparent" />
<!-- 下一个对象标签用于非 IE 浏览器。所以使用 IECC 将其从 IE 隐藏。 -->
<!--[if !IE]>-->
<object id="FlashID_NOIE" type="application/x-shockwave-flash" data="./swf/common.swf?1.5" width="400" height="300">
<!--<![endif]-->
<param name="quality" value="high" />
<param name="swfversion" value="10.0.0" />
<param name="expressinstall" value="/swf/expressInstall.swf" />
<param name="wmode" value="transparent" />
<!-- 浏览器将以下替代内容显示给使用 Flash Player 6.0 和更低版本的用户。 -->
<div>
<h4>此页面上的内容需要较新版本的 Adobe Flash Player。</h4>
<p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="获取 Adobe Flash Player" width="112" height="33" /></a></p>
</div>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>

后来出现了swfobj这个js类,可以非常方便并且系统的加载swf。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<div id='swfContain' ></div>
<script type="text/javascript">
<!--
var flashvars = {
"para1":"参数1", //传入swf变量
"para2":"参数2" //传入swf变量
};
var params = {  
"menu": "false",  //菜单显示
"wmode": "transparent",  //窗口模式
"scale": "noScale",  //缩放
"allowFullscreen": "false", //允许全屏 
"allowScriptAccess": "always",  //允许脚本
"bgcolor": "#EEEEEE"  //背景
};  
var attributes = {  
"id":"commonID"  //swf在HTML的唯一id
};  
swfobject.embedSWF("./swf/common.swf?1.5", "swfContain", "400", "300", "10.0.0", "/swf/expressInstall.swf", flashvars, params, attributes);  
//-->
</script>

这个类的好处在于可以同过判断浏览器生成相应的加载swf代码,而且避免了两端代码写错的可能性,最重要的是生成唯一的flashID方便调用。

1.      swf调用js函数:

html页面上的js函数可以直接调用,并且可以给返回,但是不同语言间的通信最好都使用string类型,传参和返回都一样,一般来说传递的是xml或者json格式的string,然后再编码。如果载入的js跟html不同域名(跨域),则需要处理跨域。

2.      js调用swf的as函数:

html页面上的js并不能直接调用as函数,需要flash里做一个注册,可以把一个函数给外部调用,并赋予新的函数名。函数一样可以给返回值,返回值最好使用string,传参也一样。调用as方法为flashObject.asfunction();
比如html上有一个swf名字为flashID,注册了一个方法为showMsg

?View Code JAVASCRIPT
1
2
3
4
//一般写法
var str = document.getElementById(“flashID”). showMsg(“msg”);
//swfobj写法,swfobj专门提了获取swf的方法
var str = swfobject.getObjectById(“flashID”). showMsg(“msg”);

3.      跨域:

当html载入的swf跟html页面不同域名,或者html载入的可能跟swf有交互的js域名不同时,会发生flash的安全沙箱错误,即是常说的跨域。这时候需要在swf里把不同的域名设置起来,并且把html加载swf时候的allowScriptAccess参数改为always。注意,在调用as函数时候,因为数据错误也有可能报跨域错误,但是其实并不是跨域的问题。

二、Flash和url

Flash直接请求url获得返回然后处理,这是最常用的flash和后台的通信,flash可以侦听所有的过程,包括:请求、打开、进程、完成、初始化、输入输错错误、安全沙箱错误……,这个通信其实就是ajax的通信机制的前身。可以理解为跟ajax一样的调用方法。Flash的URLLoader有三种固定返回格式text、variables、xml。一般都用text,其他格式需要提前说明。

1.      Text

输出直接给予返回,as可以得到页面输出的string格式数据,如果页面只需要一个1、0或者ok之类的字段,便可以直接操作。

2.      Json

Json的话,as中使用的格式依然是text,如果需要json,可以输出一个json的string给flash,flash做decode处理输组,因为json格式比轻便且方便,最重要很流行,眼下ajax一直在用这个格式,但是注意一定要传string千万不要把object格式的json传过去。

3.      Variables

类似get方式传参的样子。v1=11&v2=bb&v3=嘿 因为text方式只能传递一个参数,使用variables方式可以传递很多个参数,如果返回结果需要很多判断,但是也不是级联型特别强的话,可以使用这种方式。

4.      Xml

Flash对xml的处理能力超强,不管是查询还是修改删除节点。所以数据量比较大的时候,使用xml是个非常好的方法,只是除了flash主站外,flash都只是一小块,属于辅助页面的,所以使用ajax的json更常用一些。

5.      跨域

如果swf的地址跟调用的url的地址在不同域名下,会出现安全沙箱错误(跨域),这种错误可以使用容器的那种处理方式,也可以使用更方便的crossdomain方法,即在调用url的域名根目录下放置一个crossdomain.xml

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*.doll.com" to-ports="*" />
<allow-access-from domain="swf.doll.com" />
<allow-access-from domain="act.doll.com" />
<allow-access-from domain="www.doll.com" />
<allow-access-from domain="*.shiroko.cn" to-ports="80" />
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>

一、            Flash和socket

1.      Tcp/ip

设置好服务器,建立长连接。一直发送和接收信息就可以完成,基本上都是使用一行文字的处理,用空格之类的隔开,由于这个数据要求非常简洁,即使json也太大了。

2.      跨域

需要第一条信息先发送crossdomain的内容,如

1
2
3
$crossDomain="<?xml version='1.0'?>"."<cross-domain-policy>"."<site-control permitted-cross-domain-policies='all'/>"."<allow-access-from domain='*' to-ports='*'/>"."</cross-domain-policy>\0";
socket_write ( $client [$i] ['sock'], $crossDomain );
echo date("H:i:s")." server send : $crossDomain"."\n";

一、            Flash和amf

Amfphp

需要在服务器上搭建一个amfphp服务,可以在http://www.amfphp.org/下载和观看doc。所谓搭建这个服务,基本上跟简历一个js的文件夹一样。

在amf制定的位置建立php类

http://yourdomain/amfphp/services/minamoto/HelloWorld.php

1
2
3
4
5
6
7
8
class HelloWorld{
public function HelloWorld(){
//
}
public function say($sMessage){
return 'You said: ' . $sMessage;
}
}

那么,flash里可以直接调用这个方法

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
var nc:NetConnection = new NetConnection();
var url:String = "http://yourdomain/amfphp/gateway.php";
nc.connect(url);
var rp:Responder = new Responder(resultFun, statusFun);
var para:String = "hi,flash";
nc.call("minamoto.HelloWorld.say",rp,para);
function resultFun(res:String):void{
//正确的返回。
}
function statusFun(res:String):void{
//各种状态信息。
}

跨域

根目录AMFPHP下的gateway.php中的PRODUCTION_SERVER

参数设置为true,即可amf只接受本服务器的传参。

参数设置为false,即可接收外部服务器的传参。

AMFPHP基本安全问题

Filed under: 未分类 — 水晶其源 @ 12:02

原文:http://theflashblog.com/?p=419

1. 删除Service Browser
因为对你有用的服务和方法对其他任何来说也一样能用,很明显,为此你需

要在你的产品机上删除它。最简单的就是删除位于AMFPHP根目录的Browser

文件夹

2.删除DiscoveryService 服务
DiscoveryService 服务再你安装AMFPHP的时候就被包含进来,这个服务会暴

露所有有效的服务和方法的详细信息,为了安全期间,整个删除AMFPHP/services文件夹

下的amfphp目录或者只删除DiscoveryService.php文件

3.设置PRODUCTION_SERVER属性
PRODUCTION_SERVER属性位于根目录AMFPHP下的gateway.php中,默认值是

false,在产品机上应该设置为true,这样它会禁止一些类似远程开发调试的

头信息的东西。

4.如果可能的通过SSL来运行服务
通过SSL,flash和php之间的数据交换将是加密传输的,让sniff很难发现真

实的数据。

5.使用beforeFilter进行认证
在AMFPHP 1.9版本增加了一个新特色,让你能够认证调用者是否有访问服务

的权限。在你的服务类里添加一个叫做“beforFilter”的方法:

public function beforeFilter($function_called)

这个函数在客户端调用服务端方法的时候呗调用,如果返回true,方法将被

执行,返回false,则抛出一个错误,在这个方法里你可以做一些认证逻辑。

这方面Joshua Ostrom写了一篇很不错的博客:

http://www.joshuaostrom.com/2008/06/03/securing-amfphp-19-via-authentication/

6.PHP的基本安全
AMFPHP毕竟是使用PHP的,务必了解一些基本的PHP安全方面的知识,比如如

何放置SQL注入等。关于这方面,推荐阅读“Essential PHP Security ”

2010年11月29日

CSS规范[根据W3C标准制定]

Filed under: 未分类 — 水晶其源 @ 18:35

原帖http://www.cnblogs.com/dabing/archive/2010/03/20/1690420.html

由于项目中编写文档结构、编写CSS的人员较多,并与程序员协同工作,所以就需要统一开发规范,根据XHTMl和CSS编织的规范和大多人的习惯,整理了以下针对本项目的一个简单的开发规范:

一、CSS文件及样式命名

1、CSS文件命名规范

全局样式:global.css;

框架布局:layout.css;

字体样式:font.css;

链接样式:link.css;

打印样式:print.css;

2CSS样式命名规范

本人建议:用字母、_号工、-号、数字组成,必须以字母开头,不能为纯数字。为了开发后样式名管理方便,大家请用有意义的单词或缩写组合来命名,让同事一看就明白这样式大概是哪一块的,这样就节省了查找样式的时间,例如:

头部样式用header,头部左边,可以用header_left或header_l,还有如果是列结构的可以这样—— box _1of3 (三列中的第一列),box_2of3 (三列中的第二列)、box _3of3 (三列中的第三列),其它的我就不一一举例了,大家按以上规律去命名就好。

下面列出一些常用的命名单词方便大家使用:(以后大家工作过程中慢慢把自己积累的单词都共享出来,那大家的命就会更加统一了,就不会有一义多词的情况了。)

容 器:container/box

头 部:header

主 导 航:mainNav

子 导 航:subNav

顶 导 航:topNav

网站标志:logo

大 广 告:banner

页面中部:mainBody

底 部:footer

菜 单:menu

菜单内容:menuContent

子 菜 单:subMenu

子菜单内容:subMenuContent

搜 索:search

搜索关键字:keyword

搜索范围:range

标签文字:tagTitle

标签内容:tagContent

当前标签:tagCurrent/currentTag

标  题:title

内 容:content

列 表:list

当前位置:currentPath

侧 边 栏:sidebar

图 标:icon

注 释:note

登 录:login

注 册:register

列 定 义:column_1of3 (三列中的第一列)

column_2of3 (三列中的第二列)

column_3of3 (三列中的第三列)

二、idclass的使用及区别

我们知道在样式表定义一个样式的时候,可以定义id也可以定义class,例如:

ID方法:#test{color:#333333},在页面中调用<div>内容<div>

CLASS方法:.test{color:#333333},在页面中调用<div>内容<div>

id一个页面只可以使用一次,class可以多次引用。

我在页面中用了多个相同id在IE中显示也正常,id和class好象没什么区别,用多个相同id有什么影响吗?

页面存在多个相同的ID影响就是不能通过W3的校验。

在页面显示上,目前的浏览器还都允许你犯这个错误,用多个相同ID“一般情况下”也能正常显示。但是当你需要用JavaScript通过id来控制这个div,那就会出现错误。

id是一个标签,用于区分不同的结构和内容,就象你的名字,如果一个屋子有2个人同名,就会出现混淆;

class是一个样式,可以套在任何结构和内容上,就象一件衣服;

概念上说就是不一样的:

id是先找到结构/内容,再给它定义样式;class是先定义好一种样式,再套给多个结构/内容。

也就是说建议大家在写XHML+CSS时如果是维一的结构定位的就用id,否则就用class吧(这样让出非结构定位的div块的id让程序员自己定义使用)

web标准希望大家用严格的习惯来写代码。

.使用css缩写

使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。常用的css缩写的主要规则:

颜色

16进制的色彩值,如果每两位的值相同,可以缩写一半,例如:

#000000可以缩写为#000;#336699可以缩写为#369;

盒尺寸

通常有下面四种书写方法:

property:value1; 表示所有边都是一个值value1;

property:value1 value2; 表示top和bottom的值是value1,right和left的值是value2

property:value1 value2 value3; 表示top的值是value1,right和left的值是value2,bottom的值是value3

property:value1 value2 value3 value4; 四个值依次表示top,right,bottom,left

方便的记忆方法是顺时针,上右下左。具体应用在margin和padding的例子如下:

margin:1em 0 2em 0.5em;

边框(border)

边框的属性如下:

border-width:1px;

border-style:solid;

border-color:#000;

可以缩写为一句:border:1px solid #000;

语法是border:width style color;

背景(Backgrounds)

背景的属性如下:

background-color:#f00;

background-image:url(background.gif);

background-repeat:no-repeat;

background-attachment:fixed;

background-position:0 0;

可以缩写为一句:background:#f00 url(background.gif) no-repeat fixed 0 0;

语法是background:color image repeat attachment position;

你可以省略其中一个或多个属性值,如果省略,该属性值将用浏览器默认值,默认值为:

color: transparent

image: none

repeat: repeat

attachment: scroll

position: 0% 0%

字体(fonts)

字体的属性如下:

font-style:italic;

font-variant:small-caps;

font-weight:bold;

font-size:1em;

line-height:140%;

font-family:”Lucida Grande”,sans-serif;

可以缩写为一句:font:italic small-caps bold 1em/140% “Lucida Grande”,sans-serif;

注意,如果你缩写字体定义,至少要定义font-size和font-family两个值。

列表(lists)

取消默认的圆点和序号可以这样写list-style:none;

list的属性如下:

list-style-type:square;

list-style-position:inside;

list-style-image:url(image.gif);

可以缩写为一句:list-style:square inside url(image.gif);

更多属性写法请参考《CSS样式手册》,在线手册地址:http://www.86w3.com/css/

四、明确定义单位,除非值为0

忘记定义尺寸的单位是CSS新手普遍的错误。在HTML中你可以只写width=100,但是在CSS中,你必须给一个 准确的单位,比如:width:100px width:100em。只有两个例外情况可以不定义单位:行高和0值。除此以外,其他值都必须紧跟单位,注意,不要在数值和单位之间加空格。

五、区分大小写

当在XHTML中使用CSS,CSS里定义的元素名称是区分大小写的。为了避免这种错误,我建议所有的定义名称都采用小写。

class和id的值在HTML和XHTML中也是区分大小写的,如果你一定要大小写混合写,请仔细确认你在CSS的定义和XHTML里的标签是一致的。

六、取消classid前的元素限定

当你写给一个元素定义class或者id,你可以省略前面的元素限定,因为ID在一个页面里是唯一的,class可以在页面中多次使用。你限定某个元素毫无意义。例如:

div#id1{}可以写成#id1{}

这样可以节省一些字节。

七、默认值

通常padding和margin的默认值为0,background-color的默认值是transparent。但是在不同的浏览器默认值可能不同。如果怕有冲突,可以在样式表一开始就先定义所有元素的margin和padding值都为0,象这样:

* {

padding:0;

margin:0

}

或者是针对某元素来定义:

ul,li,div,span {

padding:0;

margin:0

}
八、CSS的优先级
行内样式(inline style) > ID选择符 > 样式(class),伪类(pseudo-class)和属性(attribute)选择符 > 类别(type),伪对象(pseudo-element)

解释:

*内联样式(inline style):元素的style属性,比如 <div style=”color:red;”></div> ,其中的color:red;就是行内样式

*ID选择符:元素的id属性,比如 <div></div> 可以用ID选择符#content

*伪类(pseudo-class):最常见的是锚(a)伪类,比如a:link,a:visited.

*属性选择符(attribute selectors):比如div[class=demo],含有class为demo的div元素

*类别选择器(type selector):HTML标签选择,比如div .demo,div元素下含有class为demo的元素

*伪对象选择器(pseudo-element selector):比如div:first-letter,div元素下的第一个单词。

九、不需要重复定义可继承的值

CSS中,子元素自动继承父元素的属性值,象颜色、字体等,已经在父元素中定义过的,在子元素中可以直接继承,不需要重复定义,除非是为了更变当前元素样式不使用父元素的属性值,但是要注意,浏览器可能用一些默认值覆盖你的定义。

.多重CSS样式定义,属性追加重复最后优先原则

一个标签可以同时定义多个class,也可以是同一个class中重复定义属性。例如:

我们先定义两个样式

.one{width:200px;background:url(http://www.86w3.com/1.jpg) no-repeat left top;}

.two{border:10px solid #000; background:url(http://www.86w3.com/2.jpg) no-repeat left top;}

在页面代码中,我们可以这样调用:

<div two></div>

这样最终的显示效果是这个div样式是什么呢??重复的是以哪一个为准呢??

<div two></div>应用到的样式如下:

width:200px;

border:10px solid #000;

background:url(http://www.86w3.com/2.jpg) no-repeat left top;

因为,当应用两个或多个样式时,浏览器所应用的样式根据是属性追加重复最后优先原则

就是说两个或多个或重复的样式名定义,浏览器所应用的样式是按先后顺序的,如果定义了重复的属性值,以最后定义的为准, 如果应用了两个或多个样式名,里面不重复定义的属性值就追加上去,重复的属性值就以最后一个为准。这里要注意的是,样式的先后不是根据页面上应用的名字顺 序,而是样式表里的样式顺序。

十一、使用子选择器(descendant selectors)

使用子选择器是影响他们效率的原因之一。子选择器可以帮助你节约大量的class定义。我们来看下面这段代码:

<div>

<ul>

<li> <a href=”http://www.86w3.com/article1/#”>Item 1</a></li>>

<li> <a href=”http://www.86w3.com/article1/#”> Item 1</a> </li>

<li> <a href=”http://www.86w3.com/article1/#”> Item 1</a> </li>

</ul>

</div>

这段代码的CSS定义是:

div#subnav ul { }

div#subnav ul li.subnavitem { }

div#subnav ul li.subnavitem a.subnavitem { }

div#subnav ul li.subnavitemselected { }

div#subnav ul li.subnavitemselected a.subnavitemselected { }

你可以用下面的方法替代上面的代码

<ul id=”subnav”>

<li> <a href=”http://www.86w3.com/article1/#>” Item 1</a> </li>

<li> <a href=”http://www.86w3.com/article1/#>” Item 1</a> </li>

<li> <a href=”http://www.86w3.com/article1/#>” Item 1</a> </li>

</ul>

样式定义是:

#subnav { }

#subnav li { }

#subnav a { }

#subnav .sel { }

#subnav .sel a { }

用子选择器可以使你的代码和CSS更加简洁、更加容易阅读。

如果一个容器里有多个同样的元素,而且这些元素样式都不一样,请避免用这个方式,建以采用不同的class如:

<ul class=”one”><li></li></ul>

<ul class=”tow”><li></li></ul>

十二、不需要给背景图片路径加引号

为了节省字节,我建议不要给背景图片路径加引号,因为引号不是必须的。例如:

background-image:url(“images

margin:0 auto;

}

但是IE5/Win不能正确显示这个定义,我们采用一个非常有用的技巧来解决:用text-align属性。就象这样:

body {

text-align:center;

}

#wrap {

width:760px;

margin:0 auto;

text-align:left;

}

第一个body的text-align:center; 规则定义IE5/Win中body的所有元素居中(其他浏览器只是将文字居中) ,第二个text-align:left;是将#warp中的文字居左。

十七.不要使用(Import)导入css

@import url(***.css);会影响网页的加载性能

十八、CSS hack

有些时候,你需要对IE浏览器的bug定义一些特别的规则,这里有太多的CSS技巧(hacks),我只使用其中的两种方法,不管微软在即将发布的IE7 beta版里是否更好的支持CSS,这两种方法都是最安全的。

1.注释的方法
(a)在IE中隐藏一个CSS定义,你可以使用子选择器(child selector):

html>body p {

}

(b)下面这个写法只有IE浏览器可以理解(对其他浏览器都隐藏)

* html p {

}

(c)还有些时候,你希望IE/Win有效而IE/Mac隐藏,你可以使用反斜线技巧:

* html p {

declarations

}

(d)下面这个写法只有IE7浏览器可以理解(对其他浏览器都隐藏)

*+ html p {

}

2.条件注释(conditional comments)的方法
另外一种方法,我认为比CSS Hacks更加经得起考验就是采用微软的私有属性条件注释(conditional comments)。用这个方法你可以给IE单独定义一些样式,而不影响主样式表的定义。就象这样:

<!–[if IE]>

<link rel=stylesheet/css href=”http://www.86w3.com/style/ie.css” />

<![endif]–>

还有更多的CSS hack大家可以通过网上找找,但是有很多hack都是不符合w3c标准的,本人根据以上的hack写了一个能区分IE6、IE7、FF的样式,而且可以符合w3c标准,代码如下:

.classname {width:90px!important;width:100px;}

*+html .classname {width:95px!important;}

这样写后在IE6下宽是100px,IE7下是95px,火狐下是90px。

十九.调试技巧:层有多大?

当调试CSS发生错误,你就要象排版工人,逐行分析CSS代码。我通常在出问题的层上定义一个背景颜色,这样就能很明显 看到层占据多大空间。有些人建议用border,一般情况也是可以的,但问题是,有时候border 会增加元素的尺寸,border-top和boeder-bottom会破坏纵向margin的值,所以使用background更加安全些。

另外一个经常出问题的属性是outline。outline看起来象boeder,但不会影响元素的尺寸或者位置。只有少数浏览器支持outline属性,我所知道的只有Safari、OmniWeb、和Opera。

二十、CSS代码书写样式

在写CSS代码的时候,对于缩进、断行、空格,每个人有每个人的书写习惯。在经过不断实践后,我决定采用下面这样的书写样式:

.classname {

width:100px;

}

当使用联合定义时且样式较少(一般以不影响阅读为准),我通常将每个选择器单独写一行,这样方便在CSS文件中找到它们。在最后一个选择器和大括号{之间加一个空格,每个定义也单独写一行,分号直接在属性值后,不要加空格。

我习惯在每个属性值后面都加分号,虽然规则上允许最后一个属性值后面可以不写分号,但是如果你要加新样式时容易忘记补上分号而产生错误,所以还是都加比较好。

最后,关闭的大括号}单独写一行。空格和换行有助与阅读

2010年11月5日

Centos 5.5 配置独立的 Subversion 1.6.12 (SVN)服务器

Filed under: Linux,操作 — 水晶其源 @ 14:51

subversion(以下简称svn)是近年来崛起的版本管理工具,是cvs的接班人。

svn服务器有2种运行方式:

1. 独立服务器
2. 借助apache。

二种方式各有利弊,可以根据自己的需要进行配置,我不需要Http进行访问,只需要客户端可以Commit & update 就可以,下面是我选择的第一种方式-独立的SVN服务器。

svn存储版本数据也有2种方式:

1. BDB
2. FSFS。

因为BDB方式在服务器中断时,有可能锁住数据(朋友在搞ldap时就深受其害,没法根治),所以还是FSFS方式更安全一点,我也选择这种方式。

我的系统环境:Centos-5.5 + Php-5.3.3 + Nginx-0.8.49 + Mysql-5.5.5m3+subersion-1.6.12

================================================================
============ 以上介绍系统完成,下面开始SVN安装 ==============
================================================================
获取svn安装包,直接切换到root用户进行所有操作:
最新版下载地址:http://subversion.apache.org/
直接到下载页面:http://svn.haxx.se/dev/archive-2010-06/0320.shtml

下载完成之后,开始编译:

1 [root@hexu.org]$ tar xfvz subversion-1.6.12.tar.gz
2 [root@hexu.org]$ tar xfvz subversion-deps-1.6.12.tar.gz
3 [root@hexu.org]$ cd subversion-1.6.12
4 [root@hexu.org]$ ./configure -–prefix=/usr/local/svn -–without-berkeley-db

注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db

如果最后出现下面WARNING,我们直接忽略即可。因为不使用BDB存储。

configure: WARNING: we have configured without BDB filesystem support
You don't seem to have Berkeley DB version 4.0.14 or newer
installed and linked to APR-UTIL. We have created Makefiles which
will build without the Berkeley DB back-end; your repositories will
use FSFS as the default back-end. You can find the latest version of
Berkeley DB here:
http://www.sleepycat.com/download/index.shtml

编译完成之后,开始安装:

1 [root@hexu.org]$ make && make install

如果 make install 出现下面错误:

error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

解决办法:

01 #1、编辑/etc/ld.so.conf文件:
02 [root@hexu.org]$ vi /etc/ld.so.conf
03 # 添加下面一行
04 /usr/local/lib
05
06 #2、保存后运行ldconfig。
07 [root@hexu.org]$ /sbin/ldconfig
08
09 #3、再重新运行make install 问题得到解决。
10 [root@hexu.org]$ make install
11
12 #注:ld.so.conf和ldconfig用于维护系统动态链接库

测试是否安装成功:

1 [root@hexu.org]$ /usr/local/svn/bin/svnserve --version

如果显示如下,svn安装成功:

svnserve, version 1.6.12 (r955767)
compiled Sep  1 2010, 01:36:17
Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
The following repository back-end (FS) modules are available:
* fs_fs : Module for working with a plain file (FSFS) repository.
Cyrus SASL authentication is available.

================================================================
============ 为了方便下操作,下面将SVN的BIN添加到PATH ====================
================================================================
在/etc/profile最后加入 SVN Path 以方便操作:

01 #1、编辑/etc/profile文件,添加PATH
02 [root@hexu.org]$ vi /etc/profile
03 #比如像下面这样添加:
04 PATH=/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/svn/bin:$PATH
05
06 #添加完成执行,马上生效:
07 [root@hexu.org]$ source /etc/profile
08
09 #测试查看设置是否成功
10 [root@hexu.org]$ echo $PATH
11 /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/svn/bin:......
12 #上面已经包含了“/usr/local/svn/bin”,说明已经成功。

更多详细介绍可参考:http://blog.hexu.org/archives/647.shtml

================================================================
============ 以上安装完成,下面开始建立SVN版本库 =============
================================================================

svn版本库可建多个比如:repos,repos1,repos2….:
新建目录和初始化版本库:

1 #新建SVN存放数据文件的版本库目录
2 [root@hexu.org]$ mkdir -p /data/svn/repos
3
4 #初始化版本库,生成相关配置文件:
5 [root@hexu.org]$ svnadmin create /data/svn/repos

初始化版本库完成,开始设置配置svnserve.conf:

01 [root@hexu.org]$ vi /data/svn/repos/conf/svnserve.conf
02 ### This file controls the configuration of the svnserve daemon, if you
03 ### use it to allow access to this repository.  (If you only allow
04 ### access through http: and/or file: URLs, then this file is
05 ### irrelevant.)
06
07 ### Visit http://subversion.tigris.org/ for more information.
08
09 [general]
10 ### These options control access to the repository for unauthenticated
11 ### and authenticated users.  Valid values are "write", "read",
12 ### and "none".  The sample settings below are the defaults.
13 anon-access = none # 注意这里必须设置,否则所有用户不用密码就可以访问
14 auth-access = write
15 ### The password-db option controls the location of the password
16 ### database file.  Unless you specify a path starting with a /,
17 ### the file's location is relative to the directory containing
18 ### this configuration file.
19 ### If SASL is enabled (see below), this file will NOT be used.
20 ### Uncomment the line below to use the default password file.
21 password-db = passwd
22 ### The authz-db option controls the location of the authorization
23 ### rules for path-based access control.  Unless you specify a path
24 ### starting with a /, the file's location is relative to the the
25 ### directory containing this file.  If you don't specify an
26 ### authz-db, no path-based access control is done.
27 ### Uncomment the line below to use the default authorization file.
28 authz-db = authz
29 ### This option specifies the authentication realm of the repository.
30 ### If two repositories have the same authentication realm, they should
31 ### have the same password database, and vice versa.  The default realm
32 ### is repository's uuid.
33 realm = repos
34 [sasl]
35 ### This option specifies whether you want to use the Cyrus SASL
36 ### library for authentication. Default is false.
37 ### This section will be ignored if svnserve is not built with Cyrus
38 ### SASL support; to check, run 'svnserve --version' and look for a line
39 ### reading 'Cyrus SASL authentication is available.'
40 # use-sasl = true
41 ### These options specify the desired strength of the security layer
42 ### that you want SASL to provide. 0 means no encryption, 1 means
43 ### integrity-checking only, values larger than 1 are correlated
44 ### to the effective key length for encryption (e.g. 128 means 128-bit
45 ### encryption). The values below are the defaults.
46 # min-encryption = 0
47 # max-encryption = 256

注意:对用户配置文件的修改立即生效,不必重启svn。

初始化版本库完成,开始设置passwd 用户账号信息:

01 [root@hexu.org]$ vi /data/svn/repos/conf/passwd.
02 ### This file is an example password file for svnserve.
03 ### Its format is similar to that of svnserve.conf. As shown in the
04 ### example below it contains one section labelled [users].
05 ### The name and password for each user follow, one account per line.
06 # 在下面添加用户和密码,每行一组 username = password
07 [users]
08 # harry = harryssecret
09 # sally = sallyssecret
10 wangyong = password1
11 zhangsan = password2

初始化版本库完成,开始设置authz 用户访问权限:

01 ### This file is an example authorization file for svnserve.
02 ### Its format is identical to that of mod_authz_svn authorization
03 ### files.
04 ### As shown below each section defines authorizations for the path and
05 ### (optional) repository specified by the section name.
06 ### The authorizations follow. An authorization line can refer to:
07 ###  - a single user,
08 ###  - a group of users defined in a special [groups] section,
09 ###  - an alias defined in a special [aliases] section,
10 ###  - all authenticated users, using the '$authenticated' token,
11 ###  - only anonymous users, using the '$anonymous' token,
12 ###  - anyone, using the '*' wildcard.
13 ###
14 ### A match can be inverted by prefixing the rule with '~'. Rules can
15 ### grant read ('r') access, read-write ('rw') access, or no access
16 ### ('').
17
18 [aliases]
19 # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
20
21 # [groups]
22 # harry_and_sally = harry,sally
23 # harry_sally_and_joe = harry,sally,&joe
24
25 # [/foo/bar]
26 # harry = rw
27 # &joe = r
28 # * =
29
30 # [repository:/baz/fuz]
31 # @harry_and_sally = rw
32 # * = r
33 #### ==================== 下面我新加的 ==================== ###
34 [groups]
35 grp_hexu = zhangsan, wangyong # grp_hexu 组包括两个用户zhangsan, wangyong
36
37 [/]
38 zhangsan = # zhangsan 对根目录没有任何权限
39 wangyong = rw # wangyong 对根目录有读写权限
40
41 [repos:/hexu.org] # 对repos仓库的hexu.org项目进行权限 限制
42 @grp_hexu = rw # 限制grp_hexu 组对hexu.org项目有读写权限
43 wangyong = # 限制wangyong所有权限,其它用户有读写权限
44
45 [repos:/test.org] # 对repos仓库的test.org项目进行权限 限制
46 @grp_hexu = rw # 限制grp_hexu 组对test.org项目有读写权限
47 zhangsan = r # 限制zhangsan只有读权限,其它用户有读写权限

其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。

下面是举例一个最简单的svnserver.conf & passwd & authz配置:

01 ## svnserver.conf 配置
02 [root@hexu.org]$ vi /data/svn/repos/conf/svnserve.conf
03 [general]
04 anon-access = none
05 auth-access = write
06 password-db = passwd
07 authz-db    = authz
08 realm       = repos
09
10 ## passwd 配置
11 [root@hexu.org]$ vi /data/svn/repos/conf/passwd
12 [users]
13 #user1 = password1
14 #user2 = password2
15 zhangsan = ZhanGSan
16
17 ## authz 配置
18 [root@hexu.org]$ vi /data/svn/repos/conf/authz
19 [aliases]
20 [groups]
21 [/]
22 zhangsan = rw

启动svn服务器和新建svn用户:

01 # 以SVN身份运行,新建用户:
02 [root@hexu.org]$ useradd svn
03
04 #设置SVN版本库的用户和组:
05 [root@hexu.org]$ chown -R svn:svn /data/svn
06
07 #启动svn:
08 [root@hexu.org]$ su - svn -c "svnserve -d --listen-port 9999 -r /data/svn"
09
10 #检查是否启动:
11 [root@hexu.org]$ps -ef|grep svn
12 #如果显示如下,即为启动成功:
13 svn    6941    1   0 15:07  ?    00:00:00 svnserve -d –listen-port 9999 -r /data/svn

额外说明:

su - svn表示以用户svn的身份启动svn
-d表示以daemon方式(后台运行)运行
–listen-port 9999表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限
-r /data/svn 指定SVN服务的根目录是/data/svn

通过web方式访问svn有很多方法,请参阅配置websvn或配置bsSvnBrowser的方法。

好了所有配置完成,可以使用客户端SVN进行操作了。
================================================================
============ 以上介绍SVN版本库完成,下面开始测试 =============
================================================================

服务测试方法 1:

01 [root@hexu.org]$ cd /tmp
02 [root@hexu.org]$ mkdir test
03 [root@hexu.org]$ touch test.txt
04 [root@hexu.org]$ svn import /tmp/test/ file:///usr/local/svndata/repos -m "this is thie first import"
05 [root@hexu.org]$ mkdir -p /tmp/test2
06 [root@hexu.org]$ cd /tmp/test2
07 [root@hexu.org]$ svn co file:///usr/local/svndata/repos /tmp/test2/
08 #或者:
09 [root@hexu.org]$ svn co svn://{your-server-ip}:9999/repos/
10
11 #这时应该可以看到文件test.txt.

服务测试方法 2:

1 [root@hexu.org]$ telnet {your-server-ip} 9999  检查端口是不是通的

如果telnet 检查不通,有可能是防火墙(iptables)里面端口没开:

01 [root@hexu.org]$ vi /etc/sysconfig/iptables
02 -A RH-Firewall-1-INPUT -p tcp --dport 9999 -j ACCEPT
03
04 #保存完成,重启 iptables
05 [root@hexu.org]$ /etc/init.d/iptables restart
06 #或
07 [root@hexu.org]$ service iptables restart
08
09 有关权限设置可以参考:
10
11 http://blog.chinaunix.net/u/33048/showart_2079175.html
12
13 http://blog.csdn.net/saiya_kwok/archive/2009/02/20/3914294.aspx

2010年11月2日

Linux下修改PATH(添加PHP/Mysql到PATH)的三种方法

Filed under: Linux,操作 — 水晶其源 @ 19:07

添加PHP /usr/local/php/bin”到PATH
1.使用这种方法,每当登出PATH就会恢复

1 export PATH=$PATH:/usr/local/php/bin

2.这种方法最好,除非你强制手动修改PATH的值,否则将不会被改变
在适当位置添加”/usr/local/php/bin”

01 [root@hexuweb101 ~]$ vi /etc/profile
02 .......
03 .......
04 .......
05 HOSTNAME=`/bin/hostname`
06 HISTSIZE=1000
07
08 if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
09 INPUTRC=/etc/inputrc
10 fi
11 ############# 添加下面行 ##################
12 PATH=/usr/local/php/bin:/usr/local/mysql/bin:$PATH
13 ############# 添加上面行 ##################
14 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
15
16 for i in /etc/profile.d/*.sh ; do
17 if [ -r "$i" ]; then
18 . $i
19 fi
20 done

3.这种方法是针对用户起作用的,比如如果是在root权限操作,则root用户有效。

01 [root@hexuweb101 ~]$ vi ~/.bash_profile
02 # .bash_profile
03
04 # Get the aliases and functions
05 if [ -f ~/.bashrc ]; then
06 . ~/.bashrc
07 fi
08
09 # User specific environment and startup programs
10 ######修改 PATH行,把/usr/local/php/bin添加进去
11 ######PATH=$PATH:$HOME/bin
12 PATH=/usr/local/php/bin:$PATH:$HOME/bin
13
14 export PATH
15 unset USERNAME
16 ~

注意:想改变PATH,必须重新登陆才能生效,以下方法可以简化工作:

如果修改了/etc/profile,那么编辑结束后执行source profile 或 执行点命令 ./profile,PATH的值就会立即生效了。

01 #添加完成保存后,测试如下:
02 [root@hexuweb101 ~]$ php -v
03 #-bash: php: command not found
04 #上面原因是因为添加完成后还没有生效,使用下面方法即可:
05 [root@hexuweb101 ~]$ cd /etc
06 [root@hexuweb101 etc]$ source profile
07 [root@hexuweb101 etc]$ php -v
08 PHP 5.3.2 (cli) (built: Jun 16 2010 11:45:47)
09 Copyright (c) 1997-2010 The PHP Group
10 Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
11 with XCache v1.3.0, Copyright (c) 2005-2009, by mOo
12 [root@hexuweb101 etc]#

这个方法的原理就是再执行一次/etc/profile shell脚本,注意如果用sh /etc/profile是不行的,因为sh是在子shell进程中执行的,即使PATH改变了也不会反应到当前环境中,但是source是在当前 shell进程中执行的,所以我们能看到PATH的改变。



2010年10月30日

CentOS+Nginx+PHP+MySQL

Filed under: Linux,操作 — 水晶其源 @ 18:08
一、安装MySQL
目前web服务器已经很少有跑静态页面的,如果要跑动态网站那当然就离不开数据库,虽然在以前文章中有写MySQL是怎么安装的,但是感觉好久没装MySQL,现在只把步骤贴出来,就不做过多的讲解了
#useradd mysql
#tar zxvf mysql-5.0.40.tar.gz
#cd mysql-5.0.40
#./configure –prefix=/usr/local/mysql
#make && make install
#/usr/local/mysql/bin/mysql_install_db –user=mysql          //初始化MySQL数据库
#chown -R mysql /usr/local/mysql/var
#/usr/local/mysql/bin/mysqld_safe &          //启动MySQL
#/usr/local/mysql/bin/mysqladmin -u root password 123456    //设置MySQL密码
#cp support-files/my-medium.cnf /etc/my.cnf
#echo “/usr/local/mysql/bin/mysqld_safe &” >>/etc/rc.local
二、安装PCRE
PCRE是perl所用到的正则表达式,目的是让所装的软件支持正则表达式。默认情况下,Nginx只处理静态的网页请求,也就是html.如果是来自动 态的网页请求,比如*.php,那么Nginx就要根据正则表达式查询路径,然后把*.PHP交给PHP去处理
#rpm -qa | grep pcre              //查询系统中有没有安装PCRE,一般装系统是默认装有,所以我们要删掉系统自带的
我这里显示的是pcre-6.6-2.el5_1.7
#cp /lib/libpcre.so.0 /opt           //在删除系统自带的PCRE之前,要先备份一下libpcre.so.0这个文件,因为RPM包的关联性太强,在删除后没libpcre.so.0这个文件时我们装PCRE是装不上的
#rpm -e –nodeps pcre-6.6-2.el5_1.7         //删除系统自带的PCRE
# tar zxvf pcre-8.00.tar.gz
#cd pcre-8.00
#cp /opt/libpcre.so.0 /lib/              //把我们删除系统自带的PCRE之前备份的libpcre.so.0拷贝到/lib 目录下
#./configure         //配置PCRE,因为PCRE是一个库,而不是像pache、php、postfix等这样的程序,所以我们安装时选择默认路径即可,这样会在后面安装 其它东西时避免一些不必要的麻烦,执行完这部后会显示出下图,上面显示了我们对PCRE的配置
#make && make install
三、安装Nginx
在网上,看到不少人装Nginx 时非常麻烦,配置时用了一大堆选项,请问你们真实现那么多功能么?害的我越看越郁闷。此次安装Nginx如果是按着上面笔者的步骤一步步走下来,安装Nginx时只需指定Nginx的安装路径即可
#tar zxvf nginx-0.8.52.tar.gz
#cd nginx-0.8.52
#./configure –prefix=/usr/local/nginx     //此处在本环节只需指定一个路径
#make && make install
#/usr/local/nginx/sbin/nginx -s reload     //重启Nginx
#echo “/usr/local/nginx/sbin/nginx” >>/etc/rc.local

Nginx启动后有两个进程,master为主进程,worker为工作进程

四、安装PHP
虽然lnmp中带的php5.2.10已经能够满足目前的php程序运行。不过看到php5.3.3发布后一直没有更新。就像我用nginx一只用着最新的工程预览版。看了下php5.3.3已经自带php-fpm了。只需要咋编译配置php的时候加上 –enable-fpm 参数。以前补丁上fpm是通过xml文件配置的。新版本的php5.3.3的fpm是通过ini文件配置的。遗憾的是php5.3.3 不支持Zend Optimizer  还有文中我用旧php.ini文件放到里面产生了很多问题,如果你遇到什么问题请留言给我。贴出启动php-pmf的报错代码。^_^。2010年8月17日13:21:32成功升级php为php5.3.3

php 5.3.3 源码中开始包含 php-fpm,不用专门再打补丁了,只需要解开源码直接configure,关于php-fpm的编译参数有 –enable-fpm –with-fpm-user=www –with-fpm-group=www –with-libevent-dir=libevent位置。

这个php-fpm 不再支持 php-fpm 补丁具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制:

master进程可以理解以下信号

SIGINT, SIGTERM 立刻终止

SIGQUIT 平滑终止

SIGUSR1 重新打开日志文件

SIGUSR2 平滑重载所有worker进程并重新载入配置和二进制模块

示例:

php-fpm 关闭:

kill -SIGINT `cat /usr/local/php/var/run/php-fpm.pid`

php-fpm 重启:

kill -SIGUSR2 `cat /usr/local/php/var/run/php-fpm.pid`

#cd php-5.3.3
#./configure –prefix=/usr/local/php –with-gd=/usr/local/gd –with-jpeg-dir=/usr/local/jpeg –with-png-dir=/usr/local/png –with-freetype-dir=/usr/local/freetype –with-mysql=/usr/local/mysql –enable-fastcgi –enable-fpm
#make && make install
#cp /usr/local/php/etc/php-fpm.conf /home/php-fpm.conf
#cd /usr/local/php/etc/
#cp php-fpm.conf.default php-fpm.conf
#vi php-fpm.conf

pid = /usr/local/php/var/run/php-fpm.pid

error_log = /usr/local/php/var/log/php-fpm.log

log_level = notice

[www]

listen = 127.0.0.1:9000

user = www

group = www

pm = dynamic

pm.max_children = 20 #这里是进程池 根据内存大小来!我的vps128内存的参数
pm.start_servers = 2

pm.min_spare_servers = 1

pm.max_spare_servers = 3

2010年10月16日

一步一学Linux与Windows 共享文件Samba (v0.2b)

Filed under: Linux,操作 — 水晶其源 @ 13:06

作者:北南南北,正在增加中… … 需要您的参与;
来自:LinuxSir.Org
简介:本文只是讲一讲我们最常用的Linux与Windows共享文件,主要是为新手指一指路。如何建立最简单的Samba服务器,并讲述遇到问题应该从何处寻找解决方案;正在更新之中,希望您的参加 … … 谢谢;

我修改了挂接的格式部分
以前是“smbfs”,改成了“cifs”

目录

0、架设Samba 服务器的前提;
0.1 查看文件内容和编辑文件的工具;
0.2 关于文件和目录相关;
03 用户和用户组相关;
04 进程管理;

1 Samba 简介
2 Samba 功能和应用范围
3 Samba 两个服务器相关启动程序、客户端及服务器配置文件等;
3.1 Samba 有两个服务器,一个是smbd,另一个是nmbd;
3.2 查看Samba 服务器的端口及防火墙;
3.3 查看Samba 服务器的配置文件;
3.4 Samba 在Linux 中的一些工具(服务器端和客户端);
3.5 在Linux 中的常用工具,Windows查看Linux共享的方法 ;
3.5.1 在Linux系统中查看网络中Windows共享文件及Linux中的Samba共享文件;
3.5.2 在Windows中访问Linux Samba服务器共享文件的办法;
3.5.3 smbfs文件系统的挂载;

4 由最简单的一个例子说起,匿名用户可读可写的实现;
第一步: 更改smb.conf
第二步:建立相应目录并授权;
第三步:启动smbd和nmbd服务器;
第四步:查看smbd进程,确认Samba 服务器是否运行起来了;
第五步:访问Samba 服务器的共享;

5、复杂一点的用户共享模型(适合10人左右的小型企业);
5.1 共享权限设计实现的功能;
5.2 在服务器上创建相应的目录;
5.3 添加用户用户组,设置相应目录家目录的权限;
5.3.1 添加用户组;
5.3.2 添加用户;
5.3.3 添加samba用户,并设置密码;
5.3.4 配置相关目录的权限和归属;

5.4 修改Samba配置文件;
5.5 关于客户端访问;
5.5.1 Windows客户端访问;

++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++

0、架设Samba 服务器的前提;

Linux是一个多用户的操作系统,对任何服务器的架设与都用户、用户组及权限相关,这是操作的基础。Samba服务器也不例外,对这些知识的掌握也是极为重要的。在Windows系统上虽然也能架共享文件服务器,但它的权限控制实在令人不敢恭维。如果我们用Windows系统来架网络共享文件系统,就是点鼠标也能把我们点迷糊了。但在Linux中,我们可以轻松的改一改配置文件,不到几分钟就能建好自己的Samba服务器。哪个更容易,只有你知道;

对于Samba服务器的架设,有的弟兄简单的认为,只要把改一下配置文件,创建好相应的目录就行了。其实并不是这样的,还要深入的工作,比如目录的权限和归属,也就是说能让哪个用户和用户组有读写权。只有把配置文件和共享目录的权限结合起来,才能架好Samba服务器;

下面是常用的基础知识,我们在本文中所涉及的内容都可以在下面的列表中找到相应的解释;

0.1 查看文件内容和编辑文件的工具;

《Linux 文件内容查看工具介绍》
《文件编辑器 vi》

0.2 关于文件和目录相关;

《Linux 文件类型 及文件的扩展名》
《Linux 文件和目录管理之列出、删除、复制、移动及改名》
《Linux 文件和目录的属性》
《简述Linux文件搜索》

03 用户和用户组相关;

《Linux 用户(user)和用户组(group)管理概述》
《用户(User)和用户组(Group)配置文件详解》
《Linux 用户管理工具介绍》
《Linux 用户(User)查询篇》

04 进程管理;

《Linux 进程管理》

1 Samba 简介

Samba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用;Samba 即可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件;不过对于Linux和Linux之间共享文件有更好的网络文件系统NFS,NFS也是需要架设服务器的;

大家知道在Windows 网络中的每台机器即可以是文件共享的服务器,也可以同是客户机;Samba 也一样能行,比如一台Linux的机器,如果架了Samba Server 后,它能充当共享服务器,同时也能做为客户机来访问其它网络中的Windows共享文件系统,或其它Linux的Sabmba 服务器;

我们在Windows网络中,看到共享文件功能知道,我们直接就可以把共享文件夹当做本地硬盘来使用。在Linux的中,就是通过Samba的向网络中的机器提供共享文件系统,也可以把网络中其它机器的共享挂载在本地机上使用;这在一定意义上说和FTP是不一样的。

Samba 用的netbios协议,如果您用Samba 不成功,

Linux与Windows 、Linux 和 Linux

2 Samba 功能和应用范围

Samba 应该范围主要是Windows和Linux 系统共存的网络中使用;如果一个网络环境都是Linux或Unix类的系统,没有必要用Samba,应该用NFS更好一点;

那Samba 能为我们提供点什么服务呢?主要是共享文件和共享打印机;

3 Samba 两个服务器相关启动程序、客户端及服务器配置文件等;

3.1 Samba 有两个服务器,一个是smb,另一个是nmb;

smb 是Samba 的主要启动服务器,让其它机器能知道此机器共享了什么;如果不打开nmb服务器的话,只能通过IP来访问,比如在Windows的IE浏览器上打入下面的一条来访问;

\\192.168.1.5\共享目录
\\192.168.1.5\opt

而nmb是解析用的,解析了什么呢?就是把这台Linux机器所共享的工作组及在此工作组下的netbios name解析出来;

一般的情况下,在RPM包的系统,如果是用RPM包安装的Samba ,一般可以通过如下的方式来启动Samba服务器;

[root@localhost ~]# /etc/init.d/smb start
启动 SMB 服务: [ 确定 ]
启动 NMB 服务: [ 确定 ]

如果停止呢?就在smb后面加stop ;重启就是restart

[root@localhost ~]# /etc/init.d/smb stop
[root@localhost ~]# /etc/init.d/smb restart

对于所有系统来说,通用的办法就是直接运行smb 和nmb;当然您要知道smb和nmb所在的目录才行;如果是自己编译的Samba ,您应该知道您把Samba放在哪里了;

[root@localhost ~]# /usr/sbin/smbd
[root@localhost ~]# /usr/sbin/nmbd

查看服务器是否运行起来了,则用下面的命令;

[root@localhost ~]# pgrep smbd
[root@localhost ~]# pgrep nmbd

关掉Samba服务器,也可以用下面的办法,大多是通用的;要root权限来执行;

[root@localhost ~]# pkill smbd
[root@localhost ~]# pkill nmbd

3.2 查看Samba 服务器的端口及防火墙;

查看这个有何用呢?有时你的防火墙可能会把smbd服务器的端口封掉,所以我们应该smbd服务器所占用的端口;下面查看中,我们知道smbd所占用的端口是139和445 ;

[root@localhost ~]# netstat -tlnp |grep smb
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 10639/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 10639/smbd

如果您有防火墙,一定要把这两个端口打开。如果不知道怎么打开。可能你和我一样是新手,还是把防火墙规则清掉也行;

[root@localhost ~]# iptables -F

[root@localhost ~]# /sbin/iptables -F

3.3、查看Samba 服务器的配置文件;

如果我们是用Linux发行版自带的Samba软件包,一般情况下Samba服务器的配置文件都位于/etc/samba目录中,服务器的主配置文件是smb.conf;也有有户配置文件 smbpasswd、smbusers和lmhosts等(最好您查看一下这些文件的内容);还有一个文件是secrets.tdb,这个文件是 Samba 服务器启动手自动生成的;我们慢慢根据教程的进度来适当地增加这些文件的说明吧;一下子都说出来,感觉内容太多;所以只能一点一点的来了;

3.4、Samba 在Linux 中的一些工具(服务器端和客户端);

smbcacls smbcontrol smbencrypt smbmount smbprint smbstatus smbtree
smbclient smbcquotas smbmnt smbpasswd smbspool smbtar smbumount
smbd nmbd mount

其中服务器端的是smbd、nmbd、smbpasswd ;其它的大多是客户端;这些并不是都需要一定要精通的,但至少得会用几个;比如smbmount(也就是mount 加参数的用法),还用smbclient等;

3.5 在Linux 中的常用工具mount(smbmount)和smbclient;Windows查看Linux共享的方法 ;

3.5.1 在Linux系统中查看网络中Windows共享文件及Linux中的Samba共享文件;

一般的情况下,我们要用到smbclient;常用的用法也无非是下面的;

[root@localhost ~]# smbclient -L //ip地址或计算机名

smbclient 是Samba 的Linux 客户端,在Linux机器上用来查看服务器上的共享资源,也可以象FTP一样,用户可以登录Samba服务器,也可以上传put和下载get文件,遗憾的是对中文支持并不友好;

查看服务器上的资源;

smbclient -L //IP [-U 用户名]

如果您的Samba服务器配置为user模式,就要加 “-U 用户名“,如果是share模式,省略也可;

比如:

[root@localhost ~]# smbclient -L //192.168.1.3 -U sir01
Password: 请输入用户sir01的密码

如果您是用share模式,就可以不必理会用户和密码,直接用;

[root@localhost ~]# smbclient -L //192.168.1.3
Password: 直接按回车

登录用户身份Samba服务器共享

以用户身份登录共享后,能象FTP用户一样,下传和下载文件;用put表示上传,用get表示下载;

smbclient //IP地址/共享文件夹 -U 用户

说明:IP地址大家都知道,你不知道自己的IP地址,可以用/sbin/ifconfig 来查看; 共享文件夹是我们在smb.conf中定义的[共享文件夹],比如[sir01]。-U 用户名表示Samba 的用户;

比如:

[root@localhost ~]# smbclient //192.168.1.3/sir01 -U sir01
Password:
Domain=[LINUXSIR] OS=[Unix] Server=[Samba 3.0.21b-2]
smb: \> ls

说明:登录到Samba服务器上,就可以用smbclient的一些指令,可以象用FTP指令一样上传和下载文件;

smbclient 命令说明

命令 说明

?或help [command] 提供关于帮助或某个命令的帮助
![shell command] 执行所用的SHELL命令,或让用户进入 SHELL提示符
cd [目录] 切换到服务器端的指定目录,如未指定,则 smbclient 返回当前本地目录
lcd [目录] 切换到客户端指定的目录;
dir 或ls 列出当前目录下的文件;
exit 或quit 退出smbclient
get file1 file2 从服务器上下载file1,并以文件名file2存在本地机上;如果不想改名,可以把file2省略
mget file1 file2 file3 filen 从服务器上下载多个文件;
md或mkdir 目录 在服务器上创建目录
rd或rmdir 目录 删除服务器上的目录
put file1 [file2] 向服务器上传一个文件file1,传到服务器上改名为file2;
mput file1 file2 filen 向服务器上传多个文件

3.5.2 在Windows中访问Linux Samba服务器共享文件的办法;

这个简单吧,在网上领居,查看工作组就能看得到,或者在浏览器上输入如下的

\\ip地址或计算机名

这样就能看到这个机器上有什么共享的了,点鼠标操作完成;如果访问不了,不要忘记把Linux的防火墙规划清掉,或让相应的端口通过;

3.5.3 在Linux中smbfs文件系统的挂载;

mount 的用法,加载网络中的共享文件夹到本地机;mount就是用于挂载文件系统的,SMB做为网络文件系统的一种,也能用mount挂载;smbmount说到底也是用mount的一个变种;

mount 挂载smbfs的用法;

mount -t cifs -o codepage=cp936,username=用户名,password=密码 , -l //ip地址/共享文件夹名 挂载点

mount -t cifs -o codepage=cp936,username=用户名,password=密码 , -l //计算机名/共享文件夹名 挂载点

mount -t cifs -o codepage=cp936 //ip地址或计算机名/共享文件夹名 挂载点

smbmount的用法:
smbmount -o username=用户名,password=密码 , -l //ip地址或计算机名/共享文件夹名 挂载点
smbmount //ip地址或计算机名/共享文件夹名 挂载点

说明:

如果您的服务器是以share共享的,则无需用户名和密码就能挂载,如果出现要密码的提示,直接回车就行;您也可以用smbmount 来挂载,这样就无需用mount -t smbfs来指定文件系统的类型了;

对于挂载点,我们要自己建立一个文件夹,比如我们可以建在/opt/smbhd,这由您说的算吧;

在mount的命令中,我们发现有这样的一个参数codepage=cp936,这是服务器端文件系统的编码的指定,cp936 就是简体中文,当然您可以用utf8等,尝试一下吧。

如果您挂载了远程的smbfs文件系统出现的是简体中文乱码,就要考虑挂载时要指定编码了;

4、由最简单的一个例子说起,匿名用户可读可写的实现;

第一步: 更改smb.conf

我们来实现一个最简单的功能,让所有用户可以读写一个Samba 服务器共享的一个文件夹;我们要改动一下smb.conf ;首先您要备份一下smb.conf文件;

[root@localhost ~]# cd /etc/samba
[root@localhost samba]# mv smb.conf smb.confBAK

然后我们来重新创建一个smb.conf文件;

[root@localhost samba]#touch smb.conf

然后我们把下面这段写入smb.conf中;

[global]
workgroup = LinuxSir
netbios name = LinuxSir05
server string = Linux Samba Server TestServer
security = share

[linuxsir]
path = /opt/linuxsir
writeable = yes
browseable = yes
guest ok = yes

注解:

[global]这段是全局配置,是必段写的。其中有如下的几行;

workgroup 就是Windows中显示的工作组;在这里我设置的是LINUXSIR (用大写);
netbios name 就是在Windows中显示出来的计算机名;
server string 就是Samba服务器说明,可以自己来定义;这个不是什么重要的;
security 这是验证和登录方式,这里我们用了share ;验证方式有好多种,这是其中一种;另外一种常用的是user的验证方式;如果用share呢,就是不用设置用户和密码了;

[linuxsir] 这个在Windows中显示出来是共享的目录;
path = 可以设置要共享的目录放在哪里;
writeable 是否可写,这里我设置为可写;
browseable 是否可以浏览,可以;可以浏览意味着,我们在工作组下能看到共享文件夹。如果您不想显示出来,那就设置为 browseable=no

guest ok 匿名用户以guest身份是登录;

第二步:建立相应目录并授权;

[root@localhost ~]# mkdir -p /opt/linuxsir
[root@localhost ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)

[root@localhost ~]# chown -R nobody:nobody /opt/linuxsir

注释:关于授权nobody,我们先用id命令查看了nobody用户的信息,发现他的用户组也是nobody,我们要以这个为准。有些系统nobody用户组并非是nobody ;

第三步:启动smbd和nmbd服务器;

[root@localhost ~]# smbd
[root@localhost ~]# nmbd

第四步:查看smbd进程,确认Samba 服务器是否运行起来了;

[root@localhost ~]# pgrep smbd
13564
13568

第五步:访问Samba 服务器的共享;

在Linux 中您可以用下面的命令来访问;
[root@localhost ~]# smbclient -L //LinuxSir05
Password: 注:直接按回车

在Windows中,您可以用下面的办法来访问;

\\LinuxSir05\

5、复杂一点的用户共享模型(适合10人左右的小型企业);

比如一个公司有五个部门,分别是linuxsir,sir01,sir02,sir03,sir04。我们想为这家公司设计一个比较安全的共享文件模型。每个用户都有自己的网络磁盘,sir01到sir04还有共用的网络硬盘;所有用户(包括匿名用户)有一个共享资料库,此库为了安全是只读的;所有的用户(包括匿名用户)要有一个临时文件终转的文件夹… ….

5.1 共享权限设计实现的功能;

1)linuxsir部门具有管理所有SMB空间的权限;
2)sir01到sir04拥有自己的空间,并且除了自身及linuxsir有权限以外,对其它用户具有绝对隐私性;
3)linuxsir01到linuxsir04拥有一个共同的读写权限的空间;
4) 所有用户(包括匿名用户)有一个有读权限的空间,用于资料库,所以不要求写入数据。
5)sir01到sir04还有一个共同的空间,对sir01到sir04的用户来说是隐私的,不能让其它用户来访问。
6) 还要有一个空间,让所有用户可以写入,能删除等功能,在权限上无限制 ,用于公司所有用户的临时文档终转等;

5.2 在服务器上创建相应的目录;

[root@localhost ~]# mkdir -p /opt/linuxsir
[root@localhost ~]# cd /opt/linuxsir
[root@localhost linuxsir]# mkdir sir01 sir02 sir03 sir04 sirshare sir0104rw sirallrw
[root@localhost linuxsir]# ls

sir01 sir0104rw sir02 sir03 sir04 sirallrw sirshare

注:功用如下:

/opt/linuxsir 这是管理员目录,负责管理其下所有目录;
/opt/linuxsir/sir01 是sir01的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写;
/opt/linuxsir/sir02 是sir02的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写;
/opt/linuxsir/sir03 是sir03的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写;
/opt/linuxsir/sir04 是sir04的家目录,用于私用,除了用户本身和linuxsir以外其它用户都是不可读不可写;
/opt/linuxsir/sirshare 所用用户(除了linuxsir有权限写入外)只读目录
/opt/linuxsir/sir0104rw 是用于sir01到sir04用户可读可写共用目录,但匿名用户不能读写;
/opt/linuxsir/sirallrw 用于所有用户(包括匿名用户)的可读可写;

5.3 添加用户用户组,设置相应目录家目录的权限;

5.3.1 添加用户组;

[root@localhost ~]# /usr/sbin/groupadd linuxsir
[root@localhost ~]# /usr/sbin/groupadd sir01
[root@localhost ~]# /usr/sbin/groupadd sir02
[root@localhost ~]# /usr/sbin/groupadd sir03
[root@localhost ~]# /usr/sbin/groupadd sir04
[root@localhost ~]# /usr/sbin/groupadd sir0104

5.3.2 添加用户;

[root@cuc03 ~]# adduser -g sir01 -G sir0104 -d /opt/linuxsir/sir01 -s /sbin/nologin sir01
[root@cuc03 ~]# adduser -g sir02 -G sir0104 -d /opt/linuxsir/sir02 -s /sbin/nologin sir02
[root@cuc03 ~]# adduser -g sir03 -G sir0104 -d /opt/linuxsir/sir03 -s /sbin/nologin sir03
[root@cuc03 ~]# adduser -g sir04 -G sir0104 -d /opt/linuxsir/sir04 -s /sbin/nologin sir04
[root@cuc03 ~]# adduser -g linuxsir -d /opt/linuxsir -G linuxsir,sir01,sir02,sir03,sir04,sir0104 -d /opt/linuxsir -s /sbin/nologin linuxsir

为什么这样添加用户?请参考:

《Linux 文件和目录的属性》
《Linux 用户管理工具介绍》

当然我们还得学会查看用户信息的工具用法,比如 用finger和id来查看用户信息,主要是看用户是否添加正确;比如;请参考《Linux 用户(User)查询篇》

[root@localhost ~]# id linuxsir
[root@localhost ~]# finger linuxsir

5.3.3 添加samba用户,并设置密码;

我们用的方法是先添加用户,但添加的这些用户都是虚拟用户,因为这些用户是不能通过SHELL登录系统的;另外值得注意的是系统用户密码和 Samba用户的密码是不同的。如果您设置了系统用户能登入SHELL,可以设置用户的Samba密码和系统用户通过SHELL登录的密码不同。

我们通过smbpasswd 来添加Samba用户,并设置密码。原理是通过读取/etc/passwd文件中存在的用户名。

[root@localhost sir01]# smbpasswd -a linuxsir
New SMB password: 注:在这里添加Samba用户linuxsir的密码;
Retype new SMB password: 注:再输入一次;

用同样的方法来添加 sir01、sir02、sir03、sir04的密码;

5.3.4 配置相关目录的权限和归属;

[root@cuc03 ~]# chmod 755 /opt/linux
[root@cuc03 ~]# chown linuxsir:linuxsir /opt/linuxsir

[root@cuc03 ~]# cd /opt/linuxsir
[root@cuc03 ~]# chmod 2770 sir0*

[root@cuc03 ~]# chown sir01.linuxsir sir01

[root@cuc03 ~]# chown sir02.linuxsir sir02

[root@cuc03 ~]# chown sir03.linuxsir sir03

[root@cuc03 ~]# chown sir04.linuxsir sir04

[root@cuc03 ~]# chown linuxsir.sir0104 sir0104rw

[root@cuc03 ~]# chown linuxsir.linuxsir sirshare
[root@cuc03 ~]# chmod 755 sirshare

[root@cuc03 ~]# chown linuxsir:linuxsir sirallrw
[root@cuc03 ~]# chmod 3777 sirallrw

5.4 修改Samba配置文件 smb.conf;

配置文件如下,修改/etc/samba/smb.conf后,不要忘记重启smbd和nmbd服务器;

[global]
workgroup = LINUXSIR
netbios name = LinuxSir
server string = Linux Samba Test Server
security = share

[linuxsir]
comment = linuxsiradmin
path = /opt/linuxsir/
create mask = 0664
#create mask是用户创建文件时的权限掩码;对用户来可读可写,对用户组可读可写,对其它用户可读;
directory mask = 0775
#directory mask 是用来设置用户创建目录时的权限掩码,意思是对于用户和用户组可读可写,对其它用户可读可执行;
writeable = yes
valid users = linuxsir
browseable = yes

[sirshare]
path = /opt/linuxsir/sirshare
writeable = yes
browseable = yes
guest ok = yes

[sirallrw]
path = /opt/linuxsir/sirallrw
writeable = yes
browseable = yes
guest ok = yes

[sir0104rw]
comment = sir0104rw
path = /opt/linuxsir/sir0104rw
create mask = 0664
directory mask = 0775
writeable = yes
valid users = linuxsir,@sir0104
#@sir0104是用户组;
browseable = yes

[sir01]
comment = sir01
path = /opt/linuxsir/sir01
create mask = 0664
directory mask = 0775
writeable = yes
valid users = sir01,@linuxsir
browseable = yes

[sir02]
comment = sir02
path = /opt/linuxsir/sir02
create mask = 0664
directory mask = 0775
writeable = yes
valid users = sir02,@linuxsir
browseable = yes

[sir03]
comment = sir03
path = /opt/linuxsir/sir03
create mask = 0664
directory mask = 0775
writeable = yes
valid users = sir03,@linuxsir
browseable = yes

[sir04]
comment = sir04
path = /opt/linuxsir/sir04
create mask = 0664
directory mask = 0775
writeable = yes
valid users = sir04,@linuxsir
browseable = yes

2010年10月15日

mysql主从数据库的设置方法

Filed under: Linux,操作,数据库 — 水晶其源 @ 11:36

首先两台机器:

a: 192.168.0.1(主数据库)

b: 192.168.0.2(从数据库)

打开a机器的my.cnf/my.ini设置

首先要保证要同步的数据库内容完全一致

在[mysqld]下添加以下内容

server-id=1# 编号,主辅库的唯一ID

log-bin=/var/db/mysql/master.log

binlog-do-db=要同步的数据库名称 //不写就同步全部。

#binlog-ignore-db = mysql //忽略的数据库

重起服务器,进入主库,用show master status查看主服务器状态。

给b增加一个backup的用户

GRANT FILE,REPLICATION SLAVE,REPLICATION CLIENT,SUPER ON *.* TO backup@’192.168.0.2′ IDENTIFIED by ‘backuppassword’;

这个权限表示,这个backup账号只能由从备份机192.168.0.2访问只能用来进行备份操作

打开b机器的my.cnf/my.ini文件

添加或修改以下内容

server-id=2

master-host=192.168.0.1

master-user=backup

master-password=backuppassword

master-port=3306

master-connect-retry=60

replicate-do-db=要同步的数据库

#replicate-ignore-db=不同步的数据库

重起服务器,进入辅库用 show slave status G ( G将表以分行形式、而不是表格形式输出)查看从服务器状态。

至此基于mysql的同步功能就做好了。

slave stop; 停止从服务器

slave start; 启动从服务器

master stop; 停止主服务器

master start; 启动主服务器

用show processlist可以查看同步状态。

如果有什么错误打开mysql的 hostname.err 查看原因,再调用下面的修改命令:

CHANGE MASTER TO

MASTER_HOST=’master_host_name’,

MASTER_USER=’master_user_name’,

MASTER_PASSWORD=’master_pass’,

MASTER_LOG_FILE=’recorded_log_file_name’,

MASTER_LOG_POS=recorded_log_position;

然后再重起slave;

注: 此方法适用于主库 log 完整的情况,如果不完整,需要将主库关闭->打包->传到辅库->解包。即需要选择一个时间点,手工同步两个库后,保证主库的log完整。

2010年08月9日

php里header的各种用法

Filed under: PHP,编程 — 水晶其源 @ 18:39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*** Function: PHP header() examples (PHP)
** Desc: Some examples on how to use the header() function of PHPYou find a detailed tutorial at expertsrt.com (English) or at ffm.junetz.de (German).These is also a good help about caching at web-caching.com.
** Example: see below. &lt;br/&gt;&lt;br/&gt;&lt;b&gt;Tip:&lt;/b&gt; You can use these sites to check your headers: &lt;a href="http://web-sniffer.net/"&gt;web-sniffer.net&lt;/a&gt;, &lt;a href="http://www.delorie.com/web/headers.html"&gt;delorie.com&lt;/a&gt; or &lt;a href="http://www.forret.com/projects/analyze/"&gt;www.forret.com&lt;/a&gt;.
** Author: Jonas John
*/
 
// fix 404 pages:
header('HTTP/1.1 200 OK');
 
// set 404 header:
header('HTTP/1.1 404 Not Found');
 
// set Moved Permanently header (good for redrictions)
// use with location header
header('HTTP/1.1 301 Moved Permanently');
 
// redirect to a new location:
header('Location: http://www.example.org/');
 
// redrict with delay:
header('Refresh: 10; url=http://www.example.org/');
print 'You will be redirected in 10 seconds';
 
// you could also use the HTML syntax:// &lt;meta http-equiv="refresh" content="10;http://www.example.org/ /&gt;
 
// override X-Powered-By: PHP:
header('X-Powered-By: PHP/4.4.0');
header('X-Powered-By: Brain/0.6b');
 
// content language (en = English)
header('Content-language: en');
 
// last modified (good for caching)
$time = time()60; // or filemtime($fn), etc
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');
 
// header for telling the browser that the content
// did not get changed
header('HTTP/1.1 304 Not Modified');
 
// set content length (good for caching):
header('Content-Length: 1234');
 
// Headers for an download:
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"');
header('Content-Transfer-Encoding: binary');
 
// load the file to send:readfile('example.zip');
// Disable caching of the current document:
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
// Date in the pastheader('Pragma: no-cache');
// set content type:
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; charset=utf-8');
header('Content-Type: text/plain');
 
//xml
header ("content-type: text/xml");
 
 
// plain text file
header('Content-Type: image/jpeg');
 
// JPG picture
header('Content-Type: application/zip');
 
// ZIP file
header('Content-Type: application/pdf');
 
// PDF file
header('Content-Type: audio/mpeg');
 
// Audio MPEG (MP3,…) file
header('Content-Type: application/x-shockwave-flash');
 
// Flash animation// show sign in box
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Top Secret"');
print 'Text that will be displayed if the user hits cancel or ';
print 'enters wrong login data';

2010年08月6日

[转] 不管你学的是什么专业,你都应该多少懂些管理学的东西

Filed under: 心情 — 水晶其源 @ 10:00
【蝴蝶效应】【青蛙现象】【鳄鱼法则】      【鲇鱼效应】  【羊群效应】    【刺猬法则】
【破窗理论】【二八定律】【木桶理论】      【马太效应】  【鸟笼逻辑】    【责任分散效应】
【晕轮效应】【霍桑效应】【习得性无助实验】【证人的记忆】【罗森塔尔效应】【虚假同感偏差】【帕金森定律】【手表定律】

————————————————————————————

【蝴蝶效应】
蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶翅膀偶尔振动,也许两周后就会引起美国得克萨斯州的一场龙卷风。
蝴蝶效应是说,初始条件十分微小的变化经过不断放大,对其未来状态会造成极其巨大的差别。有些小事可以糊涂,有些小事如经系统放大,则对一个组织、一个国家来说是很重要的,就不能糊涂。
今天的企业,其命运同样受“蝴蝶效应”的影响。消费者越来越相信感觉,所以品牌消费、购物环境、服务态度……这些无形的价值都会成为他们选择的因素。所以只要稍加留意,我们就不难看到,一些管理规范、运作良好的公司在他们的公司理念中都会出现这样的句子:
“在你的统计中,对待100名客户里,只有一位不满意,因此你可骄称只有1%的不合格,但对于该客户而言,他得到的却是100%的不满意。”
“你一朝对客户不善,公司就需要10倍甚至更多的努力去补救。”
“在客户眼里,你代表公司”。
今天,能够让企业命运发生改变的“蝴蝶”已远不止“计划之手”,随着中国联通加入电信竞争,私营企业承包铁路专列、南京市外资企业参与公交车竞争等新闻的出现,企业坐而无忧的垄断地位日渐势微,开放式的竞争让企业不得不考虑各种影响发展的潜在因素。
精简机构、官员下岗、取消福利房等措施,让越来越多的人远离传统的保障,随之而来的是依靠自己来决定命运。而组织和个人自由组合的结果就是:谁能捕捉到对生命有益的“蝴蝶”,谁就不会被社会抛弃。

—————————————————————————————————-

【青蛙现象】
青蛙现象:把一只青蛙直接放进热水锅里,由于它对不良环境的反应十分敏感,就会迅速跳出锅外。如果把一个青蛙放进冷水锅里,慢慢地加温,青蛙并不会立即跳出锅外,水温逐渐提高的最终结局是青蛙被煮死了,因为等水温高到青蛙无法忍受时,它已经来不及、或者说是没有能力跳出锅外了。
青蛙现象告诉我们,一些突变事件,往往容易引起人们的警觉,而易致人于死地的却是在自我感觉良好的情况下,对实际情况的逐渐恶化,没有清醒的察觉。
启示之一是:我们的组织和社会生存的主要威胁,并非来自突如其来的事件,而是由缓慢渐进而无法察觉的过程形成。人们目光短浅,只看到局部,而无法纵观全局,对于突如其来的变化,可以从容面对,对于悄悄发生的大的变化,而无法察觉,最终会带给我们更加严重的危害!~
启示之二是:青蛙,就好象是我们生活中的芸芸众生,我们要着眼未来,勤于思考新的问题,勤于学习新的知识,不能过“今日有酒,今日醉”和“当一天和尚,撞一天钟”的醉生梦死的生活,到头来将是非常可悲的!
启示之三是:当今的社会,是一个知识爆炸、日新月异的时代,知识也需要不断更新,所以我们不要一味的沉迷于现状、安于现状,不思进取,这样下去的话,肯定会被时代所淘汰,也会有面临失业的危险!
启示之四是:我们不要单纯的,只能面对突如其来的危险,而忽视那种缓慢而又微小甚微的危险,因为,那种缓慢而又微小甚微的危险,才是最可怕的!

—————————————————————————————————–

【鳄鱼法则】
鳄鱼法则:其原意是假定一只鳄鱼咬住你的脚,如果你用手去试图挣脱你的脚,鳄鱼便会同时咬住你的脚与手。你愈挣扎,就被咬住得越多。所以,万一鳄鱼咬住你的脚,你唯一的办法就是牺牲一只脚。
譬如在股市中,鳄鱼法则就是:当你发现自己的交易背离了市场的方向,必须立即止损,不得有任何延误,不得存有任何侥幸。

—————————————————————————————————–

【鲇鱼效应】
以前,沙丁鱼在运输过程中成活率很低。后有人发现,若在沙丁鱼中放一条鲇鱼,情况却有所改观,成活率会大大提高。这是何故呢?
原来鲇鱼在到了一个陌生的环境后,就会“性情急躁”,四处乱游,这对于大量好静的沙丁鱼来说,无疑起到了搅拌作用;而沙丁鱼发现多了这样一个“异已分子”,自然也很紧张,加速游动。这样沙丁鱼缺氧的问题就迎刃而解了,沙丁鱼也就不会死了。
当一个组织的工作达到较稳定的状态时,常常意味着员工工作积极性的降低,“一团和气”的集体不一定是一个高效率的集体,这时候“鲶鱼效应”将起到很好的“医疗”作用。一个组织中,如果始终有一位“鲶鱼式”的人物,无疑会激活员工队伍,提高工作业绩。
“鲶鱼效应”是企业领导层激发员工活力的有效措施之一。它表现在两方面,一是企业要不断补充新鲜血液,把那些富有朝气、思维敏捷的年轻生力军引入职工队伍中甚至管理层,给那些固步自封、因循守旧的懒惰员工和官僚带来竞争压力,才能唤起“沙丁鱼”们的生存意识和竞争求胜之心。二是要不断地引进新技术、新工艺、新设备、新管理观念,这样才能使企业在市场大潮中搏击风浪,增强生存能力和适应能力。
关于鲶鱼效应的应用,目前已有鲶鱼效应在人力资源管理中的应用、在领导活动中的应用,具体包括竞争机制的建立、能人的启用、领导风格的变革等等。但笔者认为鲶鱼效应的分析和应用远不止这些。思考问题的视角不同,发现问题、解决问题的方法就不同。
首先,如果鲶鱼本体代表领导者。
领导者即影响他人完成任务的个体或者集体,在死气沉沉的沙丁鱼箱内,沙丁鱼就象征着一批同质性极强的群体,他们技能水平相似,缺乏创新和主动性,人浮于事,效率低下,整个机构是一种臃肿不堪的状态,而鲶鱼领导者的到来(或者内部沙丁鱼进化成鲶鱼),新官上任三把火,整顿纪律,规范制度,改造流程,合理配置岗位和人、财、物,逐渐组织的经营有了起色,成本减下来了,臃肿的机构简化了,无能的沙丁鱼被吃了、赶走了,有能耐的沙丁鱼得到了正面的激励,这样整个机构呈现欣欣向荣的景象,在鲶鱼领导者的带领下,整个组织的活力都被调动起来,从而使集体的力量更加强大,占领市场、保有市场才有了坚实的基础。
从这个角度看,鲶鱼领导者应该具备如下特质:
1-办事果断、雷厉风行:迅速发现组织停滞不前的病症所在,并能够快刀斩乱麻,迅速而有效地解决问题。
2-说话算话、强势作风:科学地决策,并能够监督决策的执行,及时评估政策的有效性。
3-倡导创新、结果导向:提倡创新,塑造鼓励创新的氛围,从业务流程、工作设计、人员招聘与配置、薪酬设计和考核等方面体现创新思想,体现创新的利。
4-成就需求、前瞻视野:有短中长期发展规划和目标,能够预见组织发展的方向以及现存人力资源与未来的差距,能够有效地辨别未来人才,裁减掉不适合组织发展的拖后腿人员。
5-系统视角、敢于变革:能够从系统内外观察组织系统结构的变化和功能,既要把自己当作组织的一部分(相对于渔夫,鲶鱼领导者本身也是沙丁鱼,渔夫才是领导者),又要把自己看成一个小系统中的领导者,能够带动员工队伍打开局面、打破常规,取得良好效益。
对于在领导者领导下为了共同目标而奋斗的职工群体而言,如果领导者有鲶鱼特性,那么要生存下去的方法就是运动起来,激发自己的能量,至少要和鲶鱼同步速度,并且要保证同一方向(企业目标),这样才不至于被鲶鱼追上吃掉,或者被其他沙丁鱼挤到最后憋死。
其次,如果鲶鱼代表团队中一员。
那么它就意味着新、奇、异,包括观点的不一样、行为的不同、习惯的迥异,正因为不同,才会激发智慧,一个团队需要不同性格、不同技能、不同工作经历的人加盟,如果都是清一色的员工,那么这个团队产生奇思妙想、产生高绩效的可能性是微乎其微的。在注重团队建设、致力团队沟通的今天,适当地吸引一些鲶鱼加入团队,会给整个团队带来活泼的工作气氛,带来创新,带来多赢。但是鲶鱼的数量应当加以控制,全是鲶鱼的话,整个团队就会出现“个个是英雄、整体是狗熊”的现象,因为个个鲶鱼都想坚持自己的观点,合作和沟通就不存在了,整个团队就乌烟瘴气了,所以日本有些企业信奉“一流管理者、二流员工”的用人信条,既然一条鲶鱼能够带动一群鱼翻腾搅动,那就没有必要再放第二条了,一山不容二虎也是这样的道理。从这个角度看,团队中的鲶鱼分子应注重良性沟通、影响力的塑造,其他员工对待团队中的鲶鱼,也应该在工作的基础上与其加强合作。
再次,如果鲶鱼代表让人来劲的工作内容。
现在在很多企业,组织结构和工作设计依然成为流程改造的一大课题,不合理、枯燥无味、没有前景、单调无聊的工作内容让人们感觉像一桶拥挤的沙丁鱼一样没有激情,不愿意在岗位上多思考多改进,以致慢慢地形成了集体惰性。如果能够把工作扩大化、丰富化的鲶鱼效应应用到工作设计(Jobdesigning)上,那对组织的财务贡献也是显而易见的。如何把好动、充满激情的鲶鱼放到一潭死水的工作中呢?这又是一门棘手的学问,有人主张从横向和纵向扩大工作范围、深化工作内容,让员工们体验丰富的工作活动,感受努力工作的成就,让他们体现面对挑战性、来劲性工作时的激动与欲望;有人主张运用轮岗的方式增长员工的才干,让他们工作中的鲶鱼越游越欢;笔者则主张在应用以上措施的同时还要注重人与岗位性格的匹配,鲶鱼就要做鲶鱼的事情,沙丁鱼就要做沙丁鱼的事情,岗位中既要有鲶鱼性工作内容也要有沙丁鱼性工作内容,最重要的是要发现员工的偏好,看那些工作能够让他们产生鲶鱼的动力与激情,只有匹配了之后,鲶鱼效应才能真正发挥它的作用,不然虽然设置了鲶鱼性工作内容,却发现这种工作根本不能让员工为之动容、为之奋斗,那么这条鲶鱼就成了死鱼了。
从这个角度看,工作中的鲶鱼代表着丰富的工作内容、令人来劲的责权利、充满挑战的工作期望、新鲜的其他岗位体验等等。对于领导者和人力资源管理者而言,是否要在工作中设置鲶鱼工作、在什么层次上设置鲶鱼工作,都将是一个组织的战略问题。
综上,从不同的角度分析,鲶鱼代表的内容是不同的,对于一个从业者,领导可能是鲶鱼,那么你的努力最好和组织保持同方向,不要往后游,否则就有被吃掉的危险,永远充满激情地向上游,也许某一天你也变成了鲶鱼,赶着一群沙丁鱼向上奋斗;你的同事也可能是鲶鱼,那就和他比拼比拼,看谁翻腾的能量更大;你的下级也可能有鲶鱼,那就在激励下属成长的同时,别忘了给自己充充电,保持强劲的势头发展,否则你也有被下属吃掉的危险;你的工作中也可能有鲶鱼,那就合理地安排自己的工作,分清主次,让鲶鱼工作越游越欢,最好能到上一层工作岗位上去搅动一番。

———————————————————————————

【羊群效应】
羊群效应:头羊往哪里走,后面的羊就跟着往哪里走。
羊群效应最早是股票投资中的一个术语,主要是指投资者在交易过程中存在学习与模仿现象,“有样学样”,盲目效仿别人,从而导致他们在某段时期内买卖相同的股票。
羊群效应理论(The Effect of Sheep Flock)
在一群羊前面横放一根木棍,第一只羊跳了过去,第二只、第三只也会跟着跳过去;这时,把那根棍子撤走,后面的羊,走到这里,仍然像前面的羊一样,向上跳一下,尽管拦路的棍子已经不在了,这就是所谓的“羊群效应”也称“从众心理”。是指管理学上一些企业的市场行为的一种常见现象。它是指由于对信息不充分的和缺乏了解,投资者很难对市场未来的不确定性作出合理的预期,往往是通过观察周围人群的行为而提取信息,在这种信息的不断传递中,许多人的信息将大致相同且彼此强化,从而产生的从众行为。“羊群效应”是由个人理性行为导致的集体的非理性行为的一种非线性机制。
羊群行为是行为金融学领域中比较典型的一种现象,主流金融理论无法对之解释。经济学里经常用“羊群效应”来描述经济个体的从众跟风心理。羊群是一种很散乱的组织,平时在一起也是盲目地左冲右撞,但一旦有一只头羊动起来,其他的羊也会不假思索地一哄而上,全然不顾前面可能有狼或者不远处有更好的草。因此,“羊群效应”就是比喻人都有一种从众心理,从众心理很容易导致盲从,而盲从往往会陷入骗局或遭到失败。
羊群效应的出现一般在一个竞争非常激烈的行业上,而且这个行业上有一个领先者(领头羊)占据了主要的注意力,那么整个羊群就会不断摹仿这个领头羊的一举一动,领头羊到哪里去“吃草”,其它的羊也去哪里“淘金”。

—————————————————————————————————–

【刺猬法则】
刺猬法则:两只困倦的刺猬,由于寒冷而拥在一起。可因为各自身上都长着刺,于是它们离开了一段距离,但又冷得受不了,于是凑到一起。几经折腾,两只刺猬终于找到一个合适的距离:既能互相获得对方的温暖而又不至于被扎。
刺猬法则主要是指人际交往中的“心理距离效应”。
法国总统戴高乐就是一个很会运用刺猬法则的人。他有一个座右铭:“保持一定的距离”!这也深刻地影响了他和顾问、智囊和参谋们的关系。在他十多年的总统岁月里,他的秘书处、办公厅和私人参谋部等顾问和智囊机构,没有什么人的工作年限能超过两年以上。他对新上任的办公厅主任总是这样说:“我使用你两年,正如人们不能以参谋部的工作作为自己的职业,你也不能以办公厅主任作为自己的职业。”这就是戴高乐的规定。这一规定出于两方面原因:一是在他看来,调动是正常的,而固定是不正常的。这是受部队做法的影响,因为军队是流动的,没有始终固定在一个地方的军队。二是他不想让“这些人”变成他“离不开的人”。这表明戴高乐是个主要靠自己的思维和决断而生存的领袖,他不容许身边有永远离不开的人。只有调动,才能保持一定距离,而惟有保持一定的距离,才能保证顾问和参谋的思维和决断具有新鲜感和充满朝气,也就可以杜绝年长日久的顾问和参谋们利用总统和政府的名义营私舞弊。
戴高乐的做法是令人深思和敬佩的。没有距离感,领导决策过分依赖秘书或某几个人,容易使智囊人员干政,进而使这些人假借领导名义,谋一己之私利,最后拉领导干部下水,后果是很危险的。两相比较,还是保持一定距离好。

通用电气公司的前总裁斯通在工作中就很注意身体力行刺猬理论,尤其在对待中高层管理者上更是如此。在工作场合和待遇问题上,斯通从不吝啬对管理者们的关爱,但在工余时间,他从不要求管理人员到家做客,也从不接受他们的邀请。正是这种保持适度距离的管理,使得通用的各项业务能够芝麻开花节节高。与员工保持一定的距离,既不会使你高高在上,也不会使你与员工互相混淆身份。这是管理的一种最佳状态。距离的保持靠一定的原则来维持,这种原则对所有人都一视同仁:既可以约束领导者自己,也可以约束员工。掌握了这个原则,也就掌握了成功管理的秘诀。

—————————————————————————————————–

【手表定律】
手表定律:手表定律是指一个人有一只表时,可以知道现在是几点钟,而当他同时拥有两只时却无法确定。两只表并不能告诉一个人更准确的时间,反而会使看表的人失去对准确时间的信心。
手表定律在企业管理方面给我们一种非常直观的启发,就是对同一个人或同一个组织不能同时采用两种不同的方法,不能同时设置两个不同的目标,甚至每一个人不能由两个人来同时指挥,否则将使这个企业或者个人无所适从。

猴子与表的故事
森林里生活着一群猴子,每天太阳升起的时候它们外出觅食,太阳落山的时候回去休息,日子过得平淡而幸福。
一名游客穿越森林,把手表落在了树下的岩石上,被猴子“猛可”拾到了。聪明的“猛可”很快就搞清了手表的用途,于是,“猛可”成了整个猴群的明星,每只猴子都向“猛可”请教确切的时间,整个猴群的作息时间也由“猛可”来规划。“猛可”逐渐建立起威望,当上了猴王。
做了猴王的“猛可”认为是手表给自己带来了好运,于是它每天在森林里巡查,希望能够拾到更多的表。功夫不负有心人,“猛可”又拥有了第二块、第三块表。
但 “猛可”却有了新的麻烦:每只表的时间指示都不尽相同,哪一个才是确切的时间呢?“猛可”被这个问题难住了。当有下属来问时间时,“猛可”支支吾吾回答不上来,整个猴群的作息时间也因此变得混乱。过了一段时间,猴子们起来造反,把“猛可”推下了猴王的宝座,“猛可”的收藏品也被新任猴王据为己有。但很快,新任猴王同样面临着“猛可”的困惑。
这就是著名的“手表定律”:只有一只手表,可以知道时间;拥有两只或更多的表,却无法确定几点。更多钟表并不能告诉人们更准确的时间,反而会让看表的人失去对准确时间的信心。
手表定律带给我们一种非常直观的启发:
对于任何一件事情,不能同时设置两个不同的目标,否则将使人无所适从;对于一个人不能同时选择两种不同的价值观,否则他的行为将陷于混乱。
一个人不能由两个以上的人来指挥,否则将使这个人无所适从;对于一个企业,更是不能同时采用两种不同的管理方法,否则将使这个企业无法发展。
在这方面美国在线与时代华纳的合并就是一个典型的失败案例。美国在线是一个年轻的互联网公司,企业文化强调操作灵活、决策迅速,要求一切为快速抢占市场的目标服务。时代华纳在长期的发展过程中建立起强调诚信之道和创新精神的企业文化。
两家企业合并后,企业高级管理层并没有很好地解决两种价值标准的冲突,导致员工完全搞不清企业未来的发展方向。最终,时代华纳与美国在线的世纪联姻以失败告终。这也充分说明,要搞清楚时间,一块走时准确的表就足够了。
只选择你认为正确的
两只表并不能告诉一个人更准确的时间,反而会让看表的人失去对准确时间的信心。你要做的就是选择其中较信赖的一只,尽量校准它,并以此作为你的标准,听从它的指引行事。
尼采有一句名言:“兄弟,如果你是幸运的,你只要有一种道德而不要贪多,这样,你过桥会更容易些。”如果每个人都“选择你所爱,爱你所选择”,无论成败都可以心安理得。然而,困扰很多人的是,他们被“两只表”弄得无所适从,心力交瘁,不知自己该信哪一个。
还有人在环境或他人的压力下,违心选择了自己并不喜欢的道路,并因此而郁郁终生。即使取得了受人瞩目的成就,也体会不到成功的快乐。
在现实生活中,我们也经常会遇到类似的情况。比如两门选修课都是你所感兴趣的,但是授课时间重合,而且你又没有足够的精力学好两门课程,这个时候你很难做出选择。在面对两个同样优秀、同样倾心于你的男孩子时,你也一定会苦恼许久,不知该如何做出决断。
择业时,地点、待遇不分伯仲的两家单位,你将何去何从?在人生的每一个十字路口,我们都要面对“鱼与熊掌不能兼得”的苦恼。
在面对矛盾选择的时候,我们推荐使用“模糊心理”。所谓“模糊心理”,就是在一个很难决策的情况下,以潜意识的心理为主要基调,做出符合潜意识心理的选择。
心理学研究表明,“模糊心理”实际上是人在成长过程中不断积累的一种心理沉积。也许你并不能说出一条明确的原因,但是通过心理的潜意识,一般情况下可以做出最符合个体心理需求的决定。这里说的潜意识,实际上就是我们常说的第一印象。“模糊心理”在矛盾选择面前,能够提供给我们最安全的心理保护,因而是值得提倡的。
核心理念:更多选择、更多标准会让人无所适从。
应用要诀:明确目标、不受干扰;懂得取舍,该放则放。

—————————————————————————————————–

【破窗理论】
破窗理论:一个房子如果窗户破了,没有人去修补,隔不久,其它的窗户也会莫名其妙地被人打破;一面墙,如果出现一些涂鸦没有被清洗掉,很快的,墙上就布满了乱七八糟、不堪入目的东西;一个很干净的地方,人们不好意思丢垃圾,但是一旦地上有垃圾出现之后,人就会毫不犹疑地抛,丝毫不觉羞愧。

破窗理论1
也称“破窗谬论”,源于一个叫黑兹利特的学者在一本小册子中的一个譬喻(也有人认为这一理论是法国19世纪经济学家巴斯夏作为批评的靶子而总结出来的,见其著名文章《看得见的与看不见的》)。这位黑兹利特说,假如小孩打破了窗户,必将导致破窗人更换玻璃,这样就会使安装玻璃的人和生产玻璃的人开工,从而推动社会就业。
在这里,学者是为了说明孩童的行为与政府的行为所能产生的后果,从而彻底地否定凯恩斯主义的政府干预政策。“破窗理论”就是典型的“破坏创造财富”。把这样的谬论放之于洪灾,放之于地震,放之于战争,好像都很合适。

破窗理论2
也叫 破窗效应一扇窗户被打破,如果没有修复,将会导致更多的窗户被打破,甚至整栋楼被拆毁。由美国政治学家威尔逊和犯罪学家凯琳观察总结的“破窗理论”指出环境可以对一个人产生强烈的暗示性和诱导性。

—————————————————————————————————–

【二八定律】
二八定律(巴莱多定律):19世纪末20世纪初意大利的经济学家巴莱多认为,在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的。  社会约80%的财富集中在20%的人手里,而80%的人只拥有20%的社会财富。这种统计的不平衡性在社会、经济及生活中无处不在,这就是二八法则。
二八法则告诉我们,不要平均地分析、处理和看待问题,企业经营和管理中要抓住关键的少数;要找出那些能给企业带来80%利润、总量却仅占20%的关键客户,加强服务,达到事半功倍的效果;企业领导人要对工作认真分类分析,要把主要精力花在解决主要问题、抓主要项目上。

20%的人成功——————80%的人不成功
20%的人用脖子以上赚钱——–80%的人脖子以下赚钱
20%的人正面思考————–80%的人负面思考
20%的人买时间—————-80%的人卖时间
20%的人找一个好员工———-80%的人找一份好工作
20%的人支配别人————–80%的人受人支配
20%的人做事业—————-80%的人做事情
20%的人重视经验————–80%的人重视学历
20%的人认为行动才有结果——80%的人认为知识就是力量
20%的人我要怎么做才有钱——80%的人我要有钱我就怎么做
20%的人爱投资—————-80%的人爱购物
20%的人有目标—————-80%的人爱瞎想
20%的人在问题中找答案——–80%的人在答案中找问题
20%的人在放眼长远————80%的人只顾眼前
20%的人把握机会————–80%的人错失机会
20%的人计划未来————–80%的人早上起来才想今天干嘛
20%的人按成功经验行事——–80%的人按自己的意愿行事
20%的人做简单的事情———-80%的人不愿意做简单的事情
20%的人明天的事情今天做——80%的人今天的事情明天做
20%的人如何能办到————80%的人不可能办到
20%的人记笔记—————-80%的人忘性好
20%的人受成功的人影响——–80%的人受失败人的影响
20%的人状态很好————–80%的人态度不好
20%的人相信自己会成功————–80%的人不愿改变环境
20%的人永远赞美、鼓励————–80%的人永远漫骂、批评
20%的人会坚持————–80%的人会放弃

———————————————————————————

【木桶理论】
木桶理论:组成木桶的木板如果长短不齐,那么木桶的盛水量不是取决于最长的那一块木板,而是取决于最短的那一块木板。
水桶效应是指一只水桶想盛满水,必须每块木板都一样平齐且无破损,如果这只桶的木板中有一块不齐或者某块木板下面有破洞,这只桶就无法盛满水。是说一只水桶能盛多少水,并不取决于最长的那块木板,而是取决于最短的那块木板。也可称为短板效应。一个水桶无论有多高,它盛水的高度取决于其中最低的那块木板。
又称水桶原理或短板理论,水桶短板管理理论,所谓“水桶理论”也即“水桶定律”,其核心内容为:一只水桶盛水的多少,并不取决于桶壁上最高的那块木块,而恰恰取决于桶壁上最短的那块。根据这一核心内容,“水桶理论”还有两个推论:其一,只有桶壁上的所有木板都足够高,那水桶才能盛满水。其二,只要这个水桶里有一块不够高度,水桶里的水就不可能是满的。

—————————————————————————————————–

【马太效应】
马太效应:《圣经?马太福音》中有一句名言:“凡有的,还要加给他,叫他有余;没有的,连他所有的,也要夺过来。”
马太效应,指强者愈强、弱者愈弱的现象,广泛应用于社会心理学、教育、金融以及科学等众多领域。其名字来自圣经《新约·马太福音》中的一则寓言: “凡有的,还要加给他叫他多余;没有的,连他所有的也要夺过来。”“马太效应”与“平衡之道”相悖,与“二八定则”有相类之处,是十分重要的自然法则。

—————————————————————————————————–

【鸟笼逻辑】
挂一个漂亮的鸟笼在房间里最显眼的地方,过不了几天,主人一定会做出下面两个选择之一:把鸟笼扔掉,或者买一只鸟回来放在鸟笼里。这就是鸟笼逻辑。过程很简单,设想你是这房间的主人,只要有人走进房间,看到鸟笼,就会忍不住问你:“鸟呢?是不是死了?”当你回答:“我从来都没有养过鸟。”人们会问:“那么,你要一个鸟笼干什么?”最后你不得不在两个选择中二选一,因为这比无休止的解释要容易得多。鸟笼逻辑的原因很简单:人们绝大部分的时候是采取惯性思维。所以可见在生活和工作中培养逻辑思维是多么重要。

—————————————————————————————————–

【责任分散效应】
1964年3月13日夜3时20分,在美国纽约郊外某公寓前,一位叫朱诺比白的年轻女子在结束酒巴间工作回家的路上遇刺。当她绝望地喊叫:“有人要杀人啦!救命!救命!”听到喊叫声,附近住户亮起了灯,打开了窗户,凶手吓跑了。当一切恢复平静后,凶手又返回作案。当她又叫喊时,附近的住户又打开了电灯,凶手又逃跑了。当她认为已经无事,回到自己家上楼时,凶手又一次出现在她面前,将她杀死在楼梯上。在这个过程中,尽管她大声呼救,她的邻居中至少有38位到窗前观看,但无一人来救她,甚至无一人打电话报警。这件事引起纽约社会的轰动,也引起了社会心理学工作者的重视和思考。人们把这种众多的旁观者见死不救的现象称为责任分散效应。
对于责任分散效应形成的原因,心理学家进行了大量的实验和调查,结果发现:这种现象不能仅仅说是众人的冷酷无情,或道德日益沦丧的表现。因为在不同的场合,人们的援助行为确实是不同的。当一个人遇到紧急情境时,如果只有他一个人能提供帮助,他会清醒地意识到自己的责任,对受难者给予帮助。如果他见死不救会产生罪恶感、内疚感,这需要付出很高的心理代价。而如果有许多人在场的话,帮助求助者的责任就由大家来分担,造成责任分散,每个人分担的责任很少,旁观者甚至可能连他自己的那一份责任也意识不到,从而产生一种“我不去救,由别人去救”的心理,造成“集体冷漠”的局面。如何打破这种局面,这是心理学家正在研究的一个重要课题。

—————————————————————————————————–

【帕金森定律】
英国著名历史学家诺斯古德·帕金森通过长期调查研究,写出一本名叫《帕金森定律》的书。他在书中阐述了机构人员膨胀的原因及后果:一个不称职的官员,可能有三条出路,第一是申请退职,把位子让给能干的人;第二是让一位能干的人来协助自己工作;第三是任用两个水平比自己更低的人当助手。这第一条路是万万走不得的,因为那样会丧失许多权利;第二条路也不能走,因为那个能干的人会成为自己的对手;看来只有第三条路最适宜。于是,两个平庸的助手分担了他的工作,他自己则高高在上发号施令,他们不会对自己的权利构成威胁。两个助手既然无能,他们就上行下效,再为自己找两个更加无能的助手。如此类推,就形成了一个机构臃肿,人浮于事,相互扯皮,效率低下的领导体系。

—————————————————————————————————–

【晕轮效应】
俄国著名的大文豪普希金曾因晕轮效应的作用吃了大苦头。他狂热地爱上了被称为“莫斯科第一美人”的娜坦丽,并且和她结了婚。娜坦丽容貌惊人,但与普希金志不同道不合。当普希金每次把写好的诗读给她听时。她总是捂着耳朵说:“不要听!不要听!”相反,她总是要普希金陪她游乐,出席一些豪华的晚会、舞会,普希金为此丢下创作,弄得债台高筑,最后还为她决斗而死,使一颗文学巨星过早地陨落。在普希金看来,一个漂亮的女人也必然有非凡的智慧和高贵的品格,然而事实并非如此,这种现象被称为晕轮效应。
所谓晕轮效应,就是在人际交往中,人身上表现出的某一方面的特征,掩盖了其他特征,从而造成人际认知的障碍。在日常生活中,“晕轮效应”往往在悄悄地影响着我们对别人的认知和评价。比如有的老年人对青年人的个别缺点,或衣着打扮、生活习惯看不顺眼,就认为他们一定没出息;有的青年人由于倾慕朋友的某一可爱之处,就会把他看得处处可爱,真所谓“一俊遮百丑”。晕轮效应是一种以偏概全的主观心理臆测,其错误在于:第一,它容易抓住事物的个别特征,习惯以个别推及一般,就像盲人摸象一样,以点代面;第二,它把并无内在联系的一些个性或外貌特征联系在一起,断言有这种特征必然会有另一种特征;第三,它说好就全都肯定,说坏就全部否定,这是一种受主观偏见支配的绝对化倾向。总之,晕轮效应是人际交往中对人的心理影响很大的认知障碍,我们在交往中要尽量地避免和克服晕轮效应的副作用。

—————————————————————————————————–

【霍桑效应】
心理学上的一种实验者效应。20世纪20-30年代,美国研究人员在芝加哥西方电力公司霍桑工厂进行的工作条件、社会因素和生产效益关系实验中发现了实验者效应,称霍桑效应。
实验的第一阶段是从1924年11月开始的工作条件和生产效益的关系,设为实验组和控制组。结果不管增加或控制照明度,实验组产量都上升,而且照明度不变的控制组产量也增加。另外,有试验了工资报酬、工间休息时间、每日工作长度和每周工作天数等因素,也看不出这些工作条件对生产效益有何直接影响。第二阶段的试验是由美国哈佛大学教授梅奥领导的,着重研究社会因素与生产效率的关系,结果发现生产效率的提高主要是由于被实验者在精神方面发生了巨大的变化。参加试验的工人被置于专门的实验室并由研究人员领导,其社会状况发生了变化,受到各方面的关注,从而形成了参与试验的感觉,觉得自己是公司中重要的一部分,从而使工人从社会角度方面被激励,促进产量上升。
这个效应告诉我们,当同学或自己受到公众的关注或注视时,学习和交往的效率就会大大增加。因此,我们在日常生活中要学会与他人友好相处,明白什么样的行为才是同学和老师所接受和赞赏的,我们只有在生活和学习中不断地增加自己的良好行为,才可能受到更多人的关注和赞赏,也才可能让我们的学习不断进步,充满自信!

—————————————————————————————————–

【习得性无助实验】
习得性无助效应最早有奥弗米尔和西里格曼发现,后来在动物和人类研究中被广泛探讨。简单地说,很多实验表明,经过训练,狗可以越过屏障或从事其他的行为来逃避实验者加于它的电击。但是,如果狗以前受到不可预期(不知道什么时候到来)且不可控制的电击(如电击的中断与否不依赖于狗的行为),当狗后来有机会逃离电击时,他们也变得无力逃离。而且,狗还表现出其他方面的缺陷,如感到沮丧和压抑,主动性降低等等。
狗之所以表现出这种状况,是由于在实验的早期学到了一种无助感。也就是说,它们认识到自己无论做什么都不能控制电击的终止。在每次实验中,电击终止都是在实验者掌控之下的,而狗会认识到自己没有能力改变这种外界的控制,从而学到了一种无助感。
人如果产生了习得性无助,就成为了一种深深的绝望和悲哀。因此,我们在学习和生活中应把自己的眼光在开阔一点,看到事件背后的真正的决定因素,不要使我们自己陷入绝望。

—————————————————————————————————–

【证人的记忆】
证人,在我们的认识里,通常都是提供一些客观的证据的人,就是把自己亲眼看到、亲耳听到的东西如实地讲出来的人。然而,心理学研究证明,很多证人提供的证词都不太准确,或者说是具有个人倾向性,带着个人的观点和意识。
证人对他们的证词的信心并不能决定他们证词的准确性,这一研究结果令人感到惊讶。心理学家珀费可特和豪林斯决定对这一结论进行更深入的研究。为了考察证人的证词是否有特别的东西,他们将证人的记忆与对一般知识的记忆进行了比较。
他们让被试看一个简短的录象,是关于一个女孩被绑架的案件。第二天,让被试回答一些有关录象里内容的问题,并要求他们说出对自己回答的信心程度,然后做再认记忆测验。接下来,使用同样的方法,内容是从百科全书和通俗读物中选出的一般知识问题。
和以前发生的一样,珀费可特和豪林斯也发现,在证人回忆的精确性上,那些对自己的回答信心十足的人实际上并不比那些没信心的人更高明,但对于一般知识来说,情况就不是这样,信心高的人回忆成绩比信心不足的人好得多。
人们对于自己在一般知识上的优势与弱势有自知之明。因此,倾向于修改他们对于信心量表的测验结果。一般知识是一个数据库,在个体之间是共享的,它有公认的正确答案,被试可以自己去衡量。例如,人们会知道自己在体育问题上是否比别人更好或更差一点。但是,目击的事件不受这种自知之明的影响。例如,从总体上讲,他们不大可能知道自己比别人在记忆事件中的参与者头发颜色方面更好或更差。

—————————————————————————————————–

【罗森塔尔效应】
美国心理学家罗森塔尔等人于1968年做过一个著名实验。他们到一所小学,在一至六年级各选三个班的儿童进行煞有介事的“预测未来发展的测验”,然后实验者将认为有“优异发展可能”的学生名单通知教师。其实,这个名单并不是根据测验结果确定的,而是随机抽取的。它是以“权威性的谎言”暗示教师,从而调动了教师对名单上的学生的某种期待心理。8个月后,再次智能测验的结果发现,名单上的学生的成绩普遍提高,教师也给了他们良好的品行评语。这个实验取得了奇迹般的效果,人们把这种通过教师对学生心理的潜移默化的影响,从而使学生取得教师所期望的进步的现象,称为“罗森塔尔效应”,习惯上也称为皮格马利翁效应(皮格马利翁是古希腊神话中塞浦路斯国王,他对一尊少女塑像产生爱慕之情,他的热望最终使这尊雕像变为一个真人,两人相爱结合)。
教育实践也表明:如果教师喜爱某些学生,对他们会抱有较高期望,经过一段时间,学生感受到教师的关怀、爱护和鼓励;常常以积极态度对待老师、对待学习以及对待自己的行为,学生更加自尊、自信、自爱、自强,诱发出一种积极向上的激情,这些学生常常会取得老师所期望的进步。相反,那些受到老师忽视、歧视的学生,久而久之会从教师的言谈、举止、表情中感受到教师的“偏心”,也会以消极的态度对待老师、对待自己的学习,不理会或拒绝听从老师的要求;这些学生常常会一天天变坏,最后沦为社会的不良分子。尽管有些例外,但大趋势却是如此,同时这也给教师敲响了警钟。

—————————————————————————————————–

【虚假同感偏差】
我们通常都会相信,我们的爱好与大多数人是一样的。如果你喜欢玩电脑游戏,那么就有可能高估喜欢电脑游戏的人数。你也通常会高估给自己喜欢的同学投票的人数,高估自己在群体中的威信与领导能力等等。你的这种高估与你的行为及态度有相同特点的人数的倾向性就叫做“虚假同感偏差”。有些因素会影响你的这种虚假同感偏差强度:
(1)当外部的归因强于内部归因时;
(2)当前的行为或事件对某人非常重要时;
(3)当你对自己的观点非常确定或坚信时;
(4)当你的地位或正常生活和学习受到某种威胁时;
(5)当涉及到某种积极的品质或个性时;
(6)当你将其他人看成与自己是相似时。

Older Posts »

Powered by WordPress