| cp 的个人资料我的资料库照片日志列表 | 帮助 |
|
11月26日 .htaccess 学习笔记.htaccess可以做大量范围的事情,包括:文件夹密码保护、用户自动重新指向、自定义错误页面、变更你的文件扩展名、屏蔽特定的用户IP地址、只允许特定的IP地址、停止目录表以及使用其他文件作为index文件,等等...... 1. Introduction 介绍 文件名 .htaccess 属性 644 (RW-R–R–) htaccess会影响它所在目录下的所有子目录 注意大多数内容都要求保持在一行之内,不要换行,否则会引起错误 2. Error Documents 错误文档 Official document: ErrorDocument Directive ErrorDocument code document 例子 ErrorDocument 400 /errors/badrequest.html ErrorDocument 404 http://yoursite/errors/notfound.html ErrorDocument 401 “Authorization Required” (注意之后内容如果出现的双引号需要转义为 \”) 常见HTTP状态码 Successful Client Requests 200 OK 201 Created 202 Accepted 203 Non-Authorative Information 204 No Content 205 Reset Content 206 Partial Content Client Request Redirected 300 Multiple Choices 301 Moved Permanently 302 Moved Temporarily 303 See Other 304 Not Modified 305 Use Proxy Client Request Errors 400 Bad Request 401 Authorization Required 402 Payment Required (not used yet) 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable (encoding) 407 Proxy Authentication Required 408 Request Timed Out 409 Conflicting Request 410 Gone 411 Content Length Required 412 Precondition Failed 413 Request Entity Too Long 414 Request URI Too Long 415 Unsupported Media Type Server Errors 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout 505 HTTP Version Not Supported 3. Password Protection 密码保护 Official document: Authentication, Authorization and Access Control 假设密码文件为.htpasswd AuthUserFile /usr/local/safedir/.htpasswd (这里必须使用全路径名) AuthName EnterPassword AuthType Basic 两种常见验证方式: Require user windix (仅允许用户windix登陆) Require valid-user (所有合法用户都可登陆) Tip: 如何生成密码文件 使用htpasswd命令(apache自带) 第一次生成需要创建密码文件 htpasswd -c .htpasswd user1 之后增加新用户 htpasswd .htpasswd user2 4. Enabling SSI Via htaccess 通过htaccess允许SSI(Server Side Including)功能 AddType text/html .shtml AddHandler server-parsed .shtml Options Indexes FollowSymLinks Includes DirectoryIndex index.shtml index.html 5. Blocking users by IP 根据IP阻止用户访问 order allow,deny deny from 123.45.6.7 deny from 12.34.5. (整个C类地址) allow from all 6. Blocking users/sites by referrer 根据referrer阻止用户/站点访问 需要mod_rewrite模块 例1. 阻止单一referrer: badsite.com RewriteEngine on # Options +FollowSymlinks RewriteCond %{HTTP_REFERER} badsite\.com [NC] RewriteRule .* - [F] 例2. 阻止多个referrer: badsite1.com, badsite2.com RewriteEngine on # Options +FollowSymlinks RewriteCond %{HTTP_REFERER} badsite1\.com [NC,OR] RewriteCond %{HTTP_REFERER} badsite2\.com RewriteRule .* - [F] [NC] - 大小写不敏感(Case-insensite) [F] - 403 Forbidden 注意以上代码注释掉了”Options +FollowSymlinks”这个语句。如果服务器未在 httpd.conf 的 段落设置 FollowSymLinks, 则需要加上这句,否则会得到”500 Internal Server error”错误。 7. Blocking bad bots and site rippers (aka offline browsers) 阻止坏爬虫和离线浏览器 需要mod_rewrite模块 坏爬虫? 比如一些抓垃圾email地址的爬虫和不遵守robots.txt的爬虫(如baidu?) 可以根据 HTTP_USER_AGENT 来判断它们 (但是还有更无耻的如”中搜 zhongsou.com”之流把自己的agent设置为 “Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)” 太流氓了,就无能为力了) RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR] RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR] RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR] RewriteCond %{HTTP_USER_AGENT} ^Custo [OR] RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR] RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR] RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR] RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR] RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR] RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR] RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR] RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR] RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR] RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR] RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR] RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR] RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR] RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR] RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR] RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR] RewriteCond %{HTTP_USER_AGENT} ^HMView [OR] RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR] RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR] RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR] RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR] RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR] RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR] RewriteCond %{HTTP_USER_AGENT} ^larbin [OR] RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR] RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR] RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR] RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR] RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR] RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR] RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR] RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR] RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR] RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR] RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR] RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR] RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR] RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR] RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR] RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR] RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR] RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR] RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR] RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR] RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR] RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR] RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR] RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR] RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR] RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR] RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR] RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR] RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR] RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR] RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR] RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR] RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR] RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR] RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR] RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR] RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR] RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR] RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR] RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR] RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR] RewriteCond %{HTTP_USER_AGENT} ^Wget [OR] RewriteCond %{HTTP_USER_AGENT} ^Widow [OR] RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] RewriteCond %{HTTP_USER_AGENT} ^Zeus RewriteRule ^.* - [F,L] [F] - 403 Forbidden [L] - ? 8. Change your default directory page 改变缺省目录页面 DirectoryIndex index.html index.php index.cgi index.pl 9. Redirects 转向 单个文件 Redirect /old_dir/old_file.html http://yoursite.com/new_dir/new_file.html 整个目录 Redirect /old_dir http://yoursite.com/new_dir 效果: 如同将目录移动位置一样 http://yoursite.com/old_dir -> http://yoursite.com/new_dir http://yoursite.com/old_dir/dir1/test.html -> http://yoursite.com/new_dir/dir1/test.html Tip: 使用用户目录时Redirect不能转向的解决方法 当你使用Apache默认的用户目录,如 http://mysite.com/~windix,当你想转向 http://mysite.com/~windix/jump时,你会发现下面这个Redirect不工作: Redirect /jump http://www.google.com 正确的方法是改成 Redirect /~windix/jump http://www.google.com (source: .htaccess Redirect in “Sites” not redirecting: why? ) 10. Prevent viewing of .htaccess file 防止.htaccess文件被查看 order allow,deny deny from all 11. Adding MIME Types 添加 MIME 类型 AddType application/x-shockwave-flash swf Tips: 设置类型为 application/octet-stream 将提示下载 12. Preventing hot linking of images and other file types 防盗链 需要mod_rewrite模块 RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www/\.)?mydomain.com/.*$ [NC] RewriteRule \.(gif|jpg|js|css)$ - [F] 解析: 若 HTTP_REFERER 非空 (来源为其他站点,非直接连接) 并且 若 HTTP_REFERER 非(www.)mydomain.com开头(忽略大小写[NC]) (来源非本站) 对于所有含有 .gif/.jpg/.js/.css 结尾的文件给出 403 Forbidden 错误[F] 也可指定响应,如下例显示替换图片 RewriteRule \.(gif|jpg)$ [R,L] [R] - 转向(Redirect) [L] - 连接(Link) 13. Preventing Directory Listing 防止目录列表时显示 IndexIgnore * IndexIgnore *.jpg *.gif Tips: 允许目录列表显示: Options +Indexes 禁止目录列表显示: Options -Indexes 显示提示信息: 页首 文件HEADER, 页尾 文件README 常用的重定向方式有: 301 redirect, 302 redirect 与 meta fresh:301 redirect: 301代表永久性转移(Permanently Moved),301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。 302 redirect: 302代表暂时性转移(Temporarily Moved ),在前些年,不少Black Hat SEO曾广泛应用这项技术作弊,目前,各大主要搜索引擎均加强了打击力度,象Google前些年对Business.com以及近来对BMW德国网站的惩罚。即使网站客观上不是spam,也很容易被搜寻引擎容易误判为spam而遭到惩罚。 meta fresh: 这在2000年前比较流行,不过现在已很少见。其具体是通过网页中的meta指令,在特定时间后重定向到新的网页,如果延迟的时间太短(约5秒之內),会被判断为spam。 301 Redirect实现网页重定向 IIS服务器实现301重定向 * 打开internet信息服务管理器,在欲重定向的网页或目录上按右键 * 选择“重定向到URL” * 在“重定向到”输入框中输入要跳转到的目标网页的URL地址 * 选中“资源的永久重定向”(切记) * 最后点击“应用” Apache服务器实现301重定向 相比较来说,Apache实现起来要比IIS简单多了。在Apache中,有个很重要的文件.htaccess,通过对它的设置,可以实现很多强大的功能,301重定向只是其中之一。 Redirect permanent / http://www.bloghuman.com/ (将目录下内容重定向到http://www.bloghuman.com/) redirect permanent /index.php http://www.bloghuman.com/index.php?go=category_6(将网页index.php重定向到http://www.bloghuman.com/index.php?go=category_6) 通过合理地配置重定向参数中的正则表达式,可以实现更复杂的匹配。有兴趣的朋友可参考本站Apache手册。 PHP下的301重定向 <? Header( "HTTP/1.1 301 Moved Permanently" ) ; Header( "Location: http://www.bloghuman.com" ); ? ASP下的301重定向 <%@ Language=VBScript %> <% Response.Status="301 Moved Permanently" Response.AddHeader "Location","http://hiup.baidu.com/liberty88" %> ASP .NET下的301重定向 <script runat="server"> private void Page_Load(object sender, System.EventArgs e) { Response.Status = "301 Moved Permanently"; Response.AddHeader ("Location","http://hiup.baidu.com/liberty88"); } </script> ColdFusion下的301重定向 <.cfheader statuscode="301" statustext="Moved permanently"> <.cfheader name="Location" value="http://hiup.baidu.com/liberty88"> 旧域名重定向到新域名 创建一个.htaccess文件,并将下面提供的代码写入文件内,它可以确保旧域名所有的目录或者网页正确的跳转到新域名内。 记住.htaccess文件一定要放在旧网站的根目录下,并且新网站要和旧网站保持相同的目录结构及网页文件 Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.domain.com/$1 [R=301,L] 请将上面的www.domain.com修改成你想要跳转到的域名。 此外,我建议大家归总旧网站的外部链接,并联系相应的站点修改导入链链的URL,以指向新站点。 注意:.htaccess文件只有在使用安装有Mod Rewrite模块的Apache作为WEB服务器的Linux主机上才能起作用 域名301重定向到www的二级域名 在以前的文章中我反复提及过:www.domain.com是domain.com域下的一个二级域名,并对二级域名和一级目录之间如何选择以及网站结构优化做了一个详细的分析,有兴趣的可以读一下两篇文章,网站结构优化是SEO中最重要。 OK,继续域301跳转到www二级域的实现方式: 创建一个.htaccess文件,并将下面提供的代码写入文件内,它可以确保所有来自对domain.com的请求都转向到对www.domain.com进行请求。记住.htaccess文件一定要放在旧网站的根目录下,并且新网站要和旧网站保持相同的目录结构及网页文件 Options +FollowSymlinks RewriteEngine on rewritecond %{http_host} ^domain.com [nc] rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc] 请将上面的domain.com和www.domain.com修改成你想要跳转到的域名。 注意:.htaccess文件只有在使用安装有Mod Rewrite模块的Apache作为WEB服务器的Linux主机上才能起作用 301重定向检测工具 配置完成后,一定认真检查一下是否正确。Internet有很多类似的Server Header检查工具,如Check Server Headers Tool - HTTP Status Codes Checker 网站302重定向使用不当导致被GOOGLE惩罚 Business.com是网上最大的商业搜索引擎和分类目录,以专业提供商业信息而享负盛名,包括近19万网页。若以“business”为关键词在Google中进行搜索,该网站名列第一。不过在9月5日,Business.com遇到一件蹊跷之事:它的首页由PR8变成了PR0, 而且Google搜索结果中找不到首页。好在被“蒸发”的只是首页,不过庆幸的是第二天首页又回到了Google的搜索结果,但PR仍旧为0。 Business.com的问题出在它的重定向命令上。该网站让business.com跳转到www.business.com,这种重定向本该是永久性的。我们知道,301属于永久性重定向,而302则属于临时性重定向,只有当一个网站或网页在24到48小时之内临时移到其它位置的情况下才能使用该命令。但Business.com却错误地使用了“HTTP/1.1302 Object Moved”状态码。 其实网站重定向极为普遍,譬如不满意原来的域名而申请了一个新域名;买下容易被人错拼的域名,防止客户因为拼错URL而找不到网站,等等。可是,很多人却会由于使用了错误的重定向状态码而遭“灭站之灾”,就象Business.com。尽管他们的重定向理由充分合理,然而若使用不当,则可能被Google误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。Business.com就是最好的前车之鉴。只不过大多数使用错误重定向参数的网站没Business.com这么幸运,一个小小的重定向就可能使网站前功尽弃,只能从头来过:重新申请新域名,重新发布新网站,等等。记住:Google绝不会同情任何人即使无心犯下的错误。 网站服务器响应网页浏览请求的运作流程 让我们先来了解一下用户/搜索引擎和网站一开始的交互流程。当用户或搜索引擎向一个网站服务器发出网页浏览请求时,该服务器将: 1.通过域名服务器(DNS)将域名转换为网站的IP地址,然后返回给客户 2.打开一个该IP套接口连接 3.记下通过该套接口的一个HTTP数据流 4.从WEB服务器接收一个响应请求的HTTP数据流。该数据流包含状态码,状态码的值由HTTP协议所决定。这里所说的“HTTP数据流”信息也叫“头信息(Header)”。头信息中包括了日期,服务器类型,通常还会有一条“200 OK”信息。如果一切良好,那么网络服务器就会将“200 OK”信息以及请求页面发送出去。如果网站在这时候已经建立了重定向,那么服务器就会在头信息中包含一个“302 Moved Temporarily”或“301 Moved Permanent”之类的响应信息。搜索引擎会根据服务器头信息中的内容作出决定。 网站重定向的注意事项 1.若准备将服务器上的文件移到其它地方时,须就以下信息正确地通知搜索引擎的爬行程序: - 目标地址:这些文件被移向何方 - 移动属性:暂时移走还是永久性移走 2.对拥有多个域名的网站,专家建议应把那些不想在搜索引擎上推广的域名用301跳转命令来永久性重定向。 确保网站实施了正确的301重定向 对于正确实施301重定向,有这样几个方法可供大家参考: 1.在.htaccess文件中增加301重定向指令 2.适用于使用Unix网络服务器的用户。通过此指令通知搜索引擎的spider你的站点文件不在此地址下。这是较为常用的办法。形如:Redirect 301 / http://www.yourdomain.com/ 3.在服务器软件的系统管理员配置区完成301重定向 适用于使用Window网络服务器的用户 4.采用“mod_rewrite”技术 通过该技术进行的改变将在.htaccess文件中体现出来,形如: Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yourdomain.com RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=permanent,L] 5.绑定/本地DNS(域名别名跳转) 如果具有对本地DNS记录进行编辑修改的权限,则只要添加一个记录就可以解决此问题。 若无此权限,则可要求网站托管服务商对DNS服务器进行相应设置。 DNS服务器的设置 若要将aaa.domain.com指向www.domain.com,则只需在DNS服务中应增加一个别名记录,可写成:aaa IN CNAME www.domain.com。 如需配置大量的虚拟域名,则可写成:* IN CNAME www.domain.com. 这样就可将所有未设置的以domain.com结尾的记录全部重定向到www.domain.com上。 6.用ASP/PHP实现301重定向: 代码在上面已经介绍过了 资深SEO专家Dan Thies的看法和建议 对于Business.com所遭遇的问题Dan Thies深有体会,因为他也有过类似的遭遇。他的网站上有一个会员跟踪脚本,其中一个会员的站点通过302命令映射到这个跟踪脚本,而这个跟踪脚本又是通过302映射到他的主页。当在Google中用“keyword research”进行搜索,他的主页排名在前十位,然而地址显示的却是那个会员的网址。结果使他哭笑不得:访问者通过Google搜索结果进入他的网站,而他却不得不为这些访问量给那个会员支付报酬! 后来他用robots.txt文件禁止Spiders跟踪访问他的会员跟踪脚本才算解决了问题。 对于Business.com,Dan Thies认为:“目前Google在302重定向"的处理上还存在一定的问题,但并不表示Google不允许302重定向。Business.com并未遭封或遭到惩罚,它们只是返回了错误的响应。” Dan Thies建议:如果使用了跟踪URL/脚本,又必须让访问者重定向到某一着陆页,那么一定要在robots.txt文件中禁止Spiders去访问第二个重定向。如果没有对跟踪URL/脚本进行重定向,而只是把另外一个URL上的内容给复制过来,那么应在robots.txt文件中禁止Spiders去访问跟踪URL,以防因内容重复而遭搜索引擎惩罚。 301重定向经验谈 一个多域名站主的经验之谈: “我只有一个网站,主域名是www.domain.com,此外还有诸如domain1.com、domain2.com、domain3.com等共计十几个域名。所有这些次级域名都映射到www.domain.com,而且所有域名对应的是同一个IP地址。由于事实上我只有一个站点,一个站点又只能对应一个.htaccess文件,显然不可能直接修改.htaccess文件来实现重定向。我采用了如下步骤: A.把domain1.com从domain.com上独立出来,让它成为服务器上的一个普通独立网站。 B.为domain1.com创建一个.htaccess文本文件,并在文件中设置重定向代码为: Redirect permanent / http://www.domain.com/ 再将修改后的.htaccess文件上传给domain1.com所在服务器。 这一步也可以在域名控制面板中完成。 C.进入域名控制面板,将所有原来绑定到domain.com上的域名从domain.com上释放,然后重新绑定到doamin1.com。这样一来,这些被绑定的域名使用的都是domain1.com的.htaccess文件,因而也就意味着它们都被永久性重定向到domain.com上了。好了,大功告成! 就这么容易! 10月26日 php下扩展php_curl.dll的安装版本:php5.05 libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll 都拷贝到system32目录下,重启apache即可. 9月19日 用於自动备份的Shell Script一个用於自动备份的Shell Script 我们先前提到,可利用Shell Script搭配crond来作定期的工作。要作定期性的工作,在UNIX上,就是与crond的搭配运用。 -------------------------------------------------------------------------------- 首先我们先来研究如何对系统进行备份。 要对系统进行备份,不外乎便是利用一些压缩工具。在许多UNIX系统上,tar及gzip是de facto的资料交换标准。我们经常可以看见一些tar.gz或tgz档,这些档案,被称为tarball。当然了,您也可以用bzip2、zip等等压缩工具来进行压缩,不必限定於gzip。但tar配合gzip是最普遍的,也是最方便的方式。 要将我们想要的资料压缩起来,进行备份,可以结合tar及gzip一起进行。方式有很多种,最常用的指令是以下这一种: tar -c file/dir ... | gzip -9 > xxxx.tar.gz 您也可以分开来做: tar -r file/dir ... -f xxxx.tar gzip -9 xxxx.tar 或 tar -r file/dir ... -f xxxx.tar gzip -9 < xxxx.tar > xxxx.tar.gz -------------------------------------------------------------------------------- 在解过Linux下档案备份的基本知识後,我们来写一个将档案备份的Script。 #!/bin/sh # Filename : backup DIRS="/etc /var /your_directories_or_files" BACKUP="/tmp/backup.tgz" tar -c $DIRS | gzip -9 > $BACKUP 其中DIRS放的是您要备份的档案及目录,BACKUP是您的备份档。可不要将/tmp放进DIRS中,那样做,您是在做备份的备份,可能将您的硬碟塞爆。 -------------------------------------------------------------------------------- 接下来测试 [foxman@foxman bash]# chmod 755 backup [foxman@foxman bash]# ./backup 执行完成後在/tmp就会有一个backup.tgz,里面储存了您重要的资料。您可用 gzip -dc /tmp/backup.tgz | tar -vt 或 tar vtfz /tmp/backup.tgz 来看看里面的档案列表。 要解开时,可用以下指令来完成复原: gzip -dc /tmp/backup.tgz | tar -xv 或 tar xvfz /tmp/backup.tgz 备份通常是仅备份系统通常最重要的部份,/etc可说是不可缺少的一部份。另外,看您系统中有那些重要的资料需要备份。通常来说,您没有必要备份/bin、/sbin、/usr/bin、/usr/sbin、/usr/X11R6/bin等等这些执行档目录。只要备份您重要的档案即可,别把整个硬碟备份,那是蛮呆的动作。 -------------------------------------------------------------------------------- 如果您有许多台机器,可利用其中一台任务较轻的内部网路主机,做为主要备份主机。将所有机器都自动执行备份,然後利用NFS/Coda/Samba等网路档案系统,将备份的资料放到该备份机器中,该机器则定时收取备份资料,然後您再由该机器中进行一次备份。 这里是整个系统备份方案的图示。 在您进行之前,先解一下,系统中那些是要备份的,那些是不需要的。 -------------------------------------------------------------------------------- 新的backup #!/bin/sh HOSTNAME=`hostname` DIRS="/etc /var /your_important_directory" BACKUP="/tmp/$HOSTNAME.tgz" NFS="/mnt/nfs" tar -c $DIRS | gzip -9 > $BACKUP mv -f $BACKUP $NFS -------------------------------------------------------------------------------- 备份主机内的Script : collect_backup #!/bin/sh NFS="/mnt/nfs" BACKUP="/backup" mv -f $NFS/*.tgz $BACKUP 在此,您不能够将所有备份都直接放在/mnt/nfs,这是危险的。万一任一台机器不小心将/mnt/nfs所有内容删除,那麽备份就会消失。因此,您需要将/mnt/nfs移到一个只有该备份主机可存取的目录中。 -------------------------------------------------------------------------------- 当这些个别的Script都测试好以後,接下来我们将他们放到crontab里面。找到您的crontab,它的位置可能在/var/spool/cron/crontabs/root、/etc/crontab、/var/cron/tabs/root。 在crontab中选择以下之一加入(看您定期的时间): Slackware : /var/spool/cron/crontabs/root 01 * * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每小时(太过火一点) 30 16 * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每日16:30,下班前备份 30 16 * * 0 /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每周一16:30 0 5 1 * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每月一号5:0 RedHat/Debian : /etc/crontab RedHat可直接将backup放入/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly。或采用如上加入/etc/crontab的方式: 有关crontab的用法,可查"man 5 crontab",在此不详述。 备份主机的设定类同。 注意: 所有机器不要同时进行备份,否则网路会大塞车。备份主机收取备份的时间要设为最後,否则会收不到备份资料。您可以在实作後,将时间间隔调整一下。 -------------------------------------------------------------------------------- 看看,两个小小不到三行的Shell Script,配合cron这个定时工具。可以让原本需要耗时多个小时的人工备份工作,简化到不到十分钟。善用您的想像力,多加一点变化,可你让您的生活变得轻松异常,快乐悠哉。 |
||||
|
|