Linux Shell脚本入门--wget 命令用法详解
wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。它有以下功能和特点:
(1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;
(2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;
(3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
(4)设置方便简单;可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标;
(5)程序小,完全免费;程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多所谓的免费软件,但是,这些软件的广告却不是我们喜欢的;
wget虽然功能强大,但是使用起来还是比较简单的,基本的语法是:wget [参数列表] URL。下面就结合具体的例子来说明一下wget的用法。
1、下载整个http或者ftp站点。
wget http://place.your.url/here
这个命令可以将http://place.your.url/here 首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。
wget -r http://place.your.url/here
这 个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同 样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。
要是您想制作镜像站点,那么可以使用-m参数,例如:wget -m http://place.your.url/here
这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。
2、断点续传。
当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget的断点续传是自动的,只需要使用-c参数,例如:
wget -c http://the.url.of/incomplete/file
使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。
3、批量下载。
如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:wget -i download.txt
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)
4、选择性的下载。
可以指定让wget只下载一类文件,或者不下载什么文件。例如:
wget -m –reject=gif http://target.web.site/subdirectory
表示下载http://target.web.site/subdirectory,但是忽略gif文件。–accept=LIST 可以接受的文件类型,–reject=LIST拒绝接受的文件类型。
5、密码和认证。
wget只能处理利用用户名/密码方式限制访问的网站,可以利用两个参数:
–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl。
6、利用代理服务器进行下载。
如果用户的网络需要经过代理服务器,那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个.wgetrc文件。文件中可以设置代理服务器:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用:
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码
这两个参数。
使用参数–proxy=on/off 使用或者关闭代理。
wget还有很多有用的功能,需要用户去挖掘。
代码总表:
HBase使用总结
1、 使用压缩存储
HBase用于大规模的数据管理,数据一般会达到TB级,量级一般会达到billion级,如果不采用压缩模式管理数据会大大的增加HDFS的存储及NameNode的管理压力,LZO压缩是HDFS支持的压缩格式,可以将数据压缩到50%左右,并且压缩和解压速度相比zip等模式要快。在HBase使用LZO压缩前需要做以下准备:
1、 安装lzo-2.04-1.el5.rf.x86_64.rpm和lzo-devel-2.04-1.el5.rf.x86_64.rpm
2、 将lzo的jar包hadoop-lzo-0.4.10.jar复制到HBase安装目录的lib下
3、 创建HBase表时在列簇的配置中加入COMPRESSION=> 'LZO'
通过以上的配置就可以采用lzo格式压缩表中存储的数据,解压速度快有利于查询速度的提高。
2、 表的存储设计
HBase表的构成有以下几个部分:
1、 Row Key: 行键,Table的主键,Table中的记录按照Row Key字典排序排序
2、 Column Family:列簇,Table在水平方向有一个或者多个ColumnFamily组成,列簇不可以动态添加,列簇是数据的集中存储单元,一个列簇不会被分割。
3、 Column:列,列是列簇的子集,一个列簇中可以动态扩展多个列,因为列具有动态扩展的能力,因此设计表时,尽量考虑将具有共同特性的列集中到一个列簇管理,一方面可以方便检索,通过指定列簇将所有的列按照整体取出。另一方面可以加快检索速度,只需要检索一个region就可以找到所有需要的数据。
4、 TimeStamp:时间戳,每次数据操作对应的时间戳,可以看做是数据的version number,相同数据的多个时间戳版本按照long型排序,并且具有很高的查询速度。
5、 MaxVersion:最大版本值,在数据进行存储时,同一个值的多个版本是并存的,并且可以提供查询,这是HBase我最喜欢的特性,使用MaxVersion可以限定存储和查询的最大版本值,超过这个值的版本不可被查询,并且在数据整理时被删除。
6、 Time To Live(TTL):数据存储生命周期,设置表中数据的生命周期,超过该周期的数据将被自动删除。
7、hbase.hregion.max.filesize:region的最大文件大小,超过这个配置region将被split,若想减少region被分割的次数应尽量将该值调大,该值可以再配置文件中做整体配置,同时也可以通过修改单个表的配置进行个性化设定,通过MAX_FILESIZE 进行设置。
设计时应注意,不要在一张表中定义太多的Column Family,一方面是分布在多个Column Family中的数据不利于查询,另一方面,一个Column Family在flush的时候会触发其他的ColumnFamily进行flush,这样会加重IO。
注:HBase存储的抽象化形式
SortedMap<RowKey,List<Column,SortedList<Value,Version>>>
3、 数据查询及操作
一、HBase的查询操作分为以下几种:
1、通过RowKey访问,也就是通常的get操作,可以get单个column的值也可以整个列簇所有列的值
2、 通过range的scan在一定的范围内进行扫描,在进行scan是需要进行优化,通过Scan Caching来加快scaner的速度,默认情况下scaner是一条一条的对服务端数据进行scan,这个请求次数太多,效率较低,通过scan cache可以一次从服务端拿回指定数量的数据进行scan。注意因为RowKey存储时是按照字典排序,所有scan出来的数据也是按照字典排序的。
3、 通过RowKey,ColumnFamily,Column综合获取指定Value下的所有版本值,所有的值是按照TimeStamp进行排序的,可以使用TimeStamp集合也可以使用Value集合,这种查询的效率是相当高的,以前做个测试取得10W的版本值只需要150ms左右。在做整体的架构时必须考虑这个特性。另外注意HBase的ThriftServer中不提供这样查询的接口。
4、通过RowKey,Column Family,Column和指定的TimeStamp获取指定版本的唯一值。
二、数据处理:
1、数据批量导入:
在使用Hadoop批量导入时,可以在导入前预先分配一定量的region,这样可以加快批量导入的速度,根据以往的经验,如果不事先分配,并且导入的数据是有序的情况下会造成多个任务向一个region插入数据,这样会导致导入速度很慢,没有发挥Hadoop的特性。
2、数据删除:
HBase数据删除时有以下特性:
1)当通过RowKey,Column Family,Column删除一个值时,这个值将被整体删除,这样通过一般的get访问时数据是访问不到数据的。当插入新数据并且新数据的TimeStamp值高于当前时间,那么get操作会访问到新的插入值。
2)当通过RowKey,Column Family,Column和指定的TimeStamp删除数据时,小于该TimeStamp的所有版本的值将被认为是删除,但是通过get访问是有可能访问到最新的版本值。也可以通过指定TimeStamp的范围取得各个版本的集合。但是这种删除方式唯一的缺陷就是,当使用相同的TimeStamp再将这个值插入时,这个TimeStamp对于的值是无法访问的。
综合以上可以分析出,HBase的删除方式是通过插入一条删除记录来标记那些值是被删除的,删除操作TimeStamp的作用是标记小于等于这个TimeStamp的所有版本被删除,当进行查询时需要综合删除的记录来确定那些版本可以返回给用户,这种判断方式中删除记录有较高的优先级,这就能够解释当使用相同的TimeStamp再插入删除的记录时是不会在被访问到的。
HTML5整合进了很多新的特性,并且有可能提升Web编程模式。和每一个阅读技术资讯的人所知道的一样,没有任何一样东西能比HTML5对互联网造成更多改变。在代码中加入一些HTML5,网站会变得更快、更炫。但是HTML5能为那些想要在网络上实现本地应用表现的人做什么可能不在此列了。
在享受了HTML5的新标签以及APIs之后,现在已经是时机来承认HTML5模式确实是有一些限制的。这些限制不但会让我们对HTML5的幻梦破灭,还有可能让我们在某些场合不再使用HTML5。
事实上是,尽管HTML5确实有很强大的功能,但它并不能解决所有问题。它的一些附加功能是非常强大的,能让Web apps成为native app的强有力的对手,但是安全问题、本地数据存储的限制、同步问题以及政治问题都会让我们减小对它的期望。毕竟,任何技术都是有其限制的。
下面是Web开发者需要接受的一些关于HTML5的事实。
事实1:安全是一场噩梦
客户端计算最根本的问题是用户最终拥有了对机器上运行的代码的控制权。在Web apps中,当浏览器拥有一个很强大的调试工具的时候,这种控制权比以往更容易被滥用。
当在浏览器中集成了一个JavaScript调试器比如Firebug,任何对Facebook、Google以及其他网站感兴趣的人都可以插入断点来查看代码。这对于了解“网站是如何运行的”是非常有利的,但对于安全问题来说却是一场噩梦。
想象有个变量的值是你想要改变的,Firebug或者其他的浏览器调试器可以让你很容易地将数据改成你想要的任何数据。你想要通过改变你的地理位置来捉弄一下你的朋友吗?那么你可以修改浏览器中的进度和维度变量,让浏览器“处于”世界上的任何位置。所有你的Web应用的neat features都可以被修改,浏览器使得这样的修改比在本地应用中更为容易。
对于引发的安全问题,也是有些限制的。一些JavaScript工具比如Google Web Toolkit和标准的编译器一样复杂,它们的输出是非常令人费解的。但是一些工具比如JavaScript Deminifier能解决这个问题。
威胁当然也跟应用性质有关。一个人通过改变浏览器上显示的经纬度来和朋友开玩笑说在环游世界的途中是一回事,而获得其他人的权限又是另外一回事了,这会带来威胁。一旦涉及到金钱,情况会更糟糕。所有这些都意味着基于客户端的HTML5是不能用来处理敏感数据的,每个人都应该对自己的能力加以警醒。
事实2:本地数据存储是有限制的
浏览器中隐藏的本地数据库让Web应用更容易在电脑上缓存数据。对任何一个在浏览器中享受这种台式机体验的人来说,这些数据库可以节省带宽,提升性能。然而它们肯定比不上本地应用的数据的强大功能。