Docker企业级私有镜像仓库Harbor使用

  categories:资料  author:

一、关于Harbor

VMware公司最近开源了企业级Registry项目Harbor,由VMware中国研发的团队负责开发。

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

  • 基于角色的访问控制 – 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制 – 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面 – 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
  • AD/LDAP 支持 – Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
  • 审计管理 – 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化 – 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API – RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
  • 部署简单 – 提供在线(online)和离线(offline)两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。

官方中文文档:https://vmware.github.io/harbor/cn

二、架构分解

Docker:企业级私有镜像仓库Harbor使用

Harbor在架构上主要由五个组件构成:

Proxy

Harbor的registry, … 阅读全文

Feign简介

  categories:资料  author:

Feign 是一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign.

 

Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。

但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。

如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中RestTemplate,又没有配置化的解决方案,由此想到是否可以脱离spring cloud,独立使用Feign。

maven依赖

<dependency>
    <groupId>com.netflix.feign</groupId>
    <artifactId>feign-core</
阅读全文

无法连接远程桌面–必须为远程桌面启用Windows防火墙例外

  categories:资料  author:

装完系统后在“远程设置处”设置为允许连接到计算机,但是上面有一个警告“必须为远程桌面启用Windows防火墙例外”。

就是没有获得防火墙的允许权限。

于是打开防火墙:控制面板—–Windows 防火墙—–允许的程序:

发现防火墙允许的程序中确实没有“远程桌面”,而虽然用户已是管理员身份,但“更改设置”按钮不可用:

解决方法:

开始—— > 运行 —– > gpedit.msc

打开“本地组策略编辑器”,按如下设置:计算机配置—–>管理模板—–>网络—–>网络连接—–>Windows防火墙—–>标准配置文件—–>Windows防火墙允许入站远程桌面例外(默认为未配置),选择“已启用”,并在下面的IP地址框中输入*号(可根据需要添加相应的IP

设置完后,发现

阅读全文

基于angularJs的单页面应用seo优化及可抓取方案原理分析

  categories:资料  author:

公司使用angularJs(以下都是指ng1)框架做了互联网应用,之前没接触过seo,突然一天运营那边传来任务:要给网站做搜索引擎优化,需要研发支持。搜了下发现单页面应用做seo比较费劲,国内相关实践资料分享出来的也比较少,略懵,前后花了一番功夫总算完成了。在这里记录下来,做一个总结,也希望能够帮助在做类似工作的朋友少走一点弯路。还是建议需要seo的网站技术选型尽量不要使用angular react一类的单页面框架。如果你和我一样网站做完了发现需要seo,那么往下看吧。如果各位已有更优的方案欢迎拍砖交流。

  单页面应用seo的困难在哪里?

做seo必须了解爬虫工作的基本原理。 搜索引擎能够搜到一个网页是因为对其做了索引,而在这之前需要爬虫抓取到网站页面存储为一个快照,快照的内容即页面的静态内容。一般来说,右键查看网页源代码看到的内容即爬虫所能抓取到的内容。爬虫拿到一个url后抓取其页面信息,查找页面中的a标签,拿到下一个url跳转地址,继续下一个页面抓取。seo的工作目的是增加搜索引擎对网站的索引量以及提升网页排名,传统的seo工作例如站内tdk的优化、网站url优化、外链增加都是为了达到这些目的。做到这些有一个共同的前提,就是网页内容能够被搜索引擎抓取到,而单页面应用seo的困难就卡在这里。

如果你的应用是angularjs这类单页面应用开发的,右键查看源代码你会发现网站没有动态数据。很遗憾、搜索引擎来抓取的页面也会是这样。这主要是因为两点原因:

路由、模板和ajax请求

angular实现单页面的方案是利用了路由机制配合模板引擎。通过自定义模板,一个应用只有一个主页面,通过路由切换不同的状态,嵌套对应的模板引擎。而模板中的动态数据,都是通过ajax请求从后端拿到的。这从路由跳转到渲染出完整页面的过程,除了主页面基本的静态数据,其他的全靠js来完成。

爬虫不执行js

第一条明白之后看到这里也就很明显了。很遗憾,爬虫不执行js脚本,这个也不难理解,搜索引擎每天都有海量的页面要抓取,执行js会大大降低效率;另外搜索引擎执行js脚本也存在着巨大的安全隐患。

搜索引擎拿到一个url后,获取,结束,仅仅拿到主页面中了了的几行静态信息。angular框架维护的路由、主页面,以及前端像后端发起的ajax请求等等js完成的工作,搜索引擎一概不会处理。

  url优化

可抓取方案放到下面,先说说url优化。用过angularjs的都知道,ng的url是靠#来标识一个状态。含#类似符号的url对于seo是非常不友好的,而且据同事反应(本人没有验证),搜索引擎在访问url的时候并不会带着#后的内容去访问。总之,url优化是单页面应用seo绕不开的一个工作,而我们的目的,是把url优化成如同 www.xxx.com/111/222/333 目录结构的url,它是爬虫最喜欢的形态。

如何去除ng框架url中的#,google和百度都能够搜到不少资料。如:http://blog.fens.me/angularjs-url/

简单来说,去除#只需要在路由中配置$locationProvider.html5Mode(true); 开启html5模式,url会自动去除#以及.html后缀达到最优。但这时存在问题:f5刷新会404找不到页面,原因是f5会把url提交到后端获取资源,而html5模式优化后的url在后端并不存在这样一个资源,直接访问这个链接会连主页面都找不到,自然就会404。以上链接给出的方案是nodejs后端的方案,我们的方案是用springMVC后端,不过原理都是类似的:后端不认识这个链接,我们就把这个错误的连接重定向到原本带#的连接,对于后端来说就是一个正常的访问,而url中的#在浏览器端会再次被html5模式给去除。

重定向的工作可以放在后端springMVC的过滤器中解决,也可以在容器中解决。我们的框架是后端用nginx做负载均衡,我将重定向放在nginx.conf中,对每个路由状态的url都做了对应的原始url重定向,问题解决。无论如何刷新、访问,页面都是简单舒适的目录结构url。

  两种可抓取解决方案

url优化之后,继续往下看。说白了我们要做的就是单页面应用的可抓取方案,即:如何让搜索引擎能够获取到完整内容的页面信息。我调研了现有的一些解决方案,思路都是类似的。搜索引擎不执行js,我们改变不了,那么我们只有像照顾婴儿一样,自己将js执行,拿到模板以及动态数据渲染出一个完全静态的页面,交给爬虫。我调研过git上的两个方案,做一个分享,如果大家有更好的方案也欢迎分享。

方案一、johnhuang-cn/AngularSEO

https://github.com/johnhuang-cn/AngularSEO,这是一个java后端的解决方案。主要分为两块:服务端过滤器,本地爬虫。服务端过滤器有两个作用:一是为了拿到url,二是识别搜索引擎请求并重定向到本地快照;本地爬虫是为了渲染页面为本地快照。工作流程大致如下:

web.xml中配置上过滤器,第一次访问网站的时候过滤器抓取到url,交给本地爬虫。这个爬虫是一个拥有动态数据抓取能力的爬虫,主要利用了selenium+phantomjs框架,关于这两个框架可以自行google,其中phantomjs是一个webkit内核。它能够抓取动态数据的原因就在于它可以获取dom元素执行事件以及相关js。在获取到完整的页面信息后,它会将形如:http://abc.com/#/about的url对应静态存储到本地命名为http://abc.com/_23/about 的快照。也就是说,我们需要等待本地爬虫将每个url渲染出本地快照,然后搜索引擎爬虫来访问时,过滤器将请求重定向到对应的快照页面。过滤器如何识别爬虫呢?是通过http包头中的userAgent,每个搜索引擎拥有自己的userAgent,在过滤器内配置上即可。

优点:这个方案有几个优点。1、部署相对简单,对于java应用来说,配置相对方便简单。2、搜索引擎访问效率较快,由于快照已经被保存好了,搜索引擎来抓取后直接会返回静态页面。

弊端:这个方案同样存在几个弊端。1、本地爬虫抓取速度慢,对于我们拥有海量动态数据的如资讯模块,保存快照是个耗时的工作。2、实时性,框架通过配置本地爬取频率来更新快照,意味着搜索引擎抓取页面的实时性受限于更新频率。3、稳定性,不知道现在是否还存在这些问题,可能由于当时该框架还不很成熟,我在试用中,本地爬虫的激活不够稳定,另外phantomjs进程出现过无法退出的现象,导致后台开启大量phantomjs内存耗尽。4、分布式部署问题,我们利用nginx负载均衡做了后端集群,搜索引擎来了之后按规则分配到不同后端,导致使用此框架需要在每个后端部署,引来一系列不便和问题。

由于以上弊端,此方案最终被我放弃了。

方案二、prerender.io 

该方案是我调研过程中找到的相对成熟的解决方案,较为完美的解决了我的需求。原理图如下,可参考:http://www.cnblogs.com/whitewolf/p/3464555.html

prerender.io也分为两块,客户端以及服务端prerender服务,客户端的工作是识别搜索引擎请求并做重定向(和方案一类似),除了userAgent它还会通过escaped_fragment做搜索引擎识别,这是谷歌的一套可抓取方案,详情可见:Google’s ajax crawling protocol阅读全文

互金平台灰度发布的三段式探索与实践

  categories:资料  author:

本文将从某互联网金融平台的线上版本发布工作出发,介绍了整个发布过程的优化及改造,以及对于灰度发布的探索及最终实践。

 

先要说明一点,任何脱离实际业务的技术工作都是耍流氓,技术需要服务于业务。因此,本文尽量淡化了业务方面的因素,聚焦于技术层面,建议在实际运用中还是要根据各自的业务场景去变化和调整。

 

其次,本文重点描述了线上发布的实施改造思路及演进过程,但对于其它相关联的一些点,比如发布规范流程、配置管理、监控、自动化工具的实施等不做过多涉及,如有兴趣可后续交流。

应用逻辑架构
 
 

 

图1 应用逻辑架构图

 

客户端
 

 

包含手机APP、Web页面(主站/营销站等)、H5页面等,即访问发起方,来自于真实用户。

 

WEB
 

 

主要实现转发功能,利用Nginx实现,同时包含一些业务策略和跳转设置。

 

BFE
 

 

Business Front End,业务前端,实现接入和业务聚合功能,有点类似于API网关,但和业务有一定耦合,用Tomcat war包发布。

 

APP
 

 

业务应用层,实现具体业务功能,目前几十个APP模块,用Tomcat war包发布。

 

Data
 

 

数据层,如数据库、缓存、分布式文件系统等。

 

公共组件
 

 

包含配置中心,任务调度中心,服务注册发现中心,消息队列等(这4个公共组件和灰度发布有一定关系,后续会单独介绍)。

 

注意:
  • WEB->BFE:通过Nginx反向代理转发流量,HTTP请求;
阅读全文

在线支付流程简介

  categories:资料  author:

相关概念

我们以收银台为例,详细说明支付的正确打开方式。 当用户提交订单后,就会被引导到收银台上。 以某东为例,手机上是这样的:
京东PC收银台

PC上是这样的:
京东收银台

从这里我们可以看出,用户进入收银台之后,首先需要选择默认的支付方式

支付方式指消费时付款的方式,比如现金支付、货到付款、信用卡支付、借记卡支付、扫码支付等。

那么有哪些支付方式适合在收银台上展示出来? 这就是支付应用和支付方式的关系。在这里,收银台是一类支付应用

支付应用指提供给最终用户在特定场景下使用的产品,比如扫码收银、二维码支付、打赏、众筹、POS支付、生活缴费、信用卡返款、手机充值等。 这些应用是建立在支付产品的基础之上,直接面向最终的用户提供服务。

每个支付应用可以用的支付方式是不一样的。比如说,扫码收银,可能仅支持微信和支付宝。POS支付,仅支持银行卡。而信用卡返款,只能从其他的借记卡上去扣款。 支付应用的设计和公司的业务有关,并需要考虑在公司业务场景下的用户支付体验。目前应用最全的数支付宝,可以参观下支付宝的应用(截止至2017年2月15日):
支付宝

在收银台这个应用中,在呈现支付方式时,哪些支付方式可以提供给当前场景下的用户来使用,哪个方式应该排在前面,这在支付系统中,是通过引导路由来实现的。

引导路由是根据支付应用、收款商户、订单额度等信息来决定提供给用户的支付方式列表。

当用户选择一种支付方式并提交支付后,支付系统开始执行扣款。比如用户选择通过招行来支付,系统就会请求招行来扣款吗? 这不一定,因为系统有可能并没有接入到招行接口。除了招行自己的接口外,第三方支付公司、银联等,也可以从招行卡上扣款。那应该使用哪个通道合适? 这是通过支付路由来决定的。

支付路由指根据用户选择的支付方式,结合费率、QOS等因素,选择合适的银行或者其他公司提供的支付接口来完成资金转移操作。

通过支付路由,我们可以定位到一个落地来执行的支付接口

支付接口,指由银行提供的用来执行支付的接口。这里要注意,对于同一家银行,除了总行可以提供一个接口,各地的分行也可以提供这个接口。 但一般来说,同一家银行的接口规范是一样的,不同的是提供接口的服务器、费率、性能等。

比如,支付公司可以接入工行总行、工行上海分行、工行北京分行的接口。为什么要接入分行呢? 一般来说,不少分行会提供更优惠的接入费率,以及经常会举办一些活动来吸引用户接入。

支付通道,这是对支付接口的一个封装,包含合作银行以及通道成本、商户费率、QOS等信息;

银行和第三方支付等渠道提供给电商公司使用的接口,往往都会封装成支付产品

支付产品指将支付通道打包成满足某特定支付场景需求的商品,比如信用卡快捷、信用卡Moto等。

支付产品

在这里我们把涉及到的几个概念都做了定义。 … 阅读全文

六款最佳Linux教育应用

  categories:资料  author:

位居榜首的是Edubuntu。顾名思义,Edubuntu是非常流行的Ubuntu发行版的一个变种,旨在让Ubuntu进入到广大教室。Edubuntu可能是最大名鼎鼎的专注于教育用户的Linux发行版。它名至实归,因为它随带大量的程序。目前的Edubuntu 14.04.2 LTS发行版非常庞大,占用空间达到2.9GB。Edubuntu提供了捆绑的教育软件,按照年级段分类,可以从软件中心来安装。捆绑的教育软件分门别类:学前、小学、中学和大学。Edubuntu建立在Ubuntu的基础上,所以安装起来就跟Ubuntu一样简单。它还有大量丰富的应用程序,因而对数学和科学有兴趣的人来说有很大的吸引力。

Edubuntu使用Unity桌面环境

2
UberStudent

   Uberstudent是另一款流行的Linux发行版,专注于教育领域,针对中学和大学进行了高度定制。Uberstudent同样建立在Ubuntu的基础上(Uberstudent 4.3基于Ubuntu 14.04.2 LTS),安装就跟安装Ubuntu一样简单直观。Uberstudent随带Xfce桌面环境,桌面环境来得无比简单。

Uberstudent本身就随带许多软件程序。Uberstudent较之Edubuntu的一个优势是软件组织。预安装的软件作了精心的分类,那样你很容易找到所要寻找的软件,相比Edubuntu凌乱的Unity桌面,更是如此。Uberstudent随带Zotero文献管理器,因而适合研究人员,这点再好不过了。尽管Edubuntu因Unity桌面而显得更精美,但使用Xfce桌面的Uberstudent在你系统上占用较少资源,哪怕在比较旧的硬件上也能顺畅运行。

Uberstudent的组织井然有序

3
openSUSE-Edu

如果Edubuntu和Uberstudent满足不了你的要求,你可以考虑一下openSUSE-Edu。openSUSE是另一款面向教育行业这个特定领域的发行版,功能很强大。它基本上可以满足学校从服务器到桌面的IT要求。连Live DVD都含有KIWI-LTSP服务器软件,很容易启用,用于演示。它还随带许多实用的应用程序,供学生、教师、IT管理员、甚至家长使用。openSUSE随带不同的桌面环境,包括GNOME、GNOME Classic、KDE Plasma和Mate。

OpenSUSE及Mate桌面

4
Skolelinux(教育版Debian)

   类似openSUSE-Edu,Skolelinux力求可以满足学校方方面面的IT要求。它本身随带70多个面向学校的应用程序。它还随带替代的桌面环境,包括LXDE和Mate等轻量级桌面环境和非常美观的KDE。

Skolelinux及KDE

5
KnoSciences

KnoSciences是一款基于Knoppix的发行版,它随带许多功能强大的Linux版免费应用程序。KnoSciences是一种可引导光盘系统,不需要安装到硬盘上,就能最大限度地使用它。它可以在Live模式下运行,性能非常出色。它随带多个Latex软件,包括非常流行的Lyx和Texmacs。

6

fedoraEDU

Fedora Education SIG(Edu SIG)力求优化Fedora,供教师和学生使用,无论是教育机构里面的师生还是外面的师生。该发行版随带许多教育应用程序,包括教学工具,比如用于屏幕播放的Wink和用于课程制作的Hot Potatoes,以及其他许多Web应用程序。它还随带许多针对特定年龄段的应用程序,比如gcompris(2岁以上)、sugar(6岁以上)和celestia(14岁以上)。FedoraEdu提供了一款实用的发行版,旨在推广开源教育软件的使用。

  

结束语

你很容易安装任何发行版来满足教育要求,但是如果想要一款直接就可以使用的发行版,本文介绍的这些发行版就能满足你的要求。Edubuntu和Uberstudent是最适合学生和教师的Linux发行版,Edubuntu的优点是它预先安装了大量的软件包,而Uberstudent的优点是教学组织使用这款软件轻松无忧。openSUSE-Edu可以满足学校从服务器到桌面的方方面面的IT要求。openSUSE-Edu还让你可以选择桌面环境,Skolelinux同样如此。KnoSciences不需要安装,就可以在Live磁盘上顺畅运行。之外还有fedoraEdu,这些是面向教育行业的其中几款发行版。所以,如果你在物色合适的一款,可以说选择多的是。… 阅读全文

什么是MEAN全堆栈javascript开发框架

  categories:资料  author:

使用JavaScript能够完整迅速做出Web应用程序,目前一套工具包括MongoDB、ExpressJS,AngularJS和Node.js越来越受到欢迎,其开发的灵活性和易用性加快开发效率,简化开发者的工作。

在今天你有很多架构可以选择建立一个Web应用,你需要的是快速开发,提高效率和注重健壮性,你需要的是更加精细更加敏捷的技术。

 

什么是MEAN?

MEAN是一个Javascript平台的现代Web开发框架总称,它是MongoDB + Express +AngularJS + NodeJS 四个框架的第一个字母组合。它与传统LAMP一样是一种全套开发工具的简称。

  • MongoDB是一个使用JSON风格存储的数据库,非常适合javascript。(JSON是JS数据格式)
  • ExpressJS是一个Web应用框架,提供有帮助的组件和模块帮助建立一个网站应用。
  • AngularJS是一个前端MVC框架。
  • Node.js是一个并发 异步 事件驱动的Javascript服务器后端开发平台。

在mongoDB中我们可以直接存储JSON格式的数据,然后在ExpressJS和的NodeJS服务器编写一个基于JSON的查询,并无缝地(无需像其他语言需要在JSON和语言数据模型之间转换)传递JSON到AngularJS前端。

同时,数据库调试和管理也变得轻松了许多,存储在数据库中的对象基本上等同于你在客户端看到的对象。更妙的是,前端工作人员也能够轻松了解后端代码和数据库查询,使用的是相同的语法和对象,你不必考虑多套语言的最佳实践,降低了入门门槛。

MEAN的架构原理如下图:

m01

相关工具:

  • NPM – NodeJS包管理器,类似Java的Maven。
  • Grunt – 一个Javascript任务运行器。

安装

两种安装方式:

  • 通过mean.io网站下载
    或通过git下载:git clone https://github.com/linnovate/mean.git
  • 使用Yeoman
    首先安装:npm
阅读全文

es6+angularjs+sass+gulp+browserify等组合的前端开发环境搭建

  categories:资料  author:

其实我一直是在基础设施和运维周边转,只是前段时间,因为公司前端都去忙项目去了,没空管基础设施的平台开发自己也懂一些html知识嘛,所以,“顶硬上”吧,顺便也接触一些新东西。

以前了解的web前端知识基本上就知道div+css,懂一些bootstrap的使用,其余一概不知了。

有一天,发现了一个朋友写的前端代码后,只在web前端边缘“裸奔”的我被惊呆了…

第一次见到html标签和属性还可以直接嵌入变量,前端还可以像后端web框架一样实现路由…

第一次看到css还可以调用函数,声明变量,条件判断…

我写这篇文章的触发点完全是因为,这些新奇的东西让常年驻扎在后端的我震惊了。 但是这些新奇的东西搭建起来确花费了我不少时间,一是我对前端了解不多,二是前端框架琳琅满目,网上的意见也很不统一。因此我想写一篇将这些组件整合起来的博客,并使用一个demo项目给大家参考,希望能让大家节省一些纠结的时间。

es6

es6, ECMAScript 6是JavaScript语言的下一代标准,在2015年6月正式发布了。距离现在1年多了,但是主流的几款浏览器还没完全支持es6的语法,所以在编写完代码后需要将其转换成浏览器所支持的es5代码。es6教程推荐阮一峰大神的 ES6标准入门 一书,书本写的很严谨,权威。不过搭建部分个人觉得写的有些略复杂了,es6环境搭建可以参考我翻译的一篇文章 (译)ES6环境搭建简单入门。

说说es6给我的感觉吧,让我觉得最大的区别是原生支持使用import..from..从其他文件导入模块和肥箭头匿名函数。另外原生支持class,但是并没有其他语言的class那么强,支持了静态函数,但是却不支持静态属性-.-|(静态属性已经在es7的提案中)。还有从语法的简洁度来说,(个人觉得)还不如coffeescript,搞不懂为什么还非得要使用这么长的function关键字…

angularjs

我没用过其他框架,所以对比的东西我也说不了多少,让我觉得比起“裸奔”html最大区别是,我可以在html标签的属性或内容嵌入js数据,并且这些数据在后台的更新时会自动更新到前台,让静态html也可以动态起来。这一功能在对于使用restful的web架构来说,极为方便。

sass

Sass 是对 CSS 的扩展,它允许你使用变量、嵌套规则、 导入等功能, 并且完全兼容 CSS 语法。可以让你的代码复用度上提高了不少。

语法可以参考阮一峰写的 SASS用法指南,内容写的不多,比较精简,看一遍就基本入门了。

gulp

gulp是一个构建工具,类似于makefile,将一系列构建步骤写成一个文件,需要构建的时候执行调构建命令就可以了。

gulp任务的核心是管道流,如同linux的命令行的管道

举个linux命令行的栗子:

# 这条命令将产生一个32位的随机字符串
cat /dev/urandom 
阅读全文


快乐成长 每天进步一点点      京ICP备18032580号-1