设置linux的dns

DNS是用来解析域名用的,平时我们访问网站都是直接输入一个网址,而dns把这个网址解析到一个IP。关于dns的概念,如果你很陌生的话,那就去网上查一下吧linux下面设置dns非常简单,只要把dns地址写到一个配置文件中即可这个配置文件就是/etc/resolv.conf



resolv.conf有它固有的格式,一定要写成’nameserver IP’的格式,上面那行以’;’为开头的行是一行注释,没有实际意义,建议写两个或多个namserver ,默认会用第一个namserver去解析域名,当第一个解析不到时会使用第二个linux下面有一个特殊的文件/etc/hosts也能解析域名,不过是需要我们手动在里面添加IP+域名这些内容,它的作用是临时解析某个域名,非常有用



它的格式如上图,每一行作为一条记录,分成两部分,第一部分是IP,第二部分是域名关于hosts文件,有几点需要你注意:
1)一个IP后面可以跟多个域名,可以是几十个甚至上百个;
2)每行只能有一个IP,也就是说一个域名不能对应多个IP
3)如果有多行中出现相同的域名(前面IP不一样),会按最前面出现的记录来解析

top 显示进程所占系统资源



这个命令用于动态监控进程所占系统资源,每隔3秒变一次这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(load average进程数(Tasks、cpu使用情况内存使用情况以及交换分区使用情况其实上面这些内容可以通过其他命令来查看,所以用top重点查看的还是下面的进程使用系统资源详细状况这部分东西反映的东西还是比较多的,不过需要你关注的也就是几项:%CPU, %MEM, COMMAND 这些项目所代表的意义,不用笔者介绍相信你也能看懂吧



另外笔者使用top命令时还常常使用-bn1 这个组合选项,它表示非动态打印系统资源使用情况,可以用在脚本中,你不妨记一下,以后也许你会用得到

xargs与-exec

1. xargs

在前面的例子中笔者曾经使用过这个命令,你是否有印象呢?现在就详细介绍一下它,平时笔者使用xargs还是比较多的,很方便



查看xargsman文档,解释是这样的:build and execute command lines from standard input. 至于翻译成中文理解着有点困难不妨笔者举个例子说明它的作用



它的作用就是把管道符前面的输出作为xargs 后面的命令的输入它的好处在于可以把本来两步或者多步才能完成的任务简单一步就能完成。xargs常常和find命令一起使用,比如,查找当前目录创建时间大于10天的文件,然后再删除



这种应用是最为常见的,xargs后面的rm 也可以更选项,当是目录时,就需要-r选项了在笔者看来xargs的这个功能不叫什么,它的另一个功能才叫神奇现在我有一个这样的需求,查找当前目录下所有.txt的文件,然后把这些.txt的文件变成.txt_bak 。正常情况下,我们不得不写脚本去实现,但是使用xargs就一步



xargs -n1 –i{} 类似for循环,-n1意思是一个一个对象的去处理,-i{} 把前面的对象使用{}取代,mv {} {}_bak 相当于 mv 1.txt 1.txt_bak。你刚开始接触这个命令时也许有点难以理解,多练习一下你就会熟悉了,笔者建议你记住这个应用,很实用
2. -exec

使用find命令时,经常使用一个选项就是这个-exec了,可以达到和xargs同样的效果比如,查找当前目录创建时间大于10天的文件并删除



这个命令中也是把{}作为前面find出来的文件的替代符,后面的”\””;”的脱意符,不然shell会把分号作为该行命令的结尾这个-exec有时候也挺实用的



-exec同样可以实现前面那个复杂的需求

linux的防火墙-SELINUX

SelinuxRedhat/CentOS系统特有的安全机制不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它所以装完系统,我们一般都要把selinux关闭,以免引起不必要的麻烦关闭selinux的方法为:



’SELINUX=enforcing’改成’SELINUX=disabled’,然后重启机器临时关闭selinux的命令为



getenforce命令可以得到selinux的状态,其中有两种(Enforcing|Permissive),前者表示开放,后者表示关闭,但是会发出警告。setenforce用来设置selinux的状态,后面跟0则设置成Permissive后面跟1设置成Enforcing。关闭selinux的命令为setenforce 0,但是这只是临时关闭,重启后恢复,想要永久生效,请更改配置文件/etc/selinux/config。

sar 监控系统状态

sar 命令很强大,它可以监控系统所有资源状态,比如平均负载网卡流量磁盘状态内存使用等等它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息如果你系统没有安装这个命令,请使用”yum install -y sysstat”命令安装初次使用sar命令会报错,那是因为sar工具还没有生成相应的数据库文件(时时监控就不会了,因为不用去查询那个库文件)它的数据库文件在” /var/log/sa/”目录下,默认保存9因为这个命令太过复杂,所以笔者只介绍几个
1)查看网卡流量 ‘sar -n DEV ‘



IFACE这列表示设备名称,rxpck/s 表示每秒进入收取的包的数量,txpck/s 表示每秒发送出去的包的数量,rxbyt/s 表示每秒收取的数据量(单位Byte),txbyt/s表示每秒发送的数据量后面几列不需要关注如果有一天你所管理的服务器丢包非常严重,那么你就应该看一看这个网卡流量是否异常了,如果rxpck/s 那一列的数值大于4000,或者rxbyt/s那列大于5,000,000则很有可能是被攻击了,正常的服务器网卡流量不会高于这么多,除非是你自己在拷贝数据上面的命令是查看网卡流量历史的,如何时时查看网卡流量呢?



另外也可以查看某一天的网卡流量历史,使用-f选项,后面跟文件名,如果你的系统格式Redhat或者CentOS那么sar的库文件一定是在/var/log/sa/目录下的



2)查看历史负载 ‘sar -q’



这个命令有助于我们查看服务器在过去的某个时间的负载状况
关于sar的介绍笔者不愿写太多,毕竟介绍太多会给你带来更多的压力,其实笔者介绍这个命令的目的只是让你学会查看网卡流量(这是非常有用的)如果你很感兴趣那就man一下吧,它的用法太多了

screen工具介绍

有时候,也许你会有这样的需求,需要执行一个命令或者脚本,但是需要几个小时甚至几天这就要考虑一个问题,就是中途断网或出现其他意外情况,执行的任务中断了怎么办?你可以把命令或者脚本丢到后台运行,不过也不保险笔者下面就介绍两种方法来避免这样的问题发生
1. 使用nohup



直接加一个’&’虽然丢到后台了,但是当退出该终端时很有可能这个脚本也会退出的,而在前面加上’nohup’就没有问题了。nohup的作用就是不挂断地运行命令

2. screen工具的使用

简单来说,screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的SSH连接窗口那样下面笔者介绍screen的一个简单应用
1
打开一个会话,直接输入screen命令然后回车,进入screen会话窗口如果你没有screen命令,请用’yum install -y screen’安装



2screen -ls 查看已经打开的screen会话



3Ctrl +a 再按d退出该screen会话,只是退出,并没有结束结束的话输入Ctrl +d 或者输入exit
4)退出后还想再次登录某个screen会话,使用screen -r [screen 编号],这个编号就是上图中那个2082. 当只有一个screen会话时,后面的编号是可以省略的

当你有某个需要长时间运行的命令或者脚本时就打开一个screen会话,然后运行该任务ctrl +a 再按d退出会话,不影响终端窗口上的任何操作

linux防火墙-iptables

Iptableslinux上特有的防火墙机制,其功能非常强大,然而笔者在日常的管理工作中仅仅用到了一两个应用,这并不代表iptables不重要作为一个网络管理员,iptables是必要要熟练掌握的但是作为系统管理员,我们也应该会最基本的iptables操作,认识iptables的基本规则
1iptalbes的三个表
filter :这个表主要用于过滤包的,是系统预设的表,这个表也是笔者用的最多的内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包
nat :主要用处是网络地址转换,也有三个链PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址该表笔者用的不多,但有时候会用到
mangle :这个表主要是用于给数据包打标记,然后根据标记去操作哪些包这个表几乎不怎么用除非你想成为一个高级网络工程师,否则你就没有必要花费很多心思在它上面
2iptables 基本语法
A. 查看规则以及清除规则



如上图,-t 后面跟表名,-nvL 即查看该表的规则,其中-n表示不针对IP反解析主机名;-L表示列出的意思;而-v表示列出的信息更加详细如果不加-t ,则打印filter表的相关信息



这个和-t filter 打印的信息是一样的
关于清除规则的命令中,笔者用的最多就是



不加-t默认是针对表filter来操作的,-F 表示把所有规则全部删除;-Z表示把包以及流量计数器置零(这个笔者认为很有用)
B. 增加/删除一条规则



这就是增加了一条规则,省略-t所以针对的是filter。-A 表示增加一条规则,另外还有-I 表示插入一条规则,-D删除一条规则;后面的INPUT即链名称,还可以是OUTPUT或者FORWORD-s 后跟源地址;-p 协议(tcp, udp, icmp); --sport/--dport 后跟源端口/目标端口;-d 后跟目的IP(主要针对内网或者外网);-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)这样讲可能很乱,那笔者多举几个例子来帮你理解:



上例表示:插入一条规则,把来自10.0.2.36的所有数据包丢掉



删除刚刚插入的规则注意要删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I -D不一样外,其他地方都一样



上例表示把来自10.0.2.36 并且是tcp协议到本机的80端口的数据包丢掉这里要说的是,--dport/--sport 必须要和-p选项一起使用,否则会出错



把发送到10.0.2.3422端口的数据包丢掉下面做一个小试验:



一开始用本机ping 10.0.2.34是通的,然后使用iptables增加一条规则,使到10.0.2.34icmp包丢掉,再ping 10.0.2.34则不通了此时用’iptables –nvL’查看iptalbes规则



会有一条这样的记录,看pkts那列显示4个数据包,因为我们ping 的时候给10.0.2.34发送了4个数据包,第二列表示这4个数据包一共有多大(336bytes此时使用’iptables -Z' 清零



现在你明白’iptables -Z’的意义了吧至于FORWORD链的应用笔者几乎没有用到过,所以不再举例再总结一下各个选项的作用:
-A/-D :增加删除一条规则;
-I :插入一条规则,其实跟-A的效果一样;
-p :指定协议,可以是tcpudp或者icmp
--dport :跟-p一起使用,指定目标端口;
--sport :跟-p一起使用,指定源端口;
-s :指定源IP(可以是一个ip段);
-d :指定目的IP(可以是一个ip段);
-j :后跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包;
-i :指定网卡(不常用,但有时候能用到);



上例中表示,把来自10.0.2.0/24这个网段的并且作用在eth0上的包放行有时候你的服务器上iptables过多了,想删除某一条规则时,又不容易掌握当时创建时的规则其实有一种比较简单的方法:



查看结果如下:



删除某一个规则的方法是:



-D 后跟链名,然后是规则num,这个num就是查看iptables规则时第一列的值
iptables还有一个选项经常用到,-P(大写)选项,表示预设策略用法如下:



-P后面跟链名,策略内容或者为DROP或者为ACCEPT,默认是ACCEPT。注意:如果你在连接远程服务器,千万不要随便敲这个命令,因为一旦你敲完回车你就会断掉



看到上图中红框标出的部分了吧,现在所有进来的数据包全部DROP这个策略一旦设定后,只能使用iptables -P ACCEPT才能恢复成原始状态,而不能使用-F参数下面笔者针对一个小需求讲述一下这个iptables规则如何设定
需求:只针对filter表,预设策略INPUTDROP,其他两个链ACCEPT,然后针对10.0.2.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口
这个需求不算复杂,但是因为有多条规则,所以最好写成脚本的形式



完成脚本的编写后,直接运行 ‘sh /usr/local/sbin/iptables.sh ’ 即可如果想开机启动时初始化防火墙规则,则需要在/etc/rc.d/rc.local 中添加一行 ‘sh /usr/local/sbin/iptables.sh’ 。
关于icmp的包有一个比较常见的应用



--icmp-type 这个选项是要跟-p icmp 一起使用的,后面指定类型编号这个8指的是能在本机ping通其他机器,而其他机器不能ping通本机这个有必要记一下
C. nat表的应用
其实,linuxiptables功能是十分强大的,笔者曾经的一个老师这样形容linux的网络功能:只有想不到没有做不到!也就是说只要你能够想到的关于网络的应用,linux都能帮你实现在日常生活中相信你接触过路由器吧,它的功能就是分享上网本来一根网线过来(其实只有一个公网IP),通过路由器后,路由器分配了一个网段(私网IP),这样连接路由器的多台pc都能连接intnet而远端的设备认为你的IP就是那个连接路由器的公网IP。这个路由器的功能其实就是由linuxiptables实现的,而iptables又是通过nat表作用而实现的这个功能
至于具体的原理以及过程,笔者不想阐述,请查看相关资料笔者在这里只举一个例子来说明iptables如何实现的这个功能假设你的机器上有两块网卡eth0eth1,其中eth0IP10.0.2.68 eth1IP192.168.1.1 。eth0连接了intnet eth1没有连接,现在有另一台机器(192.168.1.2)和eth1是互通的,那么如何设置也能够让连接eth1的这台机器能够连接intnet(即能和10.0.2.68互通)?



其实就是这样简单的两个命令就能实现上面的需求第一个命令涉及到了内核参数相关的配置文件,它的目的是为了打开路由转发功能,否则无法实现我们的应用第二个命令则是iptablesnat表做了一个IP转发的操作,-o 选项后跟设备名,表示出口的网卡,MASQUERADE表示伪装的意思

关于nat表,笔者不想讲太多内容,你只要学会这个路由转发即可其他的东西交给网络工程师去学习吧,毕竟你将来可是要做linux系统工程师的
D. 保存以及备份iptalbes规则

也许你不知道,咱们设定的防火墙规则只是保存在内存中,并没有保存到某一个文件中,也就说当系统重启后以前设定的规则就没有了,所以设定好规则后要先保存一下



它会提示你把规则保存在了/etc/sysconfig/iptables文件内其实,这个文件就是iptables的配置文件了,你不妨查看一下它



红线部分就是咱们刚才设定那条规则!有时可能因为我们设置防火墙规则有误导致服务器出问题,这时候不妨先备份一下这个配置文件,然后停止防火墙服务


这样防火墙就失效了,但是一旦你重新设定规则后(哪怕只有一条),防火墙又开始工作了



我还可以使用iptables-save >filename 这条命令来保存一个防火墙规则,这样就可以起到备份的作用了要想恢复这个规则使用下面这个命令即可



free查看内存使用状况



只要你敲一个free然后回车就可以当前系统的总内存大小以及使用内存的情况从上图中可看到当前系统内存总大小为235128(单位是k)已经使用120368,剩余94760。其实真正剩余并不是这个94760,而是第二行的213388,真正使用的也是第二行的21740。这是因为系统初始化时,就已经分配出很大一部分内存给缓存,这部分缓存用来随时提供给程序使用,如果程序不用,那这部分内存就空闲所以,查看内存使用多少,剩余多少请看第二行的数据另外你还可以加-m 或者-g选项分别以MG为单位打印内存使用状况





linux下同步时间服务器

时间的准确性在服务器上非常重要,所以要与标准时间保持同步,毕竟服务器的时钟并不一定精准,所以需要我们每隔一段时间去同步一下时间。笔者所管理的服务器每隔6小时就会同步一下时间。如何同步呢?这就要用到ntpdate 这个指令。如果你的服务器上没有这个指令,请使用'yum install -y ntpdate'安装,或者下载源码包安装。

同步时间的命令为:'ntpdate  timeserver'  这里的timeserver为时间服务器的IP或者hostname,常用的timeserver有210.72.145.44, time.windows.com(windows的时间服务器)。如果你想每隔6小时同步一次那么请指定一个计划任务。

00 */6 * * *  /usr/sbin/ntpdate 210.72.145.44 >/dev/null

之所以在后面加一个重定向,是因为这个同步的过程是有内容输出的,因为我们的计划任务是在后台执行的,输出的内容会以邮件的形式发送给用户,所以为了避免邮件太多请输出到/dev/null (在linux下这个设备是虚拟的存在,你可以理解为空洞)

php的curl实现get和post

类似于dreamhost这类主机服务商,是显示fopen的使用的。使用php的 curl可以实现支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传,kerberos、基于HTT格式的上传、代理、cookie、用户+口令证明、文件传送恢复、http代理通道就最常用的来说,是基于http的get和post方法。


代码实现:
1、http的get实现

$ch = curl_init("[url=http://www.eb163.com/]http://www.eb163.com/[/url]") ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ;
$output = curl_exec($ch) ;
$fh = fopen("out.html", 'w') ;
fwrite($fh, $output) ;
fclose($fh) ;


2、http的post实现

//extract data from the post
extract($_POST) ;  
//set POST variables
$url = 'http://www.eb163.com/get-post.php' ;
$fields = array(
                        
'lname'=>urlencode($last_name) ,
                        
'fname'=>urlencode($first_name) ,
                        
'title'=>urlencode($title) ,
                        
'company'=>urlencode($institution) ,
                        
'age'=>urlencode($age) ,
                        
'email'=>urlencode($email) ,
                        
'phone'=>urlencode($phone)
                 );  
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&' ; }
rtrim($fields_string ,'&') ;
//open connection
$ch = curl_init() ;
//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL,$url) ;
curl_setopt($ch, CURLOPT_POST,count($fields)) ;
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string) ;
//execute post
$result = curl_exec($ch) ;
//close connection
curl_close($ch) ;

在CentOS 5上安装Git

yum install -y zlib-devel openssl-devel expat-devel gettext-devel cur-devel
yum install -y perl cpio curl
wget -c http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz
tar xzvf git-latest.tar.gz
cd git-{date}
autoconf
./configure --with-curl=/usr/local
make
make install

mysql自动备份shell脚本

 #!/bin/bash
  bak_path=/data/bak_path
  mysql_bk_dir=$bak_path/mysql_bk_dir
  log_file=$backup_path/backuplog
  password=123456
   for i in $(mysql -p$password -e "show databases\G" |grep Database | awk '{print $2}')
  do
     new_file="$mysql_bk_dir"/$i$(date +%Y%m%d).tar.gz
     dump_file="$mysql_bk_dir"/$i$(date +%Y%m%d).sql
    old_file="$mysql_bk_dir"/$i$(date +%Y$m%d).tar.gz
    echo "------------------------------------------------------------" >> $log_file
    echo $(date +"%Y-%m-%d %H:%M:%S") >> $log_file
   echo "------------------------------------------------------------" >>  $log_file
     if [ -f $old_file ]; then
       rm -rf $old_file >> $log_file 2>&1;
      echo "[$old_file] Delete Old File Success!" >> $log_file
     else
         echo "[$old_file] No Old Backup File!" >> $log_file
      fi
      if [ -f $new_file ]; then
         echo "[$new_file] The backup file is exist, can't backup!" >> $log_file;
      else
         cd $mysql_bk_dir
/usr/local/mysql/bin/mysqldump --opt $i -p$password > $dump_file
        tar zcf $new_file $dump_file >> $log_file 2>&1
         echo "[$new_file] Backup success!" >> $log_file
         rm -rf $dump_file
      fi
     sleep 15
done

linux乱码

修改/etc/sysconfig/i18n文件

#LANG="en_US.UTF-8"
#SUPPORTED="en_US.UTF-8:en_US:en"
#SYSFONT="latarcyrheb-sun16"



改为

LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh"
SYSFONT="lat0-sun16"
SYSFONTACM="8859-15"

Linux tar 命令说明

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 -

.htaccess中的apache rewrite规则详解

.htaccess中的apache rewrite写法:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blog/$1
# 没有输入文件名的默认到到首页
RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$
RewriteRule ^(/)?$ blog/index.php [L]

阅读剩余部分...