Archive for 八月, 2007

\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\r\n\r\n
\r\n
版权声明
\r\n

本文是zhyfly兄贴在LinuxSir.Org 的一个帖子而整理出来的,如果您对版权有疑问,请在本帖后面跟帖。谢谢;本文的HTML版本由北南南北整理;修改了整篇文档的全角及说明文字中的单词中每个字母空格的问题;为标题加了编号,方便大家阅读;

\r\n

前言:关于find命令

\r\n

由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。

\r\n

在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。

\r\n


一、find 命令格式

\r\n


1、find命令的一般形式为;

\r\n

\r\n
find pathname -options [-print -exec -ok ...]
\r\n


2、find命令的参数;

\r\n

\r\n
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为\’command\’ { } \\;,注意{ }和\\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
\r\n


3、find命令选项

\r\n
-name
按照文件名查找文件。
-perm
按照文件权限来查找文件。
-prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user
按照文件属主来查找文件。
-group
按照文件所属的组来查找文件。
-mtime -n +n
按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser
查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2
查找更改时间比文件file1新但比文件file2旧的文件。
-type
查找某一类型的文件,诸如:
b – 块设备文件。
d – 目录。
c – 字符设备文件。
p – 管道文件。
l – 符号链接文件。
f – 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
\r\n

另外,下面三个的区别:

\r\n
   -amin n
  查找系统中最后N分钟访问的文件
  -atime n
  查找系统中最后n*24小时访问的文件
  -cmin n
  查找系统中最后N分钟被改变文件状态的文件
  -ctime n
  查找系统中最后n*24小时被改变文件状态的文件
    -mmin n
  查找系统中最后N分钟被改变文件数据的文件
  -mtime n
  查找系统中最后n*24小时被改变文件数据的文件
\r\n


4、使用exec或ok来执行shell命令

\r\n

使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的

\r\n

在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。

\r\n

exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。

\r\n

例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中

\r\n

\r\n
# find . -type f -exec ls -l { } \\;
-rw-r–r– 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r–r– 1 root root 12959 2003-02-25 ./conf/magic
-rw-r–r– 1 root root 180 2003-02-25 ./conf.d/README
\r\n

上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。
在/logs目录中查找更改时间在5日以前的文件并删除它们:

\r\n

\r\n
 $ find logs -type f -mtime +5 -exec rm { } \\;
\r\n

记住:在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。

\r\n

在下面的例子中, find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。

\r\n

\r\n
 $ find . -name \”*.conf\” -mtime +5 -ok rm { } \\;
< rm … ./conf/httpd.conf > ? n
\r\n

按y键删除文件,按n键不删除。

\r\n

任何形式的命令都可以在-exec选项中使用。

\r\n

在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个sam用户。

\r\n

\r\n
# find /etc -name \”passwd*\” -exec grep \”sam\” { } \\;
sam:x:501:501::/usr/sam:/bin/bash
\r\n


二、find命令的例子;

\r\n


1、查找当前用户主目录下的所有文件:

\r\n

下面两种方法都可以使用

\r\n

\r\n
 $ find  $HOME -print
 $ find ~ -print


2、让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;
\r\n

\r\n
 $ find . -type f -perm 644 -exec ls -l { } \\;
\r\n


3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;

\r\n

\r\n
 $ find / -type f -size 0 -exec ls -l { } \\;
\r\n


4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;

\r\n

\r\n
 $ find /var/logs -type f -mtime +7 -ok rm { } \\;
\r\n


5、为了查找系统中所有属于root组的文件;

\r\n

\r\n
 $find . -group root -exec ls -l { } \\;
-rw-r–r– 1 root root 595 10月 31 01:09 ./fie1
\r\n


6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件。

\r\n

该命令只检查三位数字,所以相应文件的后缀不要超过999。先建几个admin.log*的文件 ,才能使用下面这个命令

\r\n

\r\n
 $ find . -name \”admin.log[0-9][0-9][0-9]\” -atime -7 -ok
rm { } \\;
< rm … ./admin.log001 > ? n
< rm … ./admin.log002 > ? n
< rm … ./admin.log042 > ? n
< rm … ./admin.log942 > ? n
\r\n


7、为了查找当前文件系统中的所有目录并排序;

\r\n

\r\n
 $ find . -type d | sort
\r\n


8、为了查找系统中所有的rmt磁带设备;

\r\n

\r\n
 $ find /dev/rmt -print
\r\n


三、xargs

\r\n

xargs – build and execute command lines from standard input

\r\n

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

\r\n

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

\r\n

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;

\r\n

而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

\r\n

来看看xargs命令是如何同find命令一起使用的,并给出一些例子。

\r\n

下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

\r\n

\r\n
#find . -type f -print | xargs file
./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text
./.kde/Autostart/.directory: ISO-8859 text\\
……
\r\n

在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:

\r\n

\r\n
 $ find / -name \”core\” -print | xargs echo \”\” >/tmp/core.log
\r\n

上面这个执行太慢,我改成在当前目录下查找

\r\n

\r\n
#find . -name \”file*\” -print | xargs echo \”\” > /temp/core.log
# cat /temp/core.log
./file6
\r\n

在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:

\r\n

\r\n
# ls -l
drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf
# find . -perm -7 -print | xargs chmod o-w
# ls -l
drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
\r\n

用grep命令在所有的普通文件中搜索hostname这个词:

\r\n

\r\n
# find . -type f -print | xargs grep \”hostname\”
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
\r\n

用grep命令在当前目录下的所有普通文件中搜索hostnames这个词:

\r\n

\r\n
# find . -name \\* -type f -print | xargs grep \”hostnames\”
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
\r\n

注意,在上面的例子中, \\用来取消find命令中的*在shell中的特殊含义。

\r\n

find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。

\r\n


四、find 命令的参数

\r\n

下面是find一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到了其中的的一些参数,也可以用man或查看论坛里其它贴子有find的命令手册

\r\n


1、使用name选项

\r\n

文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。

\r\n

可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。

\r\n

不管当前路径是什么,如果想要在自己的根目录 $HOME中查找文件名符合*.txt的文件,使用~作为 \’pathname\’参数,波浪号~代表了你的 $HOME目录。

\r\n

\r\n
 $ find ~ -name \”*.txt\” -print
\r\n

想要在当前目录及子目录中查找所有的‘ *.txt’文件,可以用:

\r\n

\r\n
 $ find . -name \”*.txt\” -print
\r\n

想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:

\r\n

\r\n
 $ find . -name \”[A-Z]*\” -print
\r\n

想要在/etc目录中查找文件名以host开头的文件,可以用:

\r\n

\r\n
 $ find /etc -name \”host*\” -print
\r\n

想要查找 $HOME目录中的文件,可以用:

\r\n

\r\n
 $ find ~ -name \”*\” -print 或find . -print
\r\n

要想让系统高负荷运行,就从根目录开始查找所有的文件。

\r\n

\r\n
 $ find / -name \”*\” -print
\r\n

如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是.txt的文件,下面的命令就能够返回名为ax37.txt的文件:

\r\n

\r\n
 $find . -name \”[a-z][a-z][0--9][0--9].txt\” -print
\r\n


2、用perm选项

\r\n

按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。

\r\n

如在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:

\r\n

\r\n
 $ find . -perm 755 -print
\r\n

还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666

\r\n

\r\n
# ls -l
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find . -perm 006
# find . -perm -006
./sam
./httpd1.conf
./temp
\r\n

-perm mode:文件许可正好符合mode

\r\n

-perm +mode:文件许可部分符合mode

\r\n

-perm -mode: 文件许可完全符合mode

\r\n


3、忽略某个目录

\r\n

如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。

\r\n

如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:

\r\n

\r\n
 $ find /apps -path \”/apps/bin\” -prune -o -print
\r\n


4、使用find查找文件的时候怎么避开某个文件目录

\r\n

比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件

\r\n

\r\n
find /usr/sam -path \”/usr/sam/dir1\” -prune -o -print
\r\n

\r\n
find [-path ..] [expression] 在路径列表的后面的是表达式
\r\n

-path \”/usr/sam\” -prune -o -print 是 -path \”/usr/sam\” -a -prune -o
-print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path \”/usr/sam\” 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path \”/usr/sam\” -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。

\r\n

这个表达式组合特例可以用伪码写为

\r\n

\r\n
if -path \”/usr/sam\” then
          -prune
else
          -print
\r\n

避开多个文件夹

\r\n

\r\n
find /usr/sam \\( -path /usr/sam/dir1 -o -path /usr/sam/file1 \\) -prune -o -print
\r\n

圆括号表示表达式的结合。

\r\n
\\ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。
\r\n

查找某一确定文件,-name等选项加在-o 之后

\r\n

\r\n
#find /usr/sam \\(-path /usr/sam/dir1 -o -path /usr/sam/file1 \\) -prune -o -name \”temp\” -print
\r\n


5、使用user和nouser选项

\r\n

按文件属主查找文件,如在 $HOME目录中查找文件属主为sam的文件,可以用:

\r\n

\r\n
 $ find ~ -user sam -print
\r\n

在/etc目录下查找文件属主为uucp的文件:

\r\n

\r\n
 $ find /etc -user uucp -print
\r\n

为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。

\r\n

例如,希望在/home目录下查找所有的这类文件,可以用:

\r\n
 $ find /home -nouser -print
\r\n


6、使用group和nogroup选项

\r\n

就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用:

\r\n

\r\n
 $ find /apps -group gem -print
\r\n

要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件

\r\n

\r\n
 $ find / -nogroup-print
\r\n


7、按照更改时间或访问时间等查找文件

\r\n

如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。

\r\n

用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。

\r\n

希望在系统根目录下查找更改时间在5日以内的文件,可以用:

\r\n

\r\n
 $ find / -mtime -5 -print
\r\n

为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:

\r\n

\r\n
 $ find /var/adm -mtime +3 -print
\r\n


8、查找比某个文件新或旧的文件

\r\n

如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为:

\r\n

\r\n
newest_file_name ! oldest_file_name
\r\n

其中,!是逻辑非符号。

\r\n

查找更改时间比文件sam新但比文件temp旧的文件:

\r\n

例:有两个文件

\r\n

\r\n
-rw-r–r– 1 sam adm 0 10月 31 01:07 fiel
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find -newer httpd1.conf ! -newer temp -ls
1077669 0 -rwxrwxr-x 2 sam adm 0 10月 31 01:01 ./httpd.conf
1077671 4 -rw-rw-rw- 1 root root 2792 10月 31 20:19 ./temp
1077673 0 -rw-r–r– 1 sam adm 0 10月 31 01:07 ./fiel
\r\n

查找更改时间在比temp文件新的文件:

\r\n

\r\n
 $ find . -newer temp -print


9、使用type选项
\r\n

在/etc目录下查找所有的目录,可以用:

\r\n

\r\n
 $ find /etc -type d -print
\r\n

在当前目录下查找除目录以外的所有类型的文件,可以用:

\r\n
 $ find . ! -type d -print
\r\n

在/etc目录下查找所有的符号链接文件,可以用

\r\n
 $ find /etc -type l -print
\r\n


10、使用size选项

\r\n

可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。

\r\n

在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。
在当前目录下查找文件长度大于1 M字节的文件:

\r\n
 $ find . -size +1000000c -print
\r\n

在/home/apache目录下查找文件长度恰好为100字节的文件:

\r\n

\r\n
 $ find /home/apache -size 100c -print
\r\n

在当前目录下查找长度超过10块的文件(一块等于512字节):

\r\n

\r\n
 $ find . -size +10 -print
\r\n


11、使用depth选项

\r\n

在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

\r\n

在下面的例子中, find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。

\r\n

它将首先匹配所有的文件然后再进入子目录中查找。

\r\n

\r\n
 $ find / -name \”CON.FILE\” -depth -print
\r\n


12、使用mount选项

\r\n

在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。

\r\n

从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:

\r\n

\r\n
 $ find . -name \”*.XC\” -mount -print
\r\n



五、关于本文

\r\n

本文是find 命令的详细说明,可贵的是针对参数举了很多的实例,大量的例证,让初学者更为容易理解;本文是zhy2111314兄贴在论坛中;我对本文进行了再次整理,为方便大家阅读; ── 北南南北

\r\n

 原文地址 http://www.chinalinuxpub.com/read.php?wid=1230

只能收发邮件,别的都关闭
iptables -I Filter -m mac –mac-source 00:0F:EA:25:51:37 -j DROP
iptables -I Filter -m mac –mac-source 00:0F:EA:25:51:37 -p udp –dport 53 -j ACCEPT
iptables -I Filter -m mac –mac-source 00:0F:EA:25:51:37 -p tcp –dport 25 -j ACCEPT
iptables -I Filter -m mac –mac-source 00:0F:EA:25:51:37 -p tcp –dport 110 -j ACCEPT


IPSEC NAT 策略
iptables -I PFWanPriv -d 192.168.100.2 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp –dport 80 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.100.2:80

iptables -t nat -A PREROUTING -p tcp –dport 1723 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.100.2:1723

iptables -t nat -A PREROUTING -p udp –dport 1723 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.100.2:1723

iptables -t nat -A PREROUTING -p udp –dport 500 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.100.2:500

iptables -t nat -A PREROUTING -p udp –dport 4500 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.100.2:4500


FTP服务器的NAT
iptables -I PFWanPriv -p tcp –dport 21 -d 192.168.100.200 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp –dport 21 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.100.200:21


只允许访问指定网址
iptables -A Filter -p udp –dport 53 -j ACCEPT
iptables -A Filter -p tcp –dport 53 -j ACCEPT
iptables -A Filter -d www.3322.org -j ACCEPT
iptables -A Filter -d img.cn99.com -j ACCEPT
iptables -A Filter -j DROP


开放一个IP的一些端口,其它都封闭
iptables -A Filter -p tcp –dport 80 -s 192.168.100.200 -d www.pconline.com.cn -j ACCEPT
iptables -A Filter -p tcp –dport 25 -s 192.168.100.200 -j ACCEPT
iptables -A Filter -p tcp –dport 109 -s 192.168.100.200 -j ACCEPT
iptables -A Filter -p tcp –dport 110 -s 192.168.100.200 -j ACCEPT
iptables -A Filter -p tcp –dport 53 -j ACCEPT
iptables -A Filter -p udp –dport 53 -j ACCEPT
iptables -A Filter -j DROP


多个端口
iptables -A Filter -p tcp -m multiport –destination-port 22,53,80,110 -s 192.168.20.3 -j REJECT


连续端口
iptables -A Filter -p tcp -m multiport –source-port 22,53,80,110 -s 192.168.20.3 -j REJECT iptables -A Filter -p tcp –source-port 2:80 -s 192.168.20.3 -j REJECT


指定时间上网
iptables -A Filter -s 10.10.10.253 -m time –timestart 6:00 –timestop 11:00 –days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j DROP
iptables -A Filter -m time –timestart 12:00 –timestop 13:00 –days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j ACCEPT
iptables -A Filter -m time –timestart 17:30 –timestop 8:30 –days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j ACCEPT

禁止多个端口服务
iptables -A Filter -m multiport -p tcp –dport 21,23,80 -j ACCEPT


将WAN 口NAT到PC
iptables -t nat -A PREROUTING -i $INTERNET_IF -d $INTERNET_ADDR -j DNAT –to-destination 192.168.0.1


将WAN口8000端口NAT到192。168。100。200的80端口
iptables -t nat -A PREROUTING -p tcp –dport 8000 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.100.200:80


MAIL服务器要转的端口
iptables -t nat -A PREROUTING -p tcp –dport 110 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.100.200:110
iptables -t nat -A PREROUTING -p tcp –dport 25 -d $INTERNET_ADDR -j DNAT –to-destination 192.168.100.200:25


只允许PING 202。96。134。133,别的服务都禁止
iptables -A Filter -p icmp -s 192.168.100.200 -d 202.96.134.133 -j ACCEPT
iptables -A Filter -j DROP


禁用BT配置
iptables –A Filter –p tcp –dport 6000:20000 –j DROP


禁用QQ防火墙配置
iptables -A Filter -p udp –dport ! 53 -j DROP
iptables -A Filter -d 218.17.209.0/24 -j DROP
iptables -A Filter -d 218.18.95.0/24 -j DROP
iptables -A Filter -d 219.133.40.177 -j DROP


基于MAC,只能收发邮件,其它都拒绝
iptables -I Filter -m mac –mac-source 00:0A:EB:97:79:A1 -j DROP
iptables -I Filter -m mac –mac-source 00:0A:EB:97:79:A1 -p tcp –dport 25 -j ACCEPT
iptables -I Filter -m mac –mac-source 00:0A:EB:97:79:A1 -p tcp –dport 110 -j ACCEPT

禁用MSN配置
iptables -A Filter -p udp –dport 9 -j DROP
iptables -A Filter -p tcp –dport 1863 -j DROP
iptables -A Filter -p tcp –dport 80 -d 207.68.178.238 -j DROP
iptables -A Filter -p tcp –dport 80 -d 207.46.110.0/24 -j DROP

只允许PING 202。96。134。133 其它公网IP都不许PING
iptables -A Filter -p icmp -s 192.168.100.200 -d 202.96.134.133 -j ACCEPT
iptables -A Filter -p icmp -j DROP

禁止某个MAC地址访问internet:
iptables -I Filter -m mac –mac-source 00:20:18:8F:72:F8 -j DROP

禁止某个IP地址的PING:
iptables –A Filter –p icmp –s 192.168.0.1 –j DROP

禁止某个IP地址服务:
iptables –A Filter -p tcp -s 192.168.0.1 –dport 80 -j DROP
iptables –A Filter -p udp -s 192.168.0.1 –dport 53 -j DROP

只允许某些服务,其他都拒绝(2条规则)
iptables -A Filter -p tcp -s 192.168.0.1 –dport 1000 -j ACCEPT
iptables -A Filter -j DROP

禁止某个IP地址的某个端口服务
iptables -A Filter -p tcp -s 10.10.10.253 –dport 80 -j ACCEPT
iptables -A Filter -p tcp -s 10.10.10.253 –dport 80 -j DROP

禁止某个MAC地址的某个端口服务

iptables -I Filter -p tcp -m mac –mac-source 00:20:18:8F:72:F8 –dport 80 -j DROP

禁止某个MAC地址访问internet:
iptables -I Filter -m mac –mac-source 00:11:22:33:44:55 -j DROP

禁止某个IP地址的PING:
iptables –A Filter –p icmp –s 192.168.0.1 –j DROP

   ZDE可以说是做PHP开发的首选工具了,自动的代码补全和语法提示为PHP的开发带来了很多方便。特别是到ZDE4和ZDE5。写程序离不开代码控制,以前版本的ZDE就支持了CVS。到后来的某个版本也支持了SVN。(我也是在朋友的提示下才去试这个功能的)
    1、首先让svn成为ZDE的源码控制工具
 “工具”->“首选项”->“Source Control”
 在“Source Control Tool:”中选择“Subversion”。
 现在,在“工具”菜单下面应该已经有了“Subversion”子菜单这一项。
    2、设置本地工作目录
 在本地创建一个空的工作目录。新建一个项目,并且将工作目录加到项目中。
    3、使用Subversion菜单中的checkout取出代码。
 Checkout时,Module URI指的是服务器的模块地址:如:https://svn.erya.cn/erya
 工作目录是在第2步设置的工作目录。
 用户名和密码是访问svn服务器的用户名和密码。
    4、SVN操作
 checkout结束以后,在ZDE中就能够进行工作了。在ZDE的文件管理器中点右键,会出现subersion菜单,就可以进行相应管理了。
    常见问题:
    1、Checkout的时候出现“Server certificate verification failed: issuer is not trusted”
解决办法:通过命令行进行Zend的安装目录下的svn目录。我的Zend安装在D盘下,因此是如下路径:
 D:\\Program Files\\Zend\\ZendStudio-5.2.0\\bin\\SourceControl\\svn
 然后执行svn co https://svn.erya.cn
 后面的是你的服务器地址。
 将会出现如下的画面:
Error validating server certificate for \’https://svn.erya.cn\’:
- The certificate is not issued by a trusted authority. Use the fingerprint to validate the certificate manually!
Certificate information:
- Hostname: svn.erya.cn
- Valid: from Sep 22 21:21:47 2006 GMT until Sep 21 21:21:47 2007 GMT
- Issuer: CollabNet Chicago CA, Chicago, IL, US
- Fingerprint: d9:2a:03:7d:82:b4:21:cb:97:6c:21:33:a8:13:1d:0f:ef:f2:21:39
(R)eject, accept (t)emporarily or accept (p)ermanently?
选择p,永远接受。
 然后就应该可以通过ZDE Checkout了。

级别: 中级

\r\n

Roger McCoy (rogermccoy@gmail.com), IT Specialist, 自由撰稿人

\r\n

2007 年 3 月 06 日

\r\n
了解如何使用 PHP 的各种文件函数。查看诸如 fopenfclosefeof 之类的基本文件函数;了解诸如 fgetsfgetssfscanf 之类的读取函数。并且发现用一两行代码处理整个文件的函数。
\r\n

让我们算一算有多少种方法

\r\n

处理诸如 PHP 之类的现代编程语言的乐趣之一就是有大量的选项可用。PHP 可以轻松地赢得 Perl 的座右铭“There\’s more than one way to do it”(并非只有一种方法可做这件事),尤其是在文件处理上。但是在这么多可用的选项中,哪一种是完成作业的最佳工具?当然,实际答案取决于解析文件的目标,因此值得花时间探究所有选项。


\r\n\r\n\r\n\r\n
\"\"
\"\"
\r\n\r\n\r\n\r\n
\"\"
\r\n\r\n\r\n\r\n\r\n
\"\"
回页首


\r\n

传统的 fopen 方法

\r\n

fopen 方法可能是以前的 C 和 C++ 程序员最熟悉的,因为如果您使用过这些语言,那么它们或多或少都是您已掌握多年的工具。对于这些方法中的任何一种,通过使用 fopen(用于读取数据的函数)的标准方法打开文件,然后使用 fclose 关闭文件,如清单 1 所示。


清单 1. 用 fgets 打开并读取文件
\r\n\r\n\r\n\r\n
				\r\n$file_handle = fopen(\”myfile\”, \”r\”);\r\nwhile (!feof($file_handle)) {\r\n   $line = fgets($file_handle);\r\n   echo $line;\r\n}\r\nfclose($file_handle);\r\n

\r\n

虽然大多数具有多年编程经验的程序员都熟悉这些函数,但是让我对这些函数进行分解。有效地执行以下步骤:

\r\n
    \r\n
  1. 打开文件。$file_handle 存储了一个对文件本身的引用。 \r\n
  2. 检查您是否已到达文件的末尾。 \r\n
  3. 继续读取文件,直至到达文件末尾,边读取边打印每行。 \r\n
  4. 关闭文件。
\r\n

记住这些步骤,我将回顾在这里使用的每个文件函数。

\r\n

fopen

\r\n

fopen 函数将创建与文件的连接。我之所以说“创建连接”,是因为除了打开文件之外,fopen 还可以打开一个 URL:

\r\n\r\n\r\n\r\n
$fh = fopen(\”http://127.0.0.1/\”, \”r\”);\r\n

\r\n

这行代码将创建一个与以上页面的连接,并允许您开始像读取一个本地文件一样读取它。

\r\n

注: fopen 中使用的 \”r\” 将指示文件以只读方式打开。由于将数据写入文件不在本文的讨论范围内,因此我将不列出所有其他选项。但是,如果是从二进制文件读取以获得跨平台兼容性,则应当将 \”r\” 更改为 \”rb\”。稍后您将看到这样的示例。

\r\n

feof

\r\n

feof 命令将检测您是否已经读到文件的末尾并返回 True 或 False。清单 1 中的循环将继续执行,直至您达到文件“myfile”的末尾。注:如果读取的是 URL 并且套接字由于不再有任何数据可以读取而超时,则 feof 也将返回 False。

\r\n

fclose

\r\n

向前跳至清单 1 的末尾,fclose 将实现与 fopen 相反的功能:它将关闭指向文件或 URL 的连接。执行此函数后,您将不再能够从文件或套接字中读取任何信息。

\r\n

fgets

\r\n

在清单 1 中回跳几行,您就到达了文件处理的核心:实际读取文件。fgets 函数是处理第一个示例的首选武器。它将从文件中提取一行数据并将其作为字符串返回。在那之后,您可以打印或者以别的方式处理数据。清单 1 中的示例将精细地打印整个文件。

\r\n

如果决定限制处理数据块的大小,您可以将一个参数添加到 fgets 中限制最大行长度。例如,使用以下代码将行长度限制为 80 个字符:

\r\n\r\n\r\n\r\n
$string = fgets($file_handle, 81);\r\n

\r\n

回想 C 中的“\\0”字符串末尾终止符,将长度设为比实际所需值大一的数字。因而,如果需要 80 个字符,则以上示例使用 81。应养成以下习惯:只要对此函数使用行限制,就添加该额外字符。

\r\n

fread

\r\n

fgets 函数是多个文件读取函数中惟一一个可用的。它是一个更常用的函数,因为逐行解析通常会有意义。事实上,几个其他函数也可以提供类似功能。但是,您并非总是需要逐行解析。

\r\n

这时就需要使用 freadfread 函数与 fgets 的处理目标略有不同:它趋于从二进制文件(即,并非主要包含人类可阅读的文本的文件)中读取信息。由于“行”的概念与二进制文件无关(逻辑数据结构通常都不是由新行终止),因此您必须指定需要读入的字节数。

\r\n\r\n\r\n\r\n
$fh = fopen(\”myfile\”, \”rb\”);\r\n$data = fread($file_handle, 4096);\r\n

\r\n\r\n\r\n\r\n\r\n
\"\"\r\n\r\n\r\n\r\n
使用二进制数据
\r\n

注意:此函数的示例已经使用了略微不同于 fopen 的参数。当处理二进制数据时,始终要记得将 b 选项包含在 fopen 中。如果跳过这一点,Microsoft® Windows® 系统可能无法正确处理文件,因为它们将以不同的方式处理新行。如果处理的是 Linux® 系统(或其他某个 UNIX® 变种),则这可能看似没什么关系。但即使不是针对 Windows 开发的,这样做也将获得良好的跨平台可维护性,并且也是应当遵循的一个好习惯。

\r\n

以上代码将读取 4,096 字节 (4 KB) 的数据。注:不管指定多少字节,fread 都不会读取超过 8,192 个字节 (8 KB)。

\r\n

假定文件大小不超过 8 KB,则以下代码应当能将整个文件读入一个字符串。

\r\n\r\n\r\n\r\n
$fh = fopen(\”myfile\”, \”rb\”);\r\n$data = fread($fh, filesize(\”myfile\”));\r\nfclose($fh);\r\n

\r\n

如果文件长度大于此值,则只能使用循环将其余内容读入。

\r\n

fscanf

\r\n

回到字符串处理,fscanf 同样遵循传统的 C 文件库函数。如果您不熟悉它,则 fscanf 将把字段数据从文件读入变量中。

\r\n\r\n\r\n\r\n
list ($field1, $field2, $field3) = fscanf($fh, \”%s %s %s\”);\r\n

\r\n

此函数使用的格式字符串在很多地方都有描述(如 PHP.net 中),故在此不再赘述。可以这样说,字符串格式化极为灵活。值得注意的是所有字段都放在函数的返回值中。(在 C 中,它们都被作为参数传递。)

\r\n

fgetss

\r\n

fgetss 函数不同于传统文件函数并使您能更好地了解 PHP 的力量。该函数的功能类似于 fgets 函数,但将去掉发现的任何 HTML 或 PHP 标记,只留下纯文本。查看如下所示的 HTML 文件。


清单 2. 样例 HTML 文件
\r\n\r\n\r\n\r\n
				\r\n<html>\r\n    <head><title>My title</title></head>\r\n    <body>\r\n        <p>If you understand what \”Cause there ain\’t no one for to give you no pain\”\r\n            means then you listen to too much of the band America</p>\r\n    </body>\r\n</html>\r\n

\r\n

然后通过 fgetss 函数过滤它。


清单 3. 使用 fgetss
\r\n\r\n\r\n\r\n
				\r\n$file_handle = fopen(\”myfile\”, \”r\”);\r\nwhile (!feof($file_handle)) {\r\n   echo = fgetss($file_handle);\r\n}\r\nfclose($file_handle);\r\n

\r\n

以下是输出:

\r\n\r\n\r\n\r\n
    My title\r\n\r\n        If you understand what \”Cause there ain\’t no one for to give you no pain\”\r\n            means then you listen to too much of the band America\r\n

\r\n

fpassthru 函数

\r\n

无论怎样读取文件,您都可以使用 fpassthru 将其余数据转储到标准输出通道。

\r\n\r\n\r\n\r\n
fpassthru($fh);\r\n

\r\n

此外,此函数将打印数据,因此无需使用变量获取数据。

\r\n

非线性文件处理:跳跃访问

\r\n

当然,以上函数只允许顺序读取文件。更复杂的文件可能要求您来回跳转到文件的不同部分。这时就用得着 fseek 了。

\r\n\r\n\r\n\r\n
fseek($fh, 0);\r\n

\r\n

以上示例将跳转回文件的开头。如果不需要完全返回 —— 我们可设定返回千字节 —— 然后就可以这样写:

\r\n\r\n\r\n\r\n
fseek($fh, 1024);\r\n

\r\n

从 PHP V4.0 开始,您有一些其他选项。例如,如果需要从当前位置向前跳转 100 个字节,则可以尝试使用:

\r\n\r\n\r\n\r\n
fseek($fh, 100, SEEK_CUR);\r\n

\r\n

类似地,可以使用以下代码向后跳转 100 个字节:

\r\n\r\n\r\n\r\n
fseek($fh, -100, SEEK_CUR);\r\n

\r\n

如果需要向后跳转至文件末尾前 100 个字节处,则应使用 SEEK_END

\r\n\r\n\r\n\r\n
fseek($fh, -100, SEEK_END);\r\n

\r\n

在到达新位置后,可以使用 fgetsfscanf 或任何其他方法读取数据。

\r\n

注:不能将 fseek 用于引用 URL 的文件处理。


\r\n\r\n\r\n\r\n
\"\"
\"\"
\r\n\r\n\r\n\r\n
\"\"
\r\n\r\n\r\n\r\n\r\n
\"\"
回页首


\r\n

提取整个文件

\r\n

现在,我们将接触到一些 PHP 的更独特的文件处理功能:用一两行处理大块数据。例如,如何提取文件并在 Web 页面上显示其全部内容?好的,您看到了 fgets 使用循环的示例。但是如何能够使此过程变得更简单?用 fgetcontents 会使过程超级简单,该方法将把整个文件放入一个字符串中。

\r\n\r\n\r\n\r\n
$my_file = file_get_contents(\”myfilename\”);\r\necho $my_file;\r\n

\r\n

虽然它不是最好的做法,但是可以将此命令更简明地写为:

\r\n\r\n\r\n\r\n
echo file_get_contents(\”myfilename\”);\r\n

\r\n

本文主要介绍的是如何处理本地文件,但是值得注意的是您还可以用这些函数提取、回显和解析其他 Web 页面。

\r\n\r\n\r\n\r\n
echo file_get_contents(\”http://127.0.0.1/\”);\r\n

\r\n

此命令等效于:

\r\n\r\n\r\n\r\n
$fh = fopen(\”http://127.0.0.1/\”, \”r\”);\r\nfpassthru($fh);\r\n

\r\n

您一定会查看此命令并认为:“那还是太费力”。PHP 开发人员同意您的看法。因此可以将以上命令缩短为:

\r\n\r\n\r\n\r\n
readfile(\”http://127.0.0.1/\”);\r\n

\r\n

readfile 函数将把文件或 Web 页面的全部内容转储到默认的输出缓冲区。默认情况下,如果失败,此命令将打印错误消息。要避免此行为(如果需要),请尝试:

\r\n\r\n\r\n\r\n
@readfile(\”http://127.0.0.1/\”);\r\n

\r\n

当然,如果确实需要解析文件,则 file_get_contents 返回的单个字符串可能有些让人吃不消。您的第一反应可能是用 split() 函数将它分解一下。

\r\n\r\n\r\n\r\n
$array = split(\”\\n\”, file_get_contents(\”myfile\”));\r\n

\r\n

但是既然已经有一个很好的函数为您执行此操作为什么还要这样大费周章?PHP 的 file() 函数一步即可完成此操作:它将返回分为若干行的字符串数组。

\r\n\r\n\r\n\r\n
$array = file(\”myfile\”);\r\n

\r\n

应当注意的是,以上两个示例有一点细微差别。虽然 split 命令将删除新行,但是当使用 file 命令(与 fgets 命令一样)时,新行仍将被附加到数组中的字符串上。

\r\n

但是,PHP 的力量还远不止于此。您可以在一条命令中使用 parse_ini_file 解析整个 PHP 样式的 .ini 文件。parse_ini_file 命令接受类似清单 4 所示的文件。


清单 4. 样例 .ini 文件
\r\n\r\n\r\n\r\n
				\r\n; Comment\r\n[personal information]\r\nname = \”King Arthur\”\r\nquest = To seek the holy grail\r\nfavorite color = Blue\r\n\r\n[more stuff]\r\nSamuel Clemens = Mark Twain\r\nCaryn Johnson = Whoopi Goldberg\r\n

\r\n

以下命令将把此文件转储为数组,然后打印该数组:

\r\n\r\n\r\n\r\n
$file_array = parse_ini_file(\”holy_grail.ini\”);\r\nprint_r $file_array;\r\n

\r\n

以下输出的是结果:


Listing 5. 输出
\r\n\r\n\r\n\r\n
				\r\nArray\r\n(\r\n    [name] => King Arthur\r\n    [quest] => To seek the Holy Grail\r\n    [favorite color] => Blue\r\n    [Samuel Clemens] => Mark Twain\r\n    [Caryn Johnson] => Whoopi Goldberg\r\n)\r\n

\r\n

当然,您可能注意到此命令合并了各个部分。这是默认行为,但是您可以通过将第二个参数传递给 parse_ini_file 轻松地修正它:process_sections,这是一个布尔型变量。将 process_sections 设为 True。

\r\n\r\n\r\n\r\n
$file_array = parse_ini_file(\”holy_grail.ini\”, true);\r\nprint_r $file_array;\r\n

\r\n

并且您将获得以下输出:


清单 6. 输出
\r\n\r\n\r\n\r\n
				\r\nArray\r\n(\r\n    [personal information] => Array\r\n        (\r\n            [name] => King Arthur\r\n            [quest] => To seek the Holy Grail\r\n            [favorite color] => Blue\r\n        )\r\n\r\n    [more stuff] => Array\r\n        (\r\n            [Samuel Clemens] => Mark Twain\r\n            [Caryn Johnson] => Whoopi Goldberg\r\n        )\r\n\r\n)\r\n

\r\n

PHP 将把数据放入可以轻松解析的多维数组中。

\r\n

对于 PHP 文件处理来说,这只是冰山一角。诸如 tidy_parse_filexml_parse 之类的更复杂的函数可以分别帮助您处理 HTML 和 XML 文档。有关这些特殊函数的使用细节,请参阅 参考资料。如果您要处理那些类型的文件,则那些参考资料值得一看,但不必过度考虑本文中谈到的每种可能遇到的文件类型,下面是一些用于处理到目前为止介绍的函数的很好的通用规则。


\r\n\r\n\r\n\r\n
\"\"
\"\"
\r\n\r\n\r\n\r\n
\"\"
\r\n\r\n\r\n\r\n\r\n
\"\"
回页首


\r\n

最佳实践

\r\n

绝不要假定程序中的一切都将按计划运行。例如,如果您要查找的文件已被移动该当如何?如果权限已被改变而无法读取其内容又当如何?您可以通过使用 file_existsis_readable 预先检查这些问题。


清单 7. 使用 file_exists 和 is_readable
\r\n\r\n\r\n\r\n
				\r\n$filename = \”myfile\”;\r\nif (file_exists($filename) && is_readable ($filename)) {\r\n	$fh = fopen($filename, \”r\”);\r\n	# Processing\r\n	fclose($fh);\r\n}\r\n

\r\n

但是,在实践中,用这样的代码可能太繁琐了。处理 fopen 的返回值更简单并且更准确。

\r\n\r\n\r\n\r\n
if ($fh = fopen($filename, \”r\”)) {\r\n	# Processing\r\n	fclose($fh);\r\n}\r\n

\r\n

由于失败时 fopen 将返回 False,这将确保仅当文件成功打开后才执行文件处理。当然,如果文件不存在或者不可读,您可以期望一个负返回值。这将使这个检查可以检查所有可能遇到的问题。此外,如果打开失败,可以退出程序或让程序显示错误消息。

\r\n

fopen 函数一样,file_get_contentsfilereadfile 函数都在打开失败或处理文件失败时返回 False。fgetsfgetssfreadfscanffclose 函数在出错时也返回 False。当然,除 fclose 以外,您可能已经对这些函数的返回值都进行了处理。使用 fclose 时,即使文件处理未正常关闭,也不会执行什么操作,因此通常不必检查 fclose 的返回值。


\r\n\r\n\r\n\r\n
\"\"
\"\"
\r\n\r\n\r\n\r\n
\"\"
\r\n\r\n\r\n\r\n\r\n
\"\"
回页首


\r\n

由您来选择

\r\n

PHP 不缺读取和解析文件的有效方法。诸如 fread 之类的典型函数可能在大多数时候都是最佳的选择,或者当 readfile 刚好能满足任务需要时,您可能会发现自己更为 readfile 的简单所吸引。它实际上取决于所要完成的操作。

\r\n

如果要处理大量数据,fscanf 将能证明自己的价值并比使用 file 附带 splitsprintf 命令更有效率。相反,如果要回显只做了少许修改的大量文本,则使用 filefile_get_contentsreadfile 可能更合适。使用 PHP 进行缓存或者创建权宜的代理服务器时可能就属于这种情况。

\r\n

PHP 给您提供了大量处理文件的工具。深入了解这些工具并了解哪些工具最适合于要处理的项目。您已拥有很多的选择,因此好好地利用它们享受使用 PHP 处理文件的乐趣。



\r\n

参考资料

学习
\r\n
    \r\n
  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文

    \r\n
  • PHP.net 是所有 PHP 的完全命令参考。

    \r\n
  • 查阅“PHP 推荐读物列表”。

    \r\n
  • 查阅 IBM developerWorks 的 PHP 项目资源中心 扩展 PHP 技巧。

    \r\n
  • 阅读“PHP by example, Part 1”发现 PHP 用于构建复杂且功能强大的 Web 相关程序的简单方法。

    \r\n
  • 了解本文未涉及到的 xml_parse 函数的信息。

    \r\n
  • 了解本文未涉及到的 tidy_parse_file 函数的信息。

    \r\n
  • PHP.net 是 PHP 开发人员的资源。

    \r\n
  • 浏览 developerWorks 上的所有 PHP 内容

    \r\n
  • 收听针对软件开发人员的有趣访谈和讨论,一定要访问 developerWorks 的 podcast

    \r\n
  • 随时关注 developerWorks 的 技术事件和网络广播

    \r\n
  • 查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会、交易展览、网络广播和其他 活动

    \r\n
  • 访问 developerWorks 开放源码专区,获得丰富的 how-to 信息、工具和项目更新,帮助您用开放源码技术进行开发,并与 IBM 产品结合使用。

    \r\n
  • 访问 Safari 在线书店 浏览开放源码技术的各种参考资料。


获得产品和技术
\r\n
    \r\n
  • 使用 IBM 试用软件 构建您的下一个开发项目,这些软件可以通过下载或从 DVD 中获得。


讨论
\r\n

\r\n

关于作者

\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\"\"
\r\n

\"\"\r\n

Roger McCoy 是使用过包括 C、Java、JavaScript、Perl、PHP 和 Microsoft Visual Basic 在内的多种编程语言的开发人员。他有五年的 PHP 应用程序开发经验,但是他作为呼叫中心行业内的技师可能更著名。

使用noatime 作为挂载参数, 由于访问次数 (access times) 不再被记录 (aren\’t registered)\r\n(一般情况下您都不需要记录访问次数这一功能), 这可以带来系统性能的提升. (Cure: 如果开启了这一功能, 也即是没传递 noatime\r\n这一参数, 据我理解, 系统会对每一个文件每次访问都进行计数, 多了这么一道工序, 系统性能当然\r\n要有所下降):\r\n\r\n\r\n\r\n

\r\n

代码清单 3: 改良后的 /etc/fstab 中的 /boot 例
\r\n
\r\n
/dev/hda1 /boot ext2 noauto,noatime 1 2

\r\n \r\n

\r\n \r\nauto 参数会让 mount 程序自动去猜测合适的文件系统