收集一些常用的 alias

在 *NIX 系统下的 shell 如果用管道符 “|” 去搭配一些命令的话,可以创造出很多的应用,如果要熟练运用这些的话,需要非常熟悉这些命令的使用方法,还有要很强的记忆力。
这里有两个网站把一些常用的 alias 收集起来,选择一些加到 .bashrc 里去,可以大大提高我们的效率啊~

http://alias.sh/
http://rubytune.com/cheat

Debian 下删除自动获取的ipv6

在 vps 上总是莫名其妙地获取到不需要的 ipv6 地址,而这些 ipv6 地址又不能正常地使用,所以需要禁用掉这些地址。

修改 /etc/network/interfaces

iface eth01 inet6 static
        up echo 0 > /proc/sys/net/ipv6/conf/default/autoconf
        up echo 0 > /proc/sys/net/ipv6/conf/all/autoconf
        address IPV6地址
        netmask xx
        gateway IPV6网关
  1. 换为具体的网卡接口

然后重启network:

# /etc/init.d/networking restart

让网页变成灰阶,兼容各浏览器

使用纯 css 让网页变成灰色,加入以下css在 <head></head> 中即可。

html{
	filter: grayscale(100%); /*css3*/
	-webkit-filter: grayscale(100%); /*Chrome/safari */
	-moz-filter: grayscale(100%); /*Firefox < 3.5 */
	-ms-filter: grayscale(100%); 
	-o-filter: grayscale(100%); /*opera*/
	filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /*Firefox >= 3.6*/
	filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); /*IE6/7/8*/
	-webkit-filter: grayscale(1); /*Chrome/safari*/
}

Yii 框架事务处理

最近有用 Yii + SQLite 进行一个应用的开发,但在插入大量数据的时候非常缓慢。究其原因,大约就是在每插入一个数据的时候就会有一次 IO 的操作,所以在这个时候引入事务处理就很有必要了,而且也可以保证数据的一致性。

那么,如何在 Yii 应用中引入事务处理呢?

$transaction = Yii::app()->db->beginTransaction(); //创建事务

// 将需要事务处理的操作放进try里
try {
     $a = XXX::model()->findByPk(X);
     $a->x = 1;
     $a->update();
     $b = YYY::model()->findByPk(Y);
     $b->y = 2;
     $b->update();

     $transaction->commit(); //提交事务会真正的执行数据库操作
} catch (Exception $e) {
     $transaction->rollback(); //如果操作失败, 数据回滚
}

远程连接MySQL数据库很慢的解决方法

这几天把网站的 WEB 跟 MySQL 分开成两台服务器了,可发现远程连接数据库的时候变得很慢,在 4 秒种以上,然而测试了本地的连接后又是正常的。
其实出现这种情况主要是因为在 MySQL 中加入了地址查询,会在连接建立的时候建行一次 DNS 的反查询,所以在这里会出现耗时久的情况。
所以在这里可以有两种解决方法:

第一种:在 MySQL 所在服务器的 hosts 上加入过程连入的服务器的IP <=> 域名的记录。

192.168.0.11   webserver

第二种:修改 MySQL 的配置,在 [mysqld] 段加入 skip-name-resolve

[mysqld]
...
skip-name-resolve

重启 MySQL 使之生效。

以上两种方法都可以解决变慢的问题,不过我建议还是用第一种方法。因为第二种方法的话就不能在 MySQL 的授权表中使用主机名了而只能用ip格式了。

Gnome 3.6 更换输入法为 fcitx

Archlinux 把 Gnome 更新到 3.6 了,在 Gnome 3.6 中 ibus 被作为依赖安装到了系统中。虽然集成性不错,但个人还是比较喜欢 fcitx 毕竟从接触 Linux 开始就一直使用  fcitx,所以把打算把输入法换成 fiitx 。结果发现在 Gnome 3.6 中换个输入法并没有那么容易。

最后看到在 fcitx 的 wiki 中有介绍:http://fcitx-im.org/index.php?title=Note_for_GNOME_Later_than_3.6

在 Archlinux 上我是这样做的:

  1. ~/.xprofile 中加入输入法配置:

    export XMODIFIERS="@im=fcitx"
    export GTK_IM_MODULE=fcitx
    export QT_IM_MODULE=fcitx
    
  2. 在 ArchLinux 上似乎并不能删除 ibus-daemon,因为它属于软件包 ibus。。。所以我们只要设置 fcitx 自启动就可以了。
    使用 gnome-session-properties 添加一个 fcitx 的启动程序。
  3. 最后禁用 gnome-settings-daemon 的键盘动作:

    $ gsettings set org.gnome.settings-daemon.plugins.keyboard active false 

ssh 单一用户登录限制

为了防止某一用户重复登陆,也为了防止滥用资源,我们可以用 PAM 来作限制以达到单点登陆的目的。

  1. 确保 /etc/pam.d/sshd 里添加了 “pam_limits.so”,一般情况下 Debian 系的发行版已经添加。
    session required pam_limits.so
  2. 在 “/etc/security/limits.conf” 里添加 “USERNAME – maxlogins 1″,意思是 UERNAME 这个用户的最大登录用户数为1,当然也可以用 * 来代表所有用户。
  3. 重启 ssh 服务 /etc/init.d/ssh restart,超过限制数的 SSH 登录就会提示 Too many logins for 'USERNAME'.

debian 下 crontab 的时区设置

debian 中设置的 crontab 不能按时执行,而是按了 UTC 时间来执行了这个脚本,而 VPS 中的 localtime 已经设置成了 PRC。运行了一下 tzselect 重新选取了时区,crontab 终于能按时执行了。。。

Google 了一圈,发现原来 debian 下面的 crontab 是不会根据 /etc/localtime 来的,而是要读取 /etc/timezone 中的时区设置。