The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

#

tar

-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

下面的参数-f是必须的

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

# tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

# tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

# tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

# tar -tf all.tar
这条命令是列出all.tar包中所有文件,-t是列出文件的意思

# tar -xf all.tar
这条命令是解出all.tar包中所有文件,-x是解开的意思

 


压缩


tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg


tar –czf jpg.tar.gz *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz


tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2


tar –cZf jpg.tar.Z *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z


rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux


zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

 

解压


tar –xvf file.tar //解压 tar包


tar -xzvf file.tar.gz //解压tar.gz


tar -xjvf file.tar.bz2   //解压 tar.bz2


tar –xZvf file.tar.Z   //解压tar.Z

unrar e file.rar //解压rar

unzip file.zip //解压zip


总结


1、*.tar 用 tar –xvf 解压

2、*.gz 用 gzip -d或者gunzip 解压

3、*.tar.gz和*.tgz 用 tar –xzf 解压

4、*.bz2 用 bzip2 -d或者用bunzip2 解压

5、*.tar.bz2用tar –xjf 解压

6、*.Z 用 uncompress 解压

7、*.tar.Z 用tar –xZf 解压

8、*.rar 用 unrar e解压

9、*.zip 用 unzip 解压

posted @ 2013-03-22 10:22 Eric_jiang 阅读(244) | 评论 (0)编辑 收藏

 下面是拍摄照片时选择快门速度和光圈最佳组合的准则。

选择光圈(f值)

镜头孔径

     

50mm f/2镜头

最大孔径

适合在暗弱照明条件下获得足够的曝光量,如现场光照明。具有最小的景深。就结像技师来讲是该镜头最差的一档

f/2

较最大孔径

适合在暗弱照明条件下获得足够的曝光量。景深浅,有助于使背景离开焦点,从而把注意力集中到被摄主体上。

f/2.8

较最大孔径小二至三级

具有该镜头最佳的结像质量。比上述较大的孔径具有稍大的景深。 提供有限的清晰聚焦的范围,以便当照明情况较最佳状态稍差时获得合适的曝光量,例如多云的天气或者在阴影处。

f/4f/5.6

较最小孔径大二级

具有中等(适度)的景深。适用于户外日光下拍摄。具有极好的结像质量。

f/8

较最小孔径大一级

具有很大的景深。适合于户外日光照明条件下拍摄。具有极好的结像质量。

f/11

最小孔径

具有最大的景深,清晰度损失极轻微(应归于光学原因)。当最大景深显得重要的时候,这种由于孔径小而产生增大景深的好处,在价值上显然超过其几乎察觉不出的清晰度损失的缺点。

 

选择快门速度

快门速度

      

B

使用相机支架(如三脚架)。快门开启时间的长短由按下快门按钮的时间来控制。适合户外夜间使用小光圈、大景深的拍摄。如拍摄焰火、闪电……及记录夜间由移动照明形成的条纹图案(如行驶着的汽车灯)。

11/2

使用相机支架(如三脚架)。适合在暗淡照明情况下使用小光圈获得大景深和足够的曝光量(如现场光或摄影灯照明)。适合拍摄无生命的物体和稳定不动的被摄体。

1/4

使用相机支架。这是适于拍摄成年人肖像最慢的快门速度。适合在暗淡照明条件下使用小光圈以获得大景深和足够的曝光量。适合稳定的被摄体。

1/8

使用相机支架。对于在限定范围内拍摄成年人比用1/4秒快门速度时更好。适合在暗淡照明条件下使用小光圈以获得大景深和足够的曝光量。适合稳定的被摄体。

1/15

使用相机支架。当相机上安装标准镜头或者广角镜头时,如在曝光时相机能握持得相当平稳的话,那么有些人能手持相机进行拍摄。适合在暗弱照明条件下,使用小光圈以获得大景深和足够的曝光量。

1/30

这档快门速度是在手持相机进行拍摄并在该相机上配以标准镜头或广角镜头时,被推荐的最慢快门速度。为了获得清晰度高的照片,相机必须握持的极平稳。这档快门速度适合大多数现场光摄影。适合在多云天气或阴影处用小光圈以获得大景深。

1/60

这档快门速度适于照明条件不太理想,如多云的天气、在阴影处等户外日光下拍摄照片用。对使用小光圈以增大景深来说,该速度是很有用的。在较明亮的现场光照明的场所也使用这档快门速度。使用这档快门速度,相机意外地受到震动而使拍摄失败的情况要比使用1/30秒快门速度时来得少些。适用于单反相机的闪光灯同步。

1/125

这是户外日光下拍摄照片最好的快门速度。在明亮的照明情况下,使用中等大小的光圈到小光圈能产生很好的景深。使用这档快门速度,能使来自相机本身的微弱震动减到最小。能抓住一些中等速度的动作,如走动着的人,儿童的游戏或是自由活动着婴孩。对于手持相机并安装上焦距小于105mm的中焦距镜头进行拍摄,该速度具有一定的保险性。这档快门速度被推荐用于某些单镜头反光照相机使用闪光灯拍摄。

1/250

适合抓住一般速度的运动体,例如以中等速度跑动着的人、游泳运动员、自行车运动员、在一定距离外奔跑着的马、检阅活动、奔跑着的小孩、帆船、棒球运动、以中等速度比赛的足球运动员。当你并不需要大景深,而主要是想抓住动作的时候,可以在户外日光照明情况下用这档快门速度,以使相机的震动程度减至最小。适合于手持相机安装上250mm焦距镜头进行拍摄。

1/500

适合抓住运动速度较快的动体,例如中等距离外的运动员、奔跑着的马、跳水运动员、快速骑驶着的自行车运动员、行驶着的轿车或跑动中的篮球运动员。这档快门速度能用来抓住除了最快速度外的所有动体。

1/1000

是抓住快速动体的最佳速度。如赛车、摩托车、飞机、快艇、野外和体育场内的比赛项目、网球运动员、滑雪运动员及高尔夫球运动员。因为使用该快门速度时需用比其它快门速度时更大的光圈,因此它的景深最小。这是手持相机安装上400mm以内焦距的长焦距镜头进行拍摄时极好的快门速度。

posted @ 2013-03-19 16:18 Eric_jiang 阅读(253) | 评论 (0)编辑 收藏

·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

find命令的参数;

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

#-print 将查找到的文件输出到标准输出
#-exec   command   {} \;      —–将查到的文件执行command操作,{} 和 \;之间有空格
#-ok 和-exec相同,只不过在操作前要询用户
例:find . -name .svn | xargs rm -rf

====================================================

-name   filename             #查找名为filename的文件
-perm                        #按执行权限来查找
-user    username             #按文件属主来查找
-group groupname            #按组来查找
-mtime   -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n               #按文件访问时间来查GIN: 0px">

-ctime    -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2              找文件,-n指n天以内,+n指n天以前 
-ctime    -n +n               #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 
-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                      #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2               #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                     #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                %;      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                        #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                       #忽略某个目录

=====================================================
$find   ~   -name   "*.txt"   -print    #在$HOME中查.txt文件并显示
$find   .    -name   "*.txt"   -print
$find   .    -name   "[A-Z]*"   -print   #查以大写字母开头的文件
$find   /etc   -name   "host*"   -print #查以host开头的文件
$find   .   -name   "[a-z][a-z][0–9][0–9].txt"    -print   #查以两个小写字母和两个数字开头的txt文件
$find .   -perm   755   -print
$find   .   -perm -007   -exec ls -l {} \;   #查所有用户都可读写执行的文件同-perm 777
$find   . -type d   -print
$find   .   !   -type   d   -print 
$find   .   -type l   -print

$find   .   -size   +1000000c   -print        #查长度大于1Mb的文件
$find   .   -size   100c         -print       # 查长度为100c的文件
$find   .   -size   +10   -print              #查长度超过期作废10块的文件(1块=512字节)

$cd /
$find   etc   home   apps    -depth   -print   | cpio   -ivcdC65536   -o   /dev/rmt0
$find   /etc -name "passwd*"   -exec grep   "cnscn"   {}   \;   #看是否存在cnscn用户
$find . -name "yao*"   | xargs file
$find   . -name "yao*"   |   xargs   echo    "" > /tmp/core.log
$find   . -name "yao*"   | xargs   chmod   o-w

======================================================

find   -name april*                     在当前目录下查找以april开始的文件
find   -name   april*   fprint file        在当前目录下查找以april开始的文件,并把结果输出到file中
find   -name ap* -o -name may*   查找以ap或may开头的文件
find   /mnt   -name tom.txt   -ftype vfat   在/mnt下查找名称为tom.txt且文件系统类型vfat的文件
find   /mnt   -name t.txt ! -ftype vfat   在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find   /tmp   -name wa* -type l            在/tmp下查找名为wa开头且类型为符号链接的文件
find   /home   -mtime   -2                 在/home下查最近两天内改动过的文件
find /home    -atime -1                  查1天之内被存取过的文件
find /home -mmin    +60                  在/home下查60分钟前改动过的文件
find /home   -amin   +30                  查最近30分钟前被存取过的文件
find /home   -newer   tmp.txt             在/home下查更新时间比tmp.txt近的文件或目录
find /home   -anewer   tmp.txt            在/home下查存取时间比tmp.txt近的文件或目录
find   /home   -used   -2                  列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find   /home   -user cnscn                列出/home目录内属于用户cnscn的文件或目录
find   /home   -uid   +501                  列出/home目录内用户的识别码大于501的文件或目录
find   /home   -group   cnscn              列出/home内组为cnscn的文件或目录
find   /home   -gid 501                   列出/home内组id为501的文件或目录
find   /home   -nouser                    列出/home内不属于本地用户的文件或目录
find   /home   -nogroup                   列出/home内不属于本地组的文件或目录
find   /home    -name tmp.txt    -maxdepth   4   列出/home内的tmp.txt 查时深度最多为3层
find   /home   -name tmp.txt   -mindepth   3   从第2层开始查
find   /home   -empty                     查找大小为0的文件或空目录
find   /home   -size   +512k                查大于512k的文件
find   /home   -size   -512k               查小于512k的文件
find   /home   -links   +2                查硬连接数大于2的文件或目录
find   /home   -perm   0700                查权限为700的文件或目录
find   /tmp   -name tmp.txt   -exec cat {} \;
find   /tmp   -name   tmp.txt   -ok   rm {} \;

find    /   -amin    -10     # 查找在系统中最后10分钟访问的文件
find    /   -atime   -2        # 查找在系统中最后48小时访问的文件
find    /   -empty             # 查找在系统中为空的文件或者文件夹
find    /   -group   cat        # 查找在系统中属于 groupcat的文件
find    /   -mmin   -5         # 查找在系统中最后5分钟里修改过的文件
find    /   -mtime   -1       #查找在系统中最后24小时里修改过的文件
find    /   -nouser           #查找在系统中属于作废用户的文件
find    /   -user    fred     #查找在系统中属于FRED这个用户的文件

查当前目录下的所有普通文件
# 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 
查当前目录下的所有普通文件,并在- e x e c选项中使用ls -l命令将它们列出

=================================================
在/ l o g s目录中查找更改时间在5日以前的文件并删除它们:
$ find logs -type f -mtime +5 -exec   -ok   rm {} \;

=================================================
查询当天修改过的文件
[root@book class]# find   ./   -mtime   -1   -type f   -exec   ls -l   {} \;

=================================================
查询文件并询问是否要显示
[root@book class]# find   ./   -mtime   -1   -type f   -ok   ls -l   {} \;  
< ls … ./classDB.inc.php > ? y
-rw-r–r–    1 cnscn    cnscn       13709   1月 12 12:22 ./classDB.inc.php
[root@book class]# find   ./   -mtime   -1   -type f   -ok   ls -l   {} \;  
< ls … ./classDB.inc.php > ? n
[root@book class]#

=================================================
查询并交给awk去处理
[root@book class]# who   |   awk   ’{print $1"\t"$2}’
cnscn    pts/0

=================================================
awk—grep—sed

[root@book class]# df   -k |   awk ‘{print $1}’ |   grep   -v   ’none’ |   sed   s"/\/dev\///g"
文件系统
sda2
sda1
[root@book class]# df   -k |   awk ‘{print $1}’ |   grep   -v   ’none’
文件系统
/dev/sda2
/dev/sda1

1)在/tmp中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR",最后打印出所有包含"SYSCALL_VECTOR"的文件名

A) find   /tmp   -name   "*.h"   | xargs   -n50   grep SYSCALL_VECTOR
B) grep   SYSCALL_VECTOR   /tmp/*.h | cut    -d’:'   -f1| uniq > filename
C) find   /tmp   -name "*.h"   -exec grep "SYSCALL_VECTOR"   {}   \; -print

2)find / -name filename -exec rm -rf {} \;
    find / -name filename -ok rm -rf {} \;

3)比如要查找磁盘中大于3M的文件:
find . -size +3000k -exec ls -ld {} ;

4)将find出来的东西拷到另一个地方
find *.c -exec cp ‘{}’ /tmp ‘;’

如果有特殊文件,可以用cpio,也可以用这样的语法:
find dir -name filename -print | cpio -pdv newdir

6)查找2004-11-30 16:36:37时更改过的文件
# A=`find ./ -name "*php"` |   ls -l –full-time $A 2>/dev/null | grep "2004-11-30 16:36:37"

Linux-allLinux | No Comments »

find 实例

四月 18th, 2006

  要在/usr/linux中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR",最后打印出所有包含"SYSCALL_VECTOR"的文件名,有以下几种方法实现
find /usr/linux -name "*.h" | xargs -n50 grep SYSCALL_VECTOR
grep SYSCALL_VECTOR /usr/linux/*.h | cut -d’:’ -f1 | uniq > filename
find /usr/linux -name "*.h" -exec grep "SYSCALL_VECTOR" {} \; -print

  我用find / -name filename| rm -rf,不成功,请问为什么不成功?
find / -name filename -exec rm -rf {} \;
find . -name filename |rm -rf试一下{} 表示你找出来的结果。
\; 则相当于“宪法”,没什么说头,就是这么规定的,在 -exec 后面需要一个表示该命令终结的的符号。可以在 man find 中找到答案。
要让rm识别find的结果,如下:
find / -name filename |xargs rm -rf
之所以find . -name filename |rm -rf不通过,是因为rm命令不接受从标准输入传过来的指令
查找含特定字符串的文件
例如查找当前目录下含有"the string you want find…"字符串的文件:
$find . -type f -exec grep “the string you want find…” {} ; -print

  从根目录开始查tmpfile,一旦查到马上删除
find / -name "tmpfile" -exec rm {} \;

  find 的perm问题
请问一下以下命令什么意思?关键是那个数字前的-,其他都还知道
find -name ".*" -perm -007
我知道
find -name ".*" -perm 755
这个是用来查找权限位为755的隐藏文件
噢,对了还有,我上边的命令都省略了find的pathname参数 find默认是查找当前工作目录的吗?
如果我用 -ok 替代 -exec, 那么还需要加上 {} \; 吗?
这个已经清楚,仍然需要,因为 -ok 只是 -exec 的提示模式,它只是多了一个确认操作的步骤,刚才没有读懂那几句E文的意思 呵呵 不好意思
-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~
解释解释?
find -name ".*" -perm -007 和 find -name ".*" -perm 777 有区别吗?
-007是怎么来得呢?
不过有一个问题
我用 find . -perm -100 会列出当前目录 . , 这是为什么呢?

下面引用由explover在 2002/10/01 06:15am 发表的内容:
-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~
-007是查找含其它用户(不同组,非属主)可读,写,执行的文件.并不一定要同组可读写,-是指最少权限为007.
下面引用由一颗小白菜在 2002/10/01 10:16am 发表的内容:
OK了, 呵呵
不过有一个问题
我用 find . -perm -100 会列出当前目录 . , 这是为什么呢?
这种方法不会准确的找出目录的. -100是指权限至少是属主可运行.
在unix系统下,你可以拥有对目录文件的执行权你才可以进入一个目录.这便是目录文件被列出的原因.
find . -perm -001 -print找到往往是目录文件.
我的意思当然不是使用这种方法来找目录,只不过不明白其中的 -100 意义了
那以此类推,是不是 -010是指权限至少是owner同组可执行的吗?也就是说其实这里的010和-是分开的,-表示一个至少的意思,而且010才是真正用来描述权限位的?
这样子就明白了 谢谢你噢

  将find出来的东西拷到另一个地方?
find *.c -exec cp ‘{}’ /tmp ‘;’
如果有特殊文件,可以用cpio,也可以用这样的语法:
find dir -name filename -print | cpio -pdv newdir

  找出磁盘中某个大小范围内的文件
比如要查找磁盘中大于3M的文件:
find . -size +3000k -exec ls -ld {} ;

  如何用find查找某一天更改的文件?
可以使用这一行命令来实现:
A=`find ~ -print` | ls -l –full-time $A 2>/dev/null | grep "Jun 27" | grep 1998

  使用find 命令查找某个时间段的shell怎么写。比如11点到12点的。thanks
创建一个脚本judgetime,内容如下:
ls -l $*|awk ‘{split($8,hour,":");if((hour[1]>23 || hour[1] < 1)&&hour[1]<24)print}’
到要查找的目录下,运行
find ./ -name "*" -exec judgetime {} \;
注意时间格式为24小时制。
thank you ,如果我要精确到分钟呢
touch -t 04241112 starttemp #精确到12分钟
touch -t 04241220 endtemp #截止到12点20
find [dir] -newer starttemp -a ! -newer endtemp -exec ls -l {} \;
newer?
那昨天12:10文件如何呢?
每天执行的时候,用当天的日期和时间戳替换一下不就行了吗?
我不知道他是不是把所有的11:00~12:00的都找出来,是不是只执行一次还是每天都执行?
这种情况俺猜想是自己的东西放在哪忘了,只记得当时是深夜了。
有道理!
不愧是斑竹!
不光知道怎么解决问题,还知道在什么情况下出现这类问题,佩服佩服!
问题又出现了。创建这个文件的时候。本来应该是时间的一栏现在写上了2002,而不是12:00.
等到12:00过了吧!

  删除指定日期的文件
find ./ -name 文件名 -exec rm -f {} \;
例:删除当前30天内没用过的文件,用如下命令:
find / -atime +30 -exec rm -f {} \;
我自己试着写了一小段SHELL,也用ll ,grep, rm 几个命令,用起来还差强人意。
对过滤出来的文件名列表中用了一个FOR语句,再执行rm 。现在我想把这段SHELL 扩展一下让它每天定时运行将 n 天前的文件删掉,有没有人能给我一些提示,谢谢!
还有个问题,对于前面那位朋友提到的"find / -atime +30 -exec rm -f {} \;
"方法,我很早就试过几次,不过好像都不太对,参数 -atime n 是查找n天前被访问过的文件,我不明白的是这里的时间参照点是什么,以及这个n天是怎么计算的。
问 题二、对于"ll |cut -f 1" 这个命令我是不是用错了,我只想取出 ll 中列出的文件名,但用cut -f 命令做不到 ,我只好换用 ll |cut -c 59- 这种方式得到我要的文件名,but it’s a pool idear !我也试过用awk ,好像也不对,看看大家可不可以给我一些小小的提醒,TKS SO MUCH
问题三、如何改变 I结点 的日期格式 我现在的系统显示的格式是:
-rw-r—– 1 msahz01 users 2253 2002年2月 2日 poheader.i
我想把这换成
-rw-rw-rw- 1 house users 2193 Apr 19 2001 hkdisp.p
如何才能做到这点?
awk 应该可以
ll | awk ‘{print $9}’
删除多少天之前的文件
find /yourpath -mtime +31 -exec rm {} \;
find /yourpath -mtime +366 -exec rm {} \;

find中, -ctime, -mtime及其-atime有何区别

请问 -ctime 和 -mtime 有什么关系 ?
如果父目录的 ctime 改变, 那它下面的文件的 ctime 就会自动都改了吗 ?
-ctime 和 -mtime ,-atime 这些信息是存在哪儿呢 ?

我用 -mtime -1 找到了新建或改的文件.
但怎样才能找到一天内 mv 来的文件呢( 它们的时间是原有的时间,早于一天 ) ?

用-newer选项啊。
你可以先touch一个你想要的时间的文件如下:
$ touch -t 08190800 test
$ ls -l test
-rw-r–r– 1 dba other 0 Aug 19 08:00 test
然后
$ find . -newer test -print
.
./.sh_history
$ ls -l .sh_history
-rw——- 1 dba other 154 Aug 20 17:39 .sh_history

用touch可以写出你想要的任何时间的文件,然后用-newer ,! -newer选项即可成功。

1.ctime含inode信息修改的时间.mtime只指文件内容建立或修改的时间.
2 不会.
3.这些信息应该是存在文件系统的超级块里.

我查了书 -ctime 是指 inode 的改变(或称文件的状态改变).
请问 inode 存了哪些信息 ?
做了些小测试,-mtime 改, -ctime 一定也改.
改文件名, -ctime 也会改.
谁能回答 i-node 存了哪些东西 ?

vi /usr/include/sys/inode.h

班主,我不能 access /usr/include/sys/inode.h .
摘书如下:
Directories contain directory entries. Each entry contains a file or subdirectory name and an index node reference number (i-node number). To increase speed and enhance use of disk space, the data in a file is stored at various locations in the computer’s memory. The i-node contains the addresses used to locate all the scattered blocks of data associated with a file. The i-node also records other information about the file including time of modification and access, access modes, number of links, file owner, and file type.
可我发现 -atime 改了, -ctime 还没改. why ?
( 我先 cat 一个 ASCII 文件,再用 -atime -1 有它用 -ctime -1 居然没有它.)
着岂不跟 inode 信息改变, ctime 就改矛盾吗?

我不同意你贴出来的那段文章,正如我提到的那样,atime,ctime,mtime是放到超级块里,在sco unix下是一种叫stat的结构.(stat_32),不同的系统文件系统可能不同.
sco 下inode的结构如下:

typedef struct inode
{
struct inode *i_forw; /* inode hash chain */
struct inode *i_back; /* ‘’ */
struct inode *av_forw; /* freelist chain */
struct inode *av_back; /* ‘’ */
int *i_fsptr; /* "typeless" pointer to fs dependent */
ino32_t i_number; /* i number, 1-to-1 with dev address */
ushort i_ftype; /* file type = IFDIR, IFREG, etc. */
short i_fstyp; /* File system type */
off_t i_size; /* size of file */
ushort i_uid; /* owner */
ushort i_gid; /* group of owner */
ushort i_flag;
ushort i_want; /* i_flag extension to avoid MP races */
ushort i_count; /* reference count */
short i_nlink; /* directory entries */
dev_t i_rdev; /* Raw device number */
#define i_namtype i_rdev /* i_ftype==IFNAM subtype */
dev_t i_dev; /* device where inode resides */
struct mount *i_mton;/* ptr to mount table entry that */
/* this directory is mounted on */
struct region *i_rp; /* ptr to shared region if any */
struct stdata *i_sp; /* ptr to associated stream */
struct iisem *isem; /* ptr to XENIX semaphores */
struct iisd *isd; /* ptr to XENIX shared data */
} i_un;
#define i_mnton i_un.i_mton /* i_ftype==IFDIR IMOUNT */
#define i_rptr i_un.i_rp /* i_ftype==IFREG || i_ftype==IFBLK */
#define i_sptr i_un.i_sp /* i_ftype==IFCHR || i_ftype==IFIFO */
#define i_sem i_un.isem /* i_ftype==IFNAM && i_namtype==IFSEM */
#define i_sd i_un.isd /* i_ftype==IFNAM && i_namtype==IFSHD */

struct fstypsw *i_fstypp; /* ptr to file system switch FSPTR */
long *i_filocks; /* pointer to filock (structure) list */
unsigned long i_mappages; /* number of pages currently cached */
unsigned long i_vcode; /* read-ahead block save (NFS) */
short i_wcnt; /* write open count or ITEXT count */
struct lockb i_cilock; /* tas to synchronize i_flag changes */
ushort i_rdlocks; /* count of non-exclusive lockers */
} inode_t;

所以,访问一个文件不能改变inode信息.
使用chown, chgrp, chmod命令可以很好的比较mtime和ctime
chown改变一个文件的属主,用ctime可以找到,用mtime便找不到.
试试看.

多谢斑竹! 我是在 Solaris 上面试的.我是对 -ctime 不明白.
试的结果如下:
修改文件,-mtime 改了, -ctime 也会改.
访问文件,-atime 改了, -ctime 没变.
chown, chgrp, chmod,mv, 都会使 -ctime 改变,但不影响 -atime 和 -mtime.
touch 可以改 -mtime and/or -atime,但 touch -a 只改访问时间时,-ctime也改了.
touch -m 改修改时间时,-ctime当然也改了.
好象还有别的很多东西可以令 -ctime 改变, 搞不清楚.
有什么方法可以显示 -mtime,atime,ctime 吗?
可以用 -ctime 来实现对目录的增量文件进行备份或 transfer 吗 ?
多谢!

没有什么工具显示,(可能是俺不知道)
把下面程序里的st_mtime换成st_ctime,或st_atime便可以得到你要的了.
#include
int
main (int argc, char **argv)
{
struct stat buf;
char date[80];
char fname[80];
printf("Enter filename (with full path) to check mtime : ");
scanf("%s",fname);
stat(fname, &buf);
printf ("mtime (in sec) of %s = %ld\n", fname, buf.st_mtime);
strcpy(date, ctime((time_t *)&(buf.st_mtime)));
printf ("mtime (in date) of %s = %s\n", fname, date);
}

至于文件备份,有什么不可以的么?

mtime ls -l 最近修改文件内容的时间
atime ls -lu 最近访问文件的时间
ctime ls -li 最近文件有所改变的状态 ,如文件修改,属性\属主 改变 ,节点 ,链接变化等 ,应该是不拘泥只是时间前后的改变

俺看了ls的帮助,以为只是按ctime或atime排序,显示的时间还是mtime.

仔细比较了一下,ayhan说的是对的.谢谢ayhan.

多谢 ahyan 提示 ! 我在 Solaris 上试过如下:
mtime 用 ls -l 看到
atime 用 ls -lu 看到
ctime 用 ls -lc 看到. (ls -li 只有 inode number)
摘书如下:
-c Uses time of last modification of the i-node (file
created, mode changed, and so forth) for sorting (-t)
or printing (-l or -n).
-u Uses time of last access instead of last modification
for sorting (with the -t option) or printing (with the
-l option).
-i For each file, prints the i-node number in the first
column of the report.

posted @ 2013-03-14 14:46 Eric_jiang 阅读(368) | 评论 (1)编辑 收藏

 广州利康家属资源中心的支持妇女计划项目(项目申请编号:900411)将在3月8日至22日接受公众投票。大家可通过网络或电话投票。请登陆官方网站http://care.gdwomen.org.cn或致电4001096028,按语音提示输入6位数字的项目申请编号投票。记住我们的编号是900411,明天开始投票。请大家为利康疯狂的投吧
群或微博都帮忙转发一下
还有投票 
posted @ 2013-03-08 21:28 Eric_jiang 阅读(191) | 评论 (0)编辑 收藏

http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经01-黄帝内经简介.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经02-黄帝内经的成书流传.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经03-黄帝内经学术体系的结构形成.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经04-黄帝内经学术体系的特点价值.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经05-阴阳五行概述.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经06-素问.阴阳应象大论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经07-素问.阴阳应象大论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经08-素问.阴阳应象大论(四).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经09-素问.阴阳应象大论(五).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经10-素问.阴阳应象大论(六).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经11-素问.阴阳应象大论(七).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经12-素问.阴阳应象大论(八).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经13-素问.藏气法时论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经14-素问.藏气法时论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经15-藏象概述.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经16-素问.灵兰秘典论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经17-素问.灵兰秘典论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经18-素问.六节藏象论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经19-素问.六节藏象论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经20-素问.五藏别论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经21-素问.五藏别论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经22-素问.经脉别论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经23-素问.太阴阳明论(一).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经24-素问.太阴阳明论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经25-灵枢.本神(一).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经26-灵枢.本神(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经27-灵枢.本神(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经28-灵枢.营卫生会(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经29-灵枢.营卫生会(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经30-灵枢.营卫生会(四).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经31-经络概述.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经32-素问.骨空论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经33A-病因病机概述.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经33-素问.生气通天论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经34-素问.生气通天论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经35-素问.生气通天论(四).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经36-素问.生气通天论(五).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经37-素问.玉机真藏论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经38-素问.玉机真藏论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经39-素问.举痛论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经40-素问.调经论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经41-素问.调经论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经42-素问.至真要大论(一).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经43-素问.至真要大论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经44-灵枢.百病姓生(一).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经45-灵枢.百病始生(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经46-灵枢.百病始生(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经47-病症概述.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经48-素问.热论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经49-素问.评热病论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经50-素问.评热病论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经51-素问.咳论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经52-素问.举痛论(一).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经53-素问.举痛论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经54-素问.风论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经55-素问.痹论(一).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经56-素问.痹论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经57-素问.痹论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经58-素问.痿论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经59-素问.痿论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经60-灵枢.水胀(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经61-素问.脉要精微论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经62-素问.脉要精微论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经63-素问.脉要精微论(四).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经64-素问.平人气象论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经65-素问.平人气象论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经66-素问.异法方宜论.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经67-素问.汤液醪醴论.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经68-素问.藏气法时论(一).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经69-素问.藏气法时论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经70-素问.五常政大论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经71-素问.至真要大论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经72-养生概述.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经73-上古天真论(二).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经74-上古天真论(三).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经75-素问.四气调神大论.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经76-上古天真论(四).flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经77-素问.四气调神大论.flv?source=www.puyufanyi.com&lang=Portuguese
http://v.byb.cn/uploads/flv/200905/200905王洪图黄帝内经78-灵枢%20天年.flv?source=www.puyufanyi.com&lang=Portuguese
posted @ 2013-02-09 13:37 Eric_jiang 阅读(3315) | 评论 (7)编辑 收藏

原理:

构造函数使用this关键字给所有属性和方法赋值.因为构造函数只是一个函数,所以可使ClassA的构造方法称为ClassB的方法,然后调用它.

ClassB就会收到ClassA的构造方法中定义的属性和方法.

例子:

        function ClassA(name){             this.name=name;             this.getName=function(){                 return this.name;             }         }                  function ClassB(name,password){             this.ClassA=ClassA;             this.ClassA(name);             delete this.ClassA;                          this.password=password;             this.getPassword=function(){                 return this.password;             }         }                  var b =new ClassB('wwww','1123');         document.write(b.getName());

经过调试,我们可以看到:

image

变量b中已经包含了ClassA中定义的方法.

代码理解:

在ClassB中,this.ClassA(name)等价于以下代码:
            this.name=name;
            this.getName=function(){
                return this.name;
            }

即:将ClassA函数中的代码复制过来,即:ClassB中的代码如下:

        function ClassB(name,password){             this.ClassA=ClassA;                          this.name=name;             this.getName=function(){                 return this.name;             }                          delete this.ClassA;                          this.password=password;             this.getPassword=function(){                 return this.password;             }         }

然后通过delete this.ClassA之后,ClassB中的实际代码如下:

        function ClassB(name,password){             this.name=name;             this.getName=function(){                 return this.name;             }                          this.password=password;             this.getPassword=function(){                 return this.password;             }         }

从而实现了对象冒充.

注意:

对象冒充可以支持多重继承,也就是说一个类可以继承多个类.例子如下:

        function ClassC(){             this.ClassX=ClassX;             this.ClassX();             delete this.ClassX;                          this.ClassY=ClassY;             this.ClassY();             delete this.ClassY;         }

这样就ClassC就实现了继承自ClassX,ClassY.但此处存在一个弊端:

若ClassX和ClassY中存在两个同名的变量或方法,则ClassY会覆盖ClassX中的变量或方法.

此外:

我们还可以通过call()和apply()方法实现对象冒充.

对于call方法:

它的第一个参数用做this的对象,其他参数都直接传递给函数自身.我们来看下面这个小例子:

        function ShowColor(param1,param2){             this.getColor=function(){                 document.write(this.color+"<br/>Two Params : "+param1+" ; "+param2);             }         }                  var obj = new Object;         obj.color='Red';         ShowColor.call(obj,"pm1",'pm2');                  obj.getColor();

运行此段代码后,我们发现页面上显示为:

image

解释:

ShowColor方法是在对象外定义的,调用call时,它将第一个参数,也就是将ClassA的this指向了obj,将后面的参数"pm1"传递给了param1,'pm2'传递给了param2.

        var obj = new Object;         obj.color='Red';         ShowColor.call(obj,"pm1",'pm2');

也就实现了以下效果:

我们将上面代码中的obj.color='Red'给注释起来,再运行代码,结果如下:

image

原因是obj并没有color属性,而obj.getColor()方法中需要this.color,即obj.color,所以会出现undefined的结果.

我们再来看如何利用call来实现对象冒充,继续以刚才的ClassA,ClassB为例:

        function ClassA(name){             this.name=name;             this.getName=function(){                 return this.name;             }                     }                  function ClassB(name,password){             //this.ClassA=ClassA;             //this.ClassA(name);             //delete this.ClassA;             ClassA.call(this,name);                          this.password=password;             this.getPassword=function(){                 return this.password;             }         }         var b = new ClassB('www','111');         b.getPassword();

调试效果:

image

解释:

此处的ClassA.call(this,name); 即将ClassA的this指向了ClassB的this.从而实现了对象冒充.

现在,我们再来看apply方法.

apply方法有两个参数,用作this的对象和要传传递给函数的参数的数组.

例子:

        function ShowColor(param1,param2){             this.getColor=function(){                 document.write(this.color+"<br/>Two Params : "+param1+" ; "+param2);             }         }                  var obj = new Object;         obj.color='Red';         ShowColor.apply(obj,new Array("pm1",'pm2'));                  obj.getColor();

此方法可以被用于对象冒充:

        function ClassA(name){             this.name=name;             this.getName=function(){                 return this.name;             }                     }                  function ClassB(name,password){             //this.ClassA=ClassA;             //this.ClassA(name);             //delete this.ClassA;             ClassA.apply(this,new Array(name));                          this.password=password;             this.getPassword=function(){                 return this.password;             }         }                  var b = new ClassB('www','111');         b.getPassword();

调试效果:

image

原型继承

Javascript对象的创建和继承使用了一套特别的模式,称作原型式继承.

原理是:对象的构造函数可以从其他对象中继承方法,它创建出一个原型对象后,所有其他的新对象都可以基于这个原型对象来构建.

原型本身并不会从其他原型或者构造函数中继承属性,而属性都是从实际对象那里继承过来的.

例1:

        function Person(name){             this.name=name;         }                  Person.prototype.GetName=function(){             return this.name;         }                  function User(name,password){             this.name = name;             this.password = password;         }                  User.prototype = new Person();         User.prototype.GetPassword=function(){             return this.password;         }

解释:

User.prototype = new Person();这句话如何理解呢?User是对User对象构造函数的引用,new Person()使用person构造函数创建了一个Person对象,然后把Person对象的原型置为这个操作的结果.也就是说,当每次new User()时,得到的新User对象都会带有Person对象的所有方法.

posted @ 2012-12-25 11:03 Eric_jiang 阅读(419) | 评论 (0)编辑 收藏

引言

    正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。


    正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。(3)用来替换,比普通的替换更强大。

   正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅 入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首 先要理解的。

    文章中的每一个举例,都可以点击进入到测试页面进行测试。闲话少说,开始。


1. 正则表达式规则

1.1 普通字符

    字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

    举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同)

    举例2:表达式 "bcd",在匹配字符串 "abcde" 时,匹配结果是:成功;匹配到的内容是:"bcd";匹配到的位置是:开始于1,结束于4。


1.2 简单的转义字符

    一些不便书写的字符,采用在前面加 "\" 的方法。这些字符其实我们都已经熟知了。

表达式

可匹配

\r, \n

代表回车和换行符

\t

制表符

\\

代表 "\" 本身

    还有其他一些在后边章节中有特殊用处的标点符号,在前面加 "\" 后,就代表该符号本身。比如:^, $ 都有特殊意义,如果要想匹配字符串中 "^" 和 "$" 字符,则表达式就需要写成 "\^" 和 "\$"。

表达式

可匹配

\^

匹配 ^ 符号本身

\$

匹配 $ 符号本身

\.

匹配小数点(.)本身

    这些转义字符的匹配方法与 "普通字符" 是类似的。也是匹配与之相同的一个字符。

    举例1:表达式 "\$d",在匹配字符串 "abc$de" 时,匹配结果是:成功;匹配到的内容是:"$d";匹配到的位置是:开始于3,结束于5。


1.3 能够与 '多种字符' 匹配的表达式

    正则表达式中的一些表示方法,可以匹配 '多种字符' 其中的任意一个字符。比如,表达式 "\d" 可以匹配任意一个数字。虽然可以匹配其中任意字符,但是只能是一个,不是多个。这就好比玩扑克牌时候,大小王可以代替任意一张牌,但是只能代替一张牌。

表达式

可匹配

\d

任意一个数字,0~9 中的任意一个

\w

任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个

\s

包括空格、制表符、换页符等空白字符的其中任意一个

.

小数点可以匹配除了换行符(\n)以外的任意一个字符

    举例1:表达式 "\d\d",在匹配 "abc123" 时,匹配的结果是:成功;匹配到的内容是:"12";匹配到的位置是:开始于3,结束于5。

    举例2:表达式 "a.\d",在匹配 "aaa100" 时,匹配的结果是:成功;匹配到的内容是:"aa1";匹配到的位置是:开始于1,结束于4。


1.4 自定义能够匹配 '多种字符' 的表达式

    使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符。用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。

表达式

可匹配

[ab5@]

匹配 "a" 或 "b" 或 "5" 或 "@"

[^abc]

匹配 "a","b","c" 之外的任意一个字符

[f-k]

匹配 "f"~"k" 之间的任意一个字母

[^A-F0-3]

匹配 "A"~"F","0"~"3" 之外的任意一个字符

    举例1:表达式 "[bcd][bcd]" 匹配 "abc123" 时,匹配的结果是:成功;匹配到的内容是:"bc";匹配到的位置是:开始于1,结束于3。

    举例2:表达式 "[^abc]" 匹配 "abc123" 时,匹配的结果是:成功;匹配到的内容是:"1";匹配到的位置是:开始于3,结束于4。


1.5 修饰匹配次数的特殊符号

    前面章节中讲到的表达式,无论是只能匹配一种字符的表达式,还是可以匹配多种字符其中任意一个的表达式,都只能匹配一次。如果使用表达式再加上修饰匹配次数的特殊符号,那么不用重复书写表达式就可以重复匹配。

    使用方法是:"次数修饰"放在"被修饰的表达式"后边。比如:"[bcd][bcd]" 可以写成 "[bcd]{2}"。

表达式

作用

{n}

表达式重复n次,比如:"\w{2}" 相当于 "\w\w""a{5}" 相当于 "aaaaa"

{m,n}

表达式至少重复m次,最多重复n次,比如:"ba{1,3}"可以匹配 "ba"或"baa"或"baaa"

{m,}

表达式至少重复m次,比如:"\w\d{2,}"可以匹配 "a12","_456","M12344"...

?

匹配表达式0次或者1次,相当于 {0,1},比如:"a[cd]?"可以匹配 "a","ac","ad"

+

表达式至少出现1次,相当于 {1,},比如:"a+b"可以匹配 "ab","aab","aaab"...

*

表达式不出现或出现任意次,相当于 {0,},比如:"\^*b"可以匹配 "b","^^^b"...

    举例1:表达式 "\d+\.?\d*" 在匹配 "It costs $12.5" 时,匹配的结果是:成功;匹配到的内容是:"12.5";匹配到的位置是:开始于10,结束于14。

    举例2:表达式 "go{2,8}gle" 在匹配 "Ads by goooooogle" 时,匹配的结果是:成功;匹配到的内容是:"goooooogle";匹配到的位置是:开始于7,结束于17。


1.6 其他一些代表抽象意义的特殊符号

    一些符号在表达式中代表抽象的特殊意义:

表达式

作用

^

与字符串开始的地方匹配,不匹配任何字符

$

与字符串结束的地方匹配,不匹配任何字符

\b

匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符

    进一步的文字说明仍然比较抽象,因此,举例帮助大家理解。

    举例1:表达式 "^aaa" 在匹配 "xxx aaa xxx" 时,匹配结果是:失败。因为 "^" 要求与字符串开始的地方匹配,因此,只有当 "aaa" 位于字符串的开头的时候,"^aaa" 才能匹配,比如:"aaa xxx xxx"

    举例2:表达式 "aaa$" 在匹配 "xxx aaa xxx" 时,匹配结果是:失败。因为 "$" 要求与字符串结束的地方匹配,因此,只有当 "aaa" 位于字符串的结尾的时候,"aaa$" 才能匹配,比如:"xxx xxx aaa"

    举例3:表达式 ".\b." 在匹配 "@@@abc" 时,匹配结果是:成功;匹配到的内容是:"@a";匹配到的位置是:开始于2,结束于4。
    进一步说明:"\b" 与 "^" 和 "$" 类似,本身不匹配任何字符,但是它要求它在匹配结果中所处位置的左右两边,其中一边是 "\w" 范围,另一边是 非"\w" 的范围。

    举例4:表达式 "\bend\b" 在匹配 "weekend,endfor,end" 时,匹配结果是:成功;匹配到的内容是:"end";匹配到的位置是:开始于15,结束于18。

    一些符号可以影响表达式内部的子表达式之间的关系:

表达式

作用

|

左右两边表达式之间 "或" 关系,匹配左边或者右边

( )

(1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到

    举例5:表达式 "Tom|Jack" 在匹配字符串 "I'm Tom, he is Jack" 时,匹配结果是:成功;匹配到的内容是:"Tom";匹配到的位置是:开始于4,结束于7。匹配下一个时,匹配结果是:成功;匹配到的内容是:"Jack";匹配到的位置时:开始于15,结束于19。

    举例6:表达式 "(go\s*)+" 在匹配 "Let's go go go!" 时,匹配结果是:成功;匹配到内容是:"go go go";匹配到的位置是:开始于6,结束于14。

    举例7:表达式 "¥(\d+\.?\d*)" 在匹配 "$10.9,¥20.5" 时,匹配的结果是:成功;匹配到的内容是:"¥20.5";匹配到的位置是:开始于6,结束于10。单独获取括号范围匹配到的内容是:"20.5"。


2. 正则表达式中的一些高级规则

2.1 匹配次数中的贪婪与非贪婪

    在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如:"{m,n}", "{m,}", "?", "*", "+",具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配。比如,针对文本 "dxxxdxxxd",举例如下:

表达式

匹配结果

(d)(\w+)

"\w+" 将匹配第一个 "d" 之后的所有字符 "xxxdxxxd"

(d)(\w+)(d)

"\w+" 将匹配第一个 "d" 和最后一个 "d" 之间的所有字符 "xxxdxxx"。虽然 "\w+" 也能够匹配上最后一个 "d",但是为了使整个表达式匹配成功,"\w+" 可以 "让出" 它本来能够匹配的最后一个 "d"

    由此可见,"\w+" 在匹配的时候,总是尽可能多的匹配符合它规则的字符。虽然第二个举例中,它没有匹配最后一个 "d",但那也是为了让整个表达式能够匹配成功。同理,带 "*" 和 "{m,n}" 的表达式都是尽可能地多匹配,带 "?" 的表达式在可匹配可不匹配的时候,也是尽可能的 "要匹配"。这 种匹配原则就叫作 "贪婪" 模式 。

    非贪婪模式:

    在修饰匹配次数的特殊符号后再加上一个 "?" 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的 "不匹配"。这种匹配原则叫作 "非贪婪" 模式,也叫作 "勉强" 模式。如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功。举例如下,针对文本 "dxxxdxxxd" 举例:

表达式

匹配结果

(d)(\w+?)

"\w+?" 将尽可能少的匹配第一个 "d" 之后的字符,结果是:"\w+?" 只匹配了一个 "x"

(d)(\w+?)(d)

为了让整个表达式匹配成功,"\w+?" 不得不匹配 "xxx" 才可以让后边的 "d" 匹配,从而使整个表达式匹配成功。因此,结果是:"\w+?" 匹配 "xxx"

    更多的情况,举例如下:

    举例1:表达式 "<td>(.*)</td>" 与字符串 "<td><p>aa</p></td> <td><p>bb</p></td>" 匹配时,匹配的结果是:成功;匹配到的内容是 "<td><p>aa</p></td> <td><p>bb</p></td>" 整个字符串, 表达式中的 "</td>" 将与字符串中最后一个 "</td>" 匹配。

    举例2:相比之下,表达式 "<td>(.*?)</td>" 匹配举例1中同样的字符串时,将只得到 "<td><p>aa</p></td>", 再次匹配下一个时,可以得到第二个 "<td><p>bb</p></td>"。


2.2 反向引用 \1, \2...

    表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候,小括号包含的表达式所匹配到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示 了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围。比如前面的 "<td>(.*?)</td>"。

    其实,"小括号包含的表达式所匹配到的字符串" 不仅是在匹配结束后才可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 "括号内的子匹配已经匹配到的字符串"。引用方法是 "\" 加上一个数字。"\1" 引用第1对括号内匹配到的字符串,"\2" 引用第2对括号内匹配到的字符串……以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号 "(" 在前,那这一对就先排序号。

    举例如下:

    举例1:表达式 "('|")(.*?)(\1)" 在匹配 " 'Hello', "World" " 时,匹配结果是:成功;匹配到的内容是:" 'Hello' "。再次匹配下一个时,可以匹配到 " "World" "。

    举例2:表达式 "(\w)\1{4,}" 在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 时,匹配结果是:成功;匹配到的内容是 "ccccc"。再次匹配下一个时,将得到 999999999。这个表达式要求 "\w" 范围的字符至少重复5次,注意与 "\w{5,}" 之间的区别

    举例3:表达式 "<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?</\1>" 在匹配 "<td id='td1' style="bgcolor:white"></td>" 时,匹配结果是成功。如果 "<td>" 与 "</td>" 不配对,则会匹配失败;如果改成其他配对,也可以匹配成功。


2.3 预搜索,不匹配;反向预搜索,不匹配

    前面的章节中,我讲到了几个代表抽象意义的特殊符号:"^","$","\b"。它们都有一个共同点,那就是:它们本身不匹配任何字符,只是对 "字符串的两头" 或者 "字符之间的缝隙" 附加了一个条件。理解到这个概念以后,本节将继续介绍另外一种对 "两头" 或者 "缝隙" 附加条件的,更加灵活的表示方法。

    正向预搜索:"(?=xxxxx)","(?!xxxxx)"

    格式:"(?=xxxxx)",在被匹配的字符串中,它对所处的 "缝隙" 或者 "两头" 附加的条件是:所在缝隙的右侧,必须能够匹配上 xxxxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似 "\b",本身不匹配任何字符。"\b" 只是将所在缝隙之前、之后的字符取来进行了一下判断,不会影响后边的表达式来真正的匹配。

    举例1:表达式 "Windows (?=NT|XP)" 在匹配 "Windows 98, Windows NT, Windows 2000" 时,将只匹配 "Windows NT" 中的 "Windows ",其他的 "Windows " 字样则不被匹配。

    举例2:表达式 "(\w)((?=\1\1\1)(\1))+" 在匹配字符串 "aaa ffffff 999999999" 时,将可以匹配6个"f"的前4个,可以匹配9个"9"的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分。当然,这个表达式可以不这样写,在此的目的是作为演示之用。

    格式:"(?!xxxxx)",所在缝隙的右侧,必须不能匹配 xxxxx 这部分表达式。

    举例3:表达式 "((?!\bstop\b).)+" 在匹配 "fdjka ljfdl stop fjdsla fdj" 时,将从头一直匹配到 "stop" 之前的位置,如果字符串中没有 "stop",则匹配整个字符串。

    举例4:表达式 "do(?!\w)" 在匹配字符串 "done, do, dog" 时,只能匹配 "do"。在本条举例中,"do" 后边使用 "(?!\w)" 和使用 "\b" 效果是一样的。

    反向预搜索:"(?<=xxxxx)","(?<!xxxxx)"

    这两种格式的概念和正向预搜索是类似的,反向预搜索要求的条件是:所在缝隙的 "左侧",两种格式分别要求必须能够匹配和必须不能够匹配指定表达式,而不是去判断右侧。与 "正向预搜索" 一样的是:它们都是对所在缝隙的一种附加条件,本身都不匹配任何字符。

    举例5:表达式 "(?<=\d{4})\d+(?=\d{4})" 在匹配 "1234567890123456" 时,将匹配除了前4个数字和后4个数字之外的中间8个数字。由于 JScript.RegExp 不支持反向预搜索,因此,本条举例不能够进行演示。很多其他的引擎可以支持反向预搜索,比如:Java 1.4 以上的 java.util.regex 包,.NET 中System.Text.RegularExpressions 命名空间,以及本站推荐的最简单易用的 DEELX 正则引擎


3. 其他通用规则

    还有一些在各个正则表达式引擎之间比较通用的规则,在前面的讲解过程中没有提到。

3.1 表达式中,可以使用 "\xXX" 和 "\uXXXX" 表示一个字符("X" 表示一个十六进制数)

形式

字符范围

\xXX

编号在 0 ~ 255 范围的字符,比如:空格可以使用 "\x20" 表示

\uXXXX

任何字符可以使用 "\u" 再加上其编号的4位十六进制数表示,比如:"\u4E2D"

3.2 在表达式 "\s","\d","\w","\b" 表示特殊意义的同时,对应的大写字母表示相反的意义

表达式

可匹配

\S

匹配所有非空白字符("\s" 可匹配各个空白字符)

\D

匹配所有的非数字字符

\W

匹配所有的字母、数字、下划线以外的字符

\B

匹配非单词边界,即左右两边都是 "\w" 范围或者左右两边都不是 "\w" 范围时的字符缝隙

3.3 在表达式中有特殊意义,需要添加 "\" 才能匹配该字符本身的字符汇总

字符

说明

^

匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"

$

匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"

( )

标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"

[ ]

用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"

{ }

修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"

.

匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."

?

修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?"

+

修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+"

*

修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"

|

左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"

3.4 括号 "( )" 内的子表达式,如果希望匹配结果不进行记录供以后使用,可以使用 "(?:xxxxx)" 格式

    举例1:表达式 "(?:(\w)\1)+" 匹配 "a bbccdd efg" 时,结果是 "bbccdd"。括号 "(?:)" 范围的匹配结果不进行记录,因此 "(\w)" 使用 "\1" 来引用。

3.5 常用的表达式属性设置简介:Ignorecase,Singleline,Multiline,Global

表达式属性

说明

Ignorecase

默认情况下,表达式中的字母是要区分大小写的。配置为 Ignorecase 可使匹配时不区分大小写。有的表达式引擎,把 "大小写" 概念延伸至 UNICODE 范围的大小写。

Singleline

默认情况下,小数点 "." 匹配除了换行符(\n)以外的字符。配置为 Singleline 可使小数点可匹配包括换行符在内的所有字符。

Multiline

默认情况下,表达式 "^" 和 "$" 只匹配字符串的开始 ① 和结尾 ④ 位置。如:

①xxxxxxxxx②\n
③xxxxxxxxx④

配置为 Multiline 可以使 "^" 匹配 ① 外,还可以匹配换行符之后,下一行开始前 ③ 的位置,使 "$" 匹配 ④ 外,还可以匹配换行符之前,一行结束 ② 的位置。

Global

主要在将表达式用来替换时起作用,配置为 Global 表示替换所有的匹配。


4. 其他提示

4.1 如果想要了解高级的正则引擎还支持那些复杂的正则语法,可参见本站 DEELX 正则引擎的说明文档

4.2 如果要要求表达式所匹配的内容是整个字符串,而不是从字符串中找一部分,那么可以在表达式的首尾使用 "^" 和 "$",比如:"^\d+$" 要求整个字符串只有数字。

4.3 如果要求匹配的内容是一个完整的单词,而不会是单词的一部分,那么在表达式首尾使用 "\b",比如:使用 "\b(if|while|else|void|int……)\b" 来匹配程序中的关键字

4.4 表达式不要匹配空字符串。否则会一直得到匹配成功,而结果什么都没有匹配到。比如:准备写一个匹配 "123"、"123."、"123.5"、".5" 这几种形式的表达式时,整数、小数点、小数数字都可以省略,但是不要将表达式写成:"\d*\.?\d*",因为如果什么都没有,这个表达式也可以匹配成功。更好的写法是:"\d+\.?\d*|\.\d+"

4.5 能匹配空字符串的子匹配不要循环无限次。如果括号内的子表达式中的每一部分都可以匹配 0 次,而这个括号整体又可以匹配无限次,那么情况可能比上一条所说的更严重,匹配过程中可能死循环。虽然现在有些正则表达式引擎已经通过办法避免了这种情况 出现死循环了,比如 .NET 的正则表达式,但是我们仍然应该尽量避免出现这种情况。如果我们在写表达式时遇到了死循环,也可以从这一点入手,查找一下是否是本条所说的原因。

4.6 合理选择贪婪模式与非贪婪模式,参见话题讨论

4.7 或 "|" 的左右两边,对某个字符最好只有一边可以匹配,这样,不会因为 "|" 两边的表达式因为交换位置而有

posted @ 2012-12-18 17:54 Eric_jiang 阅读(748) | 评论 (2)编辑 收藏

随着互联网的发展,大数据运算需求日益剧增,开源的hadoop出现至今,几乎已成为了业界的默认标准,下面,笔者就开始构建一个简单的hadoop并行运算集群。

一、    环境介绍

模拟环境使用三台rhel5.8 32bit,各自IP和主机名如下:

  1. IP                            主机名        
  2. 192.168.88.253                none.mos.com    
  3. 192.168.88.129                lab1.mos.com 
  4. 192.168.88.130                lab2.mos.com 

其中

  1. none.mos.com负责任务管理和数据名称节点,在生产环境中,建议将此两项分开; 
  2.  
  3. lab1.mos.com为第二名称节点,其并不提供名称节点的功能,但默认情况下,负责周期性的将编辑日志合并至名称节点,并自己也保存一份,其提供了名称节点的冗余,但其数据依然落后于名称节点; 
  4.  
  5. lab3.mos.com为实际数据存储节点和任务执行节点。 

使用的软件版本及下载地址:

  1. JDK: jdk-7u5-linux-i586.rpm 
  2. 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
  3. Hadoop: hadoop-0.20.2-cdh3u5.tar.gz 
  4. 下载地址: http://hadoop.apache.org/releases.html
  5.  


二、    准备工作
2.1 修改每个主机的/etc/hosts文件如下:

  1. 192.168.88.253      none.mos.com    none 
  2. 192.168.88.129      lab1.mos.com    lab1 
  3. 192.168.88.130      lab2.mos.com    lab2 

2.2 在集群的每个节点建立用于运行hadoop的用户及设定密码

  1. # useradd hduser && echo "redhat" | passwd --stdin hduser 

2.3 为master节点的hduser用户能够管理并监控其他节点,在none节点做如下操作。

  1. # su – hduser 
  2. $ ssh-keygen -t rsa -P '' 
  3. $ ssh-copy-id -i .ssh/id_rsa.pub hduser@lab1 
  4. $ ssh-copy-id -i .ssh/id_rsa.pub hduser@lab2 

2.4 确保每个节点时间的一致性,并清空iptables和关闭selinux,此处操作略


三、    配置hadoop运行所需的java环境,此操作需在每个节点执行一遍。

3.1 安装jdk

  1. # rpm -ivh ~/root/Download/jdk-7u5-linux-i586.rpm 

3.2 配置java环境变量

  1. # vim /etc/profile.d/java.sh 
  2. JAVA_HOME=/usr/java/latest 
  3. PATH=$JAVA_HOME/bin:$PATH 
  4. export JAVA_HOME PATH 

3.3 使刚才配置的环境其生效(或重新登陆控制台亦可)

  1. # source /etc/profile.d/java.sh 

3.4 测试java环境是否OK

  1. # su – hduser 
  2. $ java –version 
  3. java version "1.7.0_05" 
  4. Java(TM) SE Runtime Environment (build 1.7.0_05-b05) 
  5. Java HotSpot(TM) Server VM (build 23.1-b03, mixed mode) 



四、    安装Hadoop,此步骤操作略长,但也需在每个节点执行。
4.1 解压至/usr/local目录,并做软件链接使其易于访问

  1. # tar xf ~/Download/hadoop-0.20.2-cdh3u5.tar.gz –C /usr/local/ 
  2. # ln -sv /usr/local/hadoop-0.20.2-cdh3u5 /usr/local/hadoop 

4.2 修改hadoop目录的属主属组,并配置hadoop环境变量

  1. # chown -R hduser. /usr/local/hadoop-0.20.2-cdh3u5 
  2. # vim /etc/profile.d/hadoop.sh 
  3. HADOOP_HOME=/usr/local/hadoop 
  4. PATH=$HADOOP_HOME/bin:$PATH 
  5. export HADOOP_HOME PATH 

4.3 使hadoop环境变量生效并使用hduser测试其是否就绪

  1. # source /etc/profile.d/hadoop.sh 
  2. # su – hduser 
  3. $ hadoop version 
  4. Subversion git://ubuntu-slave02/var/lib/jenkins/workspace/CDH3u5-Full-RC/build/cdh3/hadoop20/0.20.2-cdh3u5/source -r 30233064aaf5f2492bc687d61d72956876102109 
  5. Compiled by jenkins on Fri Oct  5 17:21:34 PDT 2012 
  6. From source with checksum de1770d69aa93107a133657faa8ef467 



五、    配置Hadoop,集群中每个节点只能通过配置文件来得知自身的角色,因此,以下配置需在每个节点都做同样修改。

5.1    定义第二名称节点的主机名或IP地址

  1. # echo ‘lab1.mos.com’ > /usr/local/hadoop/conf/masters 

5.2    定义数据节点和任务执行节点,笔者这里只有一个,而生成环境中,数据节点一般最少3个以上。

  1. # echo ‘lab2.mos.com’ > /usr/local/hadoop/conf/slaves 

5.3    定义系统级别的参数如下:

  1. # vim /usr/local/hadoop/conf/core-site.xml 
  2. <?xml version="1.0"?> 
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  4. <!-- Put site-specific property overrides in this file. --> 
  5. <configuration> 
  6.  
  7. <!-- 定义hadoop的分布式文件系统hdfs的名称节点。--> 
  8.     <property> 
  9.         <name>fs.default.name</name>   
  10.         <value>hdfs://none.mos.com:8020</value> 
  11.     </property> 
  12.  
  13. <!--定义临时文件的位置,需确保此目录存在,且hadoop的执行用户hduser对其有足够的权限. --> 
  14.     <property>     
  15.         <name>hadoop.tmp.dir</name> 
  16.         <value>/hadoop/temp</value> 
  17.     </property> 
  18.  
  19. <!--定义回收站,可不定义,设置在hdfs中删除的文件先放在回收站内,超时才会被删除,时间单位为分钟,笔者此处定义为100小时。--> 
  20.     <property> 
  21.         <name>fs.trash.interval</name>   
  22.         <value>6000</value> 
  23.     </property> 
  24.  
  25. </configuration> 

5.4    定义任务管理管理节点

  1. # vim /usr/local/hadoop/conf/mapred-site.xml 
  2. <?xml version="1.0"?> 
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  4.  
  5. <!-- Put site-specific property overrides in this file. --> 
  6.  
  7. <configuration> 
  8.     <property> 
  9.         <name>mapred.job.tracker</name> 
  10.         <value>none.mos.com:8021</value> 
  11.     </property> 
  12. </configuration> 

5.5    定义hadoop的分布式文件系统相关属性

  1. # vim /usr/local/hadoop/conf/hdfs-site.xml 
  2. <?xml version="1.0"?> 
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  4.  
  5. <!-- Put site-specific property overrides in this file. --> 
  6.  
  7. <configuration> 
  8.  
  9. <!-- 为了保证数据的冗余,定义切割后的数据块在几个节点上存储,生产环境中,建议最少3份以上,笔者这里就一个数据节点,因此,此处为1即可--> 
  10.      <property> 
  11.     <name>dfs.replication</name> 
  12.     <value>1</value> 
  13.      </property> 
  14.  
  15.     <!-- 数据名称节点用于存储HDFS文件数据块的本地目录,存储多份时,可写多个路径,以逗号隔开即可--> 
  16.      <property> 
  17.         <name>dfs.data.dir</name> 
  18.         <value>/hadoop/data</value> 
  19.         <final>ture</final> 
  20.      </property> 
  21.      
  22. <!-- 数据节点用于存储名称空间和事务日志的本地文件系统路径,存储多份时,可写多个路径,以逗号隔开即可 --> 
  23.      <property> 
  24.         <name>dfs.name.dir</name> 
  25.         <value>/hadoop/name</value> 
  26.         <final>ture</final> 
  27.      </property> 
  28.     
  29.     <!-- 用于定义HDFS元数据冗余的复制到这个目录 --> 
  30.      <property> 
  31.         <name>fs.checkpoint.dir</name> 
  32.         <value>/hadoop/namesecondary</value> 
  33.         <final>ture</final> 
  34.      </property> 
  35.  
  36. </configuration> 

5.6    创建hadoop配置中定义的目录,且给予相应的权限

  1. # mkdir -pv /hadoop/temp && chown -R hduser. /hadoop  

 

 

六、    格式化hadoop的分布式文件系统(HDFS),并检测hadoop是否就绪。
 

6.1 以hduser的身份格式,切记一定要将第五步的操作在三个节点全部完成

  1. # su - hduser 
  2. $ hadoop namenode –format 
  3. 出现“Storage directory /hadoop/temp/dfs/name has been successfully formatted”此行,才表示格式化成功,否则需检查是否配置出错。 

6.2 以hduser的身份启动hadoop

  1. $ start-all.sh 

6.3 使用jps在每个节点,检查是否启动正常.



七、    使用hadoop提供的字符统计应用程序算法样例做简单的计算实现

7.1 在hadoop的分布式文件系统(hdfs)中创建目录,并上传要计算的文件

  1. $ hadoop fs -mkdir mos-test 
  2. $ hadoop fs -put /etc/services mos-test 

7.2 调用hadoop提供的字符统计程序,计算上传的services文件的每个字符个数,并输出到hdfs的test-out目录中,此目录hadoop会自行创建。

  1. $ hadoop jar /usr/local/hadoop/hadoop-examples-0.20.2-cdh3u5.jar wordcount mos-test test-out 

7.3 等命令执行完成后,下载执行结果到本地当前目录,并查看相关内容

  1. $ hadoop fs -get ./test-out/part-r-00000 ./ 
  2. $ head part-r-00000 

7.4 也可不用下载直接查看HDFS的文件或目录

  1. $ hadoop fs –ls /  #查看hdfs的根位置 
  2. $ hadoop fs –cat  /user/hduser/test-out/part-r-00000   #不下载直接查看计算结果 
  3. Ps:  hadoop fs命令的相关用法,可通过:hadoop fs --help获得 

 



    到此为止,一个简单的分布式hadoop并行运算集群已经已然完成,哈哈,是不是很简单,但是需要说明的是,各位其实也看到了,并且想必各位也充满了各种 疑惑:这些命名神马的怎么这么奇怪?hdfs是怎么工作的?数据怎么分开存储的?数据怎么在被切开存储后还能计算?各个节点的高可用怎么实现?如果需要更 为复杂的运算怎么处理等等?相关内容,笔者也在慢慢的整理和学习,敬请关注哈。
 


补充一点相关知识:
当hadoop正常启动后,不同的节点,会开放不同的几个端口,可以直接通过web页面查看其相关信息的端口,实际上,开放的端口 远不止这些,(详情可以通过  netstat -tnlp|grep java)查看, 但是只有这些可以通过web直接打开查看。具体如下:
 

  1. 端口                    工作节点                 本此实验的web查方式 
  2. 0.0.0.0:50030     任务管理节点(JobTracker)                192.168.88.253:5030 
  3. 0.0.0.0:50070     HDFS的数据名称节点(NameNode)         192.168.88.253:5070 
  4. 0.0.0.0:50090     第二数据名称节点(SecondaryNameNode)     192.168.88.129:50090 
  5. 0.0.0.0:50060     任务执行节点(TaskTracker)               192.168.88.130:5060 
  6. 0.0.0.0:50075     数据节点(DataNode)                    192.168.88.130:5075 


下图是之前执行计算时笔者的截图:

 

posted @ 2012-12-18 16:56 Eric_jiang 阅读(240) | 评论 (0)编辑 收藏

Cenots 6.3 x86_64
samba服务器IP地址: 192.168.1.53
注:本实验iptables防火墙和selinux都是关闭的。
1、安装samba
登录系统检查是否安装了samba软件包,检查命令如下:
[root@data ~]# rpm -qa | grep samba
samba-winbind-clients-3.5.10-125.el6.x86_64
samba-3.5.10-125.el6.x86_64
samba-common-3.5.10-125.el6.x86_64
如果有输出则表示已经安装好了,没输出可以用 yum -y install samba 安装。
samba安装完后悔在,会生成配置文件目录/etc/samba。
2、核心配置文件smb.conf
添加共享目录,内容如下:
[root@data ~]# cd /etc/samba/
[root@data samba]# cp smb.conf smb.conf.bak20121130     //对配置文件进行备份
[root@data samba]# vim smb.conf
[global]         //表示以下的内容为全局配置,必须要有
workgroup = WORKGROUP     //用来定义工作组,
netbios name = chlinux.net     //用来定义windows中显示出来的计算机名
server string = my linux samba server     //定义samba服务器的说明信息
log file = /var/log/samba/%m.log     //定义samba的日志文件,%m表示客户端主机名,samba服务器会在指定的目录中为每个登录主句建立不同的日志文件
security = share     //定义数据共享的方式,常用的有user和share,user表示需要密码验证后才能共享数据,share表示可以直接共享数据,
[sharing]     //定义在windows中显示出来的共享目录
                path = //data    //共享数据的路径
                writeable = yes     //指定设置是否可写,yes为可写,no为不可写
                browseable = yes    //定义是否可以再windows下看到共享文件夹,如果要隐藏共享文件夹设置为no就是
                guest ok = yes     //定义匿名用户是否可写
3、建立共享目录:
[root@data samba]# mkdir /data     //创建共享目录
[root@data samba]# chown nobody:nobody /data/        //由于要设计匿名用户可以上传和下载,需要给/data木授权为nobody
[root@data samba]# cp /etc/passwd /data/     //拷贝测试文件到共享目录
4、samba服务的组成和使用:
组 成samba运行的有两个服务,一个是SMB,另一个是NMB,SMB是samba的核心,只有启动SMB服务才能实现文件的共享,而NMB服务的负责解 析用的,类似于DNS实现的功能,NMB可以把linux系统共享的工作组名称与其IP对应起来。如果NMB没有启动,就只能通过IP访问共享文件。可以 通过/etc/init.d/smb start/stop/restart 来启动、关闭、重启,方法如下:
[root@data samba]# /etc/init.d/smb start
启动 SMB 服务:                                                                                        [确定]
[root@data samba]# /etc/init.d/nmb start
启动 NMB 服务:                                                                                        [确定]
[root@data samba]#
 5、访问samba服务器的共享文件,在运行输入\\192.168.1.53 ,看到下面的界面表示成功了。
6、授权登录samba服务器:
 1,添加系统级用户
首先添加share1、share2两个系统用户,并分别指定工作目录为/share1 和share2,操作如下:
[root@data samba]# useradd -d /share1 -s /sbin/nologin share1    //创建用户,指定home目录和shell
[root@data samba]# useradd -d /share2 -s /sbin/nologin share2
[root@data samba]# cp /root/install.log* /share1/
[root@data samba]# cd /share1
[root@data share1]# ll
总用量 56
-rw-r--r--. 1 root root 41933 12月    1 07:35 install.log
-rw-r--r--. 1 root root    8206 12月    1 07:35 install.log.syslog
3、配置smb.conf文件
[global]
workgroup = WORKGROUP
netbios name = chlinux.net
server string = my linux samba server
log file = /var/log/samba/%m.log
max log size = 50
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
socket options = 192.168.1.254/24 192.168.2.254/24
os level = 33
[share1]
                path = /data
                comment = This is share1
                valid users = share1
                writeable = yes
                browseable = yes
    [share2]
                path = /data
                comment = This is share2
                valid users = share2
                writeable = yes
                browseable = yes
                create mask = 664
                directory mask = 755
                writeable = yes
                browseable = yes
max log size      //定义日志文件的大小,设置为0代表不限制,默认单位是KB上面这段配置与上面那个例子基本相同,只是增加了一些权限控制的东西,新增各个选项的含义如下:
encrypt passwords    //设定用户密码是否加密,yes表示加密,no表示不加密
smb passwd file    //指定samba用户的密码文件
os level  //定义samba server的OS level,OS level的值从0-255 ,windows NT的值为33 ,windows 95/98的值为1,samba server的os level值至少要大于33
comment    //共享目录的说明
valid users   //定义客户端访问的用户
create mask  //定义客户端用户创建文件的默认权限为644,表示可读可写
directory mask    //定义客户端用户创建目录的默认权限为755,表示可读可写可执行
4、测试samba服务器
完成所有配置后,重启smb服务。然后在windows客户端进行授权登录,在IE浏览器中输入 \\192.168.1.53,然后回车,即可进入下面所示的界面。
在这里输入要登入samba用户,我们这里登录的是share1,输入密码登录后可以看到如下图所示:
到此为止,samba已经安装完毕
posted @ 2012-12-18 16:52 Eric_jiang 阅读(253) | 评论 (0)编辑 收藏

ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC13%E8%AE%B2.rpm%E7%AE%A1%E7%90%86.samba%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8.wmv|77995225|b5a6804db1c047d079fff594d0e779b7|h=vlryh56qvmnlox32j4kke6
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC14%E8%AE%B2.crontab%E8%AF%A6%E8%A7%A3.wmv|61487443|34aec7157bc3db51c1eab400095dc0cd|h=dogb25pmcoqmaguopjexk4dlcnwjghfu|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC15%E8%AE%B2.%E8%BF%9B%E7%A8%8B%E7%9A%84%E4%BB%8B%E7%BB%8D%E5%92%8C%E7%AE%A1%E7%90%86.wmv|48629751|5d7b6e107803d2a7e13ce1fe036c888c|h=xvy4rd26sdacxiva7i6zgy3pypibpdg
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC16%E8%AE%B2.top%E8%AF%A6%E8%A7%A3.%E8%AE%BE.%E9%97%B4.%E7%9B%91%E6%8E%A7%E7%BD%91%E7%BB%9C%E7%8A%B6%E6%80%81.wmv|53160241|9d5462cb3afff5085377314855b6300e|h=hqgezg6
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC17%E8%AE%B2.mysql%E5%AE%89%E8%A3%85.%E9%85%8D%E7%BD%AE.%E4%BD%BF%E7%94%A8.wmv|101336483|8f399c60661ba6a97127e078e9e17b12|h=p3fczniczp7pnvayfm4cx7cjadra25ue|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC18%E8%AE%B2.ssh%E5%AE%89%E8%A3%85.%E9%85%8D%E7%BD%AE.%E4%BD%BF%E7%94%A8.wmv|67397067|b7beeaafdd4f4475993d315ea821ee3d|h=jtpwo52pqvqrcoo5cy4oyiaxx5mlnvtd|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC19%E8%AE%B2.%E8%A1%A5%E5%85%85%E8%AE%B2%E8%A7%A3linux%E9%87%8D%E8%A6%81%E5%86%85%E5%AE%B9.wmv|43646711|8b2c9c0eeb36f859554fd3d1322f25c5|h=nzjwol643r5tlpg43picc5vmn5
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC20%E8%AE%B2.%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%A5.inux%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B%E5%88%86%E6%9E%90.wmv|79932569|b09c9a2b3e7b03855cd3fcf3e0c34760|h
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC21%E7%AB%A0.%E5%8E%8B%E7%BC%A9%E5%92%8C%E8%A7%A3%E5%8E%8B.ux%E4%B8%8Bjava%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B.wmv|91617021|3ede20d4e104579152b31634390a3ace|h=zkyoah
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC0%E8%AE%B2.%E5%BC%80%E5%B1%B1%E7%AF%87.wmv|25917441|c2e1a970c3ea46f71045d556491ac8a0|h=mqg6bvvjyuqgsskaiaudm46kpefg3olf|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC1%E8%AE%B2.%E5%9F%BA%E7%A1%80%E4%BB%8B%E7%BB%8D.wmv|62654085|d24aa173e05a669537767e77d6caaea4|h=mwp2l3vsjfnwdea7ktokkrjuai3b37cp|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC2%E8%AE%B2.%E5%8E%86%E5%8F%B2%E4%BB%8B%E7%BB%8D.vi%E7%BC%96%E8%BE%91%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8.wmv|67916925|7ba153640ecdfa0c4ca567e8847c9b57|h=2trjbupeygs
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC3%E8%AE%B2.%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86.%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84.wmv|58735867|b3a61564413a574233fb248bf78b2e33|h=i4liy2pt2gxkyjpxrfdhpvhi6kuvcjb
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC4%E8%AE%B2.%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.wmv|88873809|49a0f9ae85cc41d2e784544a42af7975|h=7sgmoa32oqpvgffec2rxzav26xrmaeuh|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC5%E8%AE%B2.%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90.%E7%94%A8%E6%88%B7%E7%BB%84%281%29.wmv|19543941|df3506f562226aa29a93951267029787|h=vdaaoi6dfb2whugvwtshtu6c4fngnrf3|
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC6%E8%AE%B2.%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90.%E7%94%A8%E6%88%B7%E7%BB%84%282%29.wmv|65000765|d58d9dde13a7adab009e5be328a54d5a|h=hwlvyezc424ehcu4zfqitnnctdaum33p|
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC7%E8%AE%B2.j2ee%E7%8E%AF%E5%A2%83.jdk.tomcat%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE.wmv|73657411|467ee50d8413c742654aac3ccdb2984a|h=gikqydo6xmao6h3vmehgae7yv6b7wwjs|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC8%E8%AE%B2.%E5%A8%B1%E4%B9%90%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85.linux%E5%88%86%E5%8C%BA%E8%AF%A6%E8%A7%A3.wmv|104743117|09d0bf24f0fa89897686f0254862135b|h=uz5vcn2
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC9%E8%AE%B2.linux%E5%AE%89%E8%A3%85%E6%BC%94%E7%A4%BA.wmv|40739457|e522a567917c836b35e234b0a2ca5d8f|h=hggu2i6npq7pmd3mjeaht2awmkbnhcl2|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC10%E8%AE%B2.shell%E4%BB%8B%E7%BB%8D.wmv|62552249|35b60e8de985cca4f6875650f7511d33|h=tz7owmd3n4qe2k5fa72wk7ehvl2iudbh|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC11%E8%AE%B2.tcp.ip%E5%9F%BA%E7%A1%80.wmv|63131953|2330ca5be14757ba87745a33fb4265ef|h=244oxwahrpjty7l4w4jy36whbmuroej4|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC12%E8%AE%B2.ip%E5%9C%B0%E5%9D%80%E5%92%8C%E5%8C%85.%E8%A7%A3.%E7%BD%91%E7%BB%9C%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE.wmv|62241407|1efe7ac3b795293330fc49a1e5cf706c|h=
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC21%E7%AB%A0.%E5%8E%8B%E7%BC%A9%E5%92%8C%E8%A7%A3%E5%8E%8B.ux%E4%B8%8Bjava%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B.wmv|91617021|3ede20d4e104579152b31634390a3ace|h=zkyoahjtt6btcbfvwax6unmkdl3qz67q|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC8%E8%AE%B2.%E5%A8%B1%E4%B9%90%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85.linux%E5%88%86%E5%8C%BA%E8%AF%A6%E8%A7%A3.wmv|104743117|09d0bf24f0fa89897686f0254862135b|h=uz5vcn2m4eug2umhuytevd3iyxdxn6v4|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC3%E8%AE%B2.%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86.%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84.wmv|58735867|b3a61564413a574233fb248bf78b2e33|h=i4liy2pt2gxkyjpxrfdhpvhi6kuvcjbz|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC2%E8%AE%B2.%E5%8E%86%E5%8F%B2%E4%BB%8B%E7%BB%8D.vi%E7%BC%96%E8%BE%91%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8.wmv|67916925|7ba153640ecdfa0c4ca567e8847c9b57|h=2trjbupeygs44oewvv2lc4szharuncgv|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC16%E8%AE%B2.top%E8%AF%A6%E8%A7%A3.%E8%AE%BE.%E9%97%B4.%E7%9B%91%E6%8E%A7%E7%BD%91%E7%BB%9C%E7%8A%B6%E6%80%81.wmv|53160241|9d5462cb3afff5085377314855b6300e|h=hqgezg6ebaregtndxyva6nfgk3xqzbmc|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC15%E8%AE%B2.%E8%BF%9B%E7%A8%8B%E7%9A%84%E4%BB%8B%E7%BB%8D%E5%92%8C%E7%AE%A1%E7%90%86.wmv|48629751|5d7b6e107803d2a7e13ce1fe036c888c|h=xvy4rd26sdacxiva7i6zgy3pypibpdgl|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC19%E8%AE%B2.%E8%A1%A5%E5%85%85%E8%AE%B2%E8%A7%A3linux%E9%87%8D%E8%A6%81%E5%86%85%E5%AE%B9.wmv|43646711|8b2c9c0eeb36f859554fd3d1322f25c5|h=nzjwol643r5tlpg43picc5vmn5o4a224|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC12%E8%AE%B2.ip%E5%9C%B0%E5%9D%80%E5%92%8C%E5%8C%85.%E8%A7%A3.%E7%BD%91%E7%BB%9C%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE.wmv|62241407|1efe7ac3b795293330fc49a1e5cf706c|h=orbgshk6wl42m2gwaw5triw555w6fjk5|/
ed2k://|file|%E9%9F%A9%E9%A1%BA%E5%B9%B3.linux%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%E7%AC%AC13%E8%AE%B2.rpm%E7%AE%A1%E7%90%86.samba%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8.wmv|77995225|b5a6804db1c047d079fff594d0e779b7|h=vlryh56qvmnlox32j4kke6aju6utmcnr|/

posted @ 2012-12-13 12:23 Eric_jiang 阅读(1381) | 评论 (0)编辑 收藏

仅列出标题
共57页: First 上一页 25 26 27 28 29 30 31 32 33 下一页 Last