2008-03-13

几个文本编辑器的用法

无论是Unix还是Linux下,文本编辑器虽然多,但是用的最多的无非还是那几个,目前还不大熟悉这几个编辑器,所以应该学学:
VIM
`___________________________________________~
1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键。
h (左移) j (下行) k (上行) l (右移)

2. 欲退出vim编辑器,请输入以下命令放弃所有修改∶

:q! <回车>

或者输入以下命令保存所有修改∶

:wq <回车>

4. 在正常模式下删除光标所在位置的字符,请按∶ x

5. 在正常模式下要在光标所在位置开始插入文本,请按∶

i 输入必要文本

特别提示∶按下 键会带您回到正常模式或者取消一个不期望或者部分完成
的命令。
-------------
删除与撤销:
1. 欲从当前光标删除至单字/单词末尾,请输入∶dw
2. 欲从当前光标删除至当前行末尾,请输入∶d$
3. 欲删除整行,请输入∶dd
4. 在正常模式下一个命令的格式是∶
[number] command object 或者 command [number] object
其意是∶
number - 代表的是命令执行的次数
command - 代表要做的事情,比如 d 代表删除
object - 代表要操作的对象,比如 w 代表单字/单词,$ 代表到行末等等。
$ (to the end of line), etc.
5. 欲撤消以前的操作,请输入∶u (小写的u)
欲撤消在一行中所做的改动,请输入∶U (大写的U)
欲撤消以前的撤消命令,恢复以前的操作结果,请输入∶CTRL-R
-------------------------
1. 按p可将上次删除的东西帖在本行之后

2. 按r后输入想要替换光标所在位置的字符。

3. cw 可以替换当前光标到单词的末尾的内容;输入 c$ 可以替换当
前光标到行末的内容。

4. 更改类命令的格式是∶

[number] c object 或者 c [number] object
---------------------------
定位及文件状态
1. Ctrl-g 用于显示当前光标所在位置和文件状态信息。Shift-G 用于将光标跳
转至文件最后一行。先敲入一个行号然后按 Shift-G 则是将光标移动至该行
号代表的行。

2. 输入 / 字符用于向下查找该字符串。
输入 ? 字符用于全文查找该字符串。完成一次查找之后按 n 键则是重复上一次的命令,可在同一方向上查
找下一个字符串所在;或者按 Shift-N 向相反方向查找下该字符串所在。

3. 如果光标当前位置是括号(、)、[、]、{、},按 % 可以将光标移动到配对的
括号上。

4. 在一行内替换头一个字符串 old 为新的字符串 new,请输入 :s/old/new
在一行内替换所有的字符串 old 为新的字符串 new,请输入 :s/old/new/g
在两行内替换所有的字符串 old 为新的字符串 new,请输入 :#,#s/old/new/g
在文件内替换所有的字符串 old 为新的字符串 new,请输入 :%s/old/new/g
进行全文替换时询问用户确认每个替换需添加 c 选项,请输入 :%s/old/new/gc
-----------------------------------
执行外部命令,追加其他文件到本文件
1. :!command 用于执行一个外部命令 command。
请看一些实际例子∶
:!dir - 用于显示当前目录的内容。
:!rm FILENAME - 用于删除名为 FILENAME 的文件。

2. :w FILENAME 可将当前 VIM 中正在编辑的文件保存到名为 FILENAME 的文
件中。

3. :#,#w FILENAME 可将当前编辑文件第 # 行至第 # 行的内容保存到文件
FILENAME 中。

4. :r FILENAME 可提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置
后面。
---------------------------------
正常模式下的一些命令:

1. 输入小写的 o在下方插入一行。
输入大写的 O 可以在上方插入一行

2. 输入小写的 a 可以在光标所在位置之后插入文本。
输入大写的 A 可以在光标所在行的行末之后插入文本。

3. 输入大写的 R 将进入替换模式,直至按 键退出替换模式而进入正常
模式。

4. 输入 :set xxx 可以设置 xxx 选项
5.输入:help可以查看帮助
`_________________________________________`
VIM已经结束,接下来是vi

vi 是visual edit 的缩写
文本编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑器有ex,sed和vi等,其中,使用最为广泛的是vi,而vi命令繁多,以下稍做总结,以资共享!渴望更正和补充!

进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次进行编辑

移动光标类命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{ :光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行

删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本

搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息

最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行

寄存器操作
"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。


进入vi
vi test
离开vi
:q! 离开vi,并放弃刚在缓冲区内编辑的内容。
:wq 将缓冲区内的资料写入磁盘中,并离开vi。
:ZZ 同wq
同wq
:w 将缓冲区内的资料写入磁盘中,但并不离开vi。
:q 离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容,此指令可与: w 配合使用。
Vi 的操作模式
Vi 提供两种操作模式:
输入模式(insert mode)
指令模式(command mode)
当使用者进入vi后,既处于指令模式下,此刻键入任何字元皆被视为指令。

输入模式:a(append) 游标之后加入资料。
A 该行之末加入资料
i (insert) 游标之前加入资料
I 该行之首加入资料
o (open) 新增一行与该行之下供输入资料
O 新增一行与该行之上供输入资料

指令模式:B 移至该行第一个字符,若光标在该行第一字符则光标移至上一行第一字符。
b 由游标所在位置之前一个字串的第一个字元
cc 删除整行,修改整行的内容。
D 以行为单位,删除游标在内后面的所有字符。
db 删除该行光标前字符
dd 删除该行
de 删除自光标开始后面的字符
d加字符 删除光标所在位置至字符之间的单
E 移至该行最后字符,若光标在该行最后字符则光标移至下一行最后字符
e 由游标所在位置至该字串的最后一个字元
G 移至该档案的最后一行
h 向前移一个字元
j 向下移一个字元
k 向上移一个字元
0 移至该行之首
M 移至视窗的中间那行
L 移至视窗的最后一行
l 向后移一个字符
0 由游标所在位置该行的第一个字元
nG 移至该档案的第n行
n+ 自游标所在位置向后移n行至该行的第一字符
n- 自游标所在位置向前移n行至该行的第一字符
R 进入取代状态,直到《ESC》为止
s 删除游标所在字元,并进入取代模式直到《ESC》
S 删除游标所在之该行资料,并进入输入模式直到《ESC》
w 由游标所在位置之下一个字串的第一个字元
x 删除游标所在该字元。
X 删除游标所在之前一字元。
r 用接于此指令之后的字元取代(replace)游标所在字元
yy yank整行,使游标所在该行复制到记忆体缓冲区
显示该行之行号、档案名称、档案中最末之行号、游标所在行号占
总行号之百分比
$ 由游标所在位置至该行的最后一个字元。
) 由游标所在位置至下一个句子的第一个字元。
( 由游标所在位置至该句子的第一个字元。
{ 由游标所在位置至该段落的最后一个字元。
} 由游标所在位置至该段落的第一个字元

yank和delete可将指定的资料复制到记忆体缓冲区,而藉有put指令可将缓冲区内的资料复制到荧幕上
例如:搬移一行 :在该行执行dd
游标移至目的地
执行p
复制一行 :在该行执行yy
游标移至目的地
执行p
__________________________________________________-
最后。传说中大名鼎鼎的Emacs!!!

2008-03-09

Solaris10的关闭/启动/桌面环境和用户组管理

在启动过程中,Service Management Facility (SMF)提供了新的选项。是Solaris10的预测性自我修复系统的相关功能。
Solaris10在x86平台上,支持64位计算。
启动方式

  • 手动启动可以进行64位计算的系统。
    在64位模式下启动x86系统,在选择启动的提示符下输入:
    b kernel /amd64/unix
    在以前的基于32位计算的Solaris版本中,如果启动兼容的64位计算能力,则不需要改变启动命令:
    b kernel /unix
  • 使用eeprom命令设置boot-file文件参数。
    在以前的Solaris版本中,boot-file文件参数设置为kernel/unix。在Solaris 10中,boot-file文件参数默认设置为空。这时系统启动能自动检测,如果有64位计算能力,就会在x86平台上启动64位模式。直接手工设置boot-file文件参数的方法是:
    # eeprom boot-file kernel/amd64/unix
    查看当前系统boot-file文件参数的方法是:
    # eeprom boot-file
  • 使用内核调试模式(kmdb)启动系统。
    启动内核调试模式的方法是在启动方式的提示符下输入启动命令。如果是启动64位模式,则输入:
    b kernel/amd64/unix –k
    在基于系统32位模式下,启动64位计算能力,则输入:
    b kernel /unix -k
运行级别和init状态

运行级别是由一些代表系统服务运行状态的数字或字符表示。系统总是处于一个运行级别之中。与运行级别相关的是init状态,因为init进程维护着运行的级别。系统管理员可以通过init命令和svcadm命令来改变系统的运行级别。


启动选项

启动选项描述着系统是如何被启动的。不同的启动选项有以下几种。

Interactive boot:当系统启动时按照提示输入相应信息。

Reconfiguration boot:当系统添加了新的硬件或虚拟设备时,选用此种启动方法。

Recovery boot:当系统出了故障时恢复启动。


------------------------------------------------------------------------------
Solaris10的关机命令有不少,在不同的场景应用不同的关机命令:
命令 命令描述 什么时候使用
shutdown 是调用init程序来关闭 推荐在服务器运行级别3时使用, 系统的可运行shell脚本程序 因为要通知用户系统将要关闭
init 改变系统运行级别命令 推荐在单机时使用,或者关闭不 影响其他用户时使用
reboot 重新启动系统 Init 6是首选的重新启动方法
Halt,poweroff 同步磁盘并停止处理器工作 不推荐使用,因为会强行终止系统进程。 只有在紧急事件中才用

关于运行级别的定义是:
级别 描述 用户状态
0 硬件维护模式 控制台访问
1 管理状态:只可获得自动 单用户
2 第一多用户状态:不可获取NFS资源 多用户
3 可获得NFS资源 多用户
4 用户定义状态 不定
5 固件?断电状态 控制台访问
6 操作系统挂起 单用户
s 管理任务和恢复中断的文件系统 控制台访问 控制台访问

你也可以看下面这段关于运行级别的信息:
系统启动时,进入/etc/inittab中initdefault所定义的运行级别(deafult 3)
各运行级别的定义
run level:0, (halt, shotdown, stop+a,sync,go )
1, (single user, boot -s, init s )
2, (multiuser, unshare net)
3, (multiuser, deafult)
5, (halt, power off )
6, (reboot to level 3 )
S (init 1, boot -s)
另外,实际上,SMF 引入了重大事件 (milestone)的概念,它代替了传统的运行级别概念。
------------------------------------------------------------------------------------------
回到原题,服务器的一般运行级别是3,这时系统是多用户操作系统,也有NFS远程服务在运行。这就要求我们关闭服务器要小心,最好先查看一下用户的使用情况。查看谁在使用服务器的命令是who。关闭服务器最好的方法是使用shutdown命令,因为它会给在线用户一个通知。
一下几句例子可以可供参考:

shutdown -g180 –y # SPARC:在180秒后切换系统到单用户状态。
shutdown -i0 -g300 –y # SPARC:在300秒后切换系统到可以关闭电源的运行级0。
shutdown -i6 -g120 -y # 在120秒后重新启动系统。
当然,之所以要如此麻烦,都是由于我们在操作的是一台提供服务的服务器。如果我们在操作的是一台单用户机器的话我们可以直接用inid命令切换运行级别。单用户状态下Solaris10的运行级别如下:

运行级别

SPARC平台提示符

x86平台提示符

S(单用户级)

#

#

2(多用户级)

#

#

0(可关闭电源级)

Ok或者 >

按任意键重新启动

3(多用户和NFS服务)

hostname console login:

hostname console login:

比如我们要切换到0级别可以用命令init 0。

======================================================
接下来是系统启动部分,同x86不同,Solaris在SPARC平台上使用Boot PROM来引导系统硬件,我们可以暂且把它当作和BIOS一样的东西。
引导过程包含了引导PROM、引导程序、内核初始化和系统初始化阶段,这几个阶段是按顺序执行的。
启动信息可参见下表:

引导阶段

描 述

引导PROM

PROM显示系统标识信息,然后运行自检测诊断程序来验证系统的硬件和内存。然后,PROM装载主引导程序bootblkbootblk又从位于UFS文件系统中的默认引导设备装载辅助引导程序

引导程序

程序bootblk找到并执行ufsboot辅助引导程序,将其装载到内存。程序ufsboot被装载后,ufsboot装载内核

内核的初始化

内核自己进行初始化,并开始装载模块,使用ufsboot 来读取这些文件。当内核装载了足够的模块以挂载根文件系统时,内核终止ufsboot程序,并使用它自己的资源继续引导过程

系统初始化

内核创建了一个用户进程并启动/sbin/init 进程,后者通过读取/etc/inittab文件启动了其他的进程


引导系统可以到以下三种模式:

1.以多用户状态引导系统

要以多用户状态引导系统,可在PROMok提示符后,输入boot并按Enter键。自动引导过程将在默认的驱动器上启动,并显示一系列启动消息。系统以多用户状态被启动。

2.以单用户状态引导系统

要以单用户状态引导系统,可在PROMok提示符后,输入boot -s并按Enter键。系统引导到单用户状态并提示你输入root密码。

3.交互式引导

如果想要临时改变系统文件或者内核,你可能需要交互式引导。使用这样的方法,你可以测试你所做的修改,并在出现任何问题时很容易地进行恢复。boot -a是进入交互式引导的命令。
--------------------------------------------------------

由于暂时不会使用有SPARC的机器,所以相关详情省略。

接下来是x86的启动:

在x86上可以按ESC键进入手动启动模式或者不动默认使用自动启动模式。

在默认自动启动的情况下,会出现下面的提示
------------------------------------
<<< Current Boot Parameters >>>

Boot path: /pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0:a

Boot args:

Type b [file-name] [boot-flags] to boot with options

or i to enter boot interpreter

or to boot with defaults
------------------------------------------------
说明:

  • 按b可以使用启动参数来启动系统:如b-a交互式启动,b-s启动到单用户模式,b-r检测新设备
  • i,启动交互选项部分可用的命令有:
    help //
    查看帮助
    printenv //
    查看启动选项
    show-devs //
    显示所有device nodes
    properties //
    显示所有active node属性
--------------------------------
接下来是本部分最重要的用户账号、用户组和角色管理。

用户:
用户帐号是唯一的,包含了一组惟一的标识号和特征参数来区别不同的用户
它可用于:
  • 生成Shell
  • 交互执行应用;
  • 调度应用以按照制定的日期或时间运行;
  • 访问数据库应用和其他系统服务。

除了用户账号之外,Solaris还有一些用于各种日常维护的系统账户,如rootdaemonbinsyslpadmuucp,它们的作用如下:

  • 执行特定任务的系统资源分配;
  • 运行mail服务器;
  • 运行web服务器;
  • 执行进程管理。
用户除了账户名,密码外还有如下信息:
  • 用户IDUID):这是标记用户的一个整数编号。它从root用户开始编排(UID=0),其他UID顺序分配。但系统会保留1023以前的UID号用于系统账号。普通用户的UID1024开始分配。
  • 用户组:这是区分不同用户类型的一种灵活的分组机制。用户组不只是一组相关用户集合的概念,Solaris文件系统除了可以按照个别用户和全体用户来授予权限,还可以按照用户组指定文件访问的读、写和执行权限。每个UID都与一个基本组IDGID)相关联,但它同时还可以与一个以上的辅助用户组关联。
  • 主目录:它是用户所创建的所有文件的默认存储位置。
  • 登录Shell:这是用户交互调用命令或编写程序的地方。Solaris提供各种不同的shell,包括Bourne shell(sh)C shell(csh)Bourne again shell(bash)cornell shell(tcsh)Shell的选择在很大程度上取决于用户的个人喜好,以及对类C编程结构和终端操作系统的熟练程度。
  • 用户注释:它通常为用户的全称。但系统账户的注释可以用来描述它们的作用。如一个Apache系统账户的注释就可以采用“Webserver”
在添加和删除账户上,除了SMC外还可以使用命令行的方式,接下来就介绍账户管理的命令:

使用useradd命令可以增加用户账号,命令格式如下:

useradd [-u uid | -g group] | -d dir | -s shell | -c comment | -m [-k skel_dir] ] login

说明:

u指定用户ID号;

g制定所在组;

d指定用户目录;

s制定用户Shell

c用户的注释;

m建立用户目录;

login用户的登录名。

改变账户密码:


passwd username
passwd -l username可以锁定账户直到管理员设定密码。

修改账户属性:
usermod 参数 username
usermod的参数和useradd基本一致

删除账户:
userdel -r username

----------------------------------------------------------
同windows类似,Solaris10也提供用户组的管理。有关组的信息都存储在组数据库中(/etc/group),但本地的组数据库也可以由NIS/NIS+LDAP数据库加以补充。可以cat /etc/group查看相关内容。
以下是一些管理命令:
查看用户所属的组:
groups username

查看某组包含的用户:
getent group groupname

增加用户组:
groupadd [-g gid] groupname
-g 设置组的ID号;
gid,组的ID号(不能与现有的组ID号重复);

删除用户组:
groupdel groupname。
----------------
貌似Solaris10中的用户现在运行的组只有一个,输入id命令可以查看当前的组关系。
所以,如果需要新建一个文件有不想和现在所在的gid对应,可以使用
newgrp groupname
命令来切换所在组。

------------------------------
接下来是角色:

对于传统的安全性模型,超级用户拥有完全的超级用户特权,而其他的用户没有足够的权限解决他们自己的问题。有了基于角色的访问控制(RBAC),便可以取代传统的安全模型。

有了RBAC,可以将超级用户的能力分成不同的包,并将它们分别分配给分担管理任务的个体。当使用RBAC划分超级用户特权时,用户可以拥有不同程度的访问权限,可以控制对其他用户特权操作的授权。

RBAC包括了如下特性。

  • 角色:一种特殊类型的用户账号,可以用来执行一套管理任务。
  • 特征文件(profile):一种打包机制,用特殊的属性将授权和命令分组。例如,使用用户和组的ID
  • 授权:一种用来授予对受限功能的访问权限的权利。
角色:

实现RBAC功 能的第一步就是对准备指派给每个用户的角色进行定义。另外,不同资源的访问权限也必须与具体的角色名联系在一起。对于管理者来说,角色的变化,以及用户与 角色关系的调整都是不可避免的。因此,这种变化的角色和用户列表的实现方法应尽可能的简单。另外,单一的任务并不容易实现与单一角色的关联。

比如,一个被定义为“备份操作员”的角色会涉及到ufsdump命令的运行,而这又需要对磁带设备进行写访问操作。此时,备份操作员角色本身就决定了它对这种文件访问的必然性。因此,我们不需要单独为它定义一个新角色。

又如,一个“设备管理员”可能使用命令tapes来对磁带设备执行写访问操作。所以,这些写操作也不能定义为一个新的角色,它自然成为“设备管理员”角色的一部分。

如果一个用户承担某个角色,他的结果要么承担该角色的全部权限,要么就丧失该角色的全部权限。

在默认情况下,Solaris 支持3种不同的系统管理角色。

  • 主管理员(PAPrimary Administrator):负责为其他用户分派权限,并负责系统的安全问题。
  • 系统管理员(SASystem Administrator):负责与安全无关的日常管理工作。
  • 操作员(Operator):执行备份和设备维护操作。

PASA之间的区别主要取决于本地的安全策略。例如,尽管默认的PA角色具备添加用户和修改口令的权限,而默认的SA角色并不具备修改口令的权限,但在很多地方,禁止SA的口令访问可能是不现实的。RBAC的一个最大的好处就是它可以按照本地的需求非常方便地分配权限。


用户特征文件(PROFILE):

特征文件是用于授权的一个或一组特定的命令。这些授权连接在一起形成某个角色,并随后与某个用户或某些不同的用户建立关联关系。它们之间的关系如图7-1所示。

我们可以为每个角色创建一个新的用户账号,这些账号拥有自己的主目录和口令。当执行特征文件中的命令时,用户必须使用su命令进入角色账户,因为这种角色用户是不允许直接登录的。


7-1 授权和特征文件与给予不同用户的角色相关联

通过su命令访问角色账户与通过su命令访问普通账户的一个不同之处在于它们的审计功能,即在通过su命令访问某个角色时,它执行的所有操作,连同用户的原始UID都会被记入日志。这样,每个访问角色的用户操作都会被明确地记入日志并进行审计


授权:

所谓授权,就是赋予某个角色执行某项操作的特权,它是在/etc/security/auth_attr文件中定义的。授权的定义形式与Internet的域名非常相似,它的最左边为企业名称,随后是依次细化的软件包和功能内容。

例如,net.cassowary.*就是一个由厂商cassowary.net提供的任何功能授权。

在默认情况下,所有Solaris提供的软件包都是由前缀Solaris来加以识别的。比如,修改口令的授权就是Solaris.admin.usermgr.pswd,而不是com.sun.Solaris.admin.usermgr.pswd

许多授权的划分都是十分细致的,它可能只允许读访问,而不允许写访问,反之也是如此。比如,主管理员(PA)可能拥有Solaris.admin.usermgr.readSolaris.admin.usermgr.write的授权,因而可以对用户配置文件分别进行读访问和写访问操作。而系统管理员(SA)虽然可能拥有Solaris.admin.usermgr.read授权,但他并没有Solaris.admin.usermgr.write的授权,因此他可以读用户配置文件,但不能写。

下面是一些Solaris的基本授权:

  • Solaris.profmgr.read
  • Solaris.jobs.users, Solaris.mail.mailq
  • Solaris.admin.usermgr.read
  • Solaris.admin.logsvc.read
  • Solaris.admin.fsmgr.read
  • Solaris.admin.serialmgr.read
  • Solaris.admin.diskmgr.read
  • Solaris.admin.procmgr.user, Solaris.compsys.read
  • Solaris.admin.printer.read
  • Solaris.admin.prodreg.read
  • Solaris.admin.dcmgr.read, Solaris.snmp.read
  • Solaris.project.read, Solaris.admin.patchmg.read
  • Solaris.network.hosts.read, Solaris.compsys.read
  • Solaris.admin.volmgr.read

从这里我们看到,Solaris.admin已经定义了一些授权,它们包括文件系统管理(fsmgr)、日志系统管理(logsvc)、端口管理(serialmgr)和用户管理(usermgr)等。

我们还可以利用关键字grant将权限传递给其他用户。一旦关键字grant被附加在一个授权字符串的末尾,即表明该授权可以委托给其他用户。例如,如果Solaris.admin.usermgr. grant授权与Solaris.admin.usermgr.pswd授权配合在一起,则表示口令修改的操作可以由受委托的用户来执行。


关系:
授权和命令的定义关联起来构成了权限配置文件,该权限配置文件再分派给不同的角色用户来使用。

RBAC数据库:

Solaris
共有四个RBAC数据库用于角色的管理
  • 扩展的用户属性数据库(/etc/user_attr):将用户、角色、授权和权限配置文件相关联。
  • 授权属性数据库(/etc/security/auth_attr):定义了授权及其授权的属性,标识了相关的帮助文件。
  • 权限配置文件数据库(/etc/security/prof_attr):定义权限配置文件,列出权限配置文件分配的授权,标识了相关的帮助文件。
  • 权限执行属性数据库(/etc/security/exec_attr):定义了分配给一个权限配置文件的特权操作。

另外,policy.conf文件提供将应用于所有用户的默认属性。

这几个数据库的关系如图:


管理RBAC的一些命令:
smexec:
可以用来创建、更新,以及删除exec_attr命令数据库的行。该命令在执行时必须提供如下三个选项之一:
  • add,添加一个数据库行;
  • delete,删除一个数据库行;
  • modify,更改一个数据库行。
smexec可以有两组参数:授权参数和指定参数。
授权参数对于每个选项都是通用的,它们用于指定如下特性:
  • -domain 管理的域
  • -hostname:port 执行操作的主机名和端口(默认端口是898
  • -rolepassword 角色的认证口令
  • -password 用户口令(不是角色口令)
  • -rolename 角色名
  • -username 用户名
使用smexec add 为exec_attr数据库添加行:
  • -c 指定要添加的新命令名的完整路径
  • -g 指定执行该新命令的有效GID
  • -G 指定执行该新命令的实际GID
  • -n 指定与该命令相关联的特征文件名称
  • -t cmd 指定该操作为一个命令
  • -u 指定执行该新命令的有效UID
  • -U 指定执行该新命令的实际UID
范例:smexec add -hostname localhost -password xyz123 -username root -- -n

Print Manager -t cmd -c /usr/sbin/lpsched -u 0 -g 0

该命令为Printer Manager特征文件添加了一个启动打印服务的能力,它的有效UIDGID都是0(即root)。

smmultiuser:
smmultiuser命令用来执行批处理操作,诸如添加或删除大量的用户。当需要指定的所有用户数据已经存在于文件中时,该命令会非常有用。
smuser:
smuser命令可以用来执行对用户账户的操作,无论是从本地用户数据库还是从NIS/NIS+检索数据,它和smmultiuser类似。但是该命令通常只用来添加单个用户,而不是在批模式下添加一组用户。除了添加、删除,以及修改用户条目,也可以检索并列出现存的用户数据。
它必备的选项除了add,modify,delete外还有一个list
smprofile
smprofile命令可以用来创建、列出、更新及删除prof_attr数据库中的特征文件

smrole:
smrole命令可以执行有关角色账户的操作,它通常只是用来添加单个角色,而不是以批模式的方式来添加一组角色。



更加详细的内容可以参见:http://rhingheart.blogspot.com/2008/02/solaris10_946.html这篇日志。

Solaris10安装篇

虽然现在正在Solaris10上用Firefox发帖子,但是实际上的安装我还尚未试过,因此,这一章的学习是必要的。
--------------------------------------------------------------------
Solaris10的系统要求基本不会有机子不满足的。不过值得注意的是其SWAP分区只有默认为512M
Solaris10可以从http://www.sun.com/software/Solaris/get.jsp处下载。
剩下的课程认为比较难,推荐学完再回头学这个,所以也留在这里待更新

2008-03-08

Solaris10系统概述内容

  现在开始我会不时的帖上一些段风雷的Solaris10红宝书的学习要点。相信有不少需要的朋友。
---------------------------------------
  Solaris 10还具有了一项新的功能,能将针对于Linux环境开发的应用程序的二进制代码,在不经修改和编译的情况下,直接在x86版的Solaris 10环境下执行。
  由于Solaris最初是由伯克利大学的BSD派生出来的,因此,SunOS 4.x(常被称为Solaris1.x)的命令风格与其他的BSD非常相似,只是由于后来改用了System V的版本4(SVR4),才使得SunOS 5.x(也就是Solaris 2.x)发生了变化。

------------------------
SVR4与BSD UNIX的主要差别可以总结如下:

  Root脚本在System V中为/etc/init.d,在BSD中为/etc/rc.d。

  默认shell在System V中为Bourne shell,在BSD中为C shell。

  文件系统数据库在System V中为/etc/mnttab,在BSD中为/etc/mtab。

  内核名称在System V中为/UNIX,在BSD中为/vmUNIX。

  打印系统在System V中为lp,在BSD中为lpr。

  字符串函数在System V中为memcopy,在BSD中为bcopy。

   终端初始化在System V中为/etc/inittab,在BSD中为/etc/ttys。

  终端控制在System V中为termio,在BSD中为termios。
------------------------
  而SunOS 5.x也逐渐被Solaris 2.x名称代替,在Solaris 2.6以后,Solaris 7(SunOS 5.7)开始改变它的版本编号方法,它以过去的小版本编号为基础,采用了单一版本号的形式。也就是说,Solaris的版本序号顺序为2.5,2.6,7,8,9,10。

--------------------------------------

Solaris10采用了新的JDS3(Java Desktop System3),我的SAID装上后默认可以使用GNOME环境,StarOffice,还有Evolution和Firefox。好像默认的是Mozilla。

而且,同Ubuntu7.10一样,采用了和window大部分相似的快捷键定义。

----------------

关于OpenSolaris

  OpenSolaris在2005年6月14日正式开放

  由于Sun公司在开放源码上采用的是OSI促进协会所制定的CDDL(Common Development and Distribution License)协议,所以我们有必要来了解一下CDDL协议的大体内容。下图是CDDL协议与支持Linux的GPL协议的比较。

-------------------------
动态跟踪功能=DTrace=Dynamic Tracing
  开发人员可以使用DTrace分析和优化应用程序性能。DTrace使得测试和调节更为有效,并缩短测试周期,节省了支持成本。
  DTrace还允许编程人员通过观察用户/内核边界之间的控制流来查看其应用程序和内核之间的交互活动。
  DTrace可以做到:
  • 检查用户程序及Solaris 10的行为,快速找出造成系统和应用程序瓶颈的根本起因。
  •   突出系统调节的趋势和模式,以获得最佳性能。
  •  捕捉到软件不同层级之间的性能问题。
  •  找出异常行为的起因。
  •  为普通或复杂的例行程序编写可重复使用的脚本。
  •  指定DTrace收集的数据、采取的操作,以及在哪些条件下采取这些操作。

DTrace虽然是个好用的工具,不过目前来说,我还用不上,以后希望能尽量学习下。

--------------------------------

Solaris 10上的开发工具

  上次用Solaris的NetBeans和SUN Studio可把我弄得一头雾水。

  1.Sun Studio
  如果需要为SPARC平台编译和优化,对生成代码的performance要求较高,Sun Studio也许是最佳选择。
  Sun Studio是优化了Solaris 10和Linux平台上的C++,Fortran开发环境,可在Sun UltraSPARC IV,Intel Xeon和AMD上开发32/64位的应用。

  2.Sun Java Studio Creator可视化开发环境
  这是一个集综合性的开发、调试和部署功能于一身的开发环境,它包括Sun Java System Application Server 8平台版软件。该软件是Sun Java企业系统软件中的一个组件,可用于目标开发和部署平台。

  3.GNU的开发工具
  考虑到成本和其他因素,免费的GNU开发工具无疑是首选。
  Solaris 10发行版本的Companion CD上,包括了很多GNU的开发工具。

  • GCC:C/C++编译器。事实上,GCC可以支持包括SPARC和x86在内的多种平台的交叉编译
  • binutils:gas/ld/ar/nm等二进制工具,可以不安装。
  • gdb:Debug工具,调试代码和反汇编。
  • gmake:GNU的make,可以不安装。
  • vim:编辑器,可以支持C/C++等语言的语法高亮显示功能。
  • coreutils:包含GNU的常用命令,利用ls --color参数可以实现和Linux一样的彩色终端功能。


  4.下载GNU的开发工具
  除了Solaris 10发行版本的Companion CD外,从www.sunfreeware.com站点上也可以下载上述工具的二进制包。
  sunfreeware站点上提供了Solaris 7/8/9/10各主要版本的免费工具的下载。
  以上提到的所有开发工具的安装包,均须用gzip解压后,用pkgadd -d命令来进行安装。

-----------------------------------

同Solaris9相比Solaris10新增的技术:

1.DTrace(Dynamic Tracing,动态跟踪)
  DTrace是一种实时调试和性能调优的工具,传统的UNIX或Windows有一些系统工具可以提供一些系统信息,但缺乏跟踪每个用户和每个进程的能力,DTrace允许编程人员通过观察UNIX用户/内核间的控制流来看其应用程序与内核间的交互活动,DTrace有简单易学的D语言,可构建自定义程序以动态地跟踪系统,并对有关操作系统的任意问题提供及时、简明的回答。
2.N1 Grid Container(N1网格容器)
  利用N1网格容器可进行系统分区,可在Solaris 10中划分多达8000个软件分区,并且每个分区都是一个Solaris 10实例,有自己的CPU、内存、硬盘分区、主机名和IP地址,可独立运行应用程序,有助于用户更好地利用硬件资源,提高系统利用率,同时也提供了多系统所具有的安全性和可靠性。
3.Predictive Self-healing(预测性自我修复)
  这是一种可预测性自我修复技术,可使Sun系统和服务在出现软硬件故障时得到最大可用性。此功能在Sun高端服务器上得到了支持,以后会支持x86平台。
4.新的Sun Java Desktop System
  Solaris 10使用Sun Java桌面系统。
5.系统服务管理
  熟悉UNIX和Linux的用户都知道,系统服务的启动是依靠rc*.d下的脚本来进行的,所有的服务都是顺序启动,而不管其中的依赖关系。查看系统已经启动的服务也只能用ps命令。Solaris 10不再用rc*.d文件中的脚本来进行系统服务的管理,而是通过专门的命令查看或者启动/停止服务,对服务进行统一管理。启动时,Solaris会根据服务之间的依赖关系启动服务。
6.64位Solaris 10操作系统
  Sun已经推出1路和2路,而且即将推出4路基于Opteron处理器的服务器,32位的Solaris 10已经可以运行在Opteron上,64位的Solaris 10已经面世,64位计算能力将被充分发挥。
7.新的硬件支持

  Solaris 10版本布时,来自Sun和第三方IHV的上百种新的硬件将追加到HCL(硬件兼容表)中,在x86系统上安装Solaris 10将会更容易。
  访问网址为http://www.sun.com/bigadmin/hcl/的站点,即可在HCL中了解自己的硬件是否在Solaris 10上可用。
在Solaris 10基础上,Solaris 10 update1又添加了新的功能:
(1)ZFS(文件系统海量文件系统)。
  ZFS支持128位寻址空间和自动数据校验,支持文件系统快照,支持RAID技术的镜像等功能,无需卷管理软件就可提高文件系统的性能。
(2)直接运行Redhat二进制程序。
  允许Redhat的二进制程序在Solaris 10 for x86版上直接运行,而无须更改和重新编译,提供了异种机环境下的互操作能力。Sun公司的目的是在不远的将来,使在所有Linux系统上开发的二进制应用程序都能直接在Solaris系统上运行。

关于添加“添加到XX阅读器"等按钮的方法

  在很多人的Blog上,能看到漂亮的订阅按钮,比如:
订阅到Google
订阅到鲜果
订阅到抓虾
订阅到Live等等
通过使用订阅,我们能极大的方便读者,而且还可以绕过一些墙。比如你可以直接通过订阅来阅读我的blog而不会被撞到墙。
那么,下面就介绍一下方法吧:
首先,Blogger提供了订阅帖子(atom)的链接。我们可以直接使用,当然,我们这次的目的是添加按钮,所以这个链接有用。

2008-03-06

马云?看来值得学习

  3月5日,阿里巴巴在深圳开了场新年网商论坛,马云这个名字在现在的中国似乎如雷贯耳,原因无非是他的阿里巴巴“奇迹”,当然,每个国家都需要他们自己的“美国梦”或者说“硅谷神话”这也是正常的公众行为。不过,毕竟成功者必有其成功的原因。马云如何,我们也可以从他在这次论坛上的演讲中看到。以下我摘录一些:

-----------------------------

今天只是想跟大家探讨一下,作为创业者如何将公司慢慢的做起来,做好、做强、做大。因为我自己觉得,最近一下子名气大了起来,一下子别人觉得阿里巴巴这么厉害,马云这么厉害,特别是上市以后,人们看我的眼光不对劲了。媒体也跟着起哄,我们可能会自己忘掉自己,因为我们年轻,我们是平凡人,会忘记自己,我在创业的时候,不断的提醒我们自己我是谁,我们从哪里来,很多人忘记了自己,找不到自己,11月5日阿里巴巴上市的时候,那天以后大家觉得阿里巴巴真的伟大,怎么会有这么高的市值,我觉得11月5日跟11月6日都是一样的,也没有觉得自己有怎样的变化,但是别人看我觉得变化了,我牛了,我厉害了。

……

今天所讲的一切都是真话,就像做赢在中国的评委的时候,三年前一起策划这个项目,我说你的目的是什么,我觉得中国要起来就需要大批的中小型企业,中国的希望是靠中小型企业和民营企业,需要大批的创业者,就需要价值观和使命,真正做正确的人,他们说是价值观和使命感驱动,我就做了两年多的评委,有的时候做的过程中,也是不容易的,那个人很可怜的,也很勤奋很努力,我认为讲真话很重要的,我就说你不适合创业,那个人很生气,凭什么我不适合创业,你也不鼓励一下。
我是这样觉得的,你不能鼓励别人,忽悠是很容易的,我也可以很虚伪的,你勤奋很努力,坚持几年就可以了,实际上你告诉他的是一条走不通的路,一时是痛苦的,我相信一辈子很多的时候,需要有人跟你讲真话,需要在关键的时刻讲真话。我现在最感谢的大学老师是谁,就有一个老师很奇怪,我在念大学的时候,我是学英文专业的,我在三、四岁就跟老外学习的,我在杭州西湖八年左右,不管怎样的天气,我就抓住老外锻炼口语,我带他们逛西湖,他们教我口语,我的发音是很好的,至少比农村的好很多。我那次考试只考了59分,农村的孩子考了八、九十分,我当时很狂妄,我就找老师说,我的英文发音很准,为什么只有59分,我就找系主任,说老师一定不公平,系主任说,你念一段给我听,我念了一段他说真的不错,我心里就感觉找到了支撑点,结果那个老师说,59分,明年要补考。第二年我去补考他给了60分,他说因为你不知道自己是谁,太狂妄,你的水平也就是59分。
这些年下来后,我感谢这个老师,所以大学唯一有一门功课没有及格,也是我认为最强的功课就是英文的发音,后来通过补考才及格,所以讲真话很重要的,还有就是坚持原则。

……

创业者很重要的是让自己开心,我反正是很能让自己开心的人。请大家第一个记住,不要从外面看一个人,就是媒体上看这个人,这个人太厉害了,这个公司太厉害了,不是这样的事情,至少我不相信,我没有媒体说的厉害。

……

阿里巴巴到今天为止已经是9年了,2009年是阿里巴巴10周年,现在是9周年的企业,目前有七家公司,领头的旗舰是阿里巴巴的B2B是做出口和外贸的,刚刚上市的,因为上市公司要规范,所以我讲话不能讲的太多,第二个是淘宝网现在做C2C,也是帮助中小企业的,我们发现大量的企业,因为中国和美国、欧美的贸易顺差、逆差的关系,加上美国次贷的危机,很多的企业从外贸加工走向内贸,如何展开零售行业,这是企业的使命感,所以我们准备在这方面帮助企业。
第三是支付宝。
第四,我们收购了雅虎中国,还有阿里软件。
第五,口碑网,例如租房屋和吃菜都可以找到的。
第六,阿里妈妈就是帮中小企业做品牌。
很多人说你讲了很多,都不知道你要干什么,我认为做企业一定要专注,我讲的专注跟我讲的这些公司是没有关系的,阿里巴巴到底要去哪里,第一为什么是七家不是八家,在公司里面我是相信的,你们也可以跟着相信,战略制定目标,永远不能超过3个,超过了3个就记不住了,员工也记不住了,每年定目标,将重要的一、二、三确定下来,第四个就要关闭掉。
团队很重要的就是7,这是重要的数字,一个人的管理能力最多只能管七个,如果超过八个时候,七以下没有问题的,超过七一定产生问题,实际上我将阿里巴巴的客户定位从战略的角度来看,战略三个要素,小企业的战略就是活下去,活下去的时候,每个人创业的有三样东西,第一个是你创业的时候要做什么,例如环保纸带,我坚信三、五年可以做成功的。

还有就是干怎么。
第三个就是干多久?
这些需要大家记住的,很多人做企业的时候,我能做什么,我有这个,有哪个,比别人有技术,将自己的强项跟别人短项相比,我比别人有钱,技术比别人好,这样的情况下,我告诉你,世界上比你能做的人太多了。比你会做的人也很多,比你想做的人可能你最厉害,世界上比我富的人很多,但是爱我爱的最深的就是我自己,所以要有梦想。
想清楚梦想后,要确定该干什么,而不是能做什么,我确定了梦想就要去做,还要懂得舍弃,每个人都要舍得,关键的时候,要会退回来的。 第二,今天要像李嘉诚学习,他的经验是永远将钱放在桌子上,跟别人分享。在关键的时刻,做舍得的决定是很重要的,关键时刻谁都敢说,但是谁敢做下去,所以要想清楚,写下来,该做什么,往往重大的公司困难的时候都是该做什么。今天讲的是案例,讲我们走过的心里路程,阿里巴巴上市之前,大家也是感兴趣的,今天跟大家吹牛,水平也就是这样的,讲一下故事还是可以的。
两年内做不开的时候,就会后悔以前的决定。阿里巴巴有今天,很重要的一点是9年以来,我们只做电子商务,没有进入其他的领域,如果说当初为了活命或者是为了早点上市或者是为了套现,完全可以进入到短线或者是游戏,起大早赶集是很害怕的,所以9年中,我自己跟自己讲,反正已经是9年了,不在乎再熬90年了,有这样的心态,才有可能往前前进,永不放弃谁都会说的,真的撞头后是否会放弃。
这个话我自己的体会是很深刻的,创业的人也是这样的,人要成功,要永放弃,人开始进步的时候是懂得放弃,只有放弃才会进步的,有人跟我说,前几年互联网创业的时候,有人很有名,今天不提他的名,他轰轰烈烈的追赶互联网,结果死掉了,说中国电信垄断,这个人不会起来了。他知道这块石头很硬,还要撞开,人跟动物是不同的,就要绕过,电子商务大家都认为中国不可能搞的,没有诚信体系,没有银行支付体系,没有网络的建设,宽带这么慢,大家都相信,中国人讲关系和喝酒,才会做生意,怎么可能在网络上做起来,所有人都这么讲,我坚信一定会实现网络的交易,我们根据五个分析来讲,中国的电子商务缺少了诚信体系、市场体系、支付体系、搜索和软件,没有这些怎么办,就建起来,将它建设起来,创业者等到所有的条件都准备好,就不会是你。
上当往往是因为自己太贪,好事情放在自己的眼前,凭什么别人不做,让你做,你比别人勤奋吗,没有这样的运气,这个时刻的时候请大家记住,创业者会有各种各样的诱惑、机会如何往前挺进,对于阿里巴巴这么多年走过来,根据三个战略确定后,我就确定建立了这七家公司,完全是中国缺少这些公司。
给大家讲一个故事,例如支付宝是如何起来的,不能做,因为这是金融产品,但是跨国企业进入支付领域,中国的企业如果不进入支付领域,跨国公司如果进入的话,就会成为别人的牺牲品,现金如果不抓住就没有用的。我在达沃斯开会的时候,就想什么是领导力,就是做坚定的事情,不伤害国家和客户的事情,就大胆的去做,我就做了。我就决定立刻的做,还要积极的投入,张三买东西,李四不给,就交给支付宝,如果上当受骗100万元,我就赔100万元,别人说我是忽悠,我真的将钱放在哪里,准备赔的,结果越做越好,我将所有的利息和可能存在利息,都放在边上作为应付款,我们将体系做得干干净净的,我一分钱都不拿,你什么时候检查都给你,而且透明的。这样的话,使得政府觉得你不做谁来做。只有这样做的干净、透明该做什么就做什么,才可以不断的坚持走下去,企业就可以睡得着觉,还要让员工和亲戚睡得好,就要做正事,网络上有很多的话,实际上都不是我说的,也有很多我的书,我都不知道哪里来的,很多的妙语都不是我来的,有的人说,我跟雅虎第一篇理论懒人理论,文章写的很好,结果不是我说的,有的人就是看了这样的文章后加入我的公司。一篇文章连续超过四个形容词一定不是我说的,我没有这么多的形容词。
就是说,在整个运营体系中,使命感驱动,接下来讲企业发展观中的领导者是非常关键的,例如我是阿里巴巴的领导者,必须做中国电子商务的开拓者,这是很重要的问题,想做什么,该做什么,做多久,我准备做多久,游戏让更多的人去做,互联网三大指标,第一个是意识形态,这一点我看不出来,全世界的意识形态会统一起来,我看不出来,留给别人。新浪、搜狐做得很好,就让他们做。
第二,娱乐行业,就是典型的游戏、腾讯做得比较好,但是我总觉得游戏不能改变互联网产业,人不能总是玩游戏,有的游戏还是可以的,商业是可以沟通全世界的,我就想做多久,电子商务这块,未来十年一定是主流的市场,一定会越做越好,困难也会越来越多,竞争也会越来越多。
客户是谁,回到刚才的问题,锁定自己的客户,我们的客户是中小企业,创业者,这是我的定位。我为什么锁定中小企业,如果大企业来,我原则上不做这个生意,没有办法做,中小企业用阿里巴巴网站的时候,可能进来的时候是三、五百万,可能后来变成了几千万或者是一亿元,但是我就会说,你变成了一亿元就要找别人去了,我只是做中小企业和电子商务,不能教小学的时候,中学也可以的,大学也包揽下去,我们的水平就是这样的,因为我们要想清楚客户是谁的情况下,就要锁定市场,去做该做的事情,在利益和诱惑的面前说NO,我反正是不干的,要学会说NO。
这是我觉得,一个企业在过程中,一定要想得到的。
为什么领导者很重要,不提升,不学习,不仅不,永远不要相信你的企业会学习、提升和进步的。我现在有今天,企业发展到9000人,除了我刚才讲的三大要素外,一个很重要的要素是,我可能一辈子学的是英文,我的机会是很好的,这几年见了很多优秀的人,从高科技的领域例如比尔盖茨,还有管理的,投资的巴菲特、领导的克林顿,跟他们成为了朋友,跟他们进行沟通,第一次看到克林顿的时候,我就想这个哥们怎么这么想问题,这么厉害的总统,跟你讲话的时候,就是一个大哥,一个朋友,眼睛盯着你,一般的处长和局长都是眼睛往上看,他盯着你看的时候,你就会觉得伟大的人作为平凡的人的时候才是伟大的。我们再能干,如果我站在克林顿面前,在领导和国家治理上我算是什么,我就要向他学习,比尔盖茨对未来的畅想,索罗斯对投资的理念,企业和社会的第一责任,不是为了赚钱不择手段,有的企业搞的产品很好的,但确是是欺骗人的,结果每年捐献钱给别人,就变成了大善人。你见到这样的人后,思考和反思,人是平凡的,没有一个人生下来就是伟大的。
我认为领导者是不断的学习的,今年感受最深的一个故事,去年的冬天我去了达沃斯,我被一个组织邀请参加他们的组织,这是奇怪的组织。17年以前大家知道达沃斯是世界经济论坛,是欧洲的一个小城镇,小城镇每年都有总统七、八十个,部长也有很多,我的名气比他们还要大,因为部长太多了,小城镇上每年都要开这个会议,我去年被邀请参加了一个组织,他们说17年风雪交加的晚上,晚上开会后,大家开聚会,忘记了邀请两批人,一批是媒体记者,一批是高科技创始者,他们发现所有人去吃饭了,他们很生气,他们就说以后不参加达沃斯的晚饭,他们就发誓,以后他们开会就自己吃饭,自己搞活动,自己要搞得很快乐,顶尖的技术人员越来越多,但是记者越来越少,结果他们就请我参加,我不懂技术,他们讲什么我也不懂得,他们说中国就我一个,进去后发现诺贝尔奖获得者有六、七个,谷歌创始人和比尔盖茨都在里面,大家都坐房间里面,请大家用五个字描绘自己是谁。
今年很有意思的是2004年的世界经济学的诺贝尔获得者,他问我,你如何看待中国的经济,边上有一个老头是美国宇航局的人我来说看看,中国的水储量是多少,煤储量是多少,根据中国的排污量是多少,我认为中国的经济不能持续,我认为结论是很奇怪的,这个人怎么会记得住这些数字的,后来知道他们科学界的精英,我开始讲的时候就开始胡扯了,结果诺贝尔的经济学家拿着酒杯认真的听,我知道自己在胡扯,经济学家听我,看着我讲的时候,是那么的求真,那么认真,所以我就知道金庸的小说老顽童是怎样的,换句话来讲,经济学家听我讲,知道我在讲什么,我心里就有一种感动,这些人的功力越来越深厚,你在员工面前将自己当做领导的时候,别人不会将你当做领导的,这是今年感受最深刻的,看着他的眼神,我心里是有一种震撼,满头银发的诺贝尔经济学家看着我不懂得经济讲经济的感觉,你的员工听你讲的时候,你是怎样感受的,这就是我们的领导者。几年前我来深圳讲这样的话,今天还讲这样的话,领导最关键的因素就是眼光、胸怀和实力。这些年一直坚持这样的想法,
领导的眼光不开,老是想跟高手对比的话是不行的,我们跟别人比赛是看谁看得远,谁看得高,胡雪岩讲生意越来越做,关键是眼光,眼光看得更远,就更远,如果只想成为中山第一大的企业,或者是做成中山或者是广东,如果希望成为广东或者是全世界最大的企业,你该做的事情就起来了,万元户建了一栋楼我在村里最牛,乡长见了都要点头是没有用的,企业要用各种各样的人,往往有能力的人,都有一点古怪,所以胸怀中要容纳千军万马,领导者最怕的是要跟员工比谁聪明,该将自己比傻了,今天不讲电子商务,因为讲不过他们了,他们天天用,我想的是淘宝网和支付宝怎么办,具体来说,反馈怎么做,功能是如何做的,我都懂的话,我不是超人就是骗子,每个阶段的领导者,每个领域都有人比你懂,我下面的副总裁一定比我聪明,因为他90%的时间想如何做市场推广,我要装作比他能干是不可能的,领导的胸怀要包容,说起来容易,做起来很难很难的。
我觉得这两年我让各种各样的人加入了阿里巴巴,我们支付宝的总裁和创始者就是从广东的,从来不知道什么是支付宝,也不知道银行体系,他是销售和服务人员,我说你到杭州去做支付宝公司,这是纯粹银行的体系,为什么请不懂得银行的人去做,原因很简单,我需要一个以服务为导向,需要一个人明白客户的痛处,我不需要请一个银行的人,因为他做的还是一个银行。如果请银行的人,还会做很多的银行,银行的很多游戏这个不能做,那个不能做,结果什么都不能做,请不是银行的人就可以做出来,需要的是严谨,不会出现体系的问题,他的助手可以是银行的,领导者不要什么都懂得,要知道请怎样的人,找对人是关键的,找专家的话,最好是助手,专家如果当领导的话,如果请银行的大头来一定会做出另外一个银行,就没有意义的。

……

竞争的时候不能情绪化,竞争是快乐的,否则一个人多孤独,所以一定要培养竞争者竞争过程中要讲究游戏规则,这是人制定的,不能做伤害别人的事情,这些年我没有骂过易趣的领导和干部,中国的竞争过程中,竞争就是下棋,可能下棋很臭,但是不能骂人臭,下棋就是快乐,在此竞争过程中,不断的锻炼自己的胸怀和团队,不要将竞争看得很重要,竞争是企业经营过程中的乐趣,总要找到对手,例如阿里巴巴的B2B做得强大,没有竞争对手,怎么办?这是灾难,所以要找新的榜样,例如微软和沃尔玛和谷歌,不然要跟谁比较,不要跟同业比,例如塑料行业,如果相互竞争,就很难赢的,你想的他也想到了,你们都很懂的,创新永远在业外,政府的创新在企业里面,企业的创新是在政府里面的。

制定团队的时候,一定要制定价值观,一定要约法三章,小公司办到大公司的时候,就会觉得今天大了,什么都可以做了,很多的事情,希望大家要记住,运营大的企业要像有小企业的思考,但是要有大企业的眼界,任何的小企业都是这样走出来的,谁也不是说一下子起来就会很强大的,今天要想讲的东西很多,团队最关键的是要跟他们达到充分的沟通,一个埋怨上级的人永远不能提升他,例如说老板是混蛋,再混蛋做你老板也是有道理的,埋怨平级的人不是团队的人,埋怨下级的人,要让他离开,老是说别人的人,就很难提升的,因为有一天也会离开的,埋怨边上的人,也是混蛋,我们不能请这样的混蛋。
结果是请大家多花一点时间在流程上,有很多人看重结果,例如今年要完成2000万元,以结果为目的的话,你的团队是很累的,永远将二、三千万作为结果的时候,我做哪些事情才会变成二、三千万,不要这样的思考,今年二、三千万元,所有人盯着的是钱不是服务,而是要今年做怎样的事情,目标提出后,管理层要监控,所以战略、团队、结果跟大家分享,阿里巴巴走到现在为止,是我觉得很朴实也很简单的,但是做的过程中,确实是很艰难的,我相信中国一定会出现世界级的企业,中国人很聪明,一学大家都会,真的干的时候要反思这些问题。

-------------------------------
以上就是他这次演讲的一部分,虽然我目前还不是十分可观,我也尝试一些尽量客观的概括下这里引用的几段:

  • 阿里巴巴上市了,名气一大,人们就觉得马云很厉害了,媒体也跟着起哄,这种时候马云当心的是他们可能会忘掉自己是谁。
  • 他强调他在说真话。忽悠别人很容易,但是,虽然真话一时可能会给对方留下痛苦,但是真的很需要真话。
  • 马云认为他很能让自己开心,而且告诫我们不要从媒体上看这个人,那样会看起来很厉害。
  • 马云按重要顺序列举了他的几个公司,分别是阿里巴巴,淘宝,支付宝,雅虎中国,口碑网,还有阿里妈妈。
  • 马云认为每年要把制定的目标前三个写下来,后面的关闭掉。
  • 马云认为,一个人能管理的团队超过7人就很危险
  • 马云在战略上把阿里巴巴的定位为活下去,要做什么,要干多久。
  • 马云再次深刻警示,很多人总拿自己的强项和别人的弱项比,但是,世界上比他们厉害的人太多了,所以要有梦想。
  • 马云强调要懂得舍弃,比如学习李嘉诚,永远将钱放在桌子上,跟别人分享。把该做什么写下来,比如阿里巴巴,一直没有偏离自己的定位。他认为上当往往是因为自己太贪,他建立那七家公司全部都是因为基于阿里巴巴的战略需求。
  • 马云说道支付宝的建立,因为他的定位是坚定的不做伤害国家和客户的事情,把100万摆在桌上等着赔。
  • 马云说,网上不少所谓“马云说”实际上都不是他说的,还有不少他的书,他都不知道哪里来的。
  • 马云认为企业发展观非常关键,例如他的阿里巴巴定位为中国电子商务的开拓者,因此,游戏与所谓意识形态就给别人去做,就是所谓的游戏让别人去做。
  • 马云说道他的反思:人士平凡的,没有人一生下来就是伟大的。
  • 马云说道今年感受最深刻的事件的感受:领导者的关键因素就是眼光、胸怀和实力。要能看得高远,要有容千军万马的胸怀。
  • 马云认为,竞争的时候不能情绪化,竞争是快乐的,而且要讲究游戏规则,要找榜样。
  • 马云认为制定团队的时候要制定价值观,运营打的团队的时候要像小企业一样思考,但是要有大企业的眼界,只会埋怨他人的人是没用的。要让团队多花时间在流程上。
--------------------------------------------------------------------
  没写过还真不知道,要客观的概括其实还真不容易,关键的问题看来似乎在于我们常常喜欢自作聪明的添加自己的观点。当然,我不是马云的崇拜者,阿里巴巴或者淘宝也绝不是什么完美的公司,或者说神话般的公司,但是,不可否认的是,至少到现在,它还很成功。因此也就值的我们来观察它,就目前来说,我还不能算熟悉阿里巴巴或者马云旗下的公司情况。不过,至少还能在自己的博客上抒发一下自己的看法:
  说实在话,去年开始就很鄙视所谓“马云经验,马云的书”等等,原因很明白,别人不过是一个刚刚上市的公司而已,只有区区9年的寿命而已,在还未面临过下坡的曲折,在还未面临过高层改组与市场危机的情况下,就打出特出所谓“成功经验”很明显是摆着嘘头骗人眼球。这次之所以会看这份演讲稿也只是因为被它的标题“应对次债危机”所吸引。
  不过,看完之后我倒对马云有了重新的认识,第一,这个人实在,第二,这个人专注,第三,这个人有胸怀,第四,这个人深切的从成长中获得的经验中成长。
  他很强调时刻认清自己的斤两,也许,如果以某些恶心的什么心理分析来说,说不定是他什么大学时代的创伤使得他在这方面十分警惕。不过,从实际的情况来说,阿里巴巴专注于它的定位,马云能吸引一大批人才,而且用着讲真话的信念。或许都是得益于他的这种观念。正因如此,所以才有不少人帮助他,他也才得以不断获得“好运”。
  马云找到了他的阿里巴巴的核心业务,所以专注的在此拓展,并且达到现在的规模,这让我们充分的想起Google广泛的业务。但是,实际上,Google那份“来自创始人的信”中,两位创始人同意也强调了他们的核心业务——搜索引擎。Google鼓励创新,并且支持创新,几乎可以说,我们能想到的用互联网可以干的事Google几乎都有涉及,不过,Google从来都没有减少在他们的核心业务上的投入,记得好像有人说过Google是个广告公司,搜索只是为了广告提供便利。也许从某一方面说这种说法有道理,因为广告收入是Google的核心收入,但是,从Google现在的各种产品来说,几乎没有一项完全离开了它的索引技术,所以Google应该还是算作以搜索为核心的公司。同样,因此Google才能在9年中成长为市值超过1000亿美元的公司,
  所以,不难看出,在互联网这个背景下,能够坚持自己的核心定位,并且不断发展它的公司,更易获得成功。
  这个演讲里最有意思的就是马云说网上所谓的“马云说”几乎都不是他说的。。。姑且相信发布这份演讲稿的淘宝比较有信誉,所以我们就相信引用的文章里的马云说是马云说的吧。
  谈到在达沃斯的经历,我认为马云说的那句“你就会觉得伟大的人作为平凡的人的时候才是伟大的”真的切中要害,实际上,如果当我们在一定领域取得一定成就的时候,很自然的就会变得飘飘然的忘乎所以了,也许该说是都不知道自己是谁了,我们是否能够时刻的认清自己,是否能够时刻的自省呢?回想最近一年的经历,对照此话,我深感自愧:自以为很厉害,傲气十足,盛气凌人。只是因为身边没有那种十分明显远超自己的人,就忘记自己是谁了,马云的经历与感言,确实惊醒:“这个世界上比你厉害的人太多了。”而且,我认为应该在提到一点:
  这个世界上自以为十分厉害的人也太多了。
  马云说道经济学家那段我还是看不得他要表达的意思,不过,从后面的一些话我们还是能得到不少警示的。
  领导者最怕的是要跟员工比谁聪明,该将自己比傻了。
  我都懂的话,我不是超人就是骗子,每个阶段的领导者,每个领域都有人比你懂,我下面的副总裁一定比我聪明。
  我要装作比他能干是不可能的,领导的胸怀要包容,说起来容易,做起来很难很难的。
  这些年我没有骂过易趣的领导和干部 。
-------------------------------
马云是值得学习的,但不能模仿。我期待着阿里巴巴的危机。也期待着马云能和他的团队战胜它。

2008-03-04

MatLab

  C和MatLab都是学校安排的课程,虽然并非自发的需求学习,但是既然是课程,学好也是应该的,这个分类就作为手册式的信息快速查找用吧。
---------------------------------------------------------------
说明:
MatLab中的注释用%
变量可以直接赋值。若用户无赋值则使用系统内置的变量ans
内置变量realmax、realmin、Inf和NaN用于浮点计算中的异常处理。realmax和realmin是以双精度数储存在计算机中的最大值和最小值。变量Inf表示“Infinity”,NaN表示“not a number ”
以下是系统自带变量的简表:

变量名     含义
ans       当表达式的值未赋给某个变量时, 系统自动将它赋给ans
eps       浮点数精度
i,j        单位虚数
pi        圆周率
realmax     最大正浮点数
realmin      最小正浮点数
Inf        无穷大
NaN       不是一个数,例如 0/0的数值
---------------------------------
MatLab内置的函数:


名称         函数
三角函数 sin cos tan cot
反三角函数 asin acos atan acot
开平 sqrt
以e为底的指数 exp
自然对数 log
以10为底的对数 log10
绝对值或共轭复数 abs
符号函数 sign
元素和 sum
求多项式的根 root(c)
----------------------
矩阵与向量
行向量与列向量可以通过转置来实现,转置运算符为“’”如:a=[1,4,5];a=a'
输出:
a =
1
4
5
-------------------------
  diag命令既可以用于创建对角矩阵,也可以用于引用对角线上的元素,创建对角阵时,要求输入的变量为一个向量,这个向量可以先定义,也可以在输入的参数中直接定义,下面的两个命令得到的都是同一个结果:
>>M=diag([1 2 3])
>>a=[1 2 3];M=diag(a)
M=
1 0 0
0 2 0
  0 0 3
要引用矩阵对角线上的元素,同样可以使用diag函数,此时输入的变量为一个矩阵名: >>w=diag(M)
----------------------------
处理矩阵的函数

函数 返回值
diag 对角矩阵或对角阵中对角线上元素值的索引
eye 单位矩阵
ones 全1矩阵
rand 随机矩阵
zeros 全0矩阵
length 返回向量中元素的个数
size 返回矩阵的行数与列数
reshape 矩阵的变维
----------------------------------
单位阵函数的用法:
eye(n) n阶单位阵
eye(m,n) mn的单位阵(即主元为1,其余元素为零)
eye(size(A)) 与A同阶的单位阵
------------------------
reshape(被变矩阵,新矩阵的行数,新矩阵的列数)
-----------------------
冒号运算符:
 可用于创造变量或和下标一起引用矩阵中的元素,使用冒号运算符创建向量有两种形式:
v=start:end
v=start:step:end
 如果要创建列向量可以加个'号,比如:A=(1:5);可以创建一个列向量(1 2 3 4 5)’
-----------------------------
 冒号运算符也能作为通配符来引用行向量或列向量,例如A(:,1)表示引用矩阵A的第一列,而A  (2,:)表示引用矩阵的第二行,A(2:4,1)表示引用矩阵的第2行到第4行的第1个元素。
 B(1,:)=2:2:8表示将矩阵B的第一行赋值为2 4 6 8
-----------------------------
除此之外,冒号运算符还可以将矩阵转化为列向量,例如:
>>E=[1 4;2 5;3 6]; % 定义一个32的矩阵
>>v=E(:) % 得到一个列向量v=[1 2 3 4 5 6]’
>>w=E(:)’ % 得到一个行向量w=[1 2 3 4 5 6]
--------------------
删除元素
通过给矩阵中的元素赋空值的办法可以删除单个元素或一组元素。当定义一个向量x后,使用x=[]可以清除x中的所有元素,用下标能够清除所选定的元素,例如:
>>x=1:5; % 创建一个含有5个元素的行向量
>>x(3)=[] % 给第3个元素赋空值,使其被删掉
x=
1 2 4 5
冒号运算符可以删除一组元素,例如将上面的命令改为x(2:3)=[]将删除第2个和第3个元素,命令x(1:2:5)=[]会删除1、3、5位置的3个元素,即步长为2。
如果要对矩阵进行删除操作,则至少要删除一整行或一整列,例如,命令A(:,1)=[]表示删除了矩阵A的第1列。
--------------------------------
矩阵的运算
如下表,有几点需要注意:
(1)A的n次幂相当于n个A连乘,这要求A必须是方阵;
(2)求向量的内积的命令dot中含有两个参数a和b,如果a和b同为向量,则不管它们是否同为行向量或列向量,都按照求内积的方法求值,若a和b同为矩阵,则按照他们的列向量作内积。
含义       命令
矩阵的左除和右除     A\B=B、A/B=A
矩阵的幂       A^n
转置        A’
求向量的内积      dot(a,b)
求方阵A的特征多项式    poly(A)
求方阵A的行列式的值    det(A)
求矩阵A的迹      trace(A)
求非奇异方阵A的逆矩阵    inv(A)
求方阵A的特征值和特征向量   eig(A)
生成符号矩阵      sym
----------------------------
向量化和数组运算符
Matlab中所有的内置函数都已经向量化,也就是说,给定输入向量后,函数对向量中的所有元素进行操作。
  在计算表达式y=cos(x)的值时,cos函数对x中的每一个元素都进行运算,最后得到的y是一个向量。
  为了支持向量化,Matlab中定义了一个新的运算符,叫做数组运算符,它对两个行数、列数相等的矩阵或向量的相应元素进行运算。计算结果是产生和这两个矩阵有相同行数和列数的新矩阵。数组运算符是用句号“.”和传统的运算符“*”、“/”等组合。点乘写作“.*”,点除写作“./”

关于正则表达式的简介

  早在高二的时候,我和我的朋友就在编写一个项目的时候用到了正则表达式匹配来管理服务器内的文件和编辑它们,可惜一直没有机会去看一看一些正则表达式的介绍,正巧这次在微软的VBScript手册中看到了一份,稍微整理了其中一些不错的介绍帖在这里。

早期起源
  正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
  1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。
  随后,发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的qed 编辑器。
  如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。


使用正则表达式


  在典型的搜索和替换操作中,必须提供要查找的确切文字。这种技术对于静态文本中的简单搜索和替换任务可能足够了,但是由于它缺乏灵活性,因此在搜索动态文本时就有困难了,甚至是不可能的。
  使用正则表达式,就可以:



  • 测试字符串的某个模式:例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。

  • 替换文本:可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。

  • 根据模式匹配从字符串中提取一个子字符串:可以用来在文本或输入字段中查找特定文字。

  例如,如果需要搜索整个 web 站点来删除某些过时的材料并替换某些HTML 格式化标记,则可以使用正则表达式对每个文件进行测试,看在该文件中是否存在所要查找的材料或 HTML 格式化标记。用这个方法,就可以将受影响的文件范围缩小到包含要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则表达式来查找并替换那些需要替换的标记。


支持正则表达式的语言

  Ruby,Perl,Python,C#,Java,VB.NET等都支持正则表达式,C++需要第三方类库才能支持。

  目前,著名的并且很强悍的库有ATL CATLRegExp,GRETA和boost库。在VS2005中可以直接使用 System.Text.RegularExpressions命名空间的 Regex 类分析简单的字符串,参见:http://msdn2.microsoft.com/zh-cn/library/a9z6549f.aspx

其他三个库的使用方法可参考:

http://www.vckbase.com/document/viewdoc/?id=1138

http://www.vckbase.com/document/viewdoc/?id=1256

另外这里还有一个例子:

http://www.vckbase.com/document/viewdoc/?id=1636


正则表达式语法


  一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
下表是元字符及其在正则表达式上下文中的行为的一个完整列表(我的Blogger发布表格会严重的错误,所以只能用图片,点击打开图片可以看大图):


优先权顺序
在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先权顺序来求值。
下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序:

操作符           描述
\              转义符
(), (?:), (?=), []        圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}    限定符
^, $, \anymetacharacter   位置和顺序
             “或”操作

--------------------------
使用正则表达式:

可以参考http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm这个链接的内容。本文不讨论用法。