存档

文章标签 ‘服务器安全’

判断浏览器语言如果是中文就跳到出错script

2012年11月12日 没有评论

很多时候我们的网站需要对访问地区做相应的判断,有个很容易的办法可以做到特别的效果。比如我们可以判断来访问者浏览器的语言。来做区分分流等。

代码如下:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
<script type="text/javascript" language="JavaScript1.2">// <![CDATA[
//
if (navigator.appName == 'Netscape')
var language = navigator.language;
else
var language = navigator.browserLanguage;
if (language.indexOf('zh') > -1) document.location.href = 'error.htm';
else
// End
// ]]></script>

asp及php的url跳转代码实现

2012年11月11日 没有评论

php语言环境下的跳转

1
2
3
4
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.vps12.com/");
?>

asp语言环境下的跳转

1
2
3
4
5
6
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location", " http://www.vps12.com/"
Response.End
%>

Linux禁止root帐号直接登录

2012年11月4日 没有评论

Linux禁止root帐号直接登录
Linux的默认管理员名即是root,只需要知道ROOT密码即可直接登录SSH。禁止Root从SSH直接登录可以提高服务器安全性。经过以下操作后即可实现。
本文适用于CentOS、Debian等Linux系统。

一、新建帐户

1
useradd newuser

SSH执行以上命令,可以创建名为“newuser”的帐号,可以自定义。

二、设置帐户密码

1
passwd newuser

使用passwd命令即可给相应帐户设置或修改密码。

三、不允许root直接登陆
1、修改相关文件

1
vi /etc/ssh/sshd_config

SSH执行以上命令,修改sshd_config文件

2、禁止root登陆
查找“#PermitRootLogin yes”,将前面的“#”去掉,短尾“Yes”改为“No”,并保存文件。

四、下次登陆
1、先使用新建账号“newuser”以普通用户登陆。
2、若要获得ROOT权限,在SSH中执行以下命令

1
su root

执行以上命令并输入root密码后即可获得root权限。

如何激活WindowsServer2003终端服务器授权

2012年10月18日 没有评论

您必须先激活许可证服务器,然后它才能向“终端服务”客户端颁发许可证。当激活许可证服务器时,Microsoft会为此服务器提供一个验证服务器所有权和身份的数字证书。通过使用此证书,许可证服务器可以与Microsoft开展业务并为您的终端服务器接收客户端许可证。当“终端服务”客户端第一次尝试登录终端服务器时,终端服务器会与许可证服务器联系并为该客户端请求许可证。
在如何激活WindowsServer2003终端服务器授权的问题上,很多人都存在这样那样的疑问,本文为大家详细介绍了激活的步骤,如果觉得不错的话就支持一下!
首先安装终端服务器及终端服务器授权,
1)点击”开始”->”程序”->”管理工具”->”终端服务器授权”,选择未激活的服务器名称,选择”属性”,请记下对话框中出现的产品ID,我们要用这20位的ID号到网上注册。
2)打开InternetExplorer浏览器,在地址栏中输https://activate.microsoft.com这个地址,此时是英文界面。在左上角的下拉框中选中”Chinese(Simplified)”(简体中文)项,再按”GO”图标。
3)现在便得到的是中文网页了。确保已选中”启用许可证服务器”项,再单击”下一步”按钮。
4)在随后要求提供的信息界面中,”产品ID”处输入刚才抄下的那个20位数字,再填入自己的其他基本资料,然后再选”下一步”继续。
5)此时系统会显示你方才输入的个人信息,确信无误之后再”下一步”;
6)你便可以得到”已成功处理您的许可证服务器启动申请。你的许可证ID是:…”,又是一个需要抄下的分为七段的35位数,里面包含有数字也有大写的英文字母;并且还会问你”需要此时获取客户机许可证吗?”,你当然应该回答”是”;
7)如果没有许可证,那么许可证程序选择“EnterpriseAgreement”,确定您的信息后,便可继续”下一步”;
8)在接下来的界面中(在此是以选择“EnterpriseAgreement”,如果选择其他的许可证程序,可能略有不同),”产品类型”一项应为”Windows2003终端服务客户端访问许可证”;”数量”为你欲连接的最大用户数(比如为”100″);在”注册号码”中输入你从微软获得的那个七位数(如果自己没有许可证,那么就输入6565792,4954438,6879321或者5296992),再”下一步”;
9)又是确认您的设置;
10)现在应该是”谢谢您激活终端服务许可证”的时候了!你的收获包括两个东东,一个是刚才已经得到的那个35位数的”许可证服务器ID”,一个是现在才取得的另一个七段共35位数的”许可证密钥包ID”。恭喜你!
11)现在请到”开始”->”程序”->”管理工具”->”终端服务器授权”中完成最后的激活操作吧,选择服务器名称后点击右键,将”属性”中的”安装方法”设为”Web浏览器”;12)再选择服务器,点击右键,选择”安装许可证”;
13)现在就可以将您在Web上得到的许可证密钥ID输入到以下的输入框中了;
14)大功告成,现在终于没有90/120天的后顾之忧了;
15)最后我们又返回到终端服务器的授权中,点击服务器名称,右键选择”激活”,那么就完成任务了;

另类办法:
有三个方法:
一、将“终端服务配置”中的“授权模式”更改为“每用户”
1. 单击“开始”,指向“管理工具”,然后单击“终端服务配置”。
2. 单击“服务器设置”,然后双击“授权模式”。
3. 将“授权模式”更改为“每用户”,然后单击“确定”。

二、删除注册表中的临时许可证存储。
找到 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSLicensing 把这项删掉,就可以删除颁发的临时许可证。

命令行下:

reg delete “HKLM\SOFTWARE\Microsoft\MSLicensing” /f
缺点:到期后还要删除(好像3个月吧一次)

三、利用时间“无限”使用受权,解决的方法如下:

△ 原理
1.终端服务试用期限只检查是否过期,不检查是否进入了使用期限。
2.终端服务的使用到期时间是安装的时候产生的。

△ 先决条件
必须是新安装系统

△ 操作方法
1.设置系统时间
安装好Windows前,在BIOS中将时间修改到一个非常遥远的将来时间
例如:2010年1月1日

2.安装操作系统
没什么好说的,关键就是不能插网线。
至少是绝对不能设置有效的网关。

3.安装终端服务
选择控制面板→添加或删除程序→添加/删除Windows组建→终端服务器
千万“不”要选择安装“终端服务器授权”(!!特别注意!!)
安装时选择“我将在120天内制定许可证服务器”,
以及“每用户授权模式”。

3.安装完成
完成安装后重新启动服务器,然后将系统时间修改回来。

4. 改终端服务设置
运行gpedit.msc,打开“计算机配置”->“管理模板”->“Windows组件”->“终端服务”
找到“限制终端服务用户到一个远程会话”,设置为Disable,即禁用。

即可使用终端服务,直到201x年的安装时间+120天。

OK,下次登陆就不会有问题了。

linux下复制文件cp命令

2012年7月3日 没有评论

cp 命令

用途
复制文件。

语法
复制文件到另一文件
cp [ -E{force|ignore|warn} ] [ -f ] [ -h ] [ -i ] [ -p ] [ -I ] [ -U ] [ - ] SourceFile TargetFile

复制文件到目录
cp [ -E{force|ignore|warn} ] [ -f ] [ -h ] [ -i ] [ -p ] [[ -r | -R ] [ -H | -L | -P ]] [ -I ] [ -U ] [ - ] SourceFile … TargetDirectory

复制目录到目录
cp [ -E{force|ignore|warn} ] [ -f ] [ -h ] [ -i ] [ -p ] { -r | -R } [ -H | -L | -P ] [ -I ] [ -U ] [ - ] SourceDirectory … TargetDirectory

描述
cp 命令复制由 SourceFile 参数指定的源文件到由 TargetFile 参数指定的目标文件。如果目标文件已存在,cp 覆盖原来内容,但相关的方式、所有者和组不改变。SourceFile 的最后访问时间和 TargetFile 的最后修改时间设置为复制进行的时间。如果 TargetFile 不存在,cp 创建一个新文件命名为 TargetFile,它和源文件除了粘滞位未设置外有相同的方式,除非超级用户来设置它,而所有者和 TargetFile 组正是这种用户。当 TargetFile 是另一文件的链接时,cp 用源文件内容覆盖目标链接;来自 TargetFile 的链接保留。而且,cp 命令能复制由 SourceFile 参数(或由 SourceDirectory 参数命名的目录)指定的源文件到由 TargetDirectory 参数指定的目录。

注:如果源参数之一是目录,您需要指定 -r 或 -R 标志。
如果有目录由 cp 命令在复制过程创建,新创建的目录与相应的源目录有相同的方式。

您也能复制特殊设备文件。实现这一点的首选选项是 -R 标志。指定 -R 使特殊文件在新路径名下重新创建。指定 -r 标志使 cp 命令尝试复制特殊文件为常规文件。

标志

-E -E 选项需要下列参数中的一个。如果省略 -E 选项,warn 是缺省行为。
force
以下情况对文件的 cp 操作会失败,即如果文件的固定范围大小或空间保留不能被保存的话。
ignore
在保存范围属性时忽略任何错误。
warn
如果文件的空间保留或者固定范围大小无法保存,就发出一个警告。
-f 如果目标文件不能被写操作打开的话,指定移去目标文件。移去操作在 cp 命令作任何复制之前执行。
-h 强制 cp 命令复制符号链接。缺省值是跟随符号链接,也就是将文件复制到符号链接指向处。
-H 根据由指定为 SourceFile 操作数的任何符号链接引用的文件类型和内容来进行操作。
-i 提示您将被覆盖的文件名。上述情况发生在当 TargetDirectory 或 TargetFile 参数含有与 SourceFile 或 SourceDirectory 参数所指定的文件同名的文件时。如果您输入 y 或在语言环境下的 y 的同义词,cp 命令将继续。任何其他的回答会避免 cp 命令覆盖文件。
-I 在 ACL 转换期间禁止警告消息。
-L 根据由指定为 SourceFile 操作数的任何符号链接或在遍历文件层次结构期间遇到的任何符号链接所引用的文件类型和内容来进行操作。
-p 将每个 SourceFile/SourceDirectory 的以下特征复制到相应的 TargetFile 和/或 TargetDirectory:
最后修改数据和最后访问的时间。如果这一复制由于任何原因而失败,cp 命令将给标准错误写一个诊断消息。没有复制 SourceFile/SourceDirectory 的 nanoseconds 字段的最后修改时间或最后访问时间。
用户标识和组标识。如果这一复制由于任何原因而失败,cp 命令将给标准错误写一个诊断消息。
文件许可位和 S_ISUID 和 S_ISGID 位。如果这一复制由于任何原因而失败,cp 命令将给标准错误写一个诊断消息。
如果用户标识或组标识不能复制,则文件许可位 S_ISUID 和 S_ISGID 被清除。

为了保存所有者标识和组标识、许可方式、修改和访问次数,用户必须有适当的文件访问许可权(用户应该是超级用户或与目标文件有相同的所有者标识)

如果不能保存这些特征,则目标文件不能删除。

如果目标文件系统同样支持,则保存与 SourceFile 相关联的访问控制列表(ACL)。如果源文件包含 NFS4 ACL 且目标文件系统不支持 NFS4 ACL,则 NFS4 ACL 转换为 AIXC。请参阅《安全性》中的『用户帐户』以获取关于 ACL 的更多信息。

当 ACL 转换成功时,将会打印一条警告消息到 stderr。

-P 根据指定为 SourceFile 操作数的任何符号链接或在遍历文件层次结构期间遇到的任何符号链接来进行操作。
-r 复制由 SourceFile 或 SourceDirectory 参数指定的文件或目录下的文件层次结构(递归复制)。-r 标志用处理常规文件的相同方式处理特殊文件。
-R 复制由 SourceFile 或 SourceDirectory 参数指定的文件或目录下的文件层次结构到由 TargetDirectory 参数指定的目录。特殊文件类型,如先入先出(FIFO)文件和块及字符设备将被重新创建而非复制。符号链接也被跟随,除非指定 -h 标志。(-R 标志优先于 -r 标志。)
如果没有指定 -H、-L 或 -P 选项中的任何一个,则没有指定这些选项中哪一个将用作缺省值。请留心以下内容:

如果指定了 -H 选项,则 cp 命令将根据由指定为 SourceFile 操作数的任何符号链接引用的文件类型和内容来进行操作。
如果指定了 -L 选项,cp 命令将根据由指定为 SourceFile 操作数的任何符号链接或在遍历文件层次结构期间遇到的任何符号链接所引用的文件类型和内容来进行操作。
如果指定了 -P 选项,则 cp 命令将复制指定为 SourceFile 操作数的任何符号链接和在遍历文件层次结构期间遇到的任何符号链接,但不会进行任何符号链接。

-U 将 SourceFile 中的扩展属性(EA)、访问控制表(ACL)复制到 TargetFile。如果目标文件系统上不支持 EA,则它将被忽略。如果目标文件系统上不支持源 ACL 类型,则它将转换为由目标文件系统支持的兼容的 ACL 类型。
– 指示 –(破折号,破折号)标志之后的参数将被解释为文件名。空标志允许以 – (减号)开始的文件名规范。

退出状态
该命令返回以下退出值:

0 所有文件成功复制。
>0 发生错误。

示例
在当前目录做一个文件副本,请输入:

cp prog.c prog.bak
这将复制 prog.c 到 prog.bak。如果 prog.bak 现在不存在,则 cp 命令创建它。如果它存在,cp 命令用 prog.c 命令的副本取代它。

复制您当前目录下的一个文件到另一个目录,请输入:

cp jones /home/nick/clients
这将复制 jones 文件到 /home/nick/clients/jones。

复制一个文件到一个新的文件并保存与源文件相关联的修改日期、时间和访问控制列表,请输入: cp -p smith smith.jr
这将复制 smith 文件到 smith.jr 文件。不是用当前日期和时间戳记创建文件,而是系统给 smith.jr 文件和 smith 文件相同的日期和时间。smith.jr 文件也继承 smith 文件的访问控制保护。
复制一个目录下的所有文件到一个新目录,请输入:

cp /home/janet/clients/* /home/nick/customers
这只复制 clients 目录下的文件到 customers 目录。

复制一个目录包括其所有的文件和子目录到另一个目录,请输入: cp -R /home/nick/clients /home/nick/customers
注:目录不能复制到目录本身。这将复制 clients 目录,包括所有文件、子目录和那些子目录中的文件到 customers/clients 目录。
复制一个特殊的文件集合到另一个目录,请输入:

cp jones lewis smith /home/nick/clients
这将复制您当前工作目录的 jones,lewis,和 smith 文件到 /home/nick/clients目录。

要使用模式匹配字符来复制文件,请输入:
cp programs/*.c .
这将复制 programs 目录下,以 .c 结尾的文件到当前目录,表示为单个 . (点)。您必须在 c 和最后的点号间输入一个空格。

要将一个文件复制到新的文件并保留与源文件关联的 ACL 和 EA,请输入:
cp -U smith smith.jr

————小技巧—————
让cp 不要确认

在 /root 找 profile 出來, 把其中類似的
alias cp=’cp -i’
的加 comment 符, 再重新登入就可以了

如 .bash_profile 或 .bashrc
叫 /root/.bash_profile 或 /root/.bashrc

Nginx防盗链节省你的宽带

2012年6月25日 没有评论

根据网友文章,自己实践,介绍3种Nginx防盗链的方法,节省你的宽带
一:一般的防盗链如下:
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.ingnix.com ;
if ($invalid_referer) {
rewrite ^/ http://www.ingnix.com/retrun.html;
#return 404;
}
}
第一行:gif|jpg|png|swf|flv
表示对gif、jpg、png、swf、flv后缀的文件实行防盗链
第二行: 表示对www.ingnix.com这2个来路进行判断
if{}里面内容的意思是,如果来路不是指定来路就跳转到http://www.ingnix.com/retrun.html页面,当然直接返回404也是可以的。

ps: 以上有人说第二行的 none  要去掉。我本人试过none去掉也可以正常。具体还要大家多测试一下。
二:针对图片目录防止盗链
location /images/ {
alias /data/images/;
valid_referers none blocked server_names *.xok.la xok.la ;
if ($invalid_referer) {return 403;}
}
三:使用第三方模块ngx_http_accesskey_module实现Nginx防盗链
实现方法如下:

实现方法如下:
1. 下载NginxHttpAccessKeyModule模块文件:Nginx-accesskey-2.0.3.tar.gz
2. 解压此文件后,找到nginx-accesskey-2.0.3下的config文件。编辑此文件:替换其中的”$HTTP_ACCESSKEY_MODULE”为”ngx_http_accesskey_module”;
3. 用一下参数重新编译nginx:
./configure --add-module=path/to/nginx-accesskey
4. 修改nginx的conf文件,添加以下几行:
location /download {
accesskey             on;
accesskey_hashmethod  md5;
accesskey_arg         "key";
accesskey_signature   "mypass$remote_addr";
}

其中:
accesskey为模块开关;
accesskey_hashmethod为加密方式MD5或者SHA-1;
accesskey_arg为url中的关键字参数;
accesskey_signature为加密值,此处为mypass和访问IP构成的字符串。

访问测试脚本download.php:
<?
$ipkey= md5("mypass".$_SERVER['REMOTE_ADDR']);
$output_add_key="<a href=http://www.inginx.com/download/G3200507120520LM.rar?key=".$ipkey.">download_add_key</a><br />";
$output_org_url="<a href=http://www.inginx.com/download/G3200507120520LM.rar>download_org_path</a><br />";
echo $output_add_key;
echo $output_org_url;
?>

访问第一个download_add_key链接可以正常下载,第二个链接download_org_path会返回403 Forbidden错误。

参考:
NginxHttpAccessKeyModule

远程桌面超出最大连接数解决办法

2012年6月22日 没有评论

在日常管理和维护windows服务器时,使用远程桌面管理服务器经常会遇到 超出最大允许连接数 的问题,这是因为windows服务器默认的远程连接数为2的原因。如果遇到这样的情况如何解决呢?其他很容易。用一条dos命令就可以。不过我为大家准备了个工作可以很方便的“强行”登陆破除这个限制。

下载我们为大家准备好的软件,下载地址:http://www.dnsff.com/download/3389.rar

解包后可以得到mstsc.exe、mstscax.dll和RMDSTC.exe 三个文件。

其中RMDSTC.exe是我们要使用到的“强行”登陆工具。可以直接写ip连接。输入用户密码就可以登陆了。

如何有效防止phpddos发包

2012年6月18日 没有评论

最近一段时间以来经常发现vps的客户出现发大量udp攻击包,照成网络带宽堵塞。协助客户查了一下原因是有的网站出现的代码漏洞黑客上传了php的udp发包代码。

如何有效的对此类事件的防护及处理呢?

我们可以看到php的upd代码发包过程是由于利用了php的fsockopen函数漏洞进行的。

那我们可以这样限制一下php的代码函数:

下面是两种常用的禁用fsockopen的方法。
1、修改php.ini,将 disable_functions = 后加入 fsockopen
2、修改php.ini,将 allow_url_fopen = On 改为 allow_url_fopen = Off

一般可以写成这样:

disable_functions = popen,exec,passthru,system,fsockopen,pfsockopen

然后我们在对机器对外发udp包进行限制。windows 我已经为大家写好了规则。大家可以直接通过服务器的本地安全策略进行导入。可以有效的限制udp发包。

下载: phpddos.ipsec

Linux系统下可使用iptables防火墙进行限制udp发包,如下:

1
2
3
4
5
6
7
8
9
iptables -F
 
iptables -A OUTPUT -p udp -j DROP
 
iptables -I OUTPUT -p udp --dport 53 -d 168.95.1.1 -j ACCEPT
 
service iptables save
 
service iptables restart

注:168.95.1.1 为你linux服务器的dns。如果不知道可以用以下代码查dns

1
DNSIP=`cat /etc/resolv.conf |grep nameserver |awk 'NR==1{print $2 }'`

Linux各版本的本地root密码破解方法

2012年6月18日 没有评论

Linux各版本的本地root密码破解方法

(一)RedHat/CentOS/Fedora 系统密码破解

1.在grub选项菜单按E进入编辑模式
2.编辑kernel 那行最后加上S (或者Single)
3.按B,启动到single-user mode
4.进入后执行下列命令
# mount -t proc proc /proc
# mount -o remount,rw /
#passwd
#sync
#reboot

(二)Debian linux 系统密码破解

1.在grub选项菜单’Debian GNU/Linux,…(recovery mode)’,按e进入编辑模式
2.编辑kernel那行最后面的 ro single 改成 rw single init=/bin/bash,按b执行重启
3.进入后执行下列命令
root@(none)#mount -a
root@(none)#passwd root
root@(none)#reboot

(三)Freebsd 系统密码破解

1.开机进入引导菜单
2.选择每项(按4)进入单用户模式
3.进入之后输入一列命令
root@#mount -a
root@#fsck -y
root@#passwd(修改密码命令)
root@#root(要破解密码的用户名)
Enter new unix password:
root@#init 6 (重启)

(四)Solaris 系统密码破解

1.在grub选项菜中选择solaris failasfe 项
2.系统提示Do you wish to have it mounted read-write on /a ?[y,n,?] 选择y
3.就进入单用户模式
4.输入下列命令:passwd
root@#init 6 (重启)

(五)NetBsd 系统密码破解

1.开机:当出现提示符号并开始倒数五秒时, 键入以下指令:
> boot -s (进入单用户模式命令)
2.在以下的提示符号中
Enter pathname of shell or RETURN for sh:
按下 Enter。
3.键入以下指令:
# mount -a
# fsck -y
4.使用 passwd 更改 root 的密码。
5.使用 exit 指令进入多人模式。

(六)SUSE 系统密码破解

1.重新启动机器,在出现grub引导界面后,在启动linux的选项里加上init=/bin/bash,通过给内核传递init=/bin/bash参数使得OS在运行login程序之前运行bash,出现命令行。
2.稍等片刻出现(none)#:命令行。
3.这时输入mount -n / -o remount,rw 表示将根文件系统重新mount为可读写,有了读写权限后就可以通过passwd命令修改密码了。
4.这时输入passwd命令就可以重置密码了
5.修改完成后记得用mount -n / -o remount,ro将根文件系统置为原来的状态。

linux常用命令使用汇总

2012年6月18日 没有评论

linux打包压缩命令

tar命令
[root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 ….
参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『 tar -zcvPf tfile sfile』才对喔!
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
–exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:
范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
# 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
# 上述指令在执行的时候,会显示一个警告讯息:
# 『tar: Removing leading `/’ from member names』那是关於绝对路径的特殊设定。
范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
# 由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,
# 就得要加上 z 这个参数了!这很重要的!
范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
# 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
# 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
# 则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!
范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
# 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
# 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!
范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!
范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]# tar -N ’2005/06/01′ -zcvf home.tar.gz /home
范例七:我要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar –exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf – /etc | tar -xvf -
# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
# 要注意的地方在於输出档变成 – 而输入档也变成 – ,又有一个 | 存在~
# 这分别代表 standard output, standard input 与管线命令啦!
# 这部分我们会在 Bash shell 时,再次提到这个指令跟大家再解释啰!

 

gzip, zcat 命令
[root@linux ~]# gzip [-cdt#] 档名
[root@linux ~]# zcat 档名.gz
参数:
-c :将压缩的资料输出到萤幕上,可透过资料流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩档的一致性~看看文件有无错误;
-# :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6 ~
范例:
范例一:将 /etc/man.config 複制到 /tmp ,并且以 gzip 压缩
[root@linux ~]# cd /tmp
[root@linux tmp]# cp /etc/man.config .
[root@linux tmp]# gzip man.config
# 此时 man.config 会变成 man.config.gz !
范例二:将范例一的文件内容读出来!
[root@linux tmp]# zcat man.config.gz
# 此时萤幕上会显示 man.config.gz 解压缩之后的文件内容!!
范例三:将范例一的文件解压缩
[root@linux tmp]# gzip -d man.config.gz
范例四:将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的文件
[root@linux tmp]# gzip -9 -c man.config > man.config.gz

 

bzip2, bzcat 命令
[root@linux ~]# bzip2 [-cdz] 档名
[root@linux ~]# bzcat 档名.bz2
参数:
-c :将压缩的过程产生的资料输出到萤幕上!
-d :解压缩的参数
-z :压缩的参数
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
范例:
范例一:将刚刚的 /tmp/man.config 以 bzip2 压缩
[root@linux tmp]# bzip2 -z man.config
# 此时 man.config 会变成 man.config.bz2 !
范例二:将范例一的文件内容读出来!
[root@linux tmp]# bzcat man.config.bz2
# 此时萤幕上会显示 man.config.bz2 解压缩之后的文件内容!!
范例三:将范例一的文件解压缩
[root@linux tmp]# bzip2 -d man.config.bz2
范例四:将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的文件
[root@linux tmp]# bzip2 -9 -c man.config > man.config.bz2

 

compress 命令
[root@linux ~]# compress [-dcr] 文件或目录
参数:
-d :用来解压缩的参数
-r :可以连同目录下的文件也同时给予压缩呢!
-c :将压缩资料输出成为 standard output (输出到萤幕)
范例:
范例一:将 /etc/man.config 複制到 /tmp ,并加以压缩
[root@linux ~]# cd /tmp
[root@linux tmp]# cp /etc/man.config .
[root@linux tmp]# compress man.config
[root@linux tmp]# ls -l
-rw-r–r– 1 root root 2605 Jul 27 11:43 man.config.Z
范例二:将刚刚的压缩档解开
[root@linux tmp]# compress -d man.config.Z
范例三:将 man.config 压缩成另外一个文件来备份
[root@linux tmp]# compress -c man.config > man.config.back.Z
[root@linux tmp]# ll man.config*
-rw-r–r– 1 root root 4506 Jul 27 11:43 man.config
-rw-r–r– 1 root root 2605 Jul 27 11:46 man.config.back.Z
# 这个 -c 的参数比较有趣!他会将压缩过程的资料输出到萤幕上,而不是写入成为
# file.Z 文件。所以,我们可以透过资料流重导向的方法将资料输出成为另一个档名。
# 关於资料流重导向,我们会在 bash shell 当中详细谈论的啦!

 

dd 命令
[root@linux ~]# dd if=”input_file” of=”outptu_file” bs=”block_size” \
count=”number”
参数:
if :就是 input file 啰~也可以是装置喔!
of :就是 output file 喔~也可以是装置;
bs :规划的一个 block 的大小,如果没有设定时,预设是 512 bytes
count:多少个 bs 的意思。
范例:
范例一:将 /etc/passwd 备份到 /tmp/passwd.back 当中
[root@linux ~]# dd if=/etc/passwd of=/tmp/passwd.back
3+1 records in
3+1 records out
[root@linux ~]# ll /etc/passwd /tmp/passwd.back
-rw-r–r– 1 root root 1746 Aug 25 14:16 /etc/passwd
-rw-r–r– 1 root root 1746 Aug 29 16:57 /tmp/passwd.back
# 仔细的看一下,我的 /etc/passwd 文件大小为 1746 bytes,因为我没有设定 bs ,
# 所以预设是 512 bytes 为一个单位,因此,上面那个 3+1 表示有 3 个完整的
# 512 bytes,以及未满 512 bytes 的另一个 block 的意思啦!
# 事实上,感觉好像是 cp 这个指令啦~
范例二:备份 /dev/hda 的 MBR
[root@linux ~]# dd if=/dev/hda of=/tmp/mbr.back bs=512 count=1
1+0 records in
1+0 records out
# 这就得好好瞭解一下啰~我们知道整颗硬盘的 MBR 为 512 bytes,
# 就是放在硬盘的第一个 sector 啦,因此,我可以利用这个方式来将
# MBR 内的所有资料都纪录下来,真的很厉害吧! ^_^
范例三:将整个 /dev/hda1 partition 备份下来。
[root@linux ~]# dd if=/dev/hda1 of=/some/path/filenaem
# 这个指令很厉害啊!将整个 partition 的内容全部备份下来~
# 后面接的 of 必须要不是在 /dev/hda1 的目录内啊~否则,怎么读也读不完~
# 这个动作是很有效用的,如果改天你必须要完整的将整个 partition 的内容填回去,
# 则可以利用 dd if=/some/file of=/dev/hda1 来将资料写入到硬盘当中。
# 如果想要整个硬盘备份的话,就类似 Norton 的 ghost 软体一般,
# 由 disk 到 disk ,嘿嘿~利用 dd 就可以啦~厉害厉害!

 

cpio 命令
[root@linux ~]# cpio -covB > [file|device] <==备份
[root@linux ~]# cpio -icduv < [file|device] <==还原
参数:
-o :将资料 copy 输出到文件或装置上
-i :将资料自文件或装置 copy 出来系统当中
-t :查看 cpio 建立的文件或装置的内容
-c :一种较新的 portable format 方式储存
-v :让储存的过程中文件名称可以在萤幕上显示
-B :让预设的 Blocks 可以增加至 5120 bytes ,预设是 512 bytes !
这样的好处是可以让大文件的储存速度加快(请参考 i-nodes 的观念)
-d :自动建立目录!由於 cpio 的内容可能不是在同一个目录内,
如此的话在反备份的过程会有问题! 这个时候加上 -d 的话,
就可以自动的将需要的目录建立起来了!
-u :自动的将较新的文件覆盖较旧的文件!
范例:
范例一:将所有系统上的资料通通写入磁带机内!
[root@linux ~]# find / -print | cpio -covB > /dev/st0
# 一般来说,使用 SCSI 介面的磁带机,代号是 /dev/st0 喔!
范例二:检查磁带机上面有什么文件?
[root@linux ~]# cpio -icdvt < /dev/st0
[root@linux ~]# cpio -icdvt < /dev/st0 > /tmp/content
# 第一个动作当中,会将磁带机内的档名列出到萤幕上面,而我们可以透过第二个动作,
# 将所有的档名通通纪录到 /tmp/content 文件去!
范例三:将磁带上的资料还原回来~
[root@linux ~]# cpio -icduv < /dev/st0
# 一般来说,使用 SCSI 介面的磁带机,代号是 /dev/st0 喔!
范例四:将 /etc 底下的所有『文件』都备份到 /root/etc.cpio 中!
[root@linux ~]# find /etc -type f | cpio -o > /root/etc.cpio
# 这样就能够备份啰~您也可以将资料以 cpio -i < /root/etc.cpio
# 来将资料捉出来!!!!