一个bash script的简单例子(if case的使用)

在局域网环境中工作,经常要访问别人的电脑,而他们大多还在使用windows,所以要反复的mount、umount共享目录,烦死了,并且不umount还不行,别人一关机,这边再操作就要停顿半天没反应。所以编写了一个小小的shell script,简化这些工作。代码、注释和说明都在一起了,应该不用再多解释了吧。

#! /bin/bash

# 如果不输入参数,则提示命令的用法 # 注意判断条件的这个表达式是用英文方括号[]包含的, # 并且[后面和]前面必须各有一个空格,没有的话会报错 # 另外then必须另起一行,要不也报错 # 输出的字符串中包含|,所以必须引起来,不然就成了管道操作符了 # 如果实在不想用引号,可以在|前面加上\就可以了 if [ 0 = $# ] then echo "Usage: mmount destination [d|del|delete]" exit fi

# 看看当前用户是否root用户,不是的话就要使用sudo if [ 0 = $UID ] then SUDO="" else SUDO="sudo " fi

# 根据第一个参数判断要处理的是那个共享目录 # 为了方面调用,共享目录名称采用了“机器名-共享目录名”的简单方式 # 在这里识别出来之后再指定其详细的参数 case $1 in xjl-e) DEST=//xjl/e MOUNTPOINT=/media/share/xjl-e USERPWD=xjl% ;; cmp-c) DEST=//cmp/c$ MOUNTPOINT=/media/share/cmp-c USERPWD=cmp\\Admin%8008101818 ;; *) echo "Mount or umount: xjl-e/f/g/h, lh3000a-s, cmp-c, wf ?" exit ;; esac

# 根据第二个传入参数判断是否是需要umount的调用 # 多个判断条件用||表示OR关系,用&&表示AND关系 # OR和AND嵌套时,可以使用()来调整运算顺序 # ()后前不用加空格了,都快被[]的后前空格整疯了 if ([ "d"=$2 ] || [ "del"=$2 ] || [ "delete"=$2 ]) && [ ! -z $2 ] then $SUDO umount $MOUNTPOINT rm -r $MOUNTPOINT else mkdir $MOUNTPOINT $SUDO mount $DEST $MOUNTPOINT -o dmask=777,fmask=777,iocharset=utf8,codepage=cp936,username=$USERPWD fi

PS: vi中用:TOhtml命令生成的html颜色代码怎么就和看起来差别那么大呢,选了半天也不知道用什么颜色的背景最合适。darkolivegreen ? midnightblue? yellowgreen ?

另外推荐一个比较不错的Bash教程网站——Advanced Bash-Scripting Guide,比gnu的bash文档写得详细多了,并且都带有范例。

[Ubuntu]明明白白安装中文字体

Ubuntu 6.06 dapper对中文的支持应该说是一向不错的,包括现在默认安装就包含了scim输入法。然而,一般安装的ubuntu虽然能够显示、输入中文了,但总觉得所显示的中文像歪瓜裂枣,很是别扭。这是很无奈的,也不是linux的错,这是因为现在几乎没有免费的中文字体库来给我们用,大家平时使用习惯了的winxp里面的宋体、还有方正排版系统里面的仿宋体、公文中的方正小标宋等等,这些字体都是商业公司开发出来用在自己的产品中的,是有版权的,所以linux不能拿过来就用。如果你还没有听说过字体有版权的话,上网搜索一下“胡万进”吧,这位老兄就是当年在微软从事字体制作的一位员工,他所制作的字体的版权就是归微软公司所有。我们国家虽然对IT产业非常关注,但是更关注windows,对开源社区和自由软件的支持几乎没有,直到今天也没有投资开发出一套免费的字体供大家使用。不过幸好有怀着共产主义信念的好同志,为我们提供了免费的替代方案,现在我们可以使用圆体美化,还有开源的文泉驿域名2)可以用。

本文则是参考如何使用xp带的字体来进行中文美化?一文,实践中文字体的安装,并对ubuntu的字体体系更加深入的了解一下,这样以后再安装任何字体就都不怕了。

一、准备字体文件

我一直认为,如果我拥有了一套windows xp的使用权(通过oem方式),那么我就同时拥有了对这份windows产品的只用于我个人的任意使用权,这里面包括了对其中的字体的使用权。所以,本文中将winxp的字体拷贝到linux下使用的做法,应该是没有侵权的。

windows的字体一般存放在c:\windows\fonts目录下,我拷贝到linux下的字体有:

simfang.ttf 仿宋体
simhei.ttf 黑体
simkai.ttf 楷体
simsun.ttf 宋体和新宋体,原文件名simsun.ttc
tahoma.ttf tahoma字体
tahomabd.ttf tahoma字体的粗体形式
verdana.ttf verdana字体
verdanab.ttf verdana字体的粗体形式
verdanai.ttf verdana字体的斜体形式
verdanaz.ttf verdana字体的粗体+斜体形式

拷贝过来的字体文件放在了/home/fwolf/tools/fonts目录下。

二、将字体加入到linux的可使用字体中

首先把字体文件链接到存放字体的目录中

$ cd /usr/share/fonts
$ ln -s /home/fwolf/tools/fonts xpfonts
$ cd xpfonts
$ mkfontscale
$ mkfontdir

这样作和把字体拷贝到 /usr/share/fonts 的一个目录下的效果是一样的。后面的两个 mkfont 命令是生成 xpfonts 目录下所包含的字体的索引信息。然后运行 fc-cache 命令更新字体缓存:

$ fc-cache

现在,应该说linux就可以使用这些新装上的中文字体了,看一下openoffic里的截图吧:

linux中OpenOffice下的几种winxp字体

其中仿宋体的字体名是FangSong_GB2312,黑体是SimHei,楷体是KaiTi_GB2312,宋体是SimSun,字体名暂时都不是中文的。

三、修改/etc/fonts/fonts.conf的字体渲染顺序

让我们一边修改,一边分析fonts.conf这个文件的内容吧,注意部分注释(<–和–>之间的内容)和无关紧要或者重复的内容我将跳过不再解释。

<?xml version="1.0"?> 声明这个文件是一个xml文档
<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> xml文档的格式声明(dtd = document type define)
<!-- /etc/fonts/fonts.conf file to configure system font access -->
<fontconfig> xml文件需要的根节点
<!--
   DO NOT EDIT THIS FILE.
   IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
   LOCAL CHANGES BELONG IN 'local.conf'.

文档中提示不要手工修改fonts.conf,个人的设定可以写入local.conf文件,并且会自动被fonts.conf读入,不过我现在还不知道怎么创建这个文件,等知道了再公布出来吧,现在先拿fonts.conf开刀,反正预先已经作了备份。

   <dir>/usr/share/fonts</dir>
   <dir>/usr/X11R6/lib/X11/fonts/Type1</dir> <dir>/usr/local/share/fonts</dir>
   <dir>~/.fonts</dir>

所有字体文件存放的位置,其中第一个就是我们刚才放字体文件的目录/usr/share/fonts。

<!--
  Accept deprecated 'mono' alias, replacing it with 'monospace'
-->
   <match target="pattern">
      <test qual="any" name="family">
         <string>mono</string>
      </test>
      <edit name="family" mode="assign">
         <string>monospace</string>
      </edit>
   </match>

将本文件中的别名mono替换成全称monospace,这是xml的一个自动替换声明,使用别名的目的应该是为了简化书写或者维持对旧版本的兼容。后面还有几个替换就不再一一介绍了。

<!--
  Serif faces
 -->    <alias>
      <family>Bitstream Vera Serif</family>
      <family>Vera Sans YuanTi</family>                        <!--  added by lifesinger-->
      <family>Times</family>
      <family>Times New Roman</family>

Serif字型将要使用的字体顺序。当要显示Serif字型的内容时,就从下面这个列表中选择字体,匹配顺序是自上而下。可以看到已经安装的圆体美化再这里作了修改。如果我们想把宋体作为首选,就在Bitstream Vera Serif字体前面比葫芦画瓢加上一行就可以了。

至于什么是Serif字型,以及Sans-serif字型,可以看一下细说字体 Sans Serif 与 Serifserif vs sans serif这两篇文章,说明的很详细。我觉得把他们叫做字型或者字族,相对于字体来说,更贴切一些。

下面的Sans-serif faces、Monospace faces段中处理方式相同。

<!--
  If the font still has no generic name, add sans-serif
 -->
   <match target="pattern">

又是三个替换,大概意思是如果上面的字体匹配还不成功,就尝试使用sans-serif、serif、monospace的默认字体来替换,最后如果还替换不成功,强制使用sans-serif字体。(不知道这么理解是否正确)

<!--
  Some Asian fonts misadvertise themselves as monospaced when
  in fact they are dual-spaced (half and full).  This makes
  FreeType very confused as it forces all widths to match.
  Undo this magic by disabling the width forcing code -->
   <match target="font">
      <test name="family"><string>GulimChe</string></test>
      <edit name="globaladvance"><bool>false</bool></edit>
   </match>

一些亚洲字体实际使用了等宽字体,但是却没有明确的声明,这段就是为了兼容这个进行的处理,保持不变即可。

<!--
   The Bitstream Vera fonts have GASP entries suggesting that hinting be
   disabled below 8 ppem, but FreeType ignores those, preferring to use
   the data found in the instructed hints.  The initial Vera release
   didn't include the right instructions in the 'prep' table. Fix this
   by disabling hinting manually at smaller sizes (< 8ppem)
 -->

修正Bitstream Vera字体在小于8点的时候的显示问题,保持不变即可。

<!--
  Load local system customization file
 
   <include ignore_missing="yes">local.conf</include>
-->

加载配置文件local.conf,下面的~/.fonts.conf也是一样。

<!--
  Provide required aliases for standard names
-->
        <alias>
                <family>serif</family>
                <prefer>
                        <family>Bitstream Vera Serif</family>

又是三个系列字型的字体别名,不知道这个和前面的类似设置是怎么个关系,大概前面设置的是备选字体,这里是推荐字体?不过照例把我们的SimSun加进去。

<!--
 Artificial oblique for fonts without an italic or oblique version
 -->

对没有斜体字的字体的处理方法,保持不变即可。

<!--
 Synthetic emboldening for fonts that do not have bold face available
 -->

没有黑体字的字体的处理方法,保持不变即可。

<!--
  These are the default Unicode chars that are expected to be blank
  in fonts.  All other blank chars are assumed to be broken and
  won't appear in the resulting charsets
 -->

Unicode编码中在所有字体中都应该显示为空的编码表,保持不变即可。

<!--   Rescan configuration every 30 seconds when FcFontSetList is called
 -->

每隔30秒钟就重新检查一下本设置文件(看设置改变了没有),保持不变即可。

至此,标准的配置文件就结束了,我们需要作的主要修改也都完成了。重启X应该就能看到宋体中文的界面了。不过在fonts.conf还可以作一些其他的字体处理设置,这个在圆体美化所带的那个fonts.conf中有例子,比如:

   <!-- Win XP 效果 -->
<match target="font">
   <test name="family"><string>Vera Sans YuanTi</string></test>
   <edit name="globaladvance"><bool>false</bool></edit>
</match>

这就是指明在对Vera Sans YuanTi字体的处理中,globaladvance参数设置为false,其他的设置也多是这种语法,具体的含义和效果我就不知道了:)。

四、中文字体显示优化

按照上面的方法配置好以后,宋体能够显示了,但是字体有些发虚,那么一种简单的方法就是在 系统->首选项->字体(system->preference->font) 中选择单色(Monochrome),但是这样所有的字体包括英文字体都会有一点点的小锯齿,那么替代的方法就是通过修改fonts.conf,去掉宋体的反锯齿,并且用黑体替代宋体的粗体。在fonts.conf中添加:

<!-- 用黑体替代宋体的粗体 -->
<match target="pattern">
    <test name="family"><string>SimSun</string></test>
    <test name="weight" compare="more_eq"><const>bold</const></test>
    <edit name="family" mode="assign"><string>SimHei</string></edit>
</match>
<!-- 关闭宋体的AA -->
<match target="font">
   <test qual="any" name="family"><string>SimSun</string></test>
   <edit name="antialias" mode="assign"><bool>false</bool></edit>
</match>
<!-- 解决不能识别中文字体名称的问题 -->
<match target="pattern">
    <test name="family"><string>宋体</string></test>
    <edit name="family" mode="assign"><string>SimSun</string></edit>
</match>
<match target="pattern">
    <test name="family"><string>新宋体</string></test>
    <edit name="family" mode="assign"><string>SimSun</string></edit>
</match>
<match target="pattern">
    <test name="family"><string>仿宋_GB2312</string></test>
    <edit name="family" mode="assign"><string>FangSong_GB2312</string></edit>
</match>
<match target="pattern">
    <test name="family"><string>楷体_GB2312</string></test>
    <edit name="family" mode="assign"><string>KaiTi_GB2312</string></edit>
</match>
<match target="pattern">
    <test name="family"><string>黑体</string></test>
    <edit name="family" mode="assign"><string>SimHei</string></edit>
</match>

为什么要用黑体替代宋体的粗体呢,因为宋体字体其实是不含粗体的,windows下也是,只是windows采用了更高级一些的方法来间接实现了宋体的粗体而已。

小结

以上就是简单的中文字体设置方法,和我对fonts.conf的简单理解,希望能对大家有用,也希望过路大侠指正错误和不足之处。另外还可以参考一下一个详细的汉化美化方案(freetype/fontconfig/xft),分析得比我深入多了。

参阅:

Ubuntu的简单远程控制和远程桌面

安全方便的简单控制-ssh

安装服务器:apt-get ssh,服务器基本不用怎么配置就可以使用。 客户端一版不用安装,Linux都自带了,windows平台下可以使用putty,非常好用。

操作命令:

ssh username@host_address

ssh登录之后就像本机使用命令行登录是一样的,虽然只能使用字符界面,但基本上能够完成大部分管理工作了。有人说配合screen是十分好用的,不过我还没有仔细研究过screen。

最省事儿的X转发功能

同样也要基于ssh,不过多了各图形界面。首先打开服务端的X11转发功能,修改/etc/ssh/sshd_config文件,把X11Forwarding no改成X11Forwarding yes,就启用了ssh的X11转发功能。在我的ubuntu dapper下这个选项默认就是打开的。

操作命令:

ssh -Y username@host_address

这种方式虽然速度稍微慢了一些,但是如果客户端是Linux的话,在局域网中应该是非常方便的,因为客户端不用再配置X。如果客户端是windows,putty,好像也有这个功能,至少在Connection->SSH->Tunnels中有X11 forwarding的配置,但是可能需要安装X for windows才能使用。

另外由于只是使用了X的转发,所以服务器端也会显示你所启动的程序。

参考

使用vnc4server,据说速度最快

ubuntu安装软件是最方便的了,服务器安装:apt-get install vnc4server。客户端Linux下可以使用xvnc4viewer(apt-get install xvnc4viewer),Windows下可以使用RealVNC的free版。

服务器安装完成之后需要先使用vncpasswd命令创建一个密码,密码加密存放在~/.vnc/passwd文件中。启动服务器也很简单,执行vncserver就可以了:

fwolf@wf:$ vncserver New ‘wf:1 (fwolf)’ desktop is wf:1 Starting applications specified in /home/fwolf/.vnc/xstartup Log file is /home/fwolf/.vnc/wf:1.log

由于是第一次执行,所以创建了虚拟服务1,如果再次执行就是2,以此类推。每创建一个服务,就会在~/.vnc下面创建hostname:x.pid和hostname:x.log两个文件。关闭服务使用命令:

fwolf@wf:~$ vncserver -kill :1 Killing Xvnc process ID 5786

关闭服务之后hostname:x.pid将被删除,而hostname:x.log将保留。vnc4server好像只能设置一个密码吧,不过也没有关系,因为总是开着一个server既浪费资源也不安全,需要连接的时候用ssh连进去开就是了。

andot说如果把~/.vnc/xstartup文件的内容换成 /etc/X11/Xsession文件的内容,启动桌面之后就像本机启动一样了。我暂时还没有试过,不过现在默认的设置,连接上之后,是一个有点像超级终端的命令行窗口,但是可以运行各种X下的应用。

另外如果要修改vnc4server的端口,可以修改/usr/bin/vncserver文件,在大约第124行,有一句

$vncPort = 5900 + $displayNumber;

其中5900就是端口的起始数,按照上面那句的设置,虚拟服务1的端口号就是5900+1=5901,虚拟服务2的端口号就是5900+2=5902,以此类推。参考1参考2

在linux挂载的fat32分区上无法使用svn的问题,以及keywords:Id

在ubuntu Linux下搭建了svn服务器,工作正常,svn的档案respository存放在挂载的一个fat32分区中,apache的用户www-data也加入了plugdev组,能够正常读写svn的档案。

svn server build on ubuntu, apache, work fine. and svn respository is on mounted fat32 partition, and have add apache’s user www-data to plugdev group, so apache can r/w svn respository.

但是当在fat32分区中使用svn客户端,checkout或者update文件的时候,却发生了错误:

but when use svn client on fat32 partition, failed:

fwolf@wf:/media/hdd6/temp$ svn co http://localhost/svn/svntest/trunk –username guest Authentication realm: Fwolf’s Subversion Repository Password for ‘guest’: svn: Can’t set file ‘trunk/.svn/entries’ read-only: Operation not permitted

原来,在Linux中,有些文件是不允许非所有者owner用户修改的(不知道是核心功能就禁止这样,还是一些软件按照这个规则来实现的?),即使当前用户有读、写权限。现在遇到的这个例子就说明svn客户端就是这样,所以我们必须把svn要操作的文件(.svn/entries什么的)的所有者owner改掉。

it’s because, in linux, some file are not write able to user who is not its owner, althought the operate user have write priv, this is a example. so to make svn run right, we must change owner of mounted fat32 partition.

fwolf@wf:/media/hdd6/temp$ sudo chown fwolf svntest Password: chown: changing ownership of `svntest’: Operation not permitted

然而挂载的fat32分区还无法修改owner,那就只能通过修改/etc/fstab文件来实现了:

it seems that we cannot change owner of mounted fat32 partition, so we can only modify fstab file. open /etc/fstab, change the line

/dev/hdd5 /media/hdd5 vfat defaults,utf8,umask=007,gid=46 0 1

to / 改为

/dev/hdd5 /media/hdd5 vfat defaults,utf8,umask=007,gid=46,uid=1000 0 1

vfat是分区格式(fat32),utf8是分区的字符集iocharset,umask是挂载时分配的权限,gid 46时组“plugdev”,uid 1000就是我使用的用户fwolf。

vfat is partition fstype, utf8 is iocharset, umask is privilege not give when mount, gid 46 is group “plugdev”, uid 1000 is me — fwolf.

现在重新mount这个分区,所有分区上的文件的owner就是用户fwolf了,这也是我日常使用的用户,现在再来使用svn客户端就一切正常了。

then remount the partition, the all file on this partition is owned by fwolf, and user fwolf use svn client finely.

不过这样虽然解决了问题,但是如果多用户同时使用一台主机的同样一个fat32分区,还是无法解决,多用户的话还是把分区格式转换成ext3吧,大不了以后不用的时候再转过去。

参考: ref1, ref2-1, ref2-2

$Id$的自动修改

和windows下的客户端类似,我以前介绍过,在Linux下编辑/etc/subversion/config,添加:

[miscellany] enable-auto-props = yes [auto-props] *.html = svn:keywords=Id

就可以自动替换所有.html文件里的$Id$了。

update @ 2006-5-24 后来发现这种把仓库存在fat32分区上的方式,虽然能够正常的checkout,但是checkin/commit的时候,会出现svn无法chmod的错误,所以仍然需要把svn的仓库存放在ext3分区上,并且把目录owner设为www-data。

Linux和Win共存的模式下分区要小心了

前两天不是在重装Ubuntu的时候把winxp给毙了么,现在重装另外一台双系统机器的时候发现,问题应该是出在了调整分区大小的时候。

首先,这台电脑分区情况如下,主分区三个,一个是winxp的c盘,一个是扩展分区,所有linux分区也在这里,最后一个是ibm恢复用的预留分区。扩展分区中除了windows分区,还分了3个linux分区,分别是swap、/和/HOME。但是安装完毕Linux,再回到winxp想调整一下分区大小,启动PartitionMagic 8.0的时候就出现了错误提示:

初始化失败:错误117. Partition’s drive letter cannot be identified

原来pqmagic不能很好的识别linux的ext3分区,所以就产生了一些怪怪的现象,这个软件现在Symantec好像很久也没有更新了。加上/ipe参数强制启动pqmagic(ignore partition error),会提示硬盘上有错误:

pqmagic启动的时候提示硬盘上的错误

也许硬盘上根据就没有错误,只是pqmagic认错了而已,不过还是确认修复,然后进入pqmagic查看分区情况,会发现又是多出来两块大的未使用空间,和上次毙掉winxp时遇到的情况一样(只是后来使用过parted调整过一个小分区之后,再次使用的时候,发现这个错误消失了,所以就没有截图,不过还是对pqmagic丧失了信心)那两块多出来的未使用空间只是由于计算错误产生的,并不实际的存在。如果硬要按照这个错误的情况来进行重新分区,估计就会和我一样要遇到严重的分区表错误了。千万不要窃喜并且挪用这块海市蜃楼般的未使用空间啊,切记、切记。

所以,在ntfs、ext3等格式分区共存的情况下,最好不要使用pqmagic来进行分区,在windows下可以使用Acronis Partition Expert来分区,在Linux下可以使用partedqtparted或者gparted。只是parted系列暂时还不支持ntfs分区的调整,所以要么避免使用NTFS分区,要么使用Acronis Partition Expert来操作NTFS分区。Acronis Partition Expert好像也有for Linux版的,不过我没有找到,parted系列在Linux下分区的时候,总是要先umount分区,如果没有livecd,又只有一块硬盘的话,可能就要麻烦些了。

参考1参考2

Ubuntu下的apache2怪怪的

以前一直都是在win下使用apache,感觉比较熟悉了,现在突然转到linux或者说是ubuntu下,觉得有了很大的变化,不知道是apache2升级成这样了,还是ubuntu使然。

安装很简单,apt-get install apache2, apt-get install php5就ok啦,默认的localhost主页指向/var/www,下面再有一个目录apache2-default里面存放的才是原先的各种语言的index欢迎页面。

配置文件win下面就是一个httpd.conf搞定,现在复杂了一些: ubuntu中配置文件在/etc/apache2下,apache2.conf是全局配置或者说是主配置文件,httpd.conf是用户配置文件,感觉和用php编写程序时经常用config.php覆盖config.default.php文件中的设置是一样的,用户设置独立出来,方便管理和备份,毕竟主配置文件很少修改,偶尔修改一两句也可以写到httpd.conf里面,备份方便。

/etc/apache2下面除了两个配置文件以外,还有4个目录以前没见过,并且应该经常用到: sites-available – 已定义的虚拟主机设置 sites-enabled – 已激活的虚拟主机 mods-available – 已经安装了的模块module mods-enabled – 已经激活了的模块 一般来说,只要在enabled目录下ln建一个available目录下相应主机设置或者模块的连接,就相当于激活或者说启用了该虚拟主机或模块。乍一看有点麻烦,仔细想想确实对于管理来说方便了很多。

至于ln以后应当如何配置,也有例子可参考,默认安装就会生成一个虚拟主机NameVirtualHost *的设置文件,对应文件是sites-enabled/000-default,其实链接到文件sites-available/default,文件内容的语法和原来的httpd.conf是一样的。至于模块,也类似,比如我安装了php5之后,mods-enabled下就有了一个 php5.load(链接到mods-available/php5.load),文件内容就是一句:LoadModule php5_module /usr/lib/apache2/modules/libphp5.so,同时还有一个链接文件php5.conf,应该就是php5的相关设置了,内容也非常简单:

<IfModule mod_php5.c> AddType application/x-httpd-php .php .phtml .php3 AddType application/x-httpd-php-source .phps </IfModule>

有了这些文件作参考,配置虚拟主机或者加载模块的时候就可以照葫芦画瓢了。并且这个时候如果还按照以前的语法在httpd.conf中加载模块的话(LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so),启动apache时会提示错误并失败:

* Starting apache 2.0 web server… Syntax error on line 20 of /etc/apache2/httpd.conf: module dir_module is built-in and can’t be loaded [fail]

建立链接时好像使用软链接即可。

root@wf:/etc/apache2# ll mods-enabled/ total 0 lrwxrwxrwx 1 root root 36 2006-05-11 14:07 cgi.load -> /etc/apache2/mods-available/cgi.load lrwxrwxrwx 1 root root 37 2006-05-11 14:07 php5.conf -> /etc/apache2/mods-available/php5.conf lrwxrwxrwx 1 root root 37 2006-05-11 14:07 php5.load -> /etc/apache2/mods-available/php5.load lrwxrwxrwx 1 root root 28 2006-05-11 18:27 proxy.load -> ../mods-available/proxy.load lrwxrwxrwx 1 root root 30 2006-05-11 18:27 rewrite.load -> ../mods-available/rewrite.load

另外发现一个小问题,我把000-default改名为000-default.disabled以后,却依然生效,但是改成000-default#disabled就无效了,这和apache2.conf中的“Include /etc/apache2/sites-enabled/[^.#]*”有些不一致,但是问题不知出在哪里。不过我的做法更简单一些,也更保留了以前的操作习惯:

vi apache2.conf … # Include the virtual host configurations: #Include /etc/apache2/sites-enabled/[^.#]* Include /etc/apache2/fwolf.conf

这样所有的配置都在一个文档中了,备份的时候方便,适合于简单配置的网站。

还有,配置虚拟目录的时候如果涉及到了第二块硬盘或者其他挂载设备(非linux格式分区,不含有linux格式权限信息的分区格式),apache2默认使用的用户www-data是无法访问的,虽然配置脚本不会报错,但是无论怎么访问都会产成403 Forbidden错误,解决的方法是把用户www-data添加到相应的用户组里面去:

usermod -a -G plugdev www-data

其他形式的无权限情况也可以根据其owner,按照上述方法进行相应设置。

当然还要注意ubuntu基本上是全unicode的,文件和编辑器都是utf-8编码,所以如果以前的网页文件是gb2312编码的,需要转换成utf8格式才能正确显示:

$ mkdir /tmp/iconv_t $ for I in * > do > iconv $I -fgb2312 -tutf-8 -o/tmp/iconv_t/$I > done $cp /tmp/iconv_t/* .

以上只是使用iconv批量转换文件的一个小例子。