存档

‘也谈技术’ 分类的存档

什么是网站建设

2006年12月6日 没有评论

  网站建设,是一门艺术与技术综合的学问。一般人们都很容易把它与“做网页”等同起来。这样认为是不合适的。因为网页制作只是网站建设的一个部分。而除些之外,网站建设还包括服务器配置、网站架构规划、站点功能设计、网站美工制作、网站宣传与推广等等内容。因此,要建设一个网站,要了解的知识是多方面的。

  一般说来,网站建设过程中最容易和最直观的部分就是网页制作了,这也是为什么很多人容易把这两个概念混淆的原因。现在关于网页制作的书籍和文章很多,很多朋友也都对这方面的知识比较了解。我就不做过多的解释了。现在说说其它的方面。

  关于服务器的配置

  服务器的配置是一项专业性很强的工作,要想架设一个“可以用”的服务器是相当简单的,可是要想配置一个安全、稳定、高效的服务器却是十分困难的。就个人应用而言,如个人主页、Blog等,使用的多是主机服务商提供的主机服务,因此一般不必关心服务器的配置问题。但对于有特殊需要的用户(主要是企业或团体),为了提供更加高效的服务、保证信息的安全,有必要使用自己的主机,这时,服务器的配置就变得犹为重要。

  关于网站功能设计

  一个网站,最重要的是它所提供的功能,而不是它的界面,这是一个最基本的常识,但是却常被人们所忽视。很多人总是刻意的追求网站界面的花哨,却忘了真正能够留住访问者的是网站本身提供给他们的便利,而不是花哨的界面。举个例子来说,一个提供旅店信息的网站,如果它不能够提供及时、权威的信息,那么它的界面再吸引人,也不会有人愿意在这样的网站停留。因为它不能提供访客需要的信息。
  当然,这并不是说界面不重要,只是不如网站的功能重要。因此,在你建设网站的时候,一定要想好,你的网站的功能是什么?你的网站凭什么吸引人?访问者能在你的网站得到什么?只有考虑好了这些问题,才能谈界面的设计,否则,没有一个网站功能定位,一切的花哨界面都没有任何意义。

  关于网站架构规划

  这是网站建设中比较重要的一个方面。它指的是规划网站的结构,使得用户在访问网站的时候能够快速高效的找到自己需要的信息。评判一个网站架构科学性的依据很简单,如果访问者不能在三次点击中找到他需要的信息,那么这个网站的架构就不是科学的。因为如果用户点击了三次还没有找到自己想要的信息,那么他很可能没有耐心再点击下去了。那么,如何设计网站的架构呢?
  一般说来,可以把网站的页面分成三个等级,第一级就是主页,提供关于整个网站的信息和简介;第二级是具体的分类,提供某一类信息的整合与简介;第三级是内容页,提供某一具体问题的信息。一般这种三级设计对大多数网站来说是可行的。当然也有比这种方案更“深”一些的,如四级的,还更“浅”一些的,如两级的,不过都是特殊的情况,不是很常用。因为如果网站太“深”,用户需要点击多次才能进入到内容页面,而网站太“浅”的话,一个页面上的链接(内容)就会太多,用户不容易找到自己需要的信息。
  那么,光只是设计好网站的“深度”就行了吗?不是的。因为如果用户对你的网站的了解不多的话,他很可能不能通过你提供的架构很快的找到自己需要的信息,这时,网站的搜索功能就很有必要了。用户只要输入他关心的关键词,然后就可以找到与此相关的内容的列表。相当于只点击了两次。

  结语

  今天先说这些吧。有说的不对和不完全的地方请朋友们多多指教。

分类: Web开发, 网站建设 标签:

如何选择网站空间

2006年12月6日 没有评论

  现在想拥有自己的网站的朋友越来越多了,而要建设一个网站,除了要掌握网站建设的一些相关知识外,最主要的就是要有一个稳定的网站空间,用来存放网站文件,提供网络服务。那么,什么是网站空间呢?如何选择适合自己的网站空间?

  所谓的网站空间,指的是可以提供web, ftp等网络服务的服务器上的一块硬盘空间,用来存放你的网站文件,使得用户可以通过浏览器来访问你的网站。听起来比较简单,看起来只要有一块硬盘就行了。事实上,一个网站空间最重要的是能提供稳定、高效的网络服务,而不是能够存储文件。因此,一个好的网站空间是不容易寻找的。

  对于企业级的用户,一般都使用自己的主机做为服务器,从而对服务器有完全的权限,这样的网站空间从效果上讲是最好的,因为整个主机都在你的控制中,但同时,它也是最昂贵的。首先是需要你有一台比较强劲的电脑,然后还要24小时挂在网上,这样还不行,它同时还要能应付多个用户的访问请求,也就是说,对于访问量比较大的网站,一条网络专线是必要的。这样的东西我们一般的朋友是负担不起的。所以,我们要想些其它的解决方案。对于一般的个人网站,可以使用虚拟主机。

  所谓虚拟主机,顾名思意,就是说它不是主机,但是看起来像主机,是虚拟的。在服务器端,服务提供商使用一些技术手段,把一台主机的硬盘分成若干份,其中的每一份放置一个网站的文件,而用户访问其中的某一个网站时,与把这个网站放在一个独立的主机上的效果是一样的。容易发现,这样的解决方法降低的成本,因为只需要一台主机,只做一次服务器配置,就可以使多个网站同时工作了。因此,付费的虚拟主机服务比服务器托管服务要便宜得多。

  知道了虚拟主机是怎么一回事就不难发现,既然一台主机中有多个网站,那么当几个网站同时工作时,彼此是要争夺网络带宽的,这就会影响网站的稳定性。因此,选择虚拟主机要注意,如果一台主机中有太多的网站,那么其稳定性是极差的。在选择虚拟主机时尽量选择一些比较知名的虚拟主机服务提供商。这样大多数时候能够保证你的网站的稳定性。

  网络上多数的虚拟主机服务都是收费的。当然也有免费的虚拟主机,只不过免费的主机多数稳定性都不好。不过我们的很多朋友可能没有那么多钱去弄一个不错的虚拟主机,怎么办呢?我恰好知道一个不错的免费虚拟主机的提供商,这是一个国外的虚拟主机,免费申请,最大250M网站空间,两个数据库,支持PHP,还有其它的方案供你选择,有FTP上传功能。是一个新手开始自己网站建设生涯的好地方。申请的网址是:http://byethost.com/signup_i.php。我个人的网站用的就是这里提供的空间。我个人用着感觉还不错。有兴趣的朋友可以试试。

分类: 网站建设 标签:

你真的需要一个网站吗?

2006年12月6日 没有评论

你真的需要一个网站吗?

  现在越来越多的朋友都在学习网站的建设。WEB2。0的风潮更是让很多朋友心里痒痒,于是都来追风,要做自己的网站。可是,很多人都没有想过,自己为什么要一个网站。正在或者想要自己的网站的朋友不妨想想,你真的需要一个网站吗?

  其实很多朋友做个人网站不过是希望有一个展示自己的平台,让网上更多的朋友可以通过这个窗口来了解自己。其实要达到这个目的,根本就不需要做一个网站,只要去申请一个博客就够了。我自己刚开始学做网站的时候就是这样,觉得要做一个自己的网站才像样,可是过了一阵发现自己的网站还没有自己的博客的访问量大,效果好。所以,大家可以好好想想,你是否真的需要一个网站,还是只需要一个博客?回答了这个问题之后再决定是否要学做网站。免得付出了很多精力后才发现很不值得。

  如果你不是想要一个展示个人的平台,而是想有一个商品交易平台的话,我仍然不建议新手采用做自己的网站的方式。原因有以下几个:
  一、信用度。
   因为你的网站是一个个人网站,如何让买家信任你?你如何使得买家放心的把钱打到你的帐户上?没有一种很好的手段。
  二、网站的成熟度。
   新建设的站点都会有各方面的漏洞,犹其是新手建设的网站,而且这些网站多使用的是免费空间,或者比较初级的虚拟主机。网站的稳定性不容乐观。如果一旦发生什么问题,导致数据丢失或者其它后果,那么网站的信誉会受到严重的影响。

  商业性质的网站最重要的就是上述的两点:信用度和稳定性。因此建议新手如果想开个网店的话,可以先从一些现有的信誉好的C2C交易平台开始,比如EBAY。

  说这些并不是说学习网站建设不好,只是希望朋友们能够想想这样做是否有必要。个人意见,仅供参考。

分类: 网站建设 标签:

sed一句话技巧

2006年8月24日 没有评论

SED一句话技巧 Mar.23.2001

编:Eric Pement
version 5.1
译:段志岩 @ 吞吴
本文的最新版本通常在:

http://www.student.northpark.edu/pemente/sed/sed1line.txt

http://www.cornerstonemag.com/sed/sed1line.txt

本文的葡萄牙文版本可以在这里找到:

http://www.lrv.ufsc.br/wmaker/sed_ptBR.html

一、文本间距

二倍行距

sed G

在含空行的文件的行与行之间添加空行。输出文件的行与行之间的空行数不会多于一行。

sed '/^$/d; G'

三倍行距

sed 'G; G'

取消二倍行距(假定偶数行为空行)

sed 'n; d'

二、编号方式

标记行号(纯左对齐)。使用tab替代space可以保持页边距。

sed = filename | sed 'N; s/n/t/'

标记行号(号码在左,文本右对齐)。

sed = filename | sed 'N; s/^/ /; s/*(.{6,})n/1 /'

标记行号,但只输出非空的行。

sed '/./=' filename | sed '/./N; s/n/ /'

计算行数(类似于”wc -l”)

SED -N '$='

三、文本转换与替换

UNIX环境下:将DOS换行符转(CR/LF)换成Unix格式

sed 's/.$//' #假定所有行均以CR/LF结尾
sed 's/^M$//' #在bash/tcsh下,按Ctrl-V然后按Ctrl-M
sed 's/x0D$//' #gsed 3.02.80中可用,但第一个脚本更简单一些

UNIX环境下:将UNIX换行符转换成DOS格式

sed "s/$/'echo -e r'/" #ksh命令行模式下
sed 's/$'"/'echo r'/" #bash命令行模式下
sed "s/$/'echo r'/" #zsh命令行模式下
sed 's/$/r/' #gsed 3.02.80

DOS环境下:将Unix换行符(LF)转换成DOS格式

sed "s/$//" #方法一
sed -n p #方法二

DOS环境下:将DOS换行符(CR/LF)转换成Unix格式

#此操作不能在DOS版的sed中实现。转用tr来代替
tr -d r outfile #GNU tr version 1.22或以上

删除行首空白(space, tab),使文本全部左移。

sed 's/^[ t]*//' #请参照文末关于't'的注解

删除行末空白(space, tab)

sed 's/[ t]*$//' #请参照文末关于't'的注解

同时删除行首行尾空白(space, tab)

sed 's/^[ t]*//; s/[ t]*$//'

在每行行首插入5个空格(使页面右移)

sed 's/^/ /'

使文本全部靠右对齐(宽度为79列)

sed -e; a -e 's/^.{1, 78]$/ &/;ta'

使文本居中(宽度为79列)。

#方法一中,行首空格仍然有效,行尾被加上了空白以填补不足。
#方法二中,行首空白在居中过程中被抛弃,行尾也没有补白的空白。
sed -e :a -e 's/^.{1, 77}$/ &/;ta' #方法一
sed -e :a -e 's/^.{1, 77}$/ &/;ta' -e 's/( *)1/1/' #方法二

查找与替换:将每行中的”foo”替换成”bar”

sed 's/foo/bar/' #只替换每行中的第一个实例
sed 's/foo/bar/4′ #只替换每行中的第四个实例
sed 's/foo/bar/g' #替换一行中出现的所有实例
sed 's/(.*)foo(.*foo)/1bar2/' #替换每行倒数第二个实例
sed 's/(.*)foo/1bar/' #只替换替换每行倒数第一个实例

查找与替换:将不含”baz”的行中的”foo”替换成”bar”

sed '/baz/!s/foo/bar/g'

将”scarlet”"ruby”"puce”换为”red”

sed 's/scarlet/red/g; s/ruby/red/g; s/puce/red/g' #适用于大部分sed
gsed 's/scarlet|ruby|puce/red/g' #只适用于GNU的sed

颠倒行序(使末行变首行,首行变末行) (类似tac)

#HHsed的特性(或者是Bug)会导致空行被删除
sed '1!G;h;$!d' #方法一
sed -n '1!G; h; $p' #方法二

反序输出每一行(类似rev)

sed '/n/!G;s/(.)(.*n)/&21/;//D;s/.//' /*这里似乎有点问题*/

如果某行以反斜线结尾,则将下一行接在它的后面

sed -e :a -e '/$/N; s/n//; ta'

如果某行以等号开头, 则将它接在上一行的行尾,并将等号用一个空格来替换

sed -e :a -e '$!N; s/n=/ /; ta' -e 'P;D'

给数值字符串加逗点,如将”1234567″变为”1,234,567″

gsed ':a; s/B[0-9]{3}>/,&/;ta' #GNU sed
sed -e :a -e 's/(.*[0-9]([0-9]{3})/1,2/;ta' #其它sed

给带小数点和负号的数字加逗点(GNU sed)

gsed ':a;s/(^|[^0-9])([0-9]+)([0-9]{3}/12,3/g;ta'

每隔五行加入一个空行

gsed '0~5G' #只适用于GNU sed
sed 'n;n;n;n;G' #其它sed

四、选择输出特定的行

输出文件的前十行(与head类似)

sed 10q

输出文件和第一行

sed q

输出文件和末尾10行(与tail类似)

sed -e :a -e '$q; N;11, $D;ba'

输出文件的最后两行

sed '$!N; $!D'

输出文件的末行

sed '$!d' #方法一
sed -n '$p' #方法二

输出符合正则表达式的行(类似grep)

sed -n '/regexp/p' #方法一
sed '/regexp/!d/ #方法二

输出不符合正则表达式的行(类似grep -v)

sed -n '/regexp/!p' #方法一,其实现与上面的描述是一致的
sed '/regexp/d' #方法二,这样的语法更简单

输出某一正则表达式之前的一行,但不输出含有该正则表达式的行

sed -n '/regexp/{g;1!p;};h'

输出某一正则表达式之后的一行,但不输出含有该正则表达式的行

sed -n'/regexp/{n;p;}'

输出某一正则表达式之前和之后的一行,以及该正则表达式出现的行的行号(与”grep -A1 -B1″)

sed -n -e '/regexp/{=;x;l!p;g;$!N;p;D;}' -e h

提取含AAA和BBB和CCC(任意顺序)的行

sed '/AAA/!d; /BBB/!d; /CCC/!d'

提取含AAA和BBB和CCC(按该顺序)的行

sed '/AAA.*BBB.*CCC/!d'

提取含AAA或BBB或CCC的行(类似于egrep)

sed -e '/AAA/b' -e '/BBB/b' -e'/CCC/b' -e d #适用于大部分sed
gsed '/AAA|BBB|CCC/!d' #只适用于GNU sed

输出含有AAA的段落(空行分隔段落)

#以下脚本在HHsed v1.5 中要在'x;'后加上'G;'
sed -e '/./{H;$!d;}' -e 'x; /AAA/!d;'

输出含AAA和BBB和CCC(任意顺序)的段落

sed -e '/./{H; $!d;}' -e 'x;/AAA/!d; /BBB/!d; /CCC/!d'

输出含AAA或BBB或CCC的段落

sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
gsed '/./{H;$!d;};x;/AAA|BBB|CCC/b;d' #只适用于GNU sed

输出长度不小于65个字符的行

sed -n '/^.{65}/p'

输出长度小于65个字符的行

sed -n '/^.{65}/!p' #方法一,其实现与上面的描述是一致的
sed '/^.{65}/d' #方法二,这样的语法更简单

输出从给定正则表达式到文件末尾的部分

sed -n '/regexp/,$p'

输出指定行号的部分(如输出8-12行,包括本身)

sed -n '8, 12p'

输出第52行

sed -n '52p' #方法一
sed '52!d' #方法二
sed '52q;d' #方法三(在文件较大时效率更高)

从第三行开始,每七行输出一次

gsed -n '3~7p' #只适用于GNU sed
sed -n '3,${p;n;n;n;n;n;n;} #适用于其它sed

输出两个正则表达式之间的部分(包含本身)

sed -n "/regexp1/,/regexp2/p' #大小写敏感

五、选择性删除特定行

输出除两正则表达式之间部分之外的全部

sed '/regexp1/,/regexp2/d'

删除重复、连续的行(类似uniq)

#一系列重复的行中的第一行将被保留,其余的被删除
sed '$!N; /^(.*)n1$/!P; D'

删除重复、不连续的行

#注意不要造成缓冲区溢出,否则使用GNU sed
sed -n 'G; s/n/&&/; /^([ -~]*n).*n1/d; s/n//; h; P'

删除文件的前十行

sed '1, 10d'

删除文件的末行

sed '$d'

删除文件的最后两行

sed 'N; $!P;$!D;$d'

删除文件的最后10行

sed -e :a -e '$d;N;2,10ba' -e 'P;D' #方法一
sed -n -e :a -e '1, 10!{P;N;D;};N;ba' #方法二

每8行删除一次

gsed '0~8d' #只适用于GNU sed
sed 'n;n;n;n;n;n;n;d;' #适用于其它sed

删除文件中连续的空行(只保留一个空行),包括开头和结尾 (类似cat -s)

sed '/./,/^$/!d' #方法一,文件开头无空行,结尾保留一个空行
sed '/^$/N;/n$/D' #方法二,文件开头允许一个空行,结尾无空行

删除所有连续的空行,除了前两个之外

sed '/^$/N;/n$/N;//D'

删除文首所有的空行

sed '/./,$!d'

删除文末所有空行

sed -e :a -e '/^n*$/{$d;N;ba' -e '}' #适用于所有sed
sed -e :a -e '/^n*$/N;/n$/ba' #同上,但不包括gsed 3.02*

删除每一段落的最后一行

sed -n '/^$/{p;h;};/./{x;/./p;}'

六、特殊用法

去除man文档中的特殊字符(char,backspace)

#如果你使用Unix System V 或者 bash shell,'echo'命令需要一个'-e'参数
sed "s/.`echo b`//g" #Unix 环境下双引号是必需的
sed 's/.^H//g' #在bash/tcsh, 按Ctrl+V 然后按Ctrl+H
sed 's/.x08//g' #sed v1.5的十六进制表达式

获取Usenet/e-mail的头信息

sed '/^$/q' #删除第一个空行后的所有行

获取Subject头信息,但是要删除原始的”Subject:”部分

sed '/^Subject: */!d; s///;q'

获取返回地址头信息

sed '/^Reply-To:/q; /^From:/h; /./d;g;q'

为每一行行首添加一个尖括号和一个空格(引用)

sed 's/^ /> /'

删除行首的尖括号和空格(去除引用)

sed 's/^> //'

去除大部分HTML标签(适用于多行标签)

sed -e :a -e 's/<[^>]*>//g;/

提取多部分的UU编码的二进制文件,删除不必要的头信息,只留下UU编码的部分

#传送给sed的文件必须按适当的顺序
#版本一可以在命令行下输入
#版本二可以写成可执行的Unix脚本
sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode #版本一
sed '/^end/,/^begin/d' "$@" | uudecode #版本二

七、典型用法

sed接受一个或多个命令并按顺序对每一行输入执行全部这些命令。当所有的命令都对第一行执行以后,这一行被输出,然后开始对第二行进行处理,如此循环。前面的例子假定输入来自标准输入设备(如控制台,一般是通过管道的输入)。如果输入不来自stdin,可以在命令行中添加一个或多个文件名。输出将被送到标准输出设备。

如:

cat filename | sed '10q' #使用管道输入
sed '10q' filename #同样的效果,不过免去了使用cat
sed '10q' filename > newfile #重定向输出到磁盘

更多语法讲解,包括用包含编辑命令的文件来代替命令行输入,请参阅

  • 《sed&awk,2nd Edition》by Dale Dougherty & Arnold Robbins(O’Reilly, 1997; http://www.ora.com)
  • 《UNIX Text Processing》by Dale Dougherty & Tim O’reilly(Hayden Books, 1987)

或者参考Mike Arst写的教程。

要想发掘出sed的全部力量,你必须懂得”正则表达式”。关于正则表达式,请参阅:

  • 《Mastering Regular Expressions》 by Jeffrey Freidl (O’Reilly, 1997)

Unix系统中的man手册也会有所帮助(试试”man sed”,”man regexp”, 或者看看”man ed”中关于正则表达式的部分),不过man手册是出了名的难懂。它并不是用来教那些sed和正则表达式的初学者的,它是一个写给那些已经掌握了这些工具的人的手册。

八、引号的语法

以上的例子使用单引号而不是双引号来容纳编辑命令,因为sed通常用于Unix平台。单引号可以防止Unix shell对’$”`’这样的字符进行解释和展开,如果它们被包含在双引号中,那么这些就会发生。使用csh或其衍生而来的shell的人,即使是在单引号中,还需要把’!'前加上反斜线才能正确的运行上面的例子。DOS版本的sed总是要求用双引号而不是单引号来包含编辑命令。

九、在sed脚本中使用’t’

为了文档的清晰,我们使用了表达式’t'来代表一个脚本中的制表符。但是多数sed版本不识别’t'这个缩写,因此,在编写这些脚本时你要按TAB键。’t'这个缩写是为awk,perl,HHsed,sedmod,GNU sed v3.02.80的正则表达式所支持的元字符。

十、sed的版本

sed的版本之间确不太一样,可能在语法上有些许的不同。具体说来,很多版本不支持编辑命令中的标签(:name)或分支符(b,t),除了尾部的这些元素。我们使用了可以为大多数sed用户移植的语法,尽管GNU版本的sed允许更简洁的语法。
当读者看到一个相当长的命令像:

sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

知道GNU可以让你把它减缩为:

sed '/AAA/b;/BBB/b;/CCC/b;d' #或者更简单
sed '/AAA|BBB|CCC/b;d'

是很令人高兴的。

另外,记住:很多sed的版本接受这样的命令像”/one/ s/RE1/RE2/”, 有一些不允许”/one/! s/RE1/RE2/”这样在’s'前包含空格的命令。这时,在输入命令的时候要去除空格。

十一、优化速度

当执行速度需要优化(由于输入文件很大或者处理器、CPU较慢)时,如果的替换命令前给出查找命令,替换操作会变得更快。如:

sed 's/foo/bar/g' filename #标准的替换操作
sed '/foo/ s/foo/bar/g' filename #这样执行起来更快
sed '/foo/ s//bar/g' filename #sed速记语法

在进行行的选择和删除操作时,如果你操作的行只是包含在文件前面的一部分时,在脚本中加入一个退出命令’q'会大幅缩减处理大文件的时间。如:

sed -n '45,50p' filename #输出45-50行
sed -n '51q; 45,50p' filename #同样的功能,但执行得更快

Page optimized by WP Minify WordPress Plugin