Archive for July, 2009

[Linux] expect

2009.7 28

在写一些shell脚本的时候,经常会遇到需要用户输入密码的交互情况。
例如在用rsync备份的时候,如果没有假设rsync服务器端,需要用到ssh+rsync备份,没有提供输入密码的选项。上网上查了一下,有个expct的交互程序。
expect也够复杂的,起码在我看来是这样。先找个可以输入密码的实例:见
http://www.blog.ccidnet.com/blog-htm-do-showone-uid-73559-itemid-238796-type-blog.html

#!/usr/bin/expect -f
#需要执行的rsync备份脚本
spawn /var/backup.sh
#等待出现 password:的提示,然后发送密码
expect "password:" { send "PASSWORD\n" }
#不知道是啥意思,没有这句还不行
expect ".*\@.*#"

backup.sh 只有一个rsync的命令:rsync -avz /var IP:/ 1>log.txt 2>&1
当然可以更复杂。
现在已经能满足我的备份需求了,够用就好!

[Linux] 去除文本文件中的^M

2009.7 27

linux 、windows 、mac对文件的保存处理都不一样。体现在回车和换行这两个概念上。
这两个词来自于早先的打字机。虽然没有看过实物,但是从以前战争片中打字员每打完一行,就来两个动作。回车:就是在没打印完一行,就把打印头定位到纸的左边。由于还在刚才写的那一行,需要用换行,定位到下一行。
到了计算机出现后,“换行”在linux中表示为“\n”,windows表示为”\n\r“,mac表示为”\r“。所以在linux,mac看windows中保存的文本文件每行后面都会有 “^M”,而在windows下看linux和mac保存的文本文件,就都会跑到一行中,而且会多一个黑方框的符号。
用16进制表示回车为 0x0d ,即表示 \r, carrige return,回车。
0x0a,表示 \n, new line,换行。
在linux下可以用xxd命令查看文本文件的16进制的形式。
linux中有两个命令:dos2unix和unix2dos。可以转换两种文件格式。
用tr:
DOS->UNIX:tr -d ‘\r’ < dosfile > unixfile

[Linux] Install Mplayer in Linux

2009.7 21

最早安装mplayer 是在大二的时候吧。那时候对linux也不是太懂,只是按照网上的步骤一步一步来。出了问题,也很难搞懂!因为对一些原理没有搞懂,只会其行,而不懂其意。这也许就是刚开始学习linux很难的原因吧。

今天重新安装网上的一些步骤,再结合自己的实践再安装一遍mplayer。
1:下载源代码 下载页面在  http://www.mplayerhq.hu/design7/dload.html
包括:主程序MPlayer v1.0rc2 二进制的解码器 essential-20071007.tar.bz2和windows-essential-20071007.zip 皮肤可以选择一款下载。
2:安装二进制的解码器。只需把两个文件解压放到一个地方即可,在编译mplayer的时候会用得着。
这里把essential-20071007.tar.bz2和windows-essential-20071007.zip 解压后的两个目录都放到/usr/lib/codes 目录下。

[root@localhost mplayer]# ls
essential-20071007.tar.bz2  MPlayer-1.0rc2.tar.bz2  windows-essential-20071007.zip
[root@localhost mplayer]# tar -jxf essential-20071007.tar.bz2
[root@localhost mplayer]# unzip -q windows-essential-20071007.zip
[root@localhost mplayer]# ls
essential-20071007          MPlayer-1.0rc2.tar.bz2      windows-essential-20071007.zip
essential-20071007.tar.bz2  windows-essential-20071007
[root@localhost mplayer]# mkdir /usr/lib/codes
[root@localhost mplayer]# mv windows-essential-20071007 essential-20071007 /usr/lib/codes/

3:编译主程序,这应该是最麻烦和最容易出错的地方吧。最让人头痛的是在生成makefile的时候一会提示缺少这个库,一会缺少那个。可以说是没完没了。我想大多数人到了这个时候,头都大了,都想着放弃吧。

./configure --prefix=/usr/local/mplayer --enable-gui --codecsdir=/usr/lib/codes/essential-20071007/ --win32codecsdir=/usr/lib/codes/windows-essential-20071007/ --language=zh_CN

说明:
–prefix=/usr/local/mplayer :安装程序放置的位置。包括配置文件,主程序,皮肤帮助文件等。
–enable-gui :安装图形界面,即生成gmplayer。
–codecsdir=/usr/lib/codes/essential-20071007/
–win32codecsdir=/usr/lib/codes/windows-essential-20071007/
指定二进制解码器的位置。
–language=zh_CN :指定语言类型。
4:字体,皮肤。如果启动mplayer的图形界面,会提示缺少皮肤和字体。下载皮肤和字体放到指定的位置。
5:遇到的问题。启动mpayer后,可能会没有声音或者提示视频输出配置错误。可以打开mplayer的首选项来配置一下。最后配置文件保存到 ~/.mplayer 目录下。

2010-11-18补充:

1:[AO OSS] audio_setup: Can’t open audio device /dev/dsp: No such file or directory

提示这个错误,alsa 驱动,还是udev规则的问题。在网上好不容易找到解决方案:用root加载模块,modprobe snd_pcm_oss

2:mplayer不能全屏。解决方法:在配置文件中加入zoom=yes

[Linux] Configuring the VNC server/viewer in Linux

2009.7 21

参考:http://bobpeers.com/linux/vnc.php
1:安装 vnc vnc-server

 yum install vnc vnc-server

2:添加用户 /etc/sysconfig/vncservers
配置文件的最后两行去掉注释:
VNCSERVERS=”1:bobpeers”
VNCSERVERARGS[1]=”-geometry 1024×768 -depth 16″
第一行:
1:Gnome Remote Desktop 已经用了computername:0,这里vnc 用:1 ,告诉vncserver在 5901端口监听。
boobpeer:代表用户名。
第二行:1的参数
3:Setting a password 设置密码:vncpasswd
4:启动vncserver
# vncserver :1
#/etc/init.d/vncserver start
刚开始遇到个错误提示:vncserver: couldn’t find “xauth” on your PATH.
原来是没有安装 xorg-x11-xauth :安装 yum install xorg-x11-xauth
vncserver 的启动提示:

#vncserver :1
xauth:  creating new authority file /root/.Xauthority

New 'localhost.localdomain:1 (root)' desktop is localhost.localdomain:1

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost.localdomain:1.log

通过netstat -ntlp 查看vnc已经在 5801,5901,6001端口监听。但是通过vnc客户端连接后是个很简陋的桌面。我们修改:~/.vnc/xstartup,删除这两行的注释:

# Uncomment the following two lines for normal desktop:
 unset SESSION_MANAGER
 exec /etc/X11/xinit/xinitrc

重启vncserver ,/etc/init.d/vncserver restat
5:vnc客户端连接
vnc ip:5901 或者通过web方式 http://ip:5801(客户端需要有java虚拟机支持)

[建站日志] upgrade wordpress to 2.8.1

2009.7 18

今天突然想起要升级一下wordpress,作为第100篇,另做一下记录。
1:备份。把数据库备份一下(还好我的博客每天备份三次)。
2:删除原来的wp-includes 和 wp-admin这两个目录。这里面的东西我都没有修改。wp-content目录里是插件和主题,还有上传的文件。这个要保留。
3:wp-config.php 这个要备份。里面有数据库的配置。其余的东西覆盖。
4:登陆wordpres后,提示升级。如果一切顺利,就可以访问了。

后台的界面基本没有变,就是整体的颜色变了。

[other] 我的电脑被强奸了——可恶的广告推送系统

2009.7 16

以前也注意到访问某个网页的时候,右下边会有个小广告。而这个网页以前是不放广告的?真是纳闷。

这就是那个广告:
a
查看打开网页的源代码,里面有个包含广告的框架页。这个网页的左下角有个51的统计图片,点击进入一看。吓了一跳:
刚开始是这么多,b
一会再看:
c
访问量增长的太快了。
而且都是访问的一个页面:
d
到网上查了一下原来是个广告推送系统惹的祸。原来很多ADSL,某个电信等都用这等手段来谋取暴利。还有那个DNS劫持,简直是强奸我的电脑。
腾讯居然申请了一个专利:一种广告信息推送系统和方法。看这个介绍也是通过QQ 强给你加上广告吧!
回头也研究一下http劫持,dns劫持。

[Shell编程] Shell 笔记

2009.7 12

1:保存命令的结果
$(ls -l /) 或者 `ls -l /`
2:判断 [[]] 与 []
[ -z $(ls -l /)] 或者 test
一个目录是否为空: [[ -z $(ls /a)]]||&&echo empty|| echo “not empty”

3:$(()) 算数运算
VAR=1
VAR=$(($VAR+1))
echo $VAR
4:while 循环
The general syntax as follows for bash while loop:

while [ condition ]
do
command1
command2
commandN
done

The condition is evaluated, and if the condition is true, the command1,2…N is executed.
This repeats until the condition becomes false.
The condition can be integer ($i < 5), file test ( -e /tmp/lock ) or string ( $ans != "" ) 5: $<

#!/bin/csh
echo -n “Enter your name : ”
	set yname = $<

[我的日志] 高考一批投档

2009.7 12

今天开始高考一批投档,又回到五年前了。

或许从一开始就注定要分开,或许就不该在一起。高考,对我来说已经很淡忘。高中生活,忘得也差不多了。但高三的几件事,或许一辈子也忘记不了。
大学来到济南,应该是命运安排的。自己的命运掌握在别人手里,做奴隶的感觉。学习,不需要自己来安排自己的未来。只要好好学习,跟着别人往大道上去就行了。
毕业了,感觉很迷茫。什么事都要自己操心了。工作,自己找的,别人不愿意。女人,别人不给找,也没有送上门的。
自己喜欢的,都跑了。不喜欢的,没有。真让人费神。
工作一年,总结:要想挣钱,还是要跟着党走。党的方针路线要记牢(政治里的东西都忘记了,反正是听党的话)。
不能太实在了,能匡就匡(包括对女人)。
ps:现在网络流量上来了,到本科二批的时候会更高。设备能撑住不?要是出什么意外可不得了。

[学习笔记] swfupload

2009.7 10

今天在研究wordpress上传图片的代码的时候,发现了一个好网站。http://www.swfupload.org/。

这个东东是通过flash一次上传多文件。以前也从网上下过类似的代码。看来没有这个强大,再来研究一个这个,学习一下!
经过几个小时的刻苦攻关,终于修改好了一个小例子。还要增加上传图片的保存位置,简单的说要传递几个变量去。
哈哈,终于在半夜里把变量传递的问题给解决了。通过附加在url的后面,也就是GET方法。

[AMP] mysql 字符编码

2009.7 8

现在mysql又遇到乱码的问题了!

现在整理如下:
1:查看mysql的字符编码
登陆mysql,用status查看:

Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8

或:show variables like ‘collation_%’; show variables like ‘character_set_%’;
2:修改mysql的字符编码
/etc/my.cnf 在 [mysqld]和[client]添加 default-character-set=utf8,重启mysql
3:修改数据库,数据表,字段的字符集:
ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将test数据库的编码设为utf8
ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将一个表category的编码改为utf8
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是将test表中 dd的字段编码改为utf8
4:php查询前指定字符集:
mysql_query(set names utf8);