蹲马步

vi和vim问题一则

它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。
vim的这些优势主要体现在以下几个方面:
1、多级撤消
我们知道在vi里,按 u只能撤消上次命令,而在vim里可以无限制的撤消。
2、易用性
vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台。
3、语法加亮
vim可以用不同的颜色来加亮你的代码。
4、可视化操作
就是说vim不仅可以在终端运行,也可以运行于x window、 mac os、 windows。
5、对vi的完全兼容
某些情况下,你可以把vim当成vi来使用。

===============以上出自百度知道===============

以上百度知道,得到的结论是 vi没颜色 vim有颜色加强版

scrt打开文件发现是黑白的,不是彩色的,只在root用户下是,但是test下不是,很奇怪
处理操作 设置了/etc/vimrc文件 颜色配置

if &t_Co > 2 || has(“gui_running”)
syntax on #有颜色
set hlsearch #查询高亮
colorscheme evening #配色方案 evening
endif

配色方案在这里

[root@test ~]# ll /usr/share/vim/vim70/colors/
total 144
-rw-r–r– 1 root root 2588 Jun 12 xxxx blue.vim
-rw-r–r– 1 root root 2809 Jun 12 xxxx darkblue.vim
-rw-r–r– 1 root root 548 Jun 12 xxxx default.vim
-rw-r–r– 1 root root 2399 Jun 12 xxxx delek.vim
-rw-r–r– 1 root root 2812 Jun 12 xxxx desert.vim
-rw-r–r– 1 root root 1666 Jun 12 xxxx elflord.vim
-rw-r–r– 1 root root 2476 Jun 12 xxxx evening.vim
-rw-r–r– 1 root root 3238 Jun 12 xxxx koehler.vim
-rw-r–r– 1 root root 2460 Jun 12 xxxx morning.vim
-rw-r–r– 1 root root 2006 Jun 12 xxxx murphy.vim
-rw-r–r– 1 root root 1037 Jun 12 xxxx pablo.vim
-rw-r–r– 1 root root 2673 Jun 12 xxxx peachpuff.vim
-rw-r–r– 1 root root 2174 Jun 12 xxxx README.txt
-rw-r–r– 1 root root 1239 Jun 12 xxxx ron.vim
-rw-r–r– 1 root root 2720 Jun 12 xxxx shine.vim
-rw-r–r– 1 root root 2419 Jun 12 xxxx slate.vim
-rw-r–r– 1 root root 1627 Jun 12 xxxx torte.vim
-rw-r–r– 1 root root 1840 Jun 12 xxxx zellner.vim
[root@test ~]#

但是我配置了/etc/vimrc全局变量以后,但是我使用vi看文件还是黑白的

最后我发现了
which vi
/bin/vi

which vim
/usr/sbin/vim

一般配置都是vi alias vim去

vi和vim区别是vim是vi的加强版 vi没有颜色 vim是彩色的,所以我无论如何设置vi都是黑白的

因此在/etc/profile里面增加了 vi 别名到 vim就可以了

重新登录服务器,发现已经可以看到vi编辑文件看到彩色了

debian初体验

总是在RedHat环境中作业,很少尝试其他的操作系统,而且rpm的依赖关系实在太过复杂,很多时候让人欲哭无泪,而debian的apt-get有这强大的功能和完善的依赖解决方案,因此在我自己的测试主机上,我决定装一次debian试试感受。

安装的过程是痛苦的,并不是操作系统本身的安装操作很复杂,而是各种倒霉的问题出现
1,安装光盘无法识别
2,u盘太烂,无法启动
3,官方镜像是cd的,我只有dvd
4,不会网络安装,最后使用tftp32从windows dhcp+tftp 安装 linux
5,各种找网上的方案,一度怀疑自己的记忆力和理解能力,最后误打误撞,总算开始安装
6,网络不畅通,导致网络安装多次终止
7,国内,国外的镜像站点太垃圾了

经过一系列的痛苦操作,终于安装好了,万岁。
apt-get学习了下使用,安装包非常方便,安装好桌面和mp3播放器,正常播放我的mp3文件非常好,debian很好很强大!

http://www.debian.org/

debian logodebian name

svn 命令使用细节

在debian 5.0.3下安装了apache+svn以后,在命令行下使用svn的指令来进行svn的提交,检出等等操作。

网上有很多对类似命令的解释,所以也找了不少,最后发现一个问题,命令介绍的挺多,但是一些细节就有问题。

首先使用svn指令,必须要在你已经检出的目录中,比如说:
http://mysvn/svn/test 这里是你的svn版本库
如果检出 执行 svn co http://mysvn/svn/test
那么你会发现在当前目录下有个 test目录生成,这就是你从svn的版本库里面检出的test目录

这时候,你进入,注意,你要进入这个test目录,才行,只有在你进入了这个目录后,你才能执行后面这些命令
比如 假设test/test.php这个文件,你修改了这个文件,你要提交,那么执行
svn ci -m “edit test.php” 这样就会显示提交成功,版本号等,假如你不在test这个目录中,会提示错误! 假设你不在test目录中 你也可以制定目录
比如说 svn ci -m “edit test.php” test/ 假设你在刚才那个执行检出时候的目录里面

再一个问题就是 增加文件删除文件,要使用svn add / rm 来进行,不然就破坏了这个版本库,因为假如你直接使用操作系统指令,删除增加文件,是没有修改当前你检出的版本库的某个文件列表,本地这个活动副本是不知道你做了修改的,所以你要使用svn的指令来增删,通知svn的活动副本你增加了、删除了文件,它才会在检入的时候提交你的变更。

svn logosvn ch

磐正8RDA3+ 板载DEBUG灯 报错详解

今天弄我大学时候的电脑 发现报警 C1 后来发现是内存问题 换了个位置 正常了。

百度的参考资料如下:
CF 测试 CMOS R/W 功能性。
C0 早期的主板设定初始值: – 禁用 shadow RAM – 禁用 L2 cache(SURPER 7 构架及后期兼容构架) – 检测基本 chipset 寄存器。
C1 检测内存: -Auto- 检测DRAM(动态随机存取储存器)大小,类型 和 ECC。 -Auto- 检测L2 cache (SURPER 7 构架及后期兼容构架)
C3 映射BIOS编码到DRAM。
C5 允许chipset将BIOS复制到地址为E000& F000的shadow RAM。
01 将Xgroup编码定位在内存地址中的1000到0
03 初始化Superio(超级输入输出)_Early(响应)_Init(启动)开关。
05
3.将空白输出到荧屏。
4.清除CMOS错误。
07
1.清除 8042 接口。
2.初始化 8042接口自检。
08 1.检测特殊的键盘控制器型号为Winbond 977 系列超级I/O(输入/输出)芯片。
2.允许使用键盘接口。
0A 1.禁用PS/2 老鼠接口.(可选)
2.在端口和交换接口检测完成后自动检测键盘和鼠标端口。 (可选)
3.重置键盘在发现型号为Winbond 977 系列超级I/O输入/输出芯片后。 0E 检测内存地址为F000h段图像以证明是否它支持 R/ W.如果检测失败,机箱扬声器将发出警报。
10 自动检测FlashROM类型以读取合适的FlashROM R/W 编码。 在ESCD和DMI支持的情况下进入运行时间和区域的地址位F000。
12 使用步骤1’s 运算方式以确定CMOS电路的接口。 .同时设定电源即时状态频率, 然后检查是否超出范围。
14 将主板程序默认值导入主板。 主板默认值是OEM 客户的MODBINable 。
16 初始化 Early(响应)_ Init(启动)_ Onboard(板载)_ 晶振开关。
18 检测CPU 包括商标在内的信息, SMI类型 (Cyrix 或Intel) 和CPU处理器数据的水平。 (586 或 686)
1B 初始化中断无线引导平台。如果没有特殊的标记,所有H/W中断指向对SPURIOUS_ soft_ HDLR 的 SPURIOUS_ INT_ HDLR&S/W中断。
1D 初始化EARLY_ PM_ INIT 开关。
1F 装载键盘阵列。 (笔记本平台)
21 HPM设定初值 (笔记本平台)
23
1. 检查RTC值的有效性: e. g.a. 地址为5Ah的值 RTC是有错误的值。 2. 在BIOS中装载CMOS设定。 如果CMOS检测失败,使用默认值替代设定值。
3. 为 PCI& PnP的使用准备BIOS资源分布图。 如果 ESCD 是有效的,进入 ESCD’s初始设定值数据中读取。
4. 初始化板载时钟频率发生器。 禁用没有使用的PCI& DIMM插槽。
5. 早期的PCI设定初始值: – 列举PCI总线序号。 – 分配内存&输入/输出资源。 – 寻找一个有效的视频图形适配器设备&视频图形适配器BIOS, 而且将它放入C000:0.
26
1.超频错误(可清空CMOS)
2.没有安装显卡或显卡损坏
3.显卡版本和显卡BIOS版本不匹配 27 初始化INT 09缓冲。
29
1. 分配CPU内部MTRR(P6&PII)为 0- 640内存地址。
2. 初始化 Pentium级CPU的APIC。
3. 按照早期主板设定COMS。 例子: 在主板上的IDE控制器。
4. 测试CPU速度。
5. 激活显示适配器BIOS。
2D
1. 初始化多语言支持。
2. 在屏幕上显示信息, 包括BIOS名称, CPU类型, 和CPU速度。
33 重新设定键盘除了采用 Winbond 977 系列超级输入/输出芯片以外。
3C 检测8254端口 3E 检测通道1以BIT为数据单位通过8259端口中断。 40 检测通道2以BIT为数据单位通过8259端口中断。 43 检测8259的功能性。
47 初始化EISA插槽
49
1. 以双字节64K数据包检测内存容量。
2. 为 AMD K5 处理器写入配置。
4E
1. 分配M1处理器的MTRR
2. 为P6级别的CPU初始化二级缓存&程序可使用的缓存范围。
3. 初始化P6级别CPU的APIC值。
4. 在MP平台之上, 在每个处理器之间允许以较小的范围调整缓存以防止冲突。
50 初始化通用串行总线(USB)
52 检测全部内存 ( 清除所有的扩展内存到0)
55 显示CPU序列号 (多处理器平台)
57
1. 显示PnP LOGO。
2. 初始化早期的ISA PnP。 – 分配CSN到每个ISA PnP设备。
59 初始化硬件病毒保护。
5B (可选特性)在使用软盘驱动器进入AWDFLASH.EXE时显示相关信息(可选)
5D
1. 初始化Init(启动)_ Onboard(板载)_ SuperI/O 开关。
2. 初始化Init_ Onbaord_ AUDIO音频开关。
60 全部完成后进入设置界面;i. e.直到PSOT自检完成用户才可以进入CMOS设置界面。
65 初始化PS/2接口鼠标。
67 为激活系统提供内存信息: INT 15h ax=E820h 69 打开 L2 cache(二级缓存)
6B 主板正按照系统安装的部件的描述信息进行设置及关联。
6D
1. 为ISA PnP 设备分配资源。
2. 在系统部件设置为“AUTO”时自动为COM口分配端口值。
6F
1. 初始化软盘控制器。
2. 加载软盘驱动器失败40: 硬件。(BIOS中设定软驱存在,但并没有安装硬件)
73 (可选特性)是否进入 AWDFLASH.EXE: – 当AwdFlash在软盘驱动器中被找到。 – 当Alt+F2被按下时。
75 检测&安装所有的IDE设备: HDD(硬盘), LS120 ,ZIP(这两个是特殊的驱动器,如USB闪存等),CDROM(光驱) 77 检测串口(COM口,SATA)和并口(打印机,IDE口)。
7A 检测&安装co-处理器
7F
1. 当支持全屏幕图像图形时,转换到文本模式。 – 如果错误发生,报告错误并等待键盘输入。 – 如果并未发生错误,或F1按键被按下时继续: 显示/隐藏开机画面或自行设定图形图像。
82
1. 启动主板的电源管理功能。
2. 恢复到能源之星的开机画面
3. 如果设定了开机密码,将要求出入开机密码。
83 将所有的设定保存到CMOS中。
84 初始化ISA PnP引导设备。
85
1. 通用串行总线的最后初始化。
2. 网络个人计算机: 建立SYSID结构。
3. 按下电源开关后回到本文模式。
4. 设置内存对ACPI(高级电源管理)的支持。
5. 唤醒ISA适配器ROMs 。
6. 分配PCI设备的IRQs(系统中断模式)。
7. 初始化APM 8. 清除IRQs冲突
88
1.CPU 故障
2.主板故障
93 读取硬盘引导信息是否包含病毒保护编码
94 1. 打开二级缓存
2. 系统引导启动速度。
3. 主板最后的初始化。
4. 电源管理的最后初始化。
5. 清除屏幕& 显示摘要。
6. 程序为K6级CPU写入配置。
7. 程序为P6级CPU写入关联。
95
1. 保存系统时间及日期。
2. 更新键盘引导指示灯&采样率。
96
1. 建立MP模块
2. 建立&更新 ESCD。
3. 将CMOS设定为 20h 或 19h
4. 将CMOS时间加载到DOS兼容状态下的时间条。
5. 建立MSIRQ数据库。
FF 检测完成,正常引导 (INT 19h)

本文对于所有支持DEBUG功能的主板和DEBUG卡适用,只要你有DEBUG卡或主板支持DEBUG功能都可以使用

参考资料:http://hi.baidu.com/%CE%A4%BD%AD%B4%FA/blog/item/203b9a22f4a91df1d6cae277.html

libtool: link: cannot find the library `/usr/lib/libidn.la’

干,今天编译php的时候遇到这么个倒霉的错误,我完全不知道他是什么意思
libtool: link: cannot find the library `/usr/lib/libidn.la’
make: *** [sapi/cli/php] Error 1
make: *** Waiting for unfinished jobs….
libtool: link: cannot find the library `/usr/lib/libidn.la’
make: *** [sapi/cgi/php-cgi] Error 1

检查步骤
1,先看看文件是否存在
好吧,既然说了这个错误,那么到底是什么原因呢,少了/usr/lib/libidn.la这个文件?
我ls了一下这个路径,真的没有这个文件,
2,是否安装了呢?
那么我rpm -qa |grep了libidn,确实还有安装,我用的虚拟机是5.4的Redhat 32位,真是气死哥了,这到底是为啥?
3,是否因为我增加了参数的问题?
我很痛苦,难道是因为我增加了一个可恶的参数么,不是的,我后来测试了。
4,那我自己装个包看看?
那我装个libidn吧,装了个tar的还是不行。
5,妈的那我看看是不是有参数有问题?
最后我就一个一个参数减,我先一个参数都不加,没问题,奠定了我的信心,我最后发现,原来是–with-curl这个东西,操,我直接干掉了它,发现正常了,反正我的测试程序里面用不上这个鸟模块,恢复正常,happy!

Linux下Usvn安装心得(ver0.1)

非标题党,非转载,绝对原创,可惜暂时烂尾了。

先来个提纲吧
1,如何正确的安装svn在linux下
a:安装好,apache,这里有些参数要注意下,比如so-most要多弄点模块,不然usvn不高兴的,它需要dav_fs等模块的支持,别相信那个鸟文档的鬼话,老外根本没有认真写!
b:然后安装好你的subversion,这里没有什么特别注意的地方,不过你得明白,有了usvn,你原来的svn配置文件也可以使用,不过可能会有冲突,因为你们使用的管理文件如果不一致权限就会有问题了,而且可能有很多麻烦,所以用了usvn,以前的http配置就舍弃吧!
c:你的svn和apache弄好以后,就开始配置usvn吧,解压到一个目录,你喜欢哪里都行,然后继续。
2,安装好了以后,就按照usvn的官方文档安装好usvn
安装要点
a: php需要mcrypt支持,不要忘记增加这个lib的支持否则哭死你,重新编译php好多次的人飘过
b:这里需要强烈谴责一下,居然需要PDO-sqlite或者PDO-mysql的支持,这个在编译php的时候可以选择
enable,具体的情configure –help自己看看,再次重装而泪奔的人飘过。
c: 不要轻信那个网站上所说的php安装需求你会发现,你少安装太多东西了
d: 安装usvn以后访问路径变成了 http://localhost:port/usvn/index.php 这里是用来登录的
e: 安装好了以后,现在可以导入你的文档库了,但是是在命令行而不是web UI下
f: 安装好usvn以后,如果你没有文档库的话很好,你可以开始建立了,你的文档库将被usvn全权接管,放到哪里,我也不知道。
g: usvn最大的好处就是实现了服务器端的图形化管理,而且还有彩色高亮对比版本间的不同这个确实很好,库的建立删除,权限的管理不再是冰冷的命令行了,欢呼吧。
3,以上是废话,不过稍后我会逐步来完善的

expect 报语法错误

今天用了下expect脚本,可惜我一添加一些代码就报错,结果我给增加的代码全删除了,还是有问题,后来我发现了,expect的 {} 位置也有讲究,之前都是跟着 foreach i in { 换行 } 这个地方很神奇,如果括号的位置变化了也会出错。

php 安装 memcache模块安装不上

今天装了个php,安装好memcache模块以后发现,phpinfo里面怎么都看不到memcache被加载的内容,然后执行脚本,死活加载不到模块,而且还报没定义memcache 类,弄的我很郁闷,明明php.ini里面配置了正确的模块安装目录,也开启了模块的加载,模块安装目录里面也有模块生成,重新下载了最新的开发版客户端也不行。
最后我死马当火马医了,chown myuser.myuser memcache/ -R ,然后重启了apache,嘿,发现就好了,真是太奇怪了。难道是我安装的时候权限有问题?但是我看了目录都属于myuser啊,咳,真是诡异的很,只能当个偏方了。

Nginx的405错误(已解决)

访问服务使器URL用IE浏览器可以下载,但是用客户端测试就没办法,提示网络错误,在客户端那边,得到的结果就是405错误,这个是nginx返回的。于是,在我的电脑上拿浏览器,输入制定的url,那客户端模拟器都可以打开,于是查看了日志,发现了其中的不同。浏览器是用发送的GET请求,而客户端是发送的POST请求。

日志如下:

xxx.xxx.xxx.xxx- – [xx/xxx/2xxx:14:00:00 +0800] “POST /xxxxxxx.xxxx HTTP/1.1″ “405″ 173 “-” “curl/7.12.1 (i686-redhat-linux-gnu) libcurl/7.12.1 OpenSSL/0.9.7a zlib/1.2.1.2 libidn/0.5.6″ “-”

其中前面的xxx是请求源的ip,后面的POST 那的是访问的文件。

于是上网搜索,类似的问题,发现了其中的原因,下面是张宴老师的博客里对这个问题的处理方法,下面有

URL:http://blog.s135.com/read.php?337

对于这种情况的解释是,由于访问静态文件的时候只能使用GET方式,不能使用POST,因此呢,在nginx的返回信息中,在0.6.33版以后就增加了这么一个405错误状态码,意思就是,你不能用POST方式来请求静态文件,错了,要换个别的方法。

具体的change log是在nginx的官方站点上看到的,内容如下:

URL:http://www.nginx.net/CHANGES-0.6

Changes with nginx 0.6.33 20 Nov 2008

*) Feature: now nginx returns the 405 status code for POST method
requesting a static file only if the file exists.

但是我们希望POST方式可以被支持,于是张老师的配置里面,就重定向了405返回为200,就是如果遇到405,就当成200处理。

具体配置,关键部分如下:

error_page 405 =200 @405;
location @405
{
root /opt/htdocs;
}

重定向了405->200了,并且给405这个错误指定了doc_root,就是正常的doc_root的配置。

于是,按照上面的配置以后,发现并没有生效,还是返回405,当时就钻牛角尖了,觉得是nginx的问题,于是换了低版本的0.6.35的版本,还是不行,随机上网搜到两种方法。

1,用post_to_static 这个patch,但是苦于我实在不知道怎么打这个patch,最后我崩溃了。。否则的话,重新编译一个nginx就支持post_to_static这个配置项,就可以选择on/off来开关,实现允许POST请求访问静态页面。

可以参考的url如下:

http://www.ruby-forum.com/topic/142663 有个附件是c写的patch

http://bbs3.chinaunix.net/viewthread.php?tid=1351579 这个写的和张老师一样,但是帮我解释了为什么前面要有rewrite的问题。

2,第二种,用proxy_pass来使用代理访问,但是我重定向到了127.0.0.1:port/以后,也没好使,还出现了502的错误。

url如下:http://millarian.com/2008/9/5/nginx-405-not-allowed-error 看上去不错,但是也没用,要配置proxy_pass必须在localtion里面,貌似。

3,第三种是一个很好的思考方向,但是没有能起作用,大概需要继续修改一下。

# location ~ (.xxx1$|.xxx2$) {
# root /home/xxxxx/htdocs;
# index index.html index.htm;

#if ($request_method != GET) {
# set $request_method GET;
#}
# fastcgi_param REQUEST_METHOD GET;
# }

这里就是想,如果访问和我们规则匹配的文件时候,如果访问的请求不是GET,那么我们就给$requset_method的变量赋值为GET,但是这里没有用到fcgi可能下面拿句就不能生效,并且如果同时出现两个$requset_method的话,配置文件检测的时候,会提示语法错误,变量重复,这里我觉得这里如果url请求过来了,这里的这个变量可能就无法改变了,再重新赋值也不能了,但是rul为什么能改写呢,这个是一个疑问。

以上的方法都没有解决问题,最后让瀚哥给乱试验出来了,,这里鄙视一下他。。没次都能这样乱试验出来,看来我们有时候得不要被规矩限制,或者是被现有手头的成功案例束缚。

具体配置如下:

location ^~ /xxxx.xxx1 {
root /home/xxxxxx/htdocs;
error_page 405 =200 /xxxx.xxx1;
}

location ^~ /xxxx.xxx2 {
root /home/xxxxxx2/htdocs;
error_page 405 =200 /xxxx.xxx2;
}

为什么error_page在内部生效而不是在server那个部分生效,,就不得而知了。

而且这里的配置不具有灵活性,不过也确实是因为有两个文件,单独配置,直接指定了去哪里下载,连重定向以后的root都直接成了文件。

SecureCRT的一个小问题

连接linux,有很多工具,其中SecureCRT,支持多窗口,还挺方便的,而且还可以
支持rz sz 上传下载,很是方便,但是遇到一个问题,打开一个窗口以后,当建立了一个连接以后。突然我发现我需要再开一个别的服务器的连接的时候,我当然会选择左上的connect图标,但是,当你使用这个的时候,新的连接会在新的窗口弹出,我很崩溃,找了session配置和全局配置,都每没用。。
最后,我发现,原来,想在一个窗口开,只需要在你点击connect的时候,弹出的选择服务器列表的窗口下方,那3个可以“打钩”选择的选项里,给 “open in a table” 选上就可以了。。。