用dd测试硬盘速度

dd bs=1M count=256 if=/dev/null of=test conv=fdatasync
bs: 读和写 字节 的时间
count: 读和写的次数。上面bs为1M,count为256,就是每次写1M,写256次,共256M
if: 用标准输入代替文件去读
of: 用标准输入代替文件去写
conv: 当有单个逗号分隔的符号列表时转换这个文件
fdatasync: dd执行到最后会真正执行一次”sync” 操作,所以这时候你得到256m到内存并写入到硬盘所需的时间,这样算起来才比较符合实际

Working

  想把一份工作做好,但总觉得有心无力!运维,只是对当前的工作内容的维护,没法推动当前的工作往新的方向发展,只能眼睁睁看着有前景的工作在自己眼前慢慢消失!一个同事对我说,你是运维,没能力推动事情的进展。另一同事又说,你做的只能是维护你当前的工作,更前面的工作不是你能做的!难道我就只是看着花开花谢,而无法增加花的寿命?

Web 架构和我的技术有用论观[转载]

原文来自http://mrluanma.github.io//2010/02/05/web-architecture.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+mrluanma+(江湖程序员)

在一个封闭的小圈子里讨论 Web 架构的时候, 我”突发奇想”将一小段内容发到 twitter 上:

并且大部分的网站都不需要 Google 级别的负载, 所以对于大部分开发者, 创业者来说, “架构”都是最最不重要的事情, 做出好产品, 伺候好用户, 赚到钱才是真的.

然后 @xmpp 认为我这是”技术无用论”, 我也做了一些解释. 现稍作整理, 权充博文一篇.

可能我的表达的确存在一些让人误解的地方. 首先是有人问:

昨天上网不小心看到了一些关于网站架构的讨论: 有人说将WEB站点用独立的方式, 也就是静态页面放到一服务器, 动态页面放一服务器, 图片放另一服务器, 用它们组起来作为一个站点, 这样会加快浏览速度.

请问这样的原理是怎样的?

然后我半壶水响叮当:

一般静态页面和图片可以当做一种东西处理, 和动态页面比起来肯定少耗费 CPU, 动态页面的话肯定会比较费 CPU, memcache 专耗内存, DB 基本上整体负载都很高, 所以如果你有一堆机器要”架构”的话, 肯定需要在 CPU, 内存, IO 这三方面来均衡着排布. 比如 memcache 耗内存不耗 CPU, 那就可以把动态页面放 memcache 的机器上一起跑, DB 啥都耗就自己占整个机器跑, 静态文件这些就直接让反向代理的 web 服务器来跑.

以上讲的是物理机器上的分隔, 其实为了提高访问速度, 一般在 URL 上也要做文章. 因为浏览器 HTTP 协议同时只对一个域名的机器发起最多两个连接, 比如我打开一个动态页面, 这个动态页面里用到 20 个静态文件, 那如果这些文件都是用两个水管来放的话, 是不是没有我同时用 N*2 根水管来放快? 所以一般网站就算只有一台机器提供全部内容, 也会把静动态内容放到不同的二级域名下来提供, 比如说一般的内容用 website.com 来提供, 静态文件就就用 static.website.com 来提供, 这样浏览器就可以向 website.com 发起两个连接要东西, 同时也可以向 static.website.com 发起两个连接要静态文件.

没懂, 啥叫水管?

其实我说的时候我就感觉没说清楚, 我这里一个水管的意思就是一个 TCP 连接. 我 Google 到以下别人解释的更清楚的, 摘录一段:

在HTTP 1.1 Spec 中针对 Persistent Connections 提出了这样的 Practical considerations: Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. A proxy SHOULD use up to 2*N connections to another server or proxy, where N is the number of simultaneously active users. These guidelines are intended to improve HTTP response times and avoid congestion.

以上内容表明, 为了提高 HTTP 响应时间以及避免产生网络堵塞, HTTP 连接中的客户端不应该与服务器端建立超过2个 的 HTTP 连接. 如果有更多的请求需要, 那么这些请求将被 pipeline 到这两个 HTTP 连接之中, 并以异步的方式传送给服务器端. 举个例子: 有上百辆汽车(requests)想从天津开往北京, 但是天津与北京之间最多只允许修建两条公路(HTTP connection), 因此这些汽车要想从天津驶往北京的话, 就只能走这两条公路.

还有这篇, 内容都挺好, 我就不摘录了, 建议都看看.

忘了说一句, 我是山寨的, 只是看了一堆各个网站的架构, 并没有大型 Web 运营经验, 并且我估计很长时间内也不会有这样的事情做. 并且大部分的网站都不需要 Google 级别的负载, 所以对于大部分开发者, 创业者来说, “架构”都是最最不重要的事情, 做出好产品, 伺候好用户, 赚到钱才是真的.

以下是 twitter 上的讨论:

@xmpp

RT: @mrluanma: 大部分的网站都不需要 Google 级别的负载, 所以对于大部分开发者, 创业者来说, “架构”都是最最不重要的事情, 做出好产品,伺候好用户, 赚到钱才是真的 // 技术无用论. 看你站的角度, 如站在孔子学院网站角度, “做出好产品”也是很不重要的.

@mrluanma(我自己)

RT: @xmpp RT: @mrluanma: 大部分的网站都不需要 Google 级别的负载…//技术无用论. 看你站的角度, 如站在孔子学院网站角度, “做出好产品”也是很不重要的 //我绝对不认为技术无用, 我说的是大部分网站不需要担心架构问题, 至少在早期不用.

@xiaoxiaolu

非技术无用论, 是产品导向, 等有负载再解决是务实做法, 换个角度也可以说为啥你丫不进大公司? 我已见过不止一家公司做完技术就准备倒闭 RT @xmpp: RT: @mrluanma: 对于大部分开发者, 创业者, 架构是最最不重要的事情, 做出好产品,伺候好用户// 技术无用论.

@nepalon

市场导向的话对处于生存期的公司比较合适, 只要迎合市场, 功能不算太烂, 一般都可以有市场. 但要进一步发展就要提高技术了, 有了更好的技术, 才能提高性能, 提高用户体验, 提高自己的行业中的地位. 我们的做法是通过销售来发掘市场, 从而根据市场来开发产品, 做技术储备.

@mrluanma

RT @nepalon: 因为我本身就是做开发的, 我觉得把市场看的比架构重是我的一个突破, 当然, 要长远发展, 如果有技术负债, 也肯定是要还的. 这两天用到的产品体验中, 360buy, 邮政的EMS查询, 移动的号薄管家这些的技术负债我觉得都比较严重.

OSX的VPN

最近有一台香港的服务器,同事用pptpd作了一个VPN服务,而且我也有账号,真好。
在公司使用WINDOWS 7可正常使用,不过回到家使用MAC OSX就上不了了。
当登录到这台服务器上,查看了/var/log/daemon.log时,发现以下错误:
GRE: read(fd=7,buffer=80524a0,len=8260) from network failed: status = -1 error = Message too long
原因就出现在Message too long这几个字眼上,查了下google,只要在/etc/ppp/pptpd.options里面加入两个即可:
mru 1400
mtu 1400
那到底这两行是什么意思呢?
MTU(Maximum Transmission Unit,MTU):http://zh.wikipedia.org/wiki/最大传输单元

最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。

因特网协议允许IP分片,这样就可以将数据报包分成足够小的片段以通过那些最大传输单元小于该数据报原始大小的链路了。这一分片过程发生在 IP 层(OSI模型的第三层,即网络层),它使用的是将分组发送到链路上的网络接口的最大传输单元的值。原始分组的分片都被加上了标记,这样目的主机的 IP 层就能将分组重组成原始的数据报了。

在因特网协议中,一条因特网传输路径的“路径最大传输单元”被定义为从源地址到目的地址所经过“路径”上的所有IP跳的最大传输单元的最小值。或者从另外一个角度来看,就是无需进一步分片就能穿过这条“路径”的最大传输单元的最大值。

RFC 1191 描述了“路径最大传输单元发现方法”,这是一种确定两个 IP 主机之间路径最大传输单元的技术,其目的是为了避免 IP 分片。在这项技术中,源地址将设置数据报的 DF(Don’t Fragment,不要分片)标记位,再逐渐增大发送的数据报的大小——路径上任何需要将分组进行分片的设备都会将这种数据报丢弃并返回一个“数据报过大”的 ICMP 响应到源地址——这样,源主机就“获取”到了不用进行分片就能通过这条路径的最大的最大传输单元了。

不幸的是,越来越多的网络封杀了 ICMP 的传输(譬如说为了防範 DoS 攻击)——这使得路径最大传输单元发现方法不能正常工作,其常见表现就是一个连接在低数据流量的情况下可以正常工作,但一旦有大量数据同时发送,就会立即挂起(例如在使用 IRC 的时候,客户会发现在发送了一个禁止 IP 欺骗的 ping 之后就得不到任何响应了,这是因为该连接被大量的欢迎消息堵塞了)。而且,在一个使用因特网协议的网络中,从源地址到目的地址的“路径”常常会为了响应各种各样的事件(负载均衡、拥塞、断电等等)而被动态地修改——这可能导致路径最大传输单元在传输过程中发生改变——有时甚至是反复的改变。其结果是,在主机寻找新的可以安全工作的最大传输单元的同时,更多的分组被丢失掉了。

对于时下大多数使用以太网的局域网来说,最大传输单元的值是 1,500 字节。但是像 PPPoE 这样的系统会减小这个数值,通常是1492(= 1500 – 2(PPP)- 6(PPPoE)),这就使得在使用最大传输单元发现方法时可能会产生这样的结果:一些处于配置不当的防火墙之后的站点变得不可达了。对于这种情况,还是可能找到变通的方法的,但这取决于你控制的是网络的哪一部分。这些方法包括改变用来在防火墙一端建立 TCP 连接的第一个分组的 MSS(Maximum Segment Size,最大分段大小)。

MRU:不才啊,找不到MRU的意思。不过个人的猜测是(Maximum Rrrive Unit,MRU).
pptpd默认这两个参数的都是1280,那为什么1280不行却1400就可以呢?难道windows下面发的数据包比osx的包要小,osx在包里还加上其它的东西。这东西还真可以深究!

用圆周率测试cpu速度

今天看了一blog,内容大致是一台dell服务器非常慢,负载低。以往的经验是出现在程序锁io block上,一般是某些重要资源争用导致的。
他的思路是先用圆率来测试CPU速度的,代码如下
time echo "scale=5000; 4*a(1)" | bc -i -q
通过得到结果来测试速度是否有问题。正常情况如果是服务器是半分钟以下就可以搞定。我电脑是1分钟以下。然后再看看syslog里的报错。
看blog里说最后的结果是出现在dell服务器上的linux内核bug,大致是内核在cpu功耗和温度控制上有bug,没法拿到正确的值,由此导致cpu持续被降频!

[转]Linux 终端机下的彩色显示

转自http://fanqiang.chinaunix.net/a1/b1/20010427/152029.html

作者: Thorbjørn Ravn Andersen, ravn@dit.ou.dk
译者: Chou-Kai Wang, stylon@ms2.hinet.net
v1.4, 7 August 1997 

——————————————————————————–
虽然大部份的 Linux 发行版本都附有一个用来把目录的内容列出来,而且可以利用彩色来增强输出在视觉上的效果的’ls’指令,不过要把他设定的合你意却不是件容易的事。这份文件说明了设定一些已经内附在你的 Linux 发行版本的软体,来达到这个目地的好几种不同的方法,还有在那□可以找到一些在大部份版本的 Unix □都会用到,但是却常常不被附在 Slackware 或 RedHat Linux □的软体。这份文件的 HTML 版本也可以在我的原始档案这□ http://www.mip.ou.dk/~ravn/colour-ls 找的到。 
——————————————————————————–
——————————————————————————–

1. 简介
这些年来彩色的显示器已经相当普遍,使用者也开始使用一些以彩色来表示例如:程式语言□的保留字,或是拼错的字,来给使用者一些视觉上的回馈。 

自从 Linux 的文字模式控制台支援彩色後,原来的 GNU ls 也很快的被修改成支援输出彩色的讯息而且被附在 Slackware 2.0 版□。这些改良原来版本的缀补档案已经被整合到标准版的 GNU ls 里,现在也应该是所有新的 Linux 发行版本的一部份了。 

现在这版本的文件是把最初的版本改写了许多部份後更新而来的,包括了一些关於 xterm 和 如何利用缀补档来更新核心的资讯。 

这份文件里的资讯都在 Redhat 4.1 □验证过,而且主要是在Slackware 2.0.2 版及核心版本 1.1.54 的环境□搜集而来的。核心的缀补档的资讯是在 slackware 2.2.0,1.2.13 版的核心,并且以 tcsh 为预设的 shell的环境□取得的,而後来也在 2.0.27 的核心□验证过。如果你使用其它的设定或是 unix 版本,我会很感激你告诉我你的作业系统及版本,还有它是否支援彩色的显示。 

——————————————————————————–
——————————————————————————–

2. 快速入门:给没有那麽多耐心的读者
如果你有个 新版的 Linux,对你使用者目录下的这些档案作这些修改,下次你登入的时候就会生效了。 

~/.bashrc:
    alias ls=”ls ‐‐color”

~/.cshrc:
    alias ls ‘ls ‐‐color’

这样就好啦! 
你也许还会想要作 “eval `dircolors $HOME/.colourrc`”,来设定你自己想要的颜色。这个档案可以用 “dircolors -p >$HOME/.colourrc” 来制造出来,而且□面有许多的注解方便你更改设定。 

——————————————————————————–

3. 这样就好了吗?

首先你需要知道你使用的 ls 是不是可以适当的处理彩色输出。在Linux的文字模式控制台试试看这个指令(在xterm也可以): 
%ls ‐‐color
(这里的 % 是shell的提示符号): 

如果你看到了表示你的ls不能接受这个选项的错误讯息,那你应该安装新版本的GNU fileutils软体。如果你使用的发行版本没有提供新的升级软体,那麽就从GNU的映射站台取得这个软体并且直接从原始码安装。 
如果你并没有看到错误讯息,那麽你使用的ls便可以接受这个选项。但很不幸的,有一些在Slackware(其它的发行版本也有可能)里附的早期版本是有bug的。在Redhat 4.1面附的3.13版的ls就没有问题。 

%ls ‐‐version
ls - GNU fileutils-3.13

如果你在Linux的文字模式终端机里执行“ls ‐‐ color”,那麽它的输出应该依照系统的预设值而有适当的彩色,而且你现在可以开始决定是不是需要改变任何的设定。 
如果你在 xterm □执行上面的过程,也许你还是没办法看到输出变成彩色。就跟ls一样,原来的xterm并不支援应用程式的彩色输出,而较新的版本有支援。如果你的xterm不支援彩色,那麽请参考这个文件的结尾拿到较新版本的 xterm,同时你也只好切换到文字模式并且继续下面的步骤。 

——————————————————————————–
——————————————————————————–

4. 有那些颜色可以选择呢?
下面的shell命令稿(感谢许多把bash的版本寄给我的人)显示出现在使用的主控台能够支援的各种颜色组合。如果没有颜色出现,那麽你的主控台就不支援ANSI的颜色选择。 
#!/bin/bash
# 显示 ANSI 的彩色
#
esc="33["
echo -n "_ _ _ _ _ 40_ _ _ 41_ _ _ _ 42_ _ _ 43" 
echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"
for fore in 30 31 32 33 34 35 36 37; do
line1="$fore "
line2=" "
for back in 40 41 42 43 44 45 46 47; do
line1="${line1}${esc}${back};${fore}m Normal ${esc}0m"
line2="${line2}${esc}${back};${fore};1m Bold ${esc}0m"
done
echo -e "$line1n$line2"
done

前景的颜色号码是在左边那一排,背景的则是在上方。如果你要粗体的字元和高亮度就在参数里加一个 ”1″,所以前景是白色而背景是蓝色就成了”37;44;1″。整个的ANSI颜色选择序列就是 

ESC[37;44;1m
如 ^[[31;1mApache^[[37;0m

  • ^[ — 使用 键生成的
  • [31 是根据下面的表来生成的,你想要什么色彩,就下面里的表里先吧

    前景 背景 颜色
    30 40 黑色
    31 41 红色
    32 42 绿色
    33 43 黄色
    34 44 蓝色
    35 45 紫红色
    36 46 青蓝色
    37 47 白色

  • ;1m 这里有分号可有可无,它是根据下面的你的需要来的安排的,如果后面是1号话,就是高亮显示,是4的话就下划线…。这里是1m那就是高完显示apache
    代码 含义
    0 OFF
    1 高亮显示
    4 下划线
    5 闪烁
    7 反白显示
    8 不可见
  • ;0m 就是结束前面的1m,也就是高亮显示到此为止

注: 背景不可以是高亮度,所以黄色(高亮度的棕色)只能用来作前景。这是硬体上的限制。 

颜色代码:
        0 - 黑色     4 - 蓝色           3# 是背景颜色
        1 - 红色     5 - 粉红色         4# 是前景颜色
        2 - 绿色     6 - 青色
        3 - 黄色     7 - 白色           ;1 是粗体和高亮度

——————————————————————————–
——————————————————————————–

5. 如何设定 ls 的彩色输出

如果你想要修改 ls 内定的标准颜色,你需要用下面的指令在你的 HOME 目录下制造这一个档案 

 cd ; dircolors -p > .coloursrc 

在你编辑完这个注解的很详细的档案以後,你必需要把它读进你的环境变数 LS_COLORS □,通常都是这样作的 

eval `dircolors .colourrc`

然後你要把前面这一行放进你的 .bashrc 或 .cshrc 或 .tcshrc (依照你使用的 shell 而定)□。更详细的用法请看 dircolors(1) 的使用说明。 

——————————————————————————–
——————————————————————————–

6. 如何改变系统的预设值: 前景白色而背景是黑色

你需要告诉你的终端机驱动程式你想要的另一个预设值。要如何作并没有一个标准的方法,不过如果你是用 Linux 的话,你有 setterm 这个程式可以用。 

“setterm” 使用终端机资料库□的资料来设定属性。要选择属性的话要这样作 

setterm -foreground black -background white -store

“-store” 参数把现在所作的改变设定成预设值。这需要你现在使用的的终端机种类(在 TERM 环境变数□)在 termcap 资料库□有足够详细的纪录。如果 setterm 因为某种因素不能正常的工作,你还有其它的选择。 

6.1 Xterm 

你要有至少一种下列的 xterm,而且要支援彩色。 

xterm -fg white -bg blue4
color_xterm -fg white -bg blue4
color-xterm -fg white -bg blue4
nxterm -fg white -bg blue4

这□的 ’color_xterm’ 支援彩色版的 ’ls’。这□的颜色选择是模彷 SGI 上面使用的颜色。 

6.2 虚拟主控台 

你也可以修改核心,这样就可以一劳永逸的用控制码来改变虚拟主控台的预设值。如果你自己编译核心的话,我建议利用 kernel 的缀补档。 

核心的原始码是在 /usr/src/linux/drivers/char/console.c ,大概在 1940 行,这是你应该修改的地方 

        def_color       = 0x07;   /* white */
        ulcolor         = 0x0f;   /* bold white */
        halfcolor       = 0x08;   /* grey */

        def_color       = 0x17;   /* white */
        ulcolor         = 0x1f;   /* bold white */
        halfcolor       = 0x18;   /* grey */

这边的十六进位数字是给显示卡用的: 最左边的位元(上面□例的 ”1″)是背景 ; 最右边的位元是前景。0 = 黑色,1 = 蓝色,2 = 绿色,3 = 青色, 4 = 红色, 5 = 紫色,6 = 棕色/黄色,7 = 白色。把数字加 8 可以得到高亮度的颜色。在大部份的情况下,高亮度的背景色 == 闪烁的字加上普通的背景。由 sjlam1@mda023.cc.monash.edu.au 所提供 

你也可以使用下面的 ANSI 控制码提供一个执行时期的主控台预设值。(在核心原始码□找到的) 

        ESC [ 8 ]

这个控制码把预设值设成目前的前景及背景颜色。然後重设属性的控制码(ESC [ m)让这预设值马上就取代黑白色成为使用中的颜色。 

每次你重开机的时侯你都需要再把这些字串送给主控台。依照你的 Linux 主机用途不同,有好几个档案可以达成这个目的。 

/etc/issue

在 Slackware □这就是 ”Welcome to Linux xx.yy” 讯息所在的档案,如果你的主机是个人使用的话,从这个档案下手是不错的选择(但对於用 telnet 远端登入使用系统的人就可能有点讨厌)。这个档案在每次开机的时侯都会被制造出来,原来的内容则被覆盖,所以你必需要修改开机档案(在 Slackware □是 /etc/rc.d/rc.S,Redhat□是 /etc/rc.d/rc.local)□面的下列几行: 

  echo ””> /etc/issue
  echo Welcome to Linux `/bin/uname -a | /bin/cut -d  -f3`. >> /etc/issue

改成 
  ESCAPE=”在这□放入 ESC 码”
  echo ”${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J”> /etc/issue
  echo Welcome to Linux `/bin/uname -a | /bin/cut -d  -f3`. >> /etc/issue

这□的控制码会把游标归位、设定颜色(在这□的前景是白色而背景是蓝色)、把这个设定存起来并且把萤幕上其它部份清除掉。这□的改变会在下次重开机时生效。别忘了在 emacs 要打入 ESC 字元要按 C-q 键而在 vi □要按 control-v,因为很显然的执行以上程式的 sh 并不了解 /033 这种用法。 

/etc/profile 或 .profile

  if [ ”$TERM” = ”console” ]; then
      echo ”33[37;44m33[8]” #
# 或使用 setterm。
      setterm -foreground white -background blue -store
  fi

/etc/login 或 .login

  if ( ”$TERM” == ”console” ) then
    echo ”33[37;44m33[8]”  
# 或使用 setterm。
      setterm -foreground white -background blue -store
  endif

[ 译者注: Linux 的主控台下的 $TERM 环境变数已经是 ”linux” 而不是 ”console” 了 ] 

6.3 远端登入 

你应该可以用上面示□过的 setterm 程式。当然,远端的机器必需要能够得到足够的资讯来操作你的终端机,而且你的终端机模拟程式要能够支援彩色。在我的经验□其它平台上最好的 vt100 终端机模拟程式有下列几种: 

MS-DOS: MS-Kermit (免费, 不是 Microsoft 的产品) 
Windows 95/NT: Kermit/95 (共享软体) 
OS/2: Kermit/95 (共享软体)。 请注意标准的 telnet 支援彩色而且可以在本地端设定。 
关於 kermit 的细节请看 http://www.columbia.edu/kermit/ 

——————————————————————————–
——————————————————————————–

7. 软体

以上所有的用法都假设你使用的是 GNU/Linux。如果你是使用其它的作业环境(比如说是执行 X 的 Sun 工作站等等)你还是可以拿到并且自己编译这些软体。 

彩色版的 xterm 是从标准的 xterm 原始码而发展来的,而用来修改标准 xterm 的缀补档可以从任何一个 X11R6 的站台获得。听说 R6.3 内附的 xterm 有支援彩色,不过我没有测试过。 

ftp://ftp.denet.dk/pub/X11/contrib/utilities/color-xterm-R6pl5-patch.gz

如果你是用旧版的 X 的话请看内附的文件。注意: 我自己并没有测试过! 

‘ls’ 是内附在 GNU 的 fileutils 软体□而你可以从 prep.mit.edu 或其它的映射站台拿到。请拿最新的 3.13 版本。 

ftp://ftp.denet.dk/pub/gnu/fileutils-3.XX.tar.gz

我自己曾经在 Solaris,SunOS,Irix 上成功编译过 color-ls。 

我很欢迎对於这篇文章的回应。我的电子邮件地址是 ravn@dit.ou.dk

‐‐ 

Thorbjørn Ravn Andersen 

——————————————————————————–

使用wget下载迅雷快传的资源

今天要下载一个mac lion,不想安装迅雷软件。想通过Terminal使用wget来下载,在网上看到怎么使用wget来下载迅雷快传的资源,现特记下来:
wget --user-agent="Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0" "http://dl2.c12.sendfile.vip.xunlei.com:8000/OSX1075%2D11G56%2DESD%2Edmg?key=469534ce339ce93a35b340e403e8aca5&file_url=%2Fgdrive%2Fresource%2F25%2F0E%2F251840E6E7C2053B3D8A942CF388E2FCAA81580E&file_type=0&authkey=9D06D058983275030AFE70D6FE9F41BE4EF2131B1E893A95758EC1DD34515340&exp_time=1357502302&from_uid=131909632&task_id=5791189608205756930&get_uid=1009325168&f=lixian.vip.xunlei.com&reduce_cdn=1&fid=vLNBHEDwobAkgJKP5RlyjFrfz08ABU0ZAQAAACUYQObnwgU7PYqULPOI4vyqgVgO&mid=666&threshold=150&tid=B8E857FDB1A09E8CCE141CCEE4739CEC&srcid=7&verno=1" -O "Lion.dmg"
上面是整条下载的命令。大概意思就是:

  1. –user-agent=”Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0″ 使用–user-agent将wget 伪装成是“windowns操作系统,使用Firefox“ 来下载。
  2. http://dl2.c12.sendfile.vip.xunlei.com:8000/OSX1075%2D11G56%2DESD%2Edmg?key=469534ce339ce93a35b340e403e8aca5&file_url=%2Fgdrive%2Fresource%2F25%2F0E%2F251840E6E7C2053B3D8A942CF388E2FCAA81580E&file_type=0&authkey=9D06D058983275030AFE70D6FE9F41BE4EF2131B1E893A95758EC1DD34515340&exp_time=1357502302&from_uid=131909632&task_id=5791189608205756930&get_uid=1009325168&f=lixian.vip.xunlei.com&reduce_cdn=1&fid=vLNBHEDwobAkgJKP5RlyjFrfz08ABU0ZAQAAACUYQObnwgU7PYqULPOI4vyqgVgO&mid=666&threshold=150&tid=B8E857FDB1A09E8CCE141CCEE4739CEC&srcid=7&verno=1 这个是查找快传的html源代码找出来的下载地址。
  3. -O这个参数是将得到的资源重命名。我这里是重命名为Lion.dmg

End

mac使用内存做应用程序cache

我目前知道有两个方法:
1. 在applescript应用程序中创建

  1. 启动「AppleScript 编辑器」,这个工具也是在「应用程序/实用工具」目录下,建议大家直接从 OS X 右上角的搜索框中搜索(Spotlight)启动;
    粘贴以下代码到 AppleScript 脚本区,并点击窗口中的运行,看是否能够正常执行(可以在 Finder 左侧看是否有出现 RamDisk 的磁盘),如果能够正常执行的话开始下一步。

    do shell script "
    if ! test -e /Volumes/"Ramdisk" ; then
    diskutil erasevolume HFS+ "RamDisk" `hdiutil attach -nomount ram://4629672`
    fi
    "

    点击菜单栏的文件——存储为(或者快捷键 command+s),在存储为对话框中将文件格式选择为「应用程序」,如果确定脚本代码没有问题的话可以勾上”仅运行”复选框,然后将其保存到你想要的位置。
    其实上面的过程就是生成一个可以创建 RamDisk 的脚本程序,接下来我们还需要让脚本程序在启动/登陆时自动运行。

  2. 打开「系统偏好设置——用户与群组」,选择「登录项」选项卡,将你刚刚保存的脚本程序加入到启动列表中即可。
  3. 接下来删除 ~/Library/Caches 这个目录,你可以直接在 Finder 中完成,也可以在终端(应用程序/实用工具)中执行命令: sudo rm -rf ~/Library/Caches,执行命令过程中会让你输入用户密码。在执行命令之前请记得尽可能的退出所有在运行中的程序(只保留 Finder 和”终端”最好)。
  4. 完成删除之后,再在「终端」中执行命令:ln -s /Volumes/RamDisk/ ~/Library/Caches,这一步的目的是在原有的缓存目录处建立 RamDisk 的”替身”,也就是再往 ~/Library/Caches 目录存放文件就会直接存放到 RamDisk 中。
    启动应用程序进行测试,Safari、Chrome、iTunes 什么的都行,看启动应用程序之后 RamDisk 目录是否会产生新的文件(夹),如果产生了则证明工作正常。

重要提示

  • 存放缓存仅仅是 RamDisk 一个比较常用的功能而已,在使用的过程中你完全可以将其当做高速硬盘来使用,比如下载文件的时候直接下载到 RamDisk、将电影存放到 RamDisk 中来看都可以提升性能,而且由于它是对内存进行读写操作,所以可以很大程度上的保护你的硬盘。
  • 建议4GB以上用户才考虑设置 RamDisk,一般来说4GB用户的 RamDisk 大小不超过1GB为好,8GB内存用户可以设置2GB的 RamDisk。
  • 以上方法2中的脚本代码会设置2GB的 RamDisk,如果你想设置成1GB,请将代码中 ram:// 后面的数字修改成 2097152;如果你想设置成512MB的话则修改成1048576。注:计算方法是将你要设置的大小转为block,例如是1G, 那就是1G=1024MB=1024*1024KB=1024*1024*2= 2097152 block ,我就不理解为什么将KB转换为block就是乘以2就可以了
  • 在 Mac 中创建 RamDisk 其实一句命令就可以搞定:diskutil erasevolume HFS+ “RamDisk” `hdiutil attach -nomount ram://4629672` 方法二中的前面几个步骤都是为了能让脚本在进入系统时自动启动。
  • 已经配备 SSD 固态硬盘的用户完全没必要使用 RamDisk,因为 SSD 的速度已经够快了。
  • 切忌将重要文件放到 RamDisk 中。

第二种方法曾经在网上看到过,不过忘记是哪个地址了!
大概方法是:使用diskutil erasevolume HFS+ "RamDisk" `hdiutil attach -nomount ram://4629672` (这一行的代码意思大概是在/Volumes/里新建一个目录RamDisk,然后将格式化为内存模式,类似于unix/linux里的tmpfs), 然后在/etc/fstab里写入内容,让它在启动的时候自动挂载. (其实/etc/fstab在10.7版本之后是不存在的,可以通过运行vifs或touch /etc/fstab来自动生成/etc/fstab文件).
这篇文章的地址要找一下了。

现在打开应用程序,会发现打开速度快了很多很多。目前我的机器的是4G的,可以再加上一条,然后将/Library/Cache目录给挂上内存,机器启动的速度会不会快呢?

rails文件

很感谢 Rain,他让我明白rails文件的大概意思。
原因是,我要在rails下使用ssh远程连接服务器,要在rails 的model里写上一方法,在controller里面引用。错误的代码如下:
Model
require 'net/ssh'
class Sys < ActiveRecord::Base
attr_accessible :ip_addr, :service, :port, :status

def ssh_connect
Net::SSH.start(self.ip_addr, 'root') do |ssh|
puts ssh.exec!("ls -a")
end
end
end

Controller
class SystemController < ApplicationController
def index
@status = Sys.find(:all)
end
def add
@add_dev = Sys.new(params[:add_dev])
if request.post?
if @add_dev.save
redirect_to controller: "home", action: "index"
end
end
end
def start
ssh_connect
end
end

这里直接引用了ssh_connect函数(很可笑吧)

经过Rain的提醒,我好像有点懂了:

原来rails下面的文件很多都是一个类,例如class Sys < ActiveRecord::Base,就是Sys引用了ActiveRecord::Base,然后可以加上自己的方法。如果想引用到Sys类下面的方法的话那就得用到 new了,如 test = Sys.new, 用test就可以用到Sys类下面的方法和ActiveRecord::Base里的方法了。
正如上面的例子,class Sys, Sys是一个类, ssh在类下面作为一个方法,想要用到ssh的话,就得先引用到Sys类,使用ssh_mothod = Sys.new(一开始引用整个类),然后ssh_mothod就可以使用到ssh方法了(ssh_mothod.ssh)!
self就是自引用

之前使用rails就是拼命地东湊西合的,根本没想过这些,所以到现在我还在rails的门外俳佪.

mysql插入IP地址

今天写了一个脚本,主要判断nginx存在的话就将状态写入数据库
#!/bin/sh
port=`ssh minix@192.168.186.128 "ps -C nginx -o pid"`

if [ "${port}" != " " ]
then
mysql -h127.0.0.1 -u root -p12345678c9 -e "use sys; update links set status="1";"
else
mysql -h127.0.0.1 -uroot -p12345678c9 -e "use sys; update links set status="0";"
fi

然后在mysql插入一个表:
create table links (ip int unsigned not null default '0', process varchar(255), status bool not null default '0');

为什么要使用到 int unsigned呢?