存档

2010年6月 的存档

URL重定向之RewriteCond 指令

2010年6月30日 没有评论

RewriteCond 指令是用来定义触发重写的条件的。即在一个RewriteRule指令之前可以有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI 与Pattern匹配并且满足此处的条件时才会起作用。

RewriteCond指令的语法如下:

[code]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /homepage.max.html [L]
[/code]

%{HTTP_USER_AGENT} 此时指的是用户的浏览器标识,上面的转写语句的意思是:当用户的浏览器标识为Mozilla,访问主页的时候,跳转到homepage.max.html页。类似%{HTTP_USER_AGENT}这样的的变量有很多,常用的有%{HTTP_HOST}, %{QUERY_STRING}等等。

注:RewriteCond的第二个参数是一个perl兼容的正则表达式,但是还有若干增补:
1.可以在表达式的开头使用’!'(惊叹号)来指定不匹配。
[code]
RewriteCond %{HTTP_HOST} !^smartwei\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://smartwei.com/$1 [L,R]
[/code]
将站内所有不适以smartwei.com开头的链接都转化为以http://smartwei.com/开头的形式。

2.除了正则表达式的标准用法,还有下列用法

  • ‘<CondPattern’(词典顺序的小于)

    将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString小于CondPattern则为真。
  • ‘>CondPattern’(词典顺序的大于)

    将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString大于CondPattern则为真。
  • ‘=CondPattern’(词典顺序的等于)

    将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString等于CondPattern(两个字符串逐个字符地完全相等)则为真。如果CondPattern是”"(两个双引号),则TestString将与空字符串进行比较。
  • ‘-d’(目录)

    将TestString视为一个路径名并测试它是否为一个存在的目录。
  • ‘-f’(常规文件)

    将TestString视为一个路径名并测试它是否为一个存在的常规文件。
  • ‘-s’(非空的常规文件)

    将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。
  • ‘-l’(符号连接)

    将TestString视为一个路径名并测试它是否为一个存在的符号连接。
  • ‘-x’(可执行)

    将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。
  • ‘-F’(对子请求存在的文件)

    检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
  • ‘-U’(对子请求存在的URL)

    检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

3.还可以追加特殊的标记[flags]作为RewriteCond指令的第三个参数
[flags]是一个以逗号分隔的以下标记的列表:

  • ‘nocase|NC’(忽略大小写)

    它使测试忽略大小写,扩展后的TestString和CondPattern中’A-Z’ 和’a-z’是没有区别的。此标记仅用于TestString和CondPattern的比较,而对文件系统和子请求的检查不起作用。
  • ‘ornext|OR’(或下一条件)

    它以OR方式组合若干规则的条件,而不是隐含的AND。典型的例子如下:

[code]
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.*
RewriteRule ... 针对这3个主机的规则集 ...
[/code]
如果不用这个标记,你就必须要书写三次条件/规则对。

作者: 石巍
原载: 金步国-Apache模块 mod_rewrite
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/url-write-rewritecond.html

分类: php知识 标签:

《作业控制系列》-“linux命令五分钟系列”之十

2010年6月23日 没有评论

通俗的讲,作业控制命令是用来控制一个一个任务的

1. 我想把updatedb命令(用于重新建立整盘索引的命令)放在后台运行。因为我不想眼睁睁的看着机器建立索引,我还想编会儿程序呢:

# updatedb & (输入)
[1] 23336 (输出)
注释:在所要执行的命令后面加上空格,再加上&符号即可实现后台执行。所返回的[1]表示这是第一个你放到后台的任务。23336是这个任务的进程号。

2. 我执行updatedb时忘了加&了,这下我怎么办?有办法:

按键盘上的ctrl-z组合键,可以将前台任务扔到后台!但务必注意的是,用ctrl-z的话,这个任务到了后台可是stopped的状态。(你都无情的把它ctrl-z到后台了,它怎么可能还会任劳任怨的继续在后台工作呢?)

3. 我学会了这招,我把很多程序都放到后台执行了。我想查看一下

# jobs
[1]+ Running updatedb &
注释:显示出了正在后台运行的任务的列表

4. 我编程结束了。想把刚才的updatedb放回前台看看。

# fg %1
注释:fg中的f就表示front,前台的意思。%1表示是在jobs命令中列出的1号任务。如果是2号任务呢,我猜你知道如何写。

5. 如果你用jobs命令发现有一个显示[stopped]的任务(任务号是2),我想让这个任务继续在后台执行:

# bg %2
注释:stopped的状态通常出现在用户ctrl-z之后。

6. 我想让后台的任务号是3的任务取消:

# kill %3
注释:这样就杀死了任务号为3的后台任务。

如果对作业控制系列的内容比较感兴趣,可以看一下IBM developer works上面的这篇文章,相信对你有帮助。

作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/linux-work-control-instruction.html

分类: linux 标签:

《zip命令》-linux命令五分钟系列之九

2010年6月23日 没有评论

上两篇文章介绍了使用gzipbunzip2命令来压缩和解压缩文件,这篇文章说一下zip命令。zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。

1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:

# zip -r yasuo.zip abc.txt dir1

2.我下载了一个yasuo.zip文件,想解压缩:

# unzip yasuo.zip

3.我当前目录下有abc1.zip,abc2.zip和abc3.zip,我想一起解压缩它们:

# unzip abc\?.zip

注释:?表示一个字符,如果用*表示任意多个字符。

4.我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:

# unzip -v large.zip

附加: yegle指出了:“列出压缩文件中的文件列表可以用zless这个命令~”。 (linux大棚进行了测试,得出了:“zless对直接用gz压缩的文件有用。如果是先tar打包再gz压缩,用zless输出的有乱码”)

5.我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否下载完全了

# unzip -t large.zip

6.我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:

# unzip -j music.zip

作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/linux-zip-instruction.html

分类: linux 标签:

《bunzip2命令》-linux命令五分钟系列之八

2010年6月23日 没有评论

在“之七”中讲到了gzip压缩工具的使用,但并不是所有的linux压缩包都是.tar.gz的(请相信我^_^),你还会发现有一类文件的后缀是.tar.bz2的(这也是真的)。此时,bunzip2命令就派上用场了。

在开始讲解之前,有一点必须要说明,bunzip2和bzip2的关系。如果你在fedora下工作,你会发现bunzip2是bzip2的一个符 号连接。但bunzip2和bzip2的功能却正好相反。bzip2是用来压缩文件的(当然如果使用特殊函数也是可以用来解压,用选项-d可以实现),而 bunzip2是用来解压文件的(相当于bzip2 -d)。类比,还有zip和unzip、gzip和gunzip、compress和uncompress。

下面来看看它的使用:

1.当你下载了一个文件为roc.tar.bz2时,该怎么解压它呢

# tar -xjvf roc.tar.bz2

注释:j选项表示采用bunzip2工具。(yegle说可以省略j,即不特殊指定压缩工具,只用-xvf。这是也正确的^_^)
注:yeglelinux大棚中做了说明:“关于省略j参数,是某个版本之后的tar才支持的,有的老版本的tar不支持,比如software ftp上的……”

2. 我有一个文件abc.txt,我想用bunzip2压缩工具进行压缩!

# bzip2 abc.txt

注释:压缩后会得到一个压缩文件abc.txt.bz2,同时原abc.txt会被删除。(这点很重要哦,linux考试会问到这一点

3. 如果有一个文件abc.txt.bz2,想解压缩

# bunzip2 abc.txt.bz2

注释:解压后会得到abc.txt,而原abc.txt.bz2会被删除。

4. 如果我想压缩abc1.txt,abc2.txt,abc3.txt三个文件,还有dir1和dir2目录,共5个部分,一起压缩到five.bz2中:

# bzip five.bz2 abc1.txt abc2.txt abc3.txt dir1 dir2

5. 如果有abc1.txt.bz2和abc2.txt.bz2两个文件,我想用一个命令把两个文件分别解压为abc1.txt和abc2.txt

# bunzip2 abc1.txt.bz2 abc2.txt.bz2

6. 如果有abc1.txt和abc2.txt两个文件,我想用一个命令把两个文件分别压缩为abc1.txt.bz2和abc2.txt.bz2:

# bzip2 abc1.txt abc2.txt

作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/linux-bunzip2-instruction.html

分类: linux 标签:

《gzip命令》-linux命令五分钟系列之七

2010年6月23日 没有评论

转移到linux之后的一大痛苦就是压缩和解压缩,今天的主题是“压缩和解压工具gzip”。

五分钟教会你linux压缩和解压大法~~

1. 下载了一个源码文件abc.tar.gz或abc.tgz(后缀tar.gz和tgz基本没啥区别,相同的还有.taz和.tar.Z)

# tar -xzvf abc.tar.gz 或

# tar -xzvf abc.tgz

注释:tar.gz和tgz是经过归档并由gzip工具压缩之后所得到的压缩包。

x选项表示解压缩

z表示用gzip工具进行解压缩

v表示在解压缩时显示详细信息

f表示指定文件(请注意,这个选项一定要放在各个选项的最后哦~~,也就是要和所指定的文件名挨得最近哦)

2. 遇到一个文件xyz.gz,想解压缩:

# gzip -d xyz.gz

注释:d选项表示解压缩

3. 遇到一个文件edf.tar,想解压缩:(严格的讲tar文件是归档文件,并未被压缩,这里提到的“解压缩”只是将tar文件拆开而已):

# tar -xvf edf.tar

注释:其实这个命令不是压缩命令范畴,只是在这里提一下:)

4. 想将一个文件夹dirabc压缩成.tar.gz的压缩文件:

# tar -czvf dirabc.tar.gz dirabc

5 想查看一下下载的abc.tar.gz压缩文件里包含哪些文件

# tar -ztvf abc.tar.gz

6. 用5的方法查看到abc.tar.gz压缩包,其中包括def/xyz.txt文件等很多文件,但只想提取出xyz.txt这一个文件

# tar -xzvf abc.tar.gz def/xyz.txt

7. 解压abc.tar.gz时我想保留原来被压缩文件的权限(常用于备份)

# tar -xzvpf abc.tar.gz

8. 我想压缩得最快,代价是压缩比最高

# gzip -1 abc.tar

注释:-1也可以换成–fast;-9表示压缩比高,但速度最慢,-9也可以用–best代替。默认的是-6(数字不好记的话,可以这样记:1表示一步到位,往往一步到位的东西追求的是快,而不是精致程度 ^_^)

作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/linux-gzip-instruction.html

分类: linux 标签:

《tr命令》-linux命令五分钟系列之六

2010年6月22日 没有评论

tr指令从标准输入设备读取数据,经过字符串转译后,输出到标准输出设备。

cat filename |tr u n :用于在屏幕上将filename文件中的u替换为n,而实际文件中未作替换

cat filename | tr -d abc 在屏幕上将filename内容中的所有出现的a或b或c字符删去,并显示出来

cat filename|tr [:lower:] [:upper:] 将文件内容中的小写全部变为大写

类似于[:lower:]的代替符号还有:

[:alnum:] 表示所有的字母和数字

[:alpha:] 表示所有的字母

[:blank:] 表示所有空格

[:digit:] 表示所有数字

[:graph:] 表示所有可打印字符,但不包括空格

[:print:] 表示所有可打印字符,包括空格

作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/linux-tr-instruction.html

分类: linux 标签:

《uname命令》-linux命令五分钟系列之五

2010年6月22日 没有评论

uname -a 打印所有系统信息

uname -s 打印内核名称

uname -n 打印网络节点主机名

uname -r 打印内核发信版本号

uname –help 获得帮助信息

查看系统版本号的方法还有:

  • cat /proc/version
  • cat /etc/redhat-release
  • cat /etc/issue

作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/linux-uname-instruction.html

分类: linux 标签:

《chkconfig命令》-linux命令五分钟系列之四

2010年6月22日 2 条评论

chkconfig在命令行操作时会经常用到。它可以方便地设置各个系统运行级别启动的服务。这个可要好好掌握,用熟练之后,就可以轻轻松松的管理好你的启动服务了。

1. 想列出系统所有的服务启动情况:

# chkconfig –list

2. 想列出mysqld服务设置情况:

#chkconfig –list mysqld

3. 设定mysqld在等级3和5为开机运行服务:

# chkconfig –level 35 mysqld on

–level 35表示操作只在等级3和5执行

on表示启动,off表示关闭

4. 设定mysqld在各等级为on:

# chkconfig mysqld on

注:各等级”包括2、3、4、5等级

等级0表示:表示关机

等级1表示:单用户模式

等级2表示:无网络连接的多用户命令行模式

等级3表示:有网络连接的多用户命令行模式

等级4表示:不可用

等级5表示:带图形界面的多用户模式

等级6表示:重新启动

4. 如何增加一个服务:

首先,服务脚本必须存放在/etc/ini.d/目录下;

其次,需要用chkconfig –add servicename来在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了。

最后,你就可以上面教的方法修改服务的默认启动等级了。

5. 删除一个服务:

# chkconfig –del servicename

注:Ubuntu 9.10 已经不支持chkconfig命令了

作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/linux-chkconfig-instruction.html

分类: linux 标签:

《du命令》-linux命令五分钟系列之三

2010年6月22日 没有评论

du命令:disk usage,顾名思义,是关于目录使用情况的。对了~ 它的作用就是计算目录大小的。

1.想看当前目录下所有目录以及子目录的大小:

# du -h .

“.”代表当前目录下。也可以换成一个明确的路径

-h表示用K、M、G的人性化形式显示

2.只想看当前目录下abc目录的大小,并不想看其他目录以及其子目录:

# du -ch abc | tail -n 1

此种方法需要管道技术来管道du和tail两个命令来实现。

-c表示最后计算出所有所列目录的大小之和

# du -sh abc

-s表示总结的意思,即只列出一个总结的值

# du -h –max-depth=0 abc (注:max前面是两个’-')

–max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录。

3.列出abc目录及其子目录下所有目录和文件的大小:

# du -ah abc

-a表示包括目录和文件

4.列出所有abc目录中的目录名不包括xyz字符串的目录的大小:

# du -h –exclude=’*xyz*’

5.想在一个屏幕下列出更多的关于abc目录及子目录大小的信息:

# du -0h abc

-0(杠零)表示每列出一个目录的信息,不换行,而是直接输出下一个目录的信息。

作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/linux-du-instruction.html

分类: linux 标签:

《service》-“linux命令五分钟系列”之二

2010年6月22日 1 条评论

service命令,顾名思义,就是用于管理Linux操作系统中服务的命令。

1. 声明:这个命令不是在所有的linux发行版本中都有。主要是在redhat、fedora、mandriva和centos中。

2. 此命令位于/sbin目录下,用file命令查看此命令会发现它是一个脚本命令。

3. 分析脚本可知此命令的作用是去/etc/init.d目录下寻找相应的服务,进行开启和关闭等操作。

4. 开启httpd服务器:service httpd start

start可以换成restart表示重新启动,stop表示关闭,reload表示重新载入配置。

5. 关闭mysql服务器:service mysqld stop

6. 强烈建议大家将service命令替换为/etc/init.d/mysqld stop (因为有一些linux的版本不支持service)

作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。

本文链接: http://www.smartwei.com/linux-service-instruction.html

分类: linux 标签: