2014年5月 ’ 的文章存档

检查和收集 Linux 硬件信息的 7 个命令

在Linux系统中,有许多命令可用于查询主机的硬件信息。一些命令只针对特定的硬件组件,比如CPU、内存,一些命令可以查询多个硬件信息。

这篇文章只是简单的让每个人了解查询硬件信息的基本命令使用,包括lscpu、hwinfo、lshw、lspci、lsblk、lsusb等等。

1. lscpu用于查询CPU信息

[root@devops ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
CPU socket(s):         1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 45
Stepping:              7
CPU MHz:               2194.842
BogoMIPS:              4389.68
Hypervisor vendor:     Xen
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              15360K
NUMA node0 CPU(s):     0

2. lshw显示硬件信息表

这个命令应用普遍,它可通过个人需求而列出多种不同的硬件参数:CPU、内存、硬盘、USB控制器、lshw卡片等等,本质上就是从/proc目录不同文件中中提取对应的硬件信息。
阅读全文

SSH OTP 认证

采用 OTP + 密码作为 SSH 的认证方案以保证安全性,这里就简单描述一下实现方案。我们采用的软件是 Google Authenticator,其客户端实现支持 Android,iOS,BlackBerry 系统。

在服务器上执行下面的操作:

$ git clone https://code.google.com/p/google-authenticator/
$ cd google-authenticator/libpam/
$ make

然后分别拷贝 pam_google_authenticator.so 和 google-authenticator 到 /lib/security/ 和 /usr/bin/ 目录。之后编辑 /etc/pam.d/sshd 文件,在该文件的最前面插入一行:

auth       required     pam_google_authenticator.so

阅读全文

svn全自动化更新

首先在这里我要说很多,

需求:

1.我写任何脚本的核心要求就是必须得有一台跳板机,单方面认证即可

2.需要一台服务器挂载前台所有web站点

3.需要一个报警通知的接口

个人对自动化上线的理解:

1.执行上线脚本就可以高枕无忧,把脚本放到后台就可以了

2.如何达到高枕无忧,svn自动化上线实现起来不简单
阅读全文

【机器学习算法-python实现】逻辑回归的实现(LogicalRegression)

1.背景知识

      在刚刚结束的天猫大数据s1比赛中,逻辑回归是大家都普遍使用且效果不错的一种算法。

(1)回归

    先来说说什么是回归,比如说我们有两类数据,各有50十个点组成,当我门把这些点画出来,会有一条线区分这两组数据,我们拟合出这个曲线(因为很有可能是非线性),就是回归。我们通过大量的数据找出这条线,并拟合出这条线的表达式,再有数据,我们就以这条线为区分来实现分类。下图是我画的一个数据集的两组数据,中间有一条区分两组数据的线。

阅读全文

使用 EXPLAIN 关键字 检查SQL语句效率

explain详细说明

通过explain可以知道mysql是如何处理语句,分析出查询或是表结构的性能瓶颈。通过expalin可以得到:

1. 表的读取顺序
2.表的读取操作的操作类型
3.哪些索引可以使用
4. 哪些索引被实际使用
5.表之间的引用
6.每张表有多少行被优化器查询

阅读全文

谈谈Javascript中的void操作符

由于JS表达式偏啰嗦,于是最近便开始采用Coffeescript来减轻负担。举个栗子,当我想取屋子里的第一条dog时,首先要判断house对象是否存在,然后再判断house.dogs是否存在,最后取house.dogs[0]。在JS需要这么写

var dog = (typeof house !== 'undefined && house !== null) 
&& house.dogs && house.dogs[0]

在Coffee中,我只需要这么写:

dog = house?.dogs?[0];

写到这里,读者会问,这跟标题《Javascript中的void》有一毛钱关系?Coffee的本质就是JS,之所以Coffee能工作的很好,是因为它生成出了高效而且健壮的JS代码,我们可以看看它的生成结果。

var dog, _ref;

dog = typeof house !== "undefined" && house !== null ?
 (_ref = house.dogs) != null ? _ref[0] : void 0 : void 0;

短短一行Coffee代码生成出了如此长的JS代码,看上去似乎比我最前面自己用JS写的更靠谱更安全,末尾还出来了两个void 0,这究竟是何方神圣?
阅读全文

IO不再神秘

———————————————————————————————————-

随着所有的在高可用服务器设计上的炒作,以及nodejs背后的风行,我想关注一些IO的设计模式,却一直没有足够的时间。现在正在完成的一些研究,我想最好记下这些资料以备查。让我们跳上IO bus兜风去。

各种各样的I/O

根据操作的阻塞或非阻塞类型,以及IO的准备就绪、完成事件通知的同步和异步类型,一共有四种不同方式的IO。

  • 同步阻塞IO

在许多web server上,典型的一个连接一个thread的基础,这种类型是IO操作阻塞着应用程序直到完成。

当阻塞式的read方法或write方法被调用时,将有一次上下文切换至kernel中,IO操作会发生,数据会被复制进kernel的buffer中。然后,kernel buffer会把数据转给用户空间里的应用程序级别的buffer,并且应用程序的thread会被标识为runnable的,此时应用程序会解锁可以从用户空间的buffer中读取数据。

一个连接一个thread的模型想尝试减少强制一个连接给一个thread的阻塞影响,需要掌握剩下的并发连接不再被IO操作在同一个连接上阻塞。当连接些都很短且数据延迟都不是很坏的时候这工作得很好。尽管如此,一旦连接变长且数据连接高延迟,可能性就是,线程些被连接长时间抓住不放,因为新连接的饥饿。如果使用定长的线程池,直到阻塞的线程在阻塞状态中不能被重用以服务新的连接,如果每个新的连接用一个新的线程服务,或者会导致大量的线程会在系统中被产生,这会演变为漂亮的资源争抢,为了完成高并发的负载,而高上下切换消费。
阅读全文

你不知道的Chrome DevTools:推荐几款DevTools插件

Web前端开发过程中必然会用到Chrome浏览器自带的开发者工具Chrome DevTools,使用它作为Web前端开发性能调试的必备工具。就连隔壁的产品小哥都知道打开F12改一下页面元素的标签代码就能看到页面效果,这年头谁不会用Chrome开发者工具呀。

但是Chrome能做的远不止你平常用的那么简单,这一个小小的开发工具集成了很多高级的功能你未必知道。我打算把一些Chrome DevTools上使用的高级技巧写成《你不知道的Chrome DevTools》这一系列的博文,希望大家一起学习学习。

关于DevTools插件

应用于Chrome开发者工具的插件不同于普通的Chrome应用或者插件,它是给你的Chrome DevTools扩展更多的功能,方便你查看和调试web程序。它的安装方法跟Chrome应用的安装方法是一样的,可以通过Chrome应用商店或者直接crx安装文件来安装。
阅读全文

程序员如何活得明白

商业内幕最近发表了一篇文章说做程序员压力山大,很多人都快疯了。文中陈述了几个典型的罪状:骗子综合症,加班加点,精疲力竭等。作者指出,程序员的工作压力的根源通常是源自混乱的管理,但越来越多的压力开始来自程序员社群自身,社群中开始形成一种文化,将加班加点当成判断一个程序员是否具有奉献精神的石蕊试剂,强加到程序员身上。换句话说,如果你不在下班时间继续写代码,你就不可能成为一名合格的程序员。跟这些压力相呼应的是急速革新的各种新技术、新框架、新语言、新平台、新程序包、新SDK等的不断出现,就如火上浇油。

可事实上问题不在于此。编程,就跟写作、绘画、作曲一样,首先是一种创造性的活动,而不是一个种技术工作。当然,对一种技术或编程语言的不断练习和保持熟悉很重要,这其实就是在学习使用工具和技法,但它并不会让你本质上变成一名更优秀的程序员。它只是让你能更熟练的使用工具。而能让你成为更优秀的程序员的是学会如何思考问题,因为最终你是把脑子里思考出的逻辑转换成了一系列操作计算机的指令,让计算机遵照指令解决问题。而学习如何正确的思考——如何抽象归纳,如何组合,如何分析信息,如何自我反省——可以通过各种方式,远非只有编程一种。Paul Graham在他的精彩著作《黑客与画家》一书中说:

我发现那些最有价值的灵感的源泉都不是那些跟“计算机”这个词相关的领域,而是那些跟动手创造相关的领域。绘画就是一个比计算机理论能提供更丰富灵感的思想源泉。

拓展其它领域的技术,培养除编程之外的其它爱好,这会给你的日常工作带来巨大的帮助。程序员根本不需要没日没夜的写代码。你应该把这些时间用于和他人交流,和大家一起边喝咖啡(或你喜爱的东西)边编码、阅读、讨论。你应该把这些时间用于跑步或举重。身体锻炼给大脑补充氧气,滋养这个最神奇的器官,这才是你需要的。我三年前开始跑步。呼吸新鲜的空气、沐浴清新的阳光让我变得更加快乐,跑出几公里远离繁杂的琐事,我的脑子有了更多的时间来激发灵感。
阅读全文

PHP file_get_contents设置超时处理方法

今天说的这篇是讲超时的,确实在跨服务器提交的时候,不可避免的会遇到超时的情况,这个时候怎么办?set_time_limit是没有用的,只有用context中的timeout时间来控制。

file_get_contents的超时处理

话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。

今天说的这篇是讲超时的,确实在跨服务器提交的时候,不可避免的会遇到超时的情况,这个时候怎么办?set_time_limit是没有用的,只有用context中的timeout时间来控制。相反,我们不是要抑止,而是要管理。比如在超时返回错误后,进行一次尝试,就象js中的 settimeout那样,对函数重新处理。错误超过3次或者5次后,我们就确实的认为无法连接服务器而彻底放弃。这,是一个好办法,应该值得推荐使用。其实。不全是file_get_contents,只要支持context的都应该加上,避免超时浪费时间。这样可以被支持的函数大致有:fsocketopen(该函数的最后一个参数。好象比较推荐在读stream的时候,使用stream_time_out函数进行控制),fopen(也是从PHP5开始加入context支持),file(PHP5加入支持),curl(curl有自已的变量 CURLOPT_TIMEOUT)等 。
阅读全文