Vagrant中Apache或Nginx,修改css/js等静态文件不生效的解决方案

如果你在Vagrant上开发,代码文件是从host机上share到vm里的,那么有可能遇到这个问题:
修改了一些静态文件,但是怎么刷新浏览器清除缓存,还是老的内容。那么你需要关闭Apache或Nginx的sendfile()功能。

简单来说,sendfile() 使用kernel的调用直接把硬盘上的文件copy给tcp连接,如果你用的是远程的文件系统,比如NFS或者VirtualBox Guest Additionos这种,那么这个方法就很不可靠。

更多关于sendfile() 的信息可参考 http://www.techrepublic.com/article/use-sendfile-to-optimize-data-transfer/

在Apache中关闭sendfile,使用 EnableSendfile off

在Nginx中则为 sendfile off

开源搜索引擎评估:Lucene, Sphinx, Elasticsearch

原文地址:http://lutaf.com/158.htm

开源搜索引擎程序有3大类

  • lucene系,java开发,包括solrelasticsearch
  • sphinx,c++开发,简单高性能
  • Xapian,c++开发

搜索引擎程序这个名称不妥当,严格说来应该叫做索引程序(indexing program),早期主要用来做中文全文搜索,但是随着互联网的深入普及,各家网站规模越来越大,索引程序在 优化网站架构上发挥了更大的作用:替代mysql数据库内置的索引

  1. 让mysql no sql化,只承担数据持久化存储的功能
  2. 消除join查询/子查询,提高数据库的并发处理能力

使用状况

Lucene出自名门,子孙兴旺,而且它的兄弟Hadoop风头正盛,所以名气最大,而sphinx因为简单可靠,代码结构优良,性能非常好,在国内大型网站中使用最广.xapian用户太少,不建议使用。技术选型要选人最多的方向,不可标新立异。

搜索性能

  • elasticsearch有数据说是200ms
  • solr 我目前手上没有数据,应该比sphinx慢
  • sphinx 平均搜索时间:20ms,如此之快,是因为sphinx的基本上可以算作静态索引。client API只能update已经存入的document属性,不能添加新文档。加入新文档只有通过 build/merge的方式,磁盘IO开销很大,从这个角度,sphinx不适合内容更新频繁的网站,不适合做实时索引。但现实情况是国内强UGC的网站基本上都采用sphinx,比如新浪微博,搜狐微博,赶集网,discuz等

    这对程序员来说是巨大的挑战:只能通过建立多级索引,或者采用sphinx+solr的混合方案

Lucene系

  • Lucene 就是一个纯粹的索引程序代码包,使用的时候,你得写一个简单的server程序(接受关键词-通过lucence查询-返回结果),然后配置在应用服务器中(tomcat/Resin),一般来说,这个server程序会采用http协议,或者xml-rpc,直接用tcp那也太无聊了
  • Solr 有大侠急公好义,帮你把上文提到的web 程序写好了,你只需要配置部署就可用,这就是solr,solr对外的接口是http协议,也支持分布式索引
  • Elasticsearch,新项目,最近很红,其实也是Lucene的马甲,有如下特点
    1. restful接口
    2. 分布式导向,包括分布式搜索,分布式索引,零配置,自动分片,索引自动负载
    3. 针对实时搜索专门优化:先把索引放在内存中,定期同步到硬盘
    4. 附带web 图形化管理工具

elasticsearch 从设计思路上是针对 Amazon CloudSearch,它的关键词是

  • 分布式
  • 实时
  • 高可用

这几点一看就是高富巨,日uv几百万的网站,索引也只有几十G,普通玩家是用不着的

但是从紧跟前沿技术的角度,如果你的索引服务器超过3台,可以尝试部署elasticsearch,性能现在是差点,但硬件和时间会帮你搞定一切

GitHub将源仓库的更新合并到自己的Fork

GitHub上有个很方便的功能叫Fork,可以将别人的工程一键复制到自己帐号下。这个功能很方便,但有点不足的是,当源项目更新后,你Fork的分支并不会一起更新,需要自己手动去更新。下面是其更新的方法:

1、在本地装好GitHub客户端,或者Git客户端

2、clone自己的fork分支到本地,可以直接使用github客户端,clone到本地,如果使用命令行,命令为:

git clone git@github.com:break123/three.js.git three.js

3、增加源分支地址到你项目远程分支列表中(此处是关键),命令为:

git remote add mrdoob git://github.com/mrdoob/three.js.git

此处可使用git remote -v查看远程分支列表

4、fetch源分支的新版本到本地

git fetch mrdoob

5、合并两个版本的代码

git merge mrdoob/master

6、将合并后的代码push到GitHub上去

git push origin master

CSS与HTML5响应式图片

原文地址:http://www.iyunlu.com/view/Front-end/70.html

 

随着 Retina 屏幕的逐渐普及,网页中对图片的适配要求也越来越高。如何让图片在放大了两倍的 Retina 屏幕显示依然清晰,曾经一度困扰着网页开发者,好在 CSS3 与 HTML5 已经着力在改变这种现状。那么到底什么是响应式图片呢?

什么是响应式图片?

响应式图片是指:用户代理根据输出设备的分辨率不同加载不同类型的图片,不会造成带宽的浪费。同时,在改变输出设备类型或分辨率时,能及时加载对应类型的图片。

CSS 响应式图片

对于很多 IOS 开发者来说可能已经不太陌生了,为了适配Retina 屏幕,传统的 CSS3 实现方式是通过加载一张宽高分别放大两倍的图片,然后通过 Media Queries 使背景图片尺寸减小一倍「background-size:50% 50%;」,例如:

 

 .mod .hd h3 { background-image:url(http://img02.taobaocdn.com/tps/i2/T10s3JXn4XXXXnbIAn-105-160.png );/* 普通屏幕 */ 

/* ------------ Retina ------------ */ 
@media only screen and (-o-min-device-pixel-ratio: 2/1), /* Opera */ 
       only screen and (min--moz-device-pixel-ratio: 2),        /* Firefox 16 之前 */ 
       only screen and (-webkit-min-device-pixel-ratio: 2),    /* Webkit */ 
       only screen and (min-resolution: 240dpi),                    /* 标准 */ 
       only screen and (min-resolution: 2dppx)                      /* 标准 */ 
    { 
.mod .hd h3{ 
background-image:url(http://img02.taobaocdn.com/tps/i2/T1t9wzXlxXXXczY8cm-212-310.png); 
background-size: 106px 155px; 
} 
}

两张图片的对比效果:

在制作@2x图片时需要注意一些问题:
如果类似上图一样是纯文字内容的图片,不要直接从大图片缩放为小图片,这样文字效果会有些失真,这是 Photoshop 渲染的问题。应该调整字号,再重新排版。

蓝框内是直接缩放图片大小的效果,红框内是把字号从32号改成16号的效果。

 

CSS3 Media Queries 中用来定义设备分辨率的是 resolution 媒体特性,同时派生出两个媒体特性,分别是 「min-resolution」和 「max-resolution」。该规范中规定:若查询 Non-Square Pixels (专业术语,指高度与宽度不等的像素,可以理解为「非正方形像素」。计算机屏幕上及高清晰度视频信号中的像素是正方形的(像素宽高比为 1:1)。标准清晰度数码视频信号中的像素都不是正方形的。例如:NTSC制式的像素高度大于宽度,而PAL制式的像素宽度则大于高度。)设备,在「min-resolution」查询中指定的值必须与最稀疏尺寸进行比较,在「max-resolution」查询中必须与最密集尺寸进行比较。对于「resolution」(没有「min-」或「max-」前缀)从不查询 Non-Square Pixels 设备。另外在 CSS image Level 3 image-resolution 属性中定义了一些单位,比如「dppx」,各浏览器支持情况如下:

 

特性 Chrome Firefox (Gecko) IE Opera Safari (WebKit)
基本特性 不支持[1]「4」 3.5 (1.9.1) [2] 9 9.5 不支持 [1]「4」
dppx 「4」 16.0 未知 12.10「3」 「4」

需要注意几点:

  1. -o-min-device-pixel-ratio 的取值是分数比如「2 /3」,Demo,详见:http://dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport/
  2. Firefox 16 之前版本是「min–moz-device-pixel-ratio」,min 后面有两个「-」。
  3. 1dppx 相当于 96dpi。

显而易见,通过 Media Queries 来实现「响应式图片」还是很麻烦,CSS 代码的可维护性不高,有一些 hack 的味道。我们更期望一种原生的语法来选择不同的图片,值得庆幸的是 CSS image Level 4 中就实现了这种原生语法的image-set。 image-set 语法:

<image-set> = image-set( [ <image-set-decl>, ]* [ <image-set-decl> | <color>] ) <image-set-decl> = [ <image> | <string> ] <resolution>

那么上面的例子我们可以改为:

background-image:url(http://img02.taobaocdn.com/tps/i2/T10s3JXn4XXXXnbIAn-105-160.png);/* 普通屏幕 */ 
background-image: -webkit-image-set(
url(http://img02.taobaocdn.com/tps/i2/T10s3JXn4XXXXnbIAn-105-160.png) 1x, 
url(http://img04.taobaocdn.com/tps/i4/T1947tXmJhXXcCfooh-210-320.png) 2x);/* Retina */

这里的单位「x」等同于「dppx」,将来是否统一还有待进一步讨论。注意 Webkit 目前只实现了 url() 形式的取值,color、*-gradient() 等暂不支持,而且「x」取负值似乎也是合法的。

以下是一些常见移动设备的「min-device-pixel-ratio」值:

-webkit-min-device-pixel-ratio: 1.0

  • 所有非 Retina 的 Mac
  • 所有非 Retina 的 iOS 设备
  • Acer Iconia A500
  • Samsung Galaxy Tab 10.1
  • Samsung Galaxy S
  • 其他设备

-webkit-min-device-pixel-ratio: 1.3

  • Google Nexus 7

-webkit-min-device-pixel-ratio: 1.5

  • Google Nexus S
  • Samsung Galaxy S II
  • HTC Desire
  • HTC Incredible S
  • HTC Velocity
  • HTC Sensation

-webkit-min-device-pixel-ratio: 2.0

  • iPhone 4
  • iPhone 4S
  • iPhone 5
  • iPad (3rd generation)
  • iPad 4
  • 所有 Retina displays 的 Mac
  • Google Galaxy Nexus
  • Google Nexus 4
  • Google Nexus 10
  • Samsung Galaxy S III
  • Samsung Galaxy Note II
  • Sony Xperia S
  • HTC One X

HTML5 响应式图片

CSS image-set 解决了背景图片的响应式问题,但是 HTML中的 img 元素怎么办呢?正当我一筹莫展的时候,2011年11月 @brucel 提出了HTML5 的一个草案:

<picture alt="">
    <source src=hires.png media="min-width:800px">
    <source src=midres.png media="min-width:480px">
    <source src=lores.png>
    <!-- 不支持的浏览器降级处理 -->
    <img src=midres.png alt="">
</picture>

于此同时,其他的一些想法如雨后春笋般涌现出来,于是 W3C 社区讨论组 Responsive Images Community Group 应运而生。最新的规范在这里:http://picture.responsiveimages.org/ 。截止本文发布时间,最近一次更新是 2013年1月7日,规范示例:

<picture width="500" height="500">
    <source media="(min-width: 45em)" srcset="large-1.jpg 1x, large-2.jpg 2x">
    <source media="(min-width: 18em)" srcset="med-1.jpg 1x, med-2.jpg 2x">
    <source srcset="small-1.jpg 1x, small-2.jpg 2x">
    <img src="small-1.jpg" alt="">
    <p>Accessible text</p>
</picture>

可以看到这里的「srcset」属性类似 image-set,通常情况下,srcset 里面的资源是具有 fallback 特性的,也就是说第一个图片资源无法加载的时候可以跳过加载后面的备用资源。 但是 Apple 的 eoconnor 提出的方案是这样的:

<img src="foo-lores.jpg" srcset="foo-hires.jpg 2x,
    foo-superduperhires.jpg 6.5x" 
    alt="decent alt text for foo.">

诚然,任何一个新标准的提出,都会存在各种不同的声音,这是好事,作为网页的最终开发者其实并不太关心实现语法。有任何问题大家也可以直接到 HTML5 中文兴趣小组参与讨论。

小结

HTML5 响应式图片的草案还刚刚开始,不过前景还是很美好的。目前我们能做的就是在CSS 中使用 image-set 属性值,因为目前大部分 Retina 屏幕的设备的浏览器都是基于 Webkit 内核的,如果有特殊的需求可以使用  Media Queries。

Smarty3中{block}使用示例

{block}

{block}可在模板上定义一块区域,以进行模板继承。详细参见模板继承。

子模板中的{block}区域代码,将会替换父模板对应的区域代码。

另外,{block}可以设置成合并父子模板的相应区域。在子模板的{block}中定义 append 或prepend,可以使子模板附加在父模板 {block}区域的后面或前面。 在{block}内容中使用{$smarty.block.parent},可以让父模板的区域代码放到 子模板{block}内的任何位置。

{blocks}可以嵌套使用。

属性:

参数名称 类型 必选参数 默认值 说明
name string Yes n/a 模板区域的名称

可选属性 (仅在子模板中使用):

名称 说明
append {block}区域代码将附加到父模板的{block}内容之后
prepend {block}区域代码将附加到父模板的{block}内容之前
hide 在没有该名称区域的时候,忽略区域内容。
nocache 关闭{block} 缓存

1. 简单的 {block} 例子

parent.tpl

<html>
  <head>
    <title>{block name="title"}Default Title{/block}</title>
    <title>{block "title"}Default Title{/block}</title>  {* short-hand  *}
  </head>
</html>

child.tpl

{extends file="parent.tpl"} 
{block name="title"}
Page Title
{/block}

结果输出:

<html>
  <head>
    <title>Page Title</title>
  </head>
</html>

2. 前面附加 {block} 例子

parent.tpl
 
<html>
  <head>
    <title>{block name="title"}Title - {/block}</title>
  </head>
</html>
   
child.tpl
 
{extends file="parent.tpl"} 
{block name="title" prepend}
Page Title
{/block}
   
结果输出
 
<html>
  <head>
    <title>Title - Page Title</title>
  </head>
</html>

 

3. 后面附加 {block} 例子

parent.tpl
 
<html>
  <head>
    <title>{block name="title"} is my title{/block}</title>
  </head>
</html>
   
child.tpl
 
{extends file="parent.tpl"} 
{block name="title" append}
Page Title
{/block}
   
结果输出:
 
<html>
  <head>
    <title>Page title is my titel</title>
  </head>
</html>

4. {$smarty.block.child} 例子

parent.tpl
 
<html>
  <head>
    <title>{block name="title"}The {$smarty.block.child} was inserted here{/block}</title>
  </head>
</html>
   
child.tpl
 
{extends file="parent.tpl"} 
{block name="title"}
Child Title
{/block}
   
结果输出:
 
<html>
  <head>
    <title>The Child Title was inserted here</title>
  </head>
</html>

5. {$smarty.block.parent} 例子

parent.tpl
 
<html>
  <head>
    <title>{block name="title"}Parent Title{/block}</title>
  </head>
</html>
   
child.tpl
 
{extends file="parent.tpl"} 
{block name="title"}
You will see now - {$smarty.block.parent} - here
{/block}
   
结果输出:
 
<html>
  <head>
    <title>You will see now - Parent Title - here</title>
  </head>
</html>

在Ubuntu-12.04上编译安装MySQL-5.6.10

MySQL官网上有deb包,但是这个帖子How to install MySQL 5.6?里说直接装deb很坑爹。本人就没尝试,有兴趣的朋友可以试试。
这里讲讲手动从源码安装MySQL-5.6.10的步骤。

1: 下载安装编译MySQL源码需要的库

firebird@locahost~$ sudo apt-get install build-essential libncurses5-dev cmake

2: 下载并解压MySQL源码包

firebird@locahost~$ cd /usr/local/src/
firebird@locahost:/usr/local/src$ sudo wget -O mysql-5.6.10.tar.gz http://www.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.10.tar.gz/from/http://cdn.mysql.com/
firebird@locahost:/usr/local/src$ sudo tar -zxvf mysql-5.6.10.tar.gz

3: 使用cmake生成安装文件

创建一个文件夹来存放安装文件:

firebird@locahost:/usr/local/src$ cd mysql-5.6.10
firebird@locahost:/usr/local/src/mysql-5.6.10$ sudo mkdir my-build
firebird@locahost:/usr/local/src/mysql-5.6.10$ cd my-build

使用cmake生成安装文件,在这里你可能需要配置一些参数。具体参数可以查看MySQL Source-Configuration Options

firebird@locahost:/usr/local/src/mysql-5.6.10/my-build$ sudo cmake ../

4: 安装MySQL

firebird@locahost:/usr/local/src/mysql-5.6.10/my-build$ sudo make install

5: 将MySQL添加为开机启动的服务

firebird@locahost:/usr/local/src/mysql-5.6.10/my-build$ cd /usr/local/mysql
firebird@locahost:/usr/local/mysql$ sudo chown -R mysql .
firebird@locahost:/usr/local/mysql$ sudo chgrp -R mysql .
firebird@locahost:/usr/local/mysql$ sudo /usr/local/mysql/scripts/mysql_install_db --user=mysql
firebird@locahost:/usr/local/mysql$ sudo chown -R root .
firebird@locahost:/usr/local/mysql$ sudo chown -R mysql data
firebird@locahost:/usr/local/mysql$ cd /usr/local/src/mysql-5.6.10/my-build
firebird@locahost:/usr/local/src/mysql-5.6.10/my-build$ sudo cp support-files/mysql.server /etc/init.d/mysql
firebird@locahost:/usr/local/src/mysql-5.6.10/my-build$ sudo cp support-files/mysql.server /etc/init.d/mysql
firebird@locahost:/usr/local/src/mysql-5.6.10/my-build$ sudo update-rc.d mysql defaults

6: 启动MySQL服务器

firebird@locahost:/usr/local/src/mysql-5.6.10/my-build$ sudo /etc/init.d/mysql start

在Ubuntu-12.04上编译安装Apache-2.4.3

Apache HTTP Server(简称Apache)是世界使用排名第一的Web服务器软件。它是Apache软件基金会的一个开放源码的网页服务器,可以运行在几乎所有广泛使用的计算机平台上。由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。

1: 安装Apache需要的依赖包

为了可以顺利配置和编译Apache,你需要先安装这些依赖软件:

firebird@locahost~$ sudo apt-get install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
dpkg-dev fakeroot g++ g++-4.6 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libdpkg-perl
libstdc++6-4.6-dev libtimedate-perl patch
After this operation, 29.0 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
....
....
....
firebird@locahost~$ sudo apt-get build-dep apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
autoconf comerr-dev debhelper dh-apparmor gettext hardening-wrapper html2text intltool-debian krb5-multidev libapr1 libapr1-dev libaprutil1 libaprutil1-dev libcap-dev libexpat1-dev libgettextpo0 libgssrpc4 libkadm5clnt-mit8 libkadm5srv-mit8 libkdb5-6 libkrb5-dev libldap2-dev libmysqlclient-dev libmysqlclient18 libpcre3-dev libpcrecpp0 libpq-dev libpq5 libsqlite3-dev libssl-dev libunistring0 m4 po-debconf sharutils uuid-dev zlib1g-dev
After this operation, 46.4 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
....
....
....
Setting up hardening-wrapper (1.36ubuntu1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

2: 下载并解压Apache源码包

firebird@locahost~$ cd /usr/local/src/
firebird@locahost:/usr/local/src$ sudo wget apache.techartifact.com/mirror//httpd/httpd-2.4.3.tar.bz2
--2012-09-17 23:56:39-- http://apache.techartifact.com/mirror//httpd/httpd-2.4.3.tar.bz2
Resolving apache.techartifact.com (apache.techartifact.com)... 111.118.180.60
Connecting to apache.techartifact.com (apache.techartifact.com)|111.118.180.60|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4559279 (4.3M) [application/x-tar]
Saving to: `httpd-2.4.3.tar.bz2'
100%[=================================================================================>] 45,59,279 60.5K/s in 71s
2012-09-17 23:57:51 (62.4 KB/s) - `httpd-2.4.3.tar.bz2' saved [4559279/4559279]
firebird@locahost:/usr/local/src$ sudo tar -jxvf httpd-2.4.3.tar.bz2
httpd-2.4.3/build/NWGNUtail.inc
httpd-2.4.3/build/pkg/
httpd-2.4.3/build/PrintPath
httpd-2.4.3/build/program.mk
...
..
.

3: 从源码安装Apache

firebird@locahost:/usr/local/src/httpd-2.4.3$ sudo ./configure --help

在运行 ./configure之前,最好先看看–help有哪些可用的选项。
然后使用你需要的选项来运行 ./configure ,如安装目录,开启的模块等。

firebird@locahost:/usr/local/src/httpd-2.4.3$ sudo ./configure --prefix=/usr/local/apache2 --enable-mods-share=all
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking build system type... x86_64-unknown-linux-gnu
configure: Configuring Apache Portable Runtime library...
configure:
....
...

编译:

firebird@locahost:/usr/local/src/httpd-2.4.3$ sudo make
/usr/share/apr-1.0/build/libtool --silent --mode=compile x86_64-linux-gnu-gcc -std=gnu99 -pthread -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -I. -I/usr/local/src/httpd-2.4.3/os/unix -I/usr/local/src/httpd-2.4.3/include -I/usr/include/apr-1.0 -I/usr/local/src/httpd-2.4.3/modules/aaa -I/usr/local/src/httpd-2.4.3/modules/cache -I/usr/local/src/httpd-2.4.3/modules/core -I/usr/local/src/httpd-2.4.3/modules/database -I/usr/local/src/httpd-2.4.3/modules/filters -I/usr/local/src/httpd-2.4.3/modules/ldap -I/usr/local/src/httpd-2.4.3/modules/loggers -I/usr/local/src/

安装:

firebird@locahost:/usr/local/src/httpd-2.4.3$ sudo make install
Making install in srclib
Making install in mpm
make[2]: Entering directory `/usr/local/src/httpd-2.4.3/server/mpm'
Making install in event
make[3]: Entering directory `/usr/local/src/httpd-2.4.3/server/mpm/event'
make[4]: Entering directory `/usr/local/src/httpd-2.4.3/server/mpm/event'

4: 启动Apache服务器

firebird@locahost:/usr/local/src/httpd-2.4.3$ sudo /usr/local/apache2/bin/apachectl start
AH00557: httpd: apr_sockaddr_info_get() failed for firebird
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

如果你看到以上错误信息, 原因是没有在 /etc/httpd/conf/httpd.conf 中设定 ServerName。
修改httpd.conf文件,增加:

ServerName www.example.com:80

再次启动Apache:

firebird@locahost:/usr/local/src/httpd-2.4.3$ sudo /usr/local/apache2/bin/apachectl start

到这里就可以打开浏览器访问了。

Linux查看硬盘使用情况命令

一、df -lh 命令

df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置;

[root@localhost ~]# df -l

 

文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 4956316 3565088 1135396 76% /
tmpfs 241320 12 241308 1% /dev/shm
/dev/sda6 4806904 2523708 2039012 56% /media/disk
/dev/sda1 4956284 3529796 1170656 76% /media/_
/dev/sda5 4845056 2581484 2019388 57% /media/disk-1

可以看到系统挂在sda3上,另外还挂了sda6/sda1/sda5三个系统。

二、fdisk -l 命令

fdisk 是一款强大的磁盘操作工具,来自util-linux软件包,我们在这里只说他如何查看磁盘分区表及分区结构;通过-l 参数,能获得机器中所有的硬盘的分区情况;

[root@localhost ~]# fdisk -l
Disk /dev/sda: 40.0 GB, 40000000000 bytes
255 heads, 63 sectors/track, 4863 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x62a9f8d0

Device Boot Start End Blocks Id System
/dev/sda1 * 1 637 5116671 83 Linux
/dev/sda2 638 891 2040255 82 Linux swap / Solaris
/dev/sda3 892 1528 5116702+ 83 Linux
/dev/sda4 1529 2744 9767520 5 Extended
/dev/sda5 1529 2136 4883728+ 83 Linux
/dev/sda6 2137 2744 4883728+ 83 Linux

sda1 是MBR(主引导记录)所在的分区;sda2是交换分区;sda4是扩展分区,包括了sda5,sda6两个逻辑分区。系统划分分区的时候只能划分4个主 分区(扩展分区也算主分区),我在上面分了3个主分区+1个Extended分区,5.6是逻辑分区。所以才会有sda1.2.3.4.5.6。如果你只划分了1个主分区+1个扩展分区,那么逻辑分区就从sda5开始了,sda1.2.5.6…

三、cfdisk -Ps命令 (注意P是大写)

cfdisk 也是一款不错的分区工具;在有些发行版中,此工具已经从util-linux包中剔除;cfdisk 简单易用是他的特点;
查看磁盘分区的用法 cfdisk -Ps 磁盘设备名 只有一个硬盘也可以用 cfdisk -Ps

例1:

[root@localhost ~]# cfdisk -Ps
Partition Table for /dev/sda

First Last
# Type Sector Sector Offset Length Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- -------
1 Primary 0 10233404 63 10233405 Linux (83) Boot
2 Primary 10233405 14313914 0 4080510 Linux swap / So (82) None
3 Primary 14313915 24547319 0 10233405 Linux (83) None
4 Primary 24547320 44082359 0 19535040 Extended (05) None
5 Logical 24547320 34314839 63 9767520 Linux (83) None
6 Logical 34314840 44082359 63 9767520 Linux (83) None
Logical 44082360 78124094 0 34041735 Free Space None

例2:

[root@localhost ~]# cfdisk -Ps /dev/sda
Partition Table for /dev/sda

First Last
# Type Sector Sector Offset Length Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- ----
1 Primary 0 10233404 63 10233405 Linux (83) Boot
2 Primary 10233405 14313914 0 4080510 Linux swap / So (82) None
3 Primary 14313915 24547319 0 10233405 Linux (83) None
4 Primary 24547320 44082359 0 19535040 Extended (05) None
5 Logical 24547320 34314839 63 9767520 Linux (83) None
6 Logical 34314840 44082359 63 9767520 Linux (83) None
Logical 44082360 78124094 0 34041735 Free Space None

四、parted 命令

parted 功能不错的分区工具;在Fedora 8中有带,可以自己安装上;调用方法简单,parted 默认是打开的设备是/dev/hda ,也可以自己指定;比如 parted /dev/hda 或/dev/sda 等;退出的方法是 quit

输入parted命令后要等会儿才会出现下面的内容:

[root@localhost ~]# parted
GNU Parted 1.8.6
使用 /dev/sda
Welcome to GNU Parted! Type ’help’ to view a list of commands.
(parted)

在光标那里输入p回车出现下面内容:

Model: ATA Maxtor 5T040H4 (scsi)
Disk /dev/sda: 40.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End S ize Type File system 标志
1 32.3kB 5240MB 5239MB 主分区 ext3 启动
2 5240MB 7329MB 2089MB 主分区 linux-swap
3 7329MB 12.6GB 5240MB 主分区 ext3
4 12.6GB 22.6GB 10.0GB 扩展分区
5 12.6GB 17.6GB 5001MB 逻辑分区 ext3
6 17.6GB 22.6GB 5001MB 逻辑分区 ext3

(parted)

在光标后面输入quit退出。

五、sfdisk -l

[root@localhost ~]# sfdisk -l
Disk /dev/sda: 4863 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

Device Boot Start End #cyls #blocks Id System
/dev/sda1 * 0+ 636 637- 5116671 83 Linux
/dev/sda2 637 890 254 2040255 82 Linux swap / Solaris
/dev/sda3 891 1527 637 5116702+ 83 Linux
/dev/sda4 1528 2743 1216 9767520 5 Extended
/dev/sda5 1528+ 2135 608- 4883728+ 83 Linux
/dev/sda6 2136+ 2743 608- 4883728+ 83 Linux

六、也可以使用 应用程序>系统工具>磁盘使用分析器 来查看磁盘使用情况。

meta viewport的使用

常用的 viewport meta 如下:

<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

1、width : 控制viewport的大小,可以指定一个值,如600, 或者特殊的值,如device-width为设备的宽度(单位为缩放为100%的CSS的像素)

2、height : 和width相对应,指定高度

3、initial-scale : 初始缩放比例,页面第一次加载时的缩放比例

4、maximum-scale : 允许用户缩放到的最大比例,范围从0到10.0

5、minimum-scale : 允许用户缩放到的最小比例,范围从0到10.0

6、user-scalable : 用户是否可以手动缩放,值可以是:①yes、 true允许用户缩放;②no、false不允许用户缩放

参考:

W3C定义:http://www.w3.org/TR/css-device-adapt/

css@viewport属性列表: W3C viewport property index table:http://dev.w3.org/csswg/css-device-adapt/#property-index

meta viewport浏览器兼容性:Browser compatibility — viewports:http://www.quirksmode.org/mobile/tableViewport.html

.htaccess文件常用配置

1. 时区设置

有些时候,当你在PHP里使用date或mktime函数时,由于时区的不同,它会显示出一些很奇怪的信息。下面是解决这个问题的方法之一。就是设置你的服务器的时区。你可以在这里找到所有支持的时区的清单。

SetEnv TZ Australia/Melbourne

2. 搜索引擎友好的301永久转向方法

为什么这是搜索引擎友好的呢?因为现在很多现代的搜索引擎都有能根据检查301永久转向来更新它现有的记录的功能。

Redirect 301 http://www.flyintofire.com/home http://www.flyintofire.com/

3. 屏蔽下载对话框

通常,当你下载东西的时候,你会看到一个对话框询问你是保持这个文件还是直接打开它。如果你不想看到这个东西,你可以把下面的一段代码放到你的.htaccess文件里。

AddType application/octet-stream .pdf  
AddType application/octet-stream .zip  
AddType application/octet-stream .mov  

4. 省去www前缀

SEO的一个原则是,确保你的网站只有一个URL。因此,你需要把所有的通过www的访问转向的非www,或者反这来。

RewriteEngine On  
RewriteBase /  
RewriteCond %{HTTP_HOST} ^www.aqee.net [NC]  
RewriteRule ^(.*)$ http://aqee.net/$1 [L,R=301]  

5. 个性化Error页面

对每个错误代码定制自己个性化的错误页面。

ErrorDocument 401 /error/401.php  
ErrorDocument 403 /error/403.php  
ErrorDocument 404 /error/404.php  
ErrorDocument 500 /error/500.php  

6. 压缩文件

通过压缩你的文件体积来优化网站的访问速度。

# 压缩 text, html, javascript, css, xml:  
AddOutputFilterByType DEFLATE text/plain  
AddOutputFilterByType DEFLATE text/html  
AddOutputFilterByType DEFLATE text/xml  
AddOutputFilterByType DEFLATE text/css  
AddOutputFilterByType DEFLATE application/xml  
AddOutputFilterByType DEFLATE application/xhtml+xml  
AddOutputFilterByType DEFLATE application/rss+xml  
AddOutputFilterByType DEFLATE application/javascript  
AddOutputFilterByType DEFLATE application/x-javascript  

7. 缓存文件

缓存文件是另外一个提高你的网站访问速度的好方法。

<FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$”>  
Header set Cache-Control “max-age=2592000″  
</FilesMatch>  

8. 对某些文件类型禁止使用缓存

而另一方面,你也可以定制对某些文件类型禁止使用缓存。

# 显式的规定对脚本和其它动态文件禁止使用缓存  
<FilesMatch “.(pl|php|cgi|spl|scgi|fcgi)$”>  
Header unset Cache-Control  
</FilesMatch>  

安全问题

下面的htaccess代码能够提高你的web服务器的安全水平。图片链接盗用保护非常有用,它能防止其他人偷盗使用你的服务器上的图片资源。

1. 通过.htaccess防盗链

痛恨那些偷盗链接你的web服务器上的图片资源而耗尽了你的带宽的行为吗?试试这个,你可以防止这种事情的发生。

RewriteBase /  
RewriteCond %{HTTP_REFERER} !^$  
RewriteCond %{HTTP_REFERER} !^http://(www.)?aqee.net/.*$ [NC]  
RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]  

2. 防黑客

如果你想提高网站的安全等级,你可以去掉下面的几行代码,这样可以防止一些常见恶意URL匹配的黑客攻击技术。

RewriteEngine On  
  
# proc/self/environ? 没门!  
RewriteCond %{QUERY_STRING} proc/self/environ [OR]  
  
# 阻止脚本企图通过URL修改mosConfig值  
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]  
  
# 阻止脚本通过URL传递的base64_encode垃圾信息  
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]  
  
# 阻止在URL含有<script>标记的脚本  
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]  
  
# 阻止企图通过URL设置PHP的GLOBALS变量的脚本  
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]  
  
# 阻止企图通过URL设置PHP的_REQUEST变量的脚本  
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})  
  
# 把所有被阻止的请求转向到403禁止提示页面!  
RewriteRule ^(.*)$ index.php [F,L]  

3. 阻止访问你的 .htaccess 文件

下面的代码可以阻止别人访问你的.htaccess文件。同样,你也可以设定阻止多种文件类型。

# 保护你的 htaccess 文件  
<Files .htaccess>  
order allow,deny  
deny from all  
</Files>  
  
# 阻止查看指定的文件  
<Files secretfile.jpg>  
 order allow,deny  
 deny from all  
</Files>  
  
# 多种文件类型  
<FilesMatch “.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$”>  
 Order Allow,Deny  
 Deny from all  
</FilesMatch>  

4. 重命名 htaccess 文件

你可以通过重命名htaccess文件来对其进行保护。

AccessFileName htacc.ess  

5. 禁止目录浏览

禁止服务器对外显示目录结构,反之亦然。

# 禁止目录浏览  
Options All -Indexes  
  
# 开放目录浏览
Options All +Indexes  

6. 改变缺省的Index页面

你可以把缺省的 index.html, index.php 或 index.htm 改成其它页面。

DirectoryIndex business.html  

7. 通过引用信息来阻止某些不欢迎的浏览者

# 阻止来自某网站的用户  
<IfModule mod_rewrite.c>  
 RewriteEngine on  
 RewriteCond %{HTTP_REFERER} scumbag.com [NC,OR]  
 RewriteCond %{HTTP_REFERER} wormhole.com [NC,OR]  
 RewriteRule .* - [F]  
</ifModule>  

8. 通过判断浏览器头信息来阻止某些请求

这个方法可以通过阻止某些机器人或蜘蛛爬虫抓取你的网站来节省你的带宽流量。

# 阻止来自某些特定网站的用户  
<IfModule mod_rewrite.c>  
SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider
|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT  
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT  
Deny from env=HTTP_SAFE_BADBOT  
</ifModule>  

9. 禁止脚本执行,加强你的目录安全

# 禁止某些目录里的脚本执行权限  
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi  
Options -ExecCGI