Word使用一例(无法显示图片问题)

今天打开几个文档,发现里面的图片都显示不出来,只有黑色的框框。记得以前也遇到过这样的问题,但是忘记怎么解决的了。
凭借着强大的SE,找到了解决方案:在Word选项的“高级”中,找到“显示图片框”,把勾去掉即可。看来是Word同学可耐的图片框把图片都挡住了-_-

Ubuntu, sudo 与 PATH

好吧,我承认,这个标题的目的是SEO。
问题是这样的,最近偶然发现在ubuntu下使用sudo的话会丢失当前的PATH环境变量。比如说,我有一个目录专门放脚本: /scripts/,当前用户的PATH也加入了该路径。其中有一些脚本是要super权限的,比如/scripts/abc。于是使用sudo abc,发现ubuntu说找不到abc这个命令。
然后我想到可能sudo使用的是ROOT的环境变量,于是将这个该死的目录加入到/root/下的相关文件PATH里,然后还是不行。
上网查了下,有人说改/etc/environment中的PATH,可是还不行。
最后发现,原来sudo这个程序在编写的时候加入了这样一个功能:重置PATH为某个安全的组合(类似于/bin:/usr/bin之类的),这样不管你怎么折腾,使用sudo的时候PATH总是会丢的。
所以有两个解决方案,要么把所有的脚本拷到默认路径中(或符号链接),要么就在sudo的时候打全路径。

递归touch —— find使用一例

最近某次编译一个东东的时候,由于系统时间的问题,报了一堆warning。于是想要把所有源代码的修改时间都重置一下。首先想到的是touch,可是用了下发现touch不能递归的修改子文件夹里的东西。上网查了一下,可以用find的execute参数来搞定:
find ./ -execute touch {} \;
该命令意思是将当前文件夹及其所有子文件夹的东西全挖出来,挨个用touch命令搞一下。{}表示将具体的每一个文件名作为参数传给touch。其实就是一个针对所有文件的循环了。
Linux的命令真是无穷尽呀。

同时运行多个Tomcat实例(Linux)

此为“同时运行多个MySQL实例”的姊妹篇 ^_^
由于Tomcat是跨平台的,所以以下的方法对Windows也可用。
基本思想还是一份程序+多份配置。具体来说,Tomcat启动的时候使用两个环境变量——CATALINA_HOME和CATALINA_BASE分别表示程序和配置的位置。程序指的是bin、lib目录,配置指的是conf、temp、work、logs和webapps的目录。
这样一来就很好办了,假设在~/tomcat下新建一份实例,首先将tomcat安装目录中的conf复制过来,然后新建work temp logs webapps目录,将要部署的应用放到webapps里面,修改conf下的server.xml,将其中的端口号都改掉(Server、Connector),然后使用如下的脚本来启动Tomcat(假设tomcat程序位于/usr/share/tomcat):

#!/bin/bash

CATALINA_HOME=/usr/share/tomcat
CATALINA_BASE=/home/xxx/tomcat
CATALINA_PID=/home/xxx/tomcat/pid

export CATALINA_HOME CATALINA_BASE CATALINA_PID

/usr/share/tomcat/bin/catalina.sh start

用以下脚本停止Tomcat:

#!/bin/bash

CATALINA_HOME=/usr/share/tomcat
CATALINA_BASE=/home/xxx/tomcat
CATALINA_PID=/home/xxx/tomcat/pid

export CATALINA_HOME CATALINA_BASE CATALINA_PID

/usr/share/tomcat/bin/catalina.sh stop -force

当然,除了CATALINA_HOME等变量,还可以指定其他的参数,比如
JAVA_OPTS=”-Xms800m -Xmx1500m “
用于设置内存限制等。

同时运行多个MySQL实例(Linux)

最近研究了下如何在一台机器上运行多份MySQL实例。这种做法最直观的应用就是一台服务器部署多个web应用,为保证互不干扰,需要创建多个MySQL实例(并非简单的多个database)。
其实做法很简单,基本思想是使用同一份程序+多份配置和数据文件即可。假设现在要新建一个MySQL实例(~/newdb),复制配置文件(my.cnf)到~/newdb/my.cnf,复制数据文件夹 /var/lib/mysql 到 ~/newdb/data,然后修改my.cnf文件,主要关注以下部分:
[client]
port                        = 3307
socket                    = /home/xxx/newdb/mysql.sock

[mysqld_safe]
socket                    = /home/xxx/newdb/mysql.sock

[mysqld]
pid-file                = /home/xxx/newdb/mysql.pid
socket                    = /home/xxx/newdb/mysql.sock
port                        = 3307
datadir                 = /home/xxx/newdb/data

即所有的sock、pid、log以及数据文件的路径都得修改,另外端口号也要修改。

然后修改文件夹权限:
chown -R mysql:mysql ~/newdb

最后,使用如下命令启动新数据库:
sudo /usr/bin/mysqld_safe –defaults-file=~/newdb/my.cnf &

使用如下命令停止数据库:
sudo kill cat ~/newdb/mysql.pid

注:如果系统运行了apparmor(比如ubuntu),需要修改相应的配置。详情见my.cnf文件的相关注释。

修改ubuntu控制台界面分辨率

如果没有图形界面的话    控制台是操作linux的唯一途径,默认的分辨率非常低,操作起来很不爽。其实只要在grub的内核选项最后加一个参数 vga=XXX即可修改分辨率。其中XXX可参见下表:

       640x480            800x600            1024x768            1280x1024
256        0x301        0x303        0x305        0x307
32k        0x310        0x313        0x316        0x319
64k        0x311        0x314        0x317        0x31A
16M        0x312        0x315        0x318        0x31B

第一列指的是颜色数。

Ubuntu下服务启用与禁用

/etc/rcX.d/下的符号链接式的启动脚本估计很多人都非常熟悉了。之前我启用或禁用脚本的时候就直接删除或创建符号链接,不过今天找了一下,发现有一个工具可以比较方便的来进行管理,就是sysv-rc-conf。
apt-get 之后,使用起来非常方便,即
sudo sysv-rc-conf NAME on|off
比如
sudo sysv-rc-conf gdm off
即把gdm服务去掉了,这样开机就不会进图形界面,如果想启用的话把最后的off改成on即可。

使用popen来运行程序并获取输出

popen函数用于在Linux的C程序中运行并获取另一个程序的输出,类似于system函数,不过system可不会帮你获得输出。

#include <stdio.h>

FILE popen(const char command, const char type);
int pclose(FILE
stream);

其中command就是要运行的命令,type可取r或者w,表示返回的流是一个readonly(即调用的程序的输出)还是一个writeonly(程序的输入)。
popen之后就可以直接操作返回的FILE*了。完了之后别忘了要用pclose关闭流,而不是fclose。

参考地址:http://blog.chinaunix.net/u2/75321/showart_1673652.html

网页压缩

最近服务器总是很卡,经过研究发现问题主要出在带宽上,即服务器的带宽已经达到上限,所以导致丢包率大大增加(www.just-ping.com),网站自然就变卡了。
经gary提醒,可以使用网页压缩技术来降低带宽使用。于是上网查找相关内容,发现从上世纪90年代就开始使用这个标准(gzip)来压缩网页了,我竟然到现在都不知道。而且tomcat5开始可以方便的使用gzip压缩,方法是在server.xml的http connector中增加如下属性:
compression=”on” compressableMimeType=”text/html,text/xml”
经过试验,基本可以把页面压缩到 30% 左右,效果还是很明显的。

ubuntu下更改eth编号

最近实验室机器配置了新的网卡,装上后ubuntu理所当然的将新网卡命名为eth2(原来有两块网卡)。不过我们是要将这块卡代替原来的eth0使用,而又不想改一堆配置文件。于是我想到了将两块网卡的编号eth0和eth2对调一下。
既然是硬件相关的属性,应该会记在配置文件中,因此很有可能在/etc/下。于是我用 grep 查找了一下/etc下所有包含eth0的文件,很快定位到了 /etc/udev/rules.d/70-persistent-net.rules,将其中的eth0和eth2兑换了一下,然后重启就搞定了:)