Sunday, September 07, 2008
VIM 语法高亮设置
if &t_Co > 1
syntax enable
endif
就可以设置让支持彩色的终端显示彩色。
vim 根据底色来选择前景色:如果底色是深色的,那么前景色为浅色的;如果底色是浅色的,那么前景色为深色的。设置方法:
: set background=dark
: set background=light
Monday, July 28, 2008
Thursday, July 03, 2008
惊魂交换机
接下来的几分钟内相安无事,网络正常...
突然,网络中断了,而且发现与弱电房同一楼层的所有电脑都死机。但是把网线拔掉电脑又正常。我一下子就慌了,很快意识到这可能跟我的操作失误有关。周围围过来的人越来越多,都在埋怨为什么上不了网。
我重新把那台电脑移了过来,再次连接交换机,然后试了下硬 reset。故障依旧。“坏了,可能把交换机弄坏了!”我心想。于是我和我的同事一起考虑问题出在哪里,反正网络不通,那就死马当活马医吧!
判断一:电压不稳
这个判断刚说就被否定了,因为其他不在这个网络上的计算机上网完全正常。而且在本网段上的电脑拔掉网线就正常,连上就死机。
判断二:查看光纤适配器,看是否是网络攻击造成的
操作:将网线直接接到光纤适配器的内部端口,设置计算机上的 IP 地址同外网的 IP 同一网段。然后 ping 外网 ip
现象:有数据回应
结论:光线适配器没问题,而且也没有网络攻击
判断三:路由器有问题
操作:恢复光纤适配器和路由器的连接,将网线直接接到路由器的内部端口
现象:网络无连接。但是当用网线连接交换机时灯是点亮的
结论:路由器内部端口可能有问题,但也可能没有问题
判断四:交换机坏了
操作:恢复路由器和交换机的连接,将网线连接到交换机上
现象:过大约 5 秒时间电脑死机
结论:交换机内部可能真的出了问题
判断五:网络可能出现阻塞,先配置下交换机
操作:将光纤适配器和路由器的连接、路由器和交换机的连接断开,用 console 连接交换机。超级终端登录。重置交换机。然后再将交换机与路由器相连。
现象:还是过大约 5 秒时间电脑死机
结论:“糟了!要赔万把块 RMB 了!”
判断六:路由器配置有问题
操作:将交换机与路由器的连接断开,用 console 连接路由器。超级终端登录。重启路由器进入 monitor# 模式,然后查看配置文档。
现象:没有异常,配置文档与原先一致
结论:路由器配置无误。(“噩梦啊!”)
判断七:路由器与交换机配合时出错
操作:还是用 console 连接路由器。连接好交换机和路由器。用超级终端登录。
现象:出现异常!终端不断显示“Another host is using mac address **:**:**:**:**:**”
结论:显然有设备和路由器的 MAC 地址冲突了!
判断八:交换机的 MAC 地址和路由器的 MAC 地址冲突
操作:重刷交换机的 firmware?不现实。(“怎么办?怎么办?!!!”)
判断九:子网中的电脑 MAC 地址和路由器的 MAC 地址冲突,有可能因为 MAC 地址欺骗
操作:将所有连接交换机的线拔下,然后一个一个插回去。判断当有哪个线路造成了计算机死机,那么可以顺藤摸瓜查到问题电脑。
现象:所有的线都插回去了,都没发现异常。而且这次计算机没有死机
结论:还用说吗?我不必赔交换机啦!
唉,这个问题真是复杂,当到网上查找这个“Another host is using mac address **:**:**:**:**:**”字串,居然没查到一例一样的问题!于是把这个问题整理一下,发到博客上来。:-)
Tuesday, July 01, 2008
D-Link DI2621 路由器密码重置
1. 将数据线连接至 console 口;
2. 打开超级终端程序,连接上路由器;
3. 重启路由器;
4. 当终端显示第一串消息的时候快速输入 :config-aaa;
5. 终端将进入 monitor# 模式。
可惜里面说的方法并不适合该款路由器。我试了十几遍都不行,路由器完全没有给我足够的时间来输入这串命令!无奈,只好先上官方网站上下了份 DI2621 的说明 doc.doc。在里面提到了一个方法可以进入到 monitor# 模式:
1. 将数据线连接至 console 口;
2. 打开超级终端程序,连接上路由器;
3. 重启路由器;
4. 当终端显示第一串消息的时候按 “Ctrl + Break”键;
5. 进入 monitor# 模式。
按照这个办法还真的可以,顺利进入了管理界面。重命名 startup-config 文件之后再重启路由器。OK!可以通过 admin 用户名和空密码进入配置路由器了!
Sunday, June 22, 2008
Blogger 又开通啦!
不过今后不会再出现这种情况了,被封的日子里可以使用 gladder 插件!呵呵。
Monday, May 28, 2007
Subversion 快速入门
Subversion 存储所有版本控制的数据到一个中心版本库。一开始,我们要新建一个版本库:
$ svnadmin create /path/to/repos
$ ls /path/to/repos
假定有一些希望导入到 Subversion 版本库中的项目,那么将这些项目整理到一个叫做 Myproject 的文件夹中。并且这些项目要有 branches、tags 和 trunk 三个顶级目录。trunk 目录保存所有的数据,而 branches 和 tags 都是空的(这样做有好处):
/tmp/myproject/branches/
/tmp/myproject/tags/
/tmp/myproject/trunk/
foo.c
bar.c
Makefile
...
准备好数据后就可以使用 svn import 命令将数据导入到版本库:
$ svn import /tmp/myproject file:///path/to/repos/myproject -m "initial import"
现在版本库包含了这个目录树的数据。可以删除 /tmp/myproject 目录及其下的所有文件了。现在从 Subversion 版本库里取出一个工作拷贝:
$ svn checkout file:///path/to/repos/myproject/trunk myproject
现在可以编辑使用工作拷贝中的文件了。
* 进入工作拷贝,编辑一个文件的内容;
* 运行 svn diff 来查看修改的标准区别输出;
* 运行 svn commit 来提交你的改变到版本库;
* 运行 svn update 将你的工作拷贝与版本库“同步”。
Thursday, May 17, 2007
PHP 常量的定义和使用
("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // outputs "Constant" and issues a notice.
如果定义的常量在类内部,则应当且必须这样写(参考:http://i.92wy.com/personal_blog_show.aspx?id=39341)
class MyClass
{ const constant = 'constant value';
function showConstant() { echo self::constant."\n"; }
}
echo MyClass::constant."\n";
$class = new MyClass();
$class->showConstant();// echo $class::constant; is not allowed
Sunday, April 29, 2007
使用 js 获取网页 url 参数
// get_url.js
String.prototype.getQuery = function(name)
{
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = this.substr(this.indexOf("\?")+1).match(reg);
if (r!=null) return unescape(r[2]); return null;
}
var url = location.search;
写一张页面,静态动态无所谓,加载文件 get_url.js,然后试着调用它:
window.alert("a"); // 获取 url 参数 a 的值
window.alert("b"); // 获取 url 参数 b 的值
Firefox 中书签可以使用命令行式方式,比如我有两个博客页,一个名为 m,一个名为 n。那么可以添加一个书签,参数照下面方式设置:
- 名称:MDZ 的博客
- 地址:file:///website/blog.html?blog=%s
- 定制关键字:blog
switch(url.getQuery("blog")) {
case "m":
window.location = "http://m.blogspot.com/";
break;
case "n":
window.location = "http://n.blogspot.com/";
break;
default:
document.write("Sorry, wrong parameter!");
}
以后就可以使用 firefox 的书签关键字加参数浏览我的博客啦:
blog m
blog n
声明:String.prototype.getQuery 函数来自于网络,谢谢这位网友!
Wednesday, April 25, 2007
Ubuntu 6.10 Edgy 下 Apache+PHP+MySQL+GD+MagickWand 的安装与配置
以前我安装 Apache+PHP+MySQL 都是来源于 Linux 软件库,安装起来非常方便:
$ sudo apt-get install apache2 mysql-server-5.0 php5 php5-common
等等,就可以使用了,根本不需要配置什么东西。不过现在遇到了 MagickWand,想轻松点都不行了。算了,自己重新安装配置 Apache + PHP 吧。
首先按照 http://www.supsite.net 上的一篇“Linux 下安装最新 Apache2.0.52 + PHP5 + GD2 + MySQL 等”文章所指示的下载下列软件包:
1. httpd-2.0.59.tar.bz2 (httpd-2.2.4.tar.bz2 应该也可以吧,我不敢下,因为在 Windows 下它与 PHP5 配合有问题)
2. php-5.2.1.tar.bz2
3. MySQL (我懒得下载和编译了,它又是那么庞大~~)
4. freetype-2.3.4.tar.gz (FreeType2 字体支持)
5. gd-2.0.34.tar.bz2 (GD2 库,不支持 gif。我用不到 gif,有需要的朋友可以下载非官方的支持 gif 的 gd2 库)
6. jpegsrc.v6b.tar.gz (JPEG 图像支持)
7. libpng-1.2.16.tar.gz (PNG 图像支持)
8. libxml2-2.6.28.tar.gz (XML 支持)
9. zlib-1.2.3.tar.gz (Zlib 库,许多东东都用得到它)
10. ImageMagick-6.3.3-10.tar.bz2 (ImageMagick,MagickWand 需要)
11. MagickWandForPHP-1.0.4.tar.bz2 (MagickWand 本身)
12. ZendOptimizer-3.2.6-linux-glibc21-i386.tar.gz (PHP 加速器,可要可不要)
另外要保证 gcc、lex/flex、yacc/bison 安装好并正常运行,编译过程中用得到它们。Linux 下一般安装的是 flex 和 bison,因为它们是自由的。
==========================
第一步、安装 MySQL
MySQL 相对独立,没有像 Apache 和 PHP 关联度那么密切,所以先安装它,在 Ubuntu 下很简单:
$ sudo apt-get install mysql-server-5.0
[Update]
再加入下句,否则配置 PHP 的过程中会提示找不到该有的 MySQL 头文件:
$ sudo apt-get install libmysqlclient15-dev
[/Update]
就可以安装上去了。在终端中可以使用
$ mysql -u root
测试是否能进入 MySQL 的交互式终端:"mysql>",可以的话,说明已经安装好并运行了。
启动和停止 MySQL 服务器可以使用下面的命令:
$ sudo /etc/init.d/mysql start # 启动 mysql
$ sudo /etc/init.d/mysql stop # 停止 mysql
$ sudo /etc/init.d/mysql restart # 重启 mysql
注意,Ubuntu 的 apt 源中的 MySQL 安装不是常规的,它把文件拆放在不同的目录下面。/usr/lib/mysql 目录下存放着 MySQL 的模块文件,我们待会儿用得着。
[Update]
MySQL 的手动安装(参考:http://www.itlearner.com/article/2006/3540.shtml):
1. 下载自带 glibc23 库的版本,如 mysql-standard-5.0.27-linux-i686-glibc23.tar.gz
2. 直接解压到 /usr/local/mysql
3. 使用以下命令建立“mysql”用户和组:
$ sudo groupadd mysql
$ sudo useradd mysql -g mysql
4. 进入 MySQL 目录:
$ cd /usr/local/mysql
5. 设置权限:
$ sudo chown -R root . # 设定root能访问/usr/local/mysql
$ sudo chown -R mysql data # 设定mysql用户能访问/usr/local/mysql/data ,里面存的是mysql的数据库文件
$ sudo chown -R mysql data/. # 设定mysql用户能访问/usr/local/mysql/data下的所有文件
$ sudo chown -R mysql data/mysql/. # 设定mysql用户能访问/usr/local/mysql/data/mysql下的所有文件
$ sudo chgrp -R mysql . # 设定mysql组能够访问/usr/local/mysql
6. 运行mysql:
$ sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &
[/Update]
==========================
第二步、安装杂项软件和库文件
1. libxml
$ tar -zxvf libxml2-2.6.28.tar.gz
$ cd libxml2-2.6.28
$ sudo ./configure
$ sudo make
$ sudo make install
2. zlib
$ tar -zxvf zlib-1.2.3.tar.gz
$ cd zlib-1.2.3
$ sudo ./configure --prefix=/usr/local/zlib2
$ sudo make
$ sudo make install
3. jpeg
$ tar -zxvf jpegsrc.v6b.tar.gz
$ cd jpeg-6b
$ sudo ./configure --prefix=/usr/local/jpeg6
$ sudo make
建立相关目录,再安装:
$ sudo mkdir /usr/local/jpeg6
$ sudo mkdir /usr/local/jpeg6/include
$ sudo mkdir /usr/local/jpeg6/lib
$ sudo make install-lib
$ sudo make install
[Update]
如果还有错误提示,则再建立一下目录:
$ sudo /usr/local/jpeg6/bin
$ sudo /usr/local/jpeg6/man
$ sudo /usr/local/jpeg6/man1
[/Update]
4. libpng
$ tar -zxvf libpng-1.2.16.tar.gz
$ cd libpng-1.2.16
$ sudo ./configure --prefix=/usr/local/libpng2
$ sudo make
$ sudo make install
5. freetype
$ tar -zxvf freetype-2.3.4.tar.gz
$ cd freetype-2.3.4
$ sudo ./configure --prefix=/usr/local/freetype2
$ sudo make
$ sudo make install
6. gd-lib
$ tar -jxvf gd-2.0.34.tar.bz2
$ cd gd-2.0.34
$ sudo ./configure --prefix=/usr/local/gd2 --with-zlib=/usr/local/zlib2/ --with-png=/usr/local/libpng2/ --with-jpeg=/usr/local/jpeg6/ --with-freetype=/usr/local/freetype2
$ sudo make
$ sudo make install
==========================
第三步、安装 Apache
$ tar -jxvf httpd-2.0.59.tar.bz2
$ cd httpd-2.0.59
$ sudo ./configure --prefix=/usr/local/apache2 --enable-module=so
$ sudo make
$ sudo make install
==========================
第四步、第一次编译安装 PHP,释放出软件 phpize
$ tar -jxvf php-5.2.1.tar.bz2
$ cd php-5.2.1
$ sudo ./configure
$ sudo make
[Update]
$ sudo make install (之前落掉这一句了,抱歉)
$ sudo make clean (这句比较关键,不然再次编译后启动 Apache 时会说找不到 php5 模块)
[/Update]
==========================
第五步、安装 ImageMagick 和 MagickWand
1. 先安装 ImageMagick,参考文章“安装 ImageMagick 小记”:
$ tar -jxvf ImageMagick-6.3.3-10.tar.bz2
$ cd ImageMagick-6.3.3-10
$ sudo ./configure --enable-shared --enable-lzw --with-modules --prefix=/usr/local/ImageMagick
$ sudo make
$ sudo make install
其中 --enable-lzw 是打开 lzw 压缩开关
2. 安装 MagickWand for PHP
$ tar -jxvf MagickWandForPHP-1.0.4.tar.bz2
$ cp -r MagickWandForPHP-1.0.4 {PHP_SRC_DIR}/ext/magickwand
这里 {PHP_SRC_DIR} 指的是你存放 php 源代码的目录。
$ cd {PHP_SRC_DIR}/ext/magickwand/
$ phpize
==========================
第六步、重新编译安装 PHP,加入 magickwand 模块、联接 Apache、MySQL 等
$ cd {PHP_SRC_DIR}
$ rm -rf ./configure # 删除 configure 配置文件,也可以改名以防万一
$ ./buildconf --force # 重新生成 configure 配置文件,现在文件中已经有 magickwand 的“指标”了
重新配置 php:
$ sudo ./configure \
--prefix=/usr/local/php \ # 安装路径
--with-apxs2=/usr/local/apache2/bin/apxs \ # 指定 Apache
--with-jpeg-dir=/usr/local/jpeg6/ \ # JPEG 支持
--with-png-dir=/usr/local/libpng2/ \ # PNG 支持
--with-gd=/usr/local/gd2/ \ # GD 库支持
--with-freetype-dir=/usr/local/freetype2/ \ # FreeType2 字体支持
--enable-trace-vars \
--with-zlib-dir=/usr/local/zlib2/ \ # Zlib 库支持
--with-mysql=/usr/lib/mysql \ # MySQL 支持
--with-magickwand=/usr/local/ImageMagick # MagickWand 支持
编译和安装:
$ sudo make
$ sudo make install
拷贝配置文件:
$ sudo cp php.ini-dist /usr/local/php/lib/php.ini
==========================
第七步、配置服务器,使它能够解析运行 PHP 文件
$ sudo zile /usr/local/apache2/conf/httpd.conf # 我比较喜欢 zile 编辑器,可以选用其它的。
按照以下提示的修改:
1. 在
#AddType application/x-tar .tgz
下面加一行
AddType application/x-httpd-php .php
2. 如果看见
# LoadModule php5_module modules/libphp5.so
则去掉 “#” 号。如果没 “#” 号,那再好不过了。
3. 找到
DirectoryIndex index.html index.html.var
行,在后面添加 “index.php”,表示服务器按次序把上面的列表作为默认页
4. 找到
# don't use Group #-1 on these systems!
把它下面的用户名和组改为
User apache
Group apache
5. 找到
# ServerName
把 “#”去掉,后面的 IP 改成自己的 IP
6. 找到
DocumentRoot "/usr/local/apache2/htdocs"
把路径改为自己存放网页文件的路径
保存 httpd.conf 文件。
启动或停止 apache 可以参考下列命令:
$ sudo /usr/local/apache2/bin/apachectl start # 运行 apache
$ sudo /usr/local/apache2/bin/apachectl stop # 停止 apache
$ sudo /usr/local/apache2/bin/apachectl restart # 重启 apache
[Update]
如果运行上述的命令出现“httpd: bad user name apache”错误的话,表示系统中无 “apache”组和 “apache”用户名。用下列语句添加:
$ groupadd apache (添加“apache”组)
$ useradd apache -g apache (添加“apache”组下的用户“apache”)
[/Update]
==========================
现在启动 Apache 和 MySQL 服务器应该可以解析运行 PHP 和让 PHP 联接 MySQL 数据库了。并且拥有了使用 GD2 和 MagickWand 的权利!
最后,可以使用 ZendOptimizer 加速 PHP 速度,安装有提示的,不说了!
Enjoy PHPing!
Monday, April 02, 2007
Bash 使用技巧大补贴
Bash 是我们经常与之打交道的 Shell 程序,本文针对其使用技巧进行了搜罗。相信在你看过这些内容之后,定会在 Bash 的世界里游刃有余。
- 从历史中执行命令
有时候,我们需要在 Bash 中重复执行先前的命令。你当然可以使用上方向键来查看之前曾经运行过的命令。但这里有一种更好的方式:你可以按 Ctrl + r 组合键进入历史搜索模式,一旦找到需要重复执行的命令,按回车键即可。
- 重复命令参数
先来看一个例子:
mkdir /path/to/exampledir
cd !$本例中,第一行命令将创建一个目录,而第二行的命令则转到刚创建的目录。这里,“!$”的作用就是重复前一个命令的参数。事实上,不仅是命令的参数可以重复,命令的选项同样可以。另外,Esc + . 快捷键可以切换这些命令参数或选项。
- 用于编辑的快捷键
- Ctrl + a:将光标定位到命令的开头
- Ctrl + e:与上一个快捷键相反,将光标定位到命令的结尾
- Ctrl + u:剪切光标之前的内容
- Ctrl + k:与上一个快捷键相反,剪切光标之后的内容
- Ctrl + y:粘贴以上两个快捷键所剪切的内容
- Ctrl + t:交换光标之前两个字符的顺序
- Ctrl + w:删除光标左边的参数(选项)或内容
- Ctrl + l:清屏
- 处理作业
首先,使用 Ctrl + z 快捷键可以让正在执行的命令挂起。如果要让该进程在后台执行,那么可以执行 bg 命令。而 fg 命令则可以让该进程重新回到前台来。使用 jobs 命令能够查看到哪些进程在后台执行。
你也可以在 fg 或 bg 命令中使用作业 id,如:
fg %3又如:
bg %7 - 使用置换
- 命令置换
先看例子:
du -h -a -c $(find . -name *.conf 2>&-)注意 $() 中的部分,这将告诉 Bash 运行 find 命令,然后把返回的结果作为 du 的参数。
- 进程置换
仍然先看例子:
diff <(ps axo comm) <(ssh user@host ps axo comm)该命令将比较本地系统和远程系统中正在运行的进程。请注意 <() 中的部分。
- xargs
看例:
find . -name *.conf -print0 | xargs -0 grep -l -Z mem_limit | xargs -0 -i cp {} {}.bak该命令将备份当前目录中的所有 .conf 文件。
- 命令置换
- 使用管道
下面是一个简单的使用管道的例子:
ps aux | grep init这里,“|”操作符将 ps aux 的输出重定向给 grep init。
下面还有两个稍微复杂点的例子:
ps aux | tee filename | grep init及:
ps aux | tee -a filename | grep init - 将标准输出保存为文件
你可以将命令的标准输出内容保存到一个文件中,举例如下:
ps aux > filename注意其中的“>”符号。
你也可以将这些输出内容追加到一个已存在的文件中:
ps aux >> filename你还可以分割一个较长的行:
command1 | command2 | ... | commandN > tempfile1cat tempfile1 | command1 | command2 | ... | commandN > tempfile2 - 标准流:重定向与组合
重定向流的例子:
ps aux 2>&1 | grep init这里的数字代表:
- 0:stdin
- 1:stdout
- 2:sterr
上面的命令中,“grep init”不仅搜索“ps aux”的标准输出,而且搜索 sterr 输出。