2010年8月18日

用expect给mysql创建用户

之前一直为mysql要创建用户而奔波到去翻mysql手册,现在看来不用了。自己写了一个mysql自己创建用户的expect脚本,那以后就不用那么麻烦了。下面是刚安装完mysql后给它添加root密码和创建新的用户。
代码如下:

#!/usr/local/bin/expect

set timeout 10
set host 172.16.249.126
set password 12345
set user hoho

spawn ssh -l $user -p22 $host
expect "*assword*"
send "$password\n"
sleep 2
spawn mysql -u hohoho -p1234567
expect "mysql>"

send "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '12345678' WITH GRANT OPTION;\n"
send "GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '12345678' WITH GRANT OPTION;\n"
send "GRANT ALL PRIVILEGES ON *.* TO 'haha'@'localhost' IDENTIFIED BY '12345678' WITH GRANT OPTION;\n"
send "FLUSH PRIVILEGES;\n"
send "GRANT ALL PRIVILEGES ON *.* TO 'haha'@'127.0.0.1' IDENTIFIED BY '12345678' WITH GRANT OPTION;\n"
send "FLUSH PRIVILEGES;\n"
#expect "*OK*"
send "exit\n"
interact

这里就给了mysql创建个一个叫haha的用户,它拥有mysql所有的权限(不过这些可以自己去修改的).我是使用hoho用户去创建的,其中hoho用户也是拥有mysql所有权限的。
详细情况有时候再慢慢调整和做解释。

注:当使用到expect后,当输出的字符符合expect里面内容的话,他就会将send里面的内容显示出来。而不是等到执行时才会进去处理。

2010年8月12日

FreeBSD X不使用hald和dbus

hald使用太多进程了,搞得我看得都烦!于是想把它禁了,在网上看到了可以实现的办法:

1 在/etc/rc.conf里面写入
moused_enable="YES" #在系统启动后就启用mouse.
如果里面有写上hald_enable="YES" 和dbus_enable="YES"那就请注释吧,它们将不会在接下来的top中出现的。

2 在/etc/X11/xorg.conf里面定入

在serverlayout一节中输入:
Option "DontZap" "off"

Option "AllowEmptyInput" "off" #如果启用,就不会增加标准的键盘和mouse驱动。
#如果都没有输入驱动到配置文件,将会使用启用默认配置,如果
#AudoAddDevices和AutoEnableDevices是启用的。那它就不启用。如果
#AllowEmptyInput是启用,那kbd,mouse或者虚拟mouse驱动都会被忽略。

Option "AutoAddDevices" "off" #如果AutoAddDevices是不启用的,当没有驱动时就会从hal事件中增加,启用是使用
#其默认的配置。


完成。

这样当启用X后用top查看,您会看到只多了一个moused进程,那hald*将不会再出现了!

我的N900

很喜欢有键盘手机,因为尝试过全触屏的手机,用起来有点压抑!所以就选择了N900.

N900是的操作系统是maemo,是基于debian的,也就是它也是linux来的,有一个可以拿来玩的terminal。 默认的terminal在输出时是不带色。所以先得给它安装带色的ls,在下面的URL中可以下载
http://www.nitapps.com/dists/chinook/user/binary-armel/color_ls_1.0-1_armel.deb
下载到本地直接使用dpkg -i来安装即可。这里输入ls你会看到色彩的了。

清除其它的locale
清除其它的locale可以给N900省下很多空间(本来N900的rootfs已经很小了)!
只要安装上了localepurge_0.5.8_all.modfied.modfied.deb就可以了,不过在安装上它前必须得先安装两个依赖,分别是
http://repository.maemo.org/pool/maemo4.1.1/free/p/pcre3/libpcre3_6.7-1osso1_armel.deb
http://repository.maemo.org/pool/maemo4.1.1/free/p/pcre3/pcregrep_6.7-1osso1_armel.deb
安装完成就下载localepurge来安装吧
http://forums.internettablettalk.com/attachment.php?attachmentid=2653&d=1225038890
先别急于运行localepurge这个命令,您得先配置/etc/locale.nopurge,这个文件是配置应该去留下哪个locale。你可以增加zh_CN在里面,它默认只留下
en
en_GB
en_US
现在您可以使用localepurge来清除一些locale了。

注: 上面的要下载的软件都可以用命令dpkg -i 来安装。

mysql

今天又学到了一些内容:使用mysql.

一客户他说他的账号和密码登录不了后台,将账号和密码都发过来了测试。然后我只能通过查看mysql关于他的用户名和密码。用到的命令有(我同事帮我搞的,我只在旁边学习)

一个mysql有很多个数据库,他用了一个指令准确找到了很多个数据库中的某个,准确来这算一个模糊查询,就是:

show databases like ‘%database_name%’;

然后通过use database_name来进入这个数据库。

进入后,我的办法呢就是show tables来查看所有的表,然后就用最相似的一个表来查看里面是否有账号密码,语句是select * from table_name;执行后它显示的是一堆占满整个屏幕的数据,看不到哪些是用户名,哪些是密码。而我同事的做法是:先查看这个表的结构 desc table_name;这样可以清楚看到整个表的结构,然后找出username和password字段:select username, password from table_name;这样就可以只看到username和password字段里面的所有数据。

这时我看到了客户提供的用户名和密码,其中密码是使用MD5来加密的。我过去曾在网上用在线MD5解密工具来破解access数据库里面的密码。不过这次就不行了,因为我同事说,之前用到的可以破解的都是原因在这些明文和MD5码都是存放到数据库里面,用查询即可知道MD5码对应的明文。原来这些 MD5是存放在数据库中的,我还以为真的可以破解出来!

quota

今天学到了一个用法:quota的用法。

quota — 磁盘配额的限制。

quota是要先开启才能使用的。它是限制用户使用的多大的空间,超出限额就无法再使用了。目前我的笔记本还没开quota,不过今天在公司搞了一下,到现在还是有一点记忆的,以下的信息都是靠记忆写出来的。

quota [-uvsl] [username]
quota [-gvsl] [groupname]
参数:
-u :后面可以接 username ,表示显示出该使用者磁盘限额的限制值。若不接 username,表示显示出执行者磁盘限额的限制值。
-g :后面可接 groupname ,表示显示出该组的 quota 限制值。
-v :显示每个 filesystem磁盘限额的值;
-s :可选择以inode或磁盘容量的限制值来显示;
-l :仅显示出目前本机上面的filesystem磁盘限额的值。

如quota -uvs 显示当前用户磁盘限额的值

quota -uvs user 显示user磁盘限额的值

修改用户磁盘配额

使用edquota

我对这个命令的理解是使用ed(ed是一个文件编辑器)来编辑quota(磁盘限额),简称edquota.

#edquota –输入后会看到一些内容:下面是内容的解释:

filesystem:代表这个 quota 是针对哪一个分区(如/dev/sda1)的意思。
blocks:这个是目前使用者在这个filesystem,所耗掉的磁盘容量!单位是Mbytes!这个信息是 quota 程序自己计算出来的,所以不要修改他!
soft 与 hard :当soft与hard数值为 0 的时候,表示没有限制!当显示是一些数字,证明这个数据是用户使用磁盘block的最大容量。
inodes:是目前使用掉 inode 的状态,也是 quota 自己计算出来而得到的。最好别修改。当soft与hard数值为 0 的时候,表示没有限制!当显示是一些数字,证明这个数据是用户使用磁盘inode的最大容量。

抄了一个SSH自动登录的脚本

脚本的全部代码如下:

#!/usr/local/bin/expect -f

1 set timeout 30
2 set ssh_host 192.168.1.101
3 spawn ssh -l user -p 22 $ssh_host
4 expect “*assw:”
5 send “password\n”
6 interact

头号“#!/usr/local/bin/expect -f”中的expect是一个交互式对话的实用程序来的,它来源于TCL语言。

1行是设置当您不动这个程序后它会在多少秒里结束对话。

2行是设置ssh_host变量,它的值就是“192.168.1.101”,它也可以用用户输入的地址来作为值:[lindex $argv 0],写法是“set ssh_host [lindex $argv 0]“表示等待用户输入的ssh地址作为参数。它代表着输入程序文件名后的地址。

3行”spawn ssh -l user -p 22 $ssh_host“中的spawn是启动一个新的进程。在这里它是启用了” ssh -l user -p 22 192.168.1.101″这个ssh进程。其中的-l后面带的是login_name,-p后面跟着的就是端口号,再后面就是ssh的地址了。

4行”expect “*password:”终于要开启对话了,当输入ssh -l user -p 22 192.168.1.101后系统会自动弹出对话请求您输入密码。expect就是等待用户的输入,在这里它是等待系统的对话,”*password”是匹配一行中含有password的字符,在对话中,要准确匹配到才会进行正常的对话,要不就会出现问题,也就是说如果系统弹出的对话中只包含有 Password而不是password,那您的这一段代码也就没用了!为了安全起见,我只写了”*assw”,因为我担心系统弹出的是Password 或是passwd那就麻烦了。

5行“send “password\n””是我给系统的回话,说是password\n是我登录ssh的密码,您收到并放行吧。其实send就是用户给系统传送数据的。 \n就是确定的意思。

6行“interact”就是系统和用户开始进行交互式对话吧!