Friday, June 21, 2013

GARCH模型

This post is from here.


GARCH模型(Generalized AutoRegressive Conditional Heteroskedasticity)又称“广义ARCH模型(Generalized ARCH)”、“广义自回归条件异方差模型”

GARCH模型概述


  自从Engle(1982)提出ARCH模型分析时间序列的异方差性以后,波勒斯列夫T.Bollerslev(1986)又提出了GARCH模型,GARCH模型是一个专门针对金融数据所量体订做的回归模型,除去和普通回归模型相同的之处,GARCH对误差的方差进行了进一步的建模。特别适用于波动性的分析和预测,这样的分析对投资者的决策能起到非常重要的指导性作用,其意义很多时候超过了对数值本身的分析和预测。

GARCH模型的基本原理

  一般的GARCH模型可以表示为:
  r_t=c_1+\sum_{i=1}^R\phi_i r_{t-i}+\sum_{j=1}^M \phi_j \epsilon_{t-j}+\epsilon_t \cdots  \cdots (1)
  \epsilon_t=u_t\sqrt{h_t}  \cdots  \cdots (2)
  h_t=k+\sum_{i=1}^q G_i h_{t-i}+\sum_{i=1}^p A_i\epsilon_{t-i}^2  \cdots  \cdots (3)
  其中ht为条件方差,ut为独立同分布的随机变量,ht与ut互相独立,ut为标准正态分布。(1)式称为条件均值方程;(3)式称为条件方差方程,说明时间序列条件方差的变化特征。为了适应收益率序列经验分布的尖峰厚尾特征,也可假设 服从其他分布,如Bollerslev (1987)假设收益率服从广义t-分布,Nelson(1991)提出的EGARCH模型采用了GED分布等。另外,许多实证研究表明收益率分布不但存在尖峰厚尾特性,而且收益率残差对收益率的影响还存在非对称性。当市场受到负冲击时,股价下跌,收益率的条件方差扩大,导致股价和收益率的波动性更大;反之,股价上升时,波动性减小。股价下跌导致公司的股票价值下降,如果假设公司债务不变,则公司的财务杠杆上升,持有股票的风险提高。因此负冲击对条件方差的这种影响又被称作杠杆效应。由于GARCH模型中,正的和负的冲击对条件方差的影响是对称的,因此GARCH模型不能刻画收益率条件方差波动的非对称性。

GARCH模型的发展

  为了衡量收益率波动的非对称性,Glosten、Jagannathan与Runkel(1989)提出了GJR模型,在条件方差方程(3)中加入负冲击的杠杆效应,但仍采用正态分布假设。Nelson(1991)提出了EGARCH模型。Engle等(1993)利用信息反应曲线分析比较了各种模型的杠杆效应,认为GJR模型最好地刻画了收益率的杠杆效应。Glosten、Jagannathan与Runkel(1993)分析比较了各种GARCH-M模型,指出不同的模型设定会导致条件方差对收益率产生正或负的不同影响,

GARCH模型的缺陷

  由于GARCH (p,q)模型是ARCH模型的扩展,因此GARCH(p,q)同样具有ARCH(q)模型的特点。但GARCH模型的条件方差不仅是滞后残差平方的线性函数,而且是滞后条件方差的线性函数。
  GARCH模型适合在计算量不大时,方便地描述了高阶的ARCH过程,因而具有更大的适用性。但GARCH(p,q)模型在应用于资产定价方面存在以下的不足:
①GARCH模型不能解释股票收益和收益变化波动之间出现的负相关现象。GARCH(p,q)模型假定条件方差是滞后残差平方的函数,因此,残差的符号不影响波动,即条件方差对正的价格变化和负的价格变化的反应是对称的。然而在经验研究中发现,当利空消息出现时,即预期股票收益会下降时,波动趋向于增大;当利好消息出现时,即预期股票收益会上升时,波动趋向于减小。GARCH(p,q)模型不能解释这种非对称现象。
②GARCH(p,q)模型为了保证非负,假定(2)式中所有系数均大于零。这些约束隐含着的任何滞后项增大都会增加因而排除了的随机波动行为,这使得在估计GARCH模型时可能出现震荡现象。

GARCH模型的分类以及应用[1]

  • 单变量GARCH
  早期的ARCH方程存在一个问题,就是为了保证条件方差总为正值,αi必须三是非负的。但是,当需要用很多期滞后值从而使我们能够比较准确地建立这一过数程的模型时,非负的限制条件可能得不到满足。在早期实践中,人们经常通过设置昙线性减少的系数这种方式来任意确定滞后阶数,以保证αi满足非负的限制条件。
  Bollerslev(1986)通过在模型中引入条件方差的滞后值对ARCH模型进行了推广,目的是为了避免ARCH(p)[由Engle(1982)提出]中存在的滞后期数太长的问题。因此,广义的ARCH或GARCH(p,g)定义为:条件方差是条件均值方程的残差平方项的p期滞后值和条件方差的q期滞后值的线性组合。其形式如下:
  h_t^2=r=\sum_{i=1}^p\beta_i \epsilon_{t-i}^2+\sum_{i=1}^q\alpha_i h_{t-i}^2 (a)
  这里限定α、β,和r是非负的,这是为了避免出现条件方差为负的可能。
  这就是GARCH方程。条件方差的当期值是常数项、条件均值方程的残差平方的一些前期滞后值和条件方差的前期值的函数。例如,如果条件方差能用GARCH(1,1)方程较好地刻画出来,则这是因为序列是AR(1)过程,也就是该序
  列是由残差的一期滞后值以及条件方差的一期滞后值所导致的。
  为了举例说明GARCH模型的应用,我们使用这种方法预测一个英镑持有者的美元收益率的波动性。
  条件均值模型是AR(2)模型,回归参数及括号中的f统计量的值如下:
  rtUS$ = α0 + α1rt − 1 + αrt − 2 + ε
  rtUS$ = 0.00005 + 0.01927rt − 1 − 0.0571rt − 2
     (0.285) (0.502) (-1.526)
  条件方差方程及,统计量如下:
  h_t^2=0.0+0.04643\epsilon_{t-1}^2+0.9429h_{t-1}^2
     (2.062) (3.572) (57.178)
  结果表明,t时刻的条件方差可由高度显著的条件均值方程的残差平方的一期滞后值和条件方差本身的一期滞后值来解释。
  • 指数GARCH:E-GARCH
  在GARCH(p,g)模型中,条件方差取决于残差值的大小而不取决于残差的符号。但有证据表明,例如Black(1976)指出,资产波动性和资产收益率是负相关的。即当证券价格上涨时,收益率为正,波动性下降;当资产价格下降时,收益率为负,波动性上升。实际上,一些经验表明,波动性较高的那段时期经常与证券市场的下跌紧密相关,而波动性较低的那段时期经常与证券市场的上涨紧密相关。为了描述这种情形,Nelson(1991)提出了E-GARCH。其形式如下:
  lnh_t^2=\alpha_0+\sum_{i=1}^p\alpha_i\frac {\left| \epsilon_t-1\right|}{h_t-1}+sum_{i=1}^p r_i\frac{\epsilon_t-1}{h_t-1}+\sum_{i=1}^q\beta lnh_{t-i}^2  (b)
  注意,该方程中的ε有两种形式:ε的原始观测值和绝对值形式\left |\epsilon\right |。这里绝对值只表示\epsilon的大小,也就是不考虑ε的符号。因此,E-GARCH建立了条件方差是ε的不对称函数的模型,它允许正和负的滞后值对波动性存在不同的影响。对数形式允许负的残差,但条件方差本身不能是负的。
  我们还注意到,条件标准差(ht − i)在方程右边是作为分母的。号我们将E-GARCH模型应用于在GARCH部分用到的美元这个例子。回归参数和相应的,统计量如下:
  lnh_t^2=-0.01097+0.118\frac{\left|\epsilon_t-1\right |}{h_t-1}+0.2496\frac{\epsilon_t-1}{h_t-1}+0.9885lnh_t^2 -1
  这一结果表明条件均值方程的残差的不对称形式的显著性。它再次强调了GARCH变量的显著性。
  • GARCH.M模型
  如果金融资产的风险随时间而变化,投资者要求的收益率随时间而变化的假设就是合理的。由于包括风险资产在内的所有资产至少会获取无风险收益率(获取无风险利率的资产的典型代表是短期政府零息债券,例如国库券),所以风险溢价是适当的建模变量。风险溢价是指风险资产收益率和无风险资产收益率之间的差。
  Engle等人提出了GARCH—M模型,它将条件均值作为条件方差的函数,也就是作为基础变量的滞后值的白回归函数。在原始ARCH模型基础上推广的GARCH模型形式如下:
  yt = β + δht + εt
  h_t^2=r+\alpha\sum_{j=1}^i \epsilon_{t-j}^2+\sum_{j=1}^i h_{t-j}^2  (c)
  注意:在条件均值方程中,方差被转化为条件标准差,这样标准差与建模的风险溢价具有同样的量纲。
  Engle等人将上面模型的ARCH形式应用于1个月和6个月的国库券和20年的公司债券的风险溢价,这里假设3个月的国库券的收益率为无风险收益率。在后面的例子中,条件均值回归方程引入了第三个变量,来说明3个月债券和20年债券的价格差异。
  French等人将上面的模型应用于1928年--1984年期间的美国股票风险溢价。他们使用了条件方差的GARCH(1,2)模型。
  • 检验GARCH模型
  为了检验GARCH模型的合理性,我们需要检验标准化的残差ε / h。这里h表示利用GARCH模型计算的条件标准差,ε表示条件均值方程的残差。如果将GARCH模型进一步具体化,则标准化的残差将是独立同分布的。检验分为两步:
  第一步需要计算基于原始数据的观测值的平方得到的Ljung-Box(LB)统计量。这就需要利用丁个观测值计算k个自相关系数,然后将自相关系数r平方,得r2。LB统计量计算如下:
  LB=T(T+2)\sum_{k=i}^m\left(\frac{1}{T-K}\right)r_k^2\approx X_m^2  (d)
  其中m是自相关系数的最大滞后阶数。
  第二步需要计算基于标准化的残差平方的LB统计量。因此,每个残差都要除以相应的条件标准差的观测值。接着计算出自相关系数(r\prime),并将其平方。LB统计量计算如下:
  LB=T(T+2)\sum_{k=1}^m(\frac{1}{T-k})r_k\prime^2\approx X_{m-p-q}^2  (e)
  其中,m同前面的一样,是自相关系数的最大滞后阶数;p表示条件均值方程的残差平方的滞后阶数;q表示条件方差的滞后阶数。
  如果进一步说明GARCH模型,则标准化的残差的LB统计量将会小于 X_{m-p-q}^2的临界值。
  但有一个问题也随之产生,即最优的GARCH模型是什么样的?最适当的GARCH参数是什么?我们可以通过试误法,也就是通过比较不同类型参数结构的模型的LB统计量来找到答案。
  • GARCH波动性
  前面我们注意到,波动性不是常数,而是随着时间变化的,因此定义为随时间而变化的GARCH波动性就是一种正确的统计度量指标。当然,如果应用了正确的GARCH形式,上面所说就是正确的。金融理论对于这种正确的形式很少述及,因此我们必须继续研究分析这一问题。
  但是,假设我们的波动性形式是正确的,那么为了求得年波动性,我们只需要计算条件方差的平方根,并乘以每一年数据观测值个数的平方根。由于当前波动性是前期波动性的函数,因此波动性指标是随时间变化的。
  为了利用GARCH模型预测波动性,我们使用如下形式的递归模型:
  h_{t+1}^2=\beta_0+\beta_1\epsilon_t^2+r_1 h_t^2
  h_{t+j}^2=\beta_0+(\beta_1+r_1)h_{t+j-1}^2
  注意:第一个方程中的\epsilon_t^2在进行预测时是未知的,它可以用它的条件估计h2来代替。因此利用第二个方程,我们可以预测t+l时刻的入h2(此时j=1),从而我们可以预测t+2时刻的h2(j=2),等等。每一个计算的结果是条件方差的单独一期的预测值,一直预测到j期。为了求出波动性的估计值,我们需要将单独的期间相加,并求其平方根。另外,我们还可以求出系数的标准误差,并给出关于预测值随时间而变化的置信区间。
  • 双变量GARCH
  我们可以使用双变量GARCH来求条件变量、条件协方差和变量之间的相关系数。另外,当变量之间存在协整关系的时候,我们还可以在条件均值方程中引入妄协整参数,这样我们就能利用适当的GARCH参数求出更有效的套期保值比率。
  我们首先以股票收益率st、期货收益率ft为例,说明双变量GARCH。在后面时我们将引入协整参数,并求出套期保值比率。
  我们以双变量GARCH模型的应用为例,两个条件均值模型是:
  s_t=\alpha_0+\alpha_1 s_{t-1}+\epsilon_{s_t}
  f_1=b_0+b_1 f_(t-1)+\epsilon_{f_t}  (f)
  条件方差和条件协方差方程是:
  h_{s_t}^2=\alpha_0+\alpha_1\epsilon_{s_t-1}^2+\alpha_2 h_{s_t-1}^2
  h_{f_t}^2=\beta_0+\beta_1\epsilon_{f_t-1}^2+\beta_2 h_{f_t-1}^2  (h)
  cov_{s{f_t}}=h_{s{f_t}}^2 r_0+r_1\epsilon_{s_t-1}\epsilon_{f_t-1}+r_2 h_{s{f_t-1}}^2
  这个例子中的条件方差是一个对称的2×2矩阵,其形式如下:
  \begin{bmatrix}h_{s_t}^2&h_{s{f_t}}^2\\h_{s{f_t}}^2 & h_{f_t}^2 \end{bmatrix}=\begin{bmatrix} \sqrt{h_{s_t}^2} & 0 \\ 0 & \sqrt{h_{f_t}^2} \end{bmatrix} \begin{bmatrix} 1 & \rho \\ \rho & 1 \end{bmatrix}\begin{bmatrix} \sqrt{h_{s_t}^2} & 0 \\ 0 & \sqrt{h_{f_t}^2} \end{bmatrix}   (i)
  这里,对角线上的元素表示条件方差,对角线外的元素表示条件协方差。正如上面讨论的那样,当我们将条件方差的平方根转化为年度值时,我们就得到GARCH波动性。GARCH相关系数计算如下:
  \rho_{s_{f_t}}=cor_{s_{f_t}}=\frac{h+{sf_t}}^2}{\sqrt{h_{s_t}^2}h_{f_t}^2}  (j)
  因此可以利用双变量GARCH模型求出随时间而变化的相关系数和协方差,它们可应用于投资组合的构造和求得最小方差套期保值比率。另外,我们可能希望使用由协整而发展起来的误差修正模型。例如:
  s_t=\alpha_0+\alpha_1(s_{t-1} - \lambda f_{t-1})+\epsilon_{s_t}
  f_t=b_0+b_1(s_{t-1} - \lambda f_{t-1})+\epsilon_{f_t}
  我们可以将上面两个方程的残差引人到前面所介绍的条件方差方程中。如果利用双变量GARCH去求套期保值比率,则套期保值比率计算如下:
  b_1=\frac{cov_{s_{f_t}}}{h_{f_t}^2}
  其中,covsf是s和f之间的条件协方差;h_{f_t}^2是f的方差。它类似于普通最小二乘回归中的斜率系数γ。双变量GARCH套期保值比率的优点在于它是根据随时间变化的方差和协方差得到的,而普通最小二乘斜率系数是在假设方差和协方差具有平稳性的条件下得到的。

参考文献

  1. ↑ (英)特里·J.沃特沙姆,基思·帕拉莫尔.陈工孟,陈守东译.金融数量方法.上海人民出版社,2004年05月.

Read more ...

ARMA模型

This post is from here.


ARMA模型(Auto-Regressive and Moving Average Model)

ARMA模型概述

  ARMA 模型(Auto-Regressive and Moving Average Model)是研究时间序列的重要方法,由自回归模型(简称AR模型)与滑动平均模型(简称MA模型)为基础“混合”构成。在市场研究中常用于长期追踪资料的研究,如:Panel研究中,用于消费行为模式变迁研究;在零售研究中,用于具有季节变动特征的销售量、市场规模的预测等。

ARMA模型三种基本形式[1]

  1.自回归模型(AR:Auto-regressive);
  自回归模型AR(p):如果时间序列yt满足y_t=\phi_1 y_{t-1}+\ldots+\phi y_{t-p}+\epsilon_t
  其中εt是独立同分布的随机变量序列,且满足:
  E(εt) = 0  Var(\epsilon_t)=\sigma^2_\epsilon>0
  则称时间序列为yt服从p阶的自回归模型。或者记为φ(B)yt = εt。
  自回归模型的平稳条件:
  滞后算子多项式\phi (B)=1-\phi_1(B)+\ldots+\phi_p B_p的根均在单位圆外,即φ(B) = 0的根大于1。
  2.移动平均模型(MA:Moving-Average)
  移动平均模型MA(q):如果时间序列yt满足y_t=\epsilon_t-\theta_1\epsilon_{t-1}-\ldots-\theta_q\epsilon_{t-q}
  则称时间序列为yt服从q阶移动平均模型;
  移动平均模型平稳条件:任何条件下都平稳。
  3.混合模型(ARMA:Auto-regressive Moving-Average)
  ARMA(p,q)模型:如果时间序列yt满足:y_t=\theta_1y_{t-1}+\ldots+\theta_p y_{t-p}+\epsilon_t-\theta_1\epsilon_{t-1}-\theta_q\epsilon_{t-q}
  则称时间序列为yt服从(p,q)阶自回归滑动平均混合模型。或者记为φ(B)yt = θ(B)εt
  特殊情况:q=0,模型即为AR(p),p=0,模型即为MA(q),

ARMA模型的基本原理

  将预测指标随时间推移而形成的数据序列看作是一个随机序列,这组随机变量所具有的依存关系体现着原始数据在时间上的延续性。一方面,影响因素的影响,另一方面,又有自身变动规律,假定影响因素为x1,x2,…,xk,由回归分析,
  Y=\beta_0+\beta_1 x_1+\beta_2 x_2+\ldots+\beta_k x_k+e
  其中Y是预测对象的观测值, e为误差。作为预测对象Yt受到自身变化的影响,其规律可由下式体现,
  Y_t=\beta_0+\beta_1 x_{t-1}+\beta_2 x_{t-2}+\ldots+\beta_p x_{t-p}+e_t
  误差项在不同时期具有依存关系,由下式表示,
  e_t=\alpha_0+\alpha_1 e_{t-1}+\alpha_2 e_{t-2}+\ldots+\alpha_q e_{t-q}+\mu_t
  由此,获得ARMA模型表达式:
  Y_t=\beta_0+\beta_1 x_{t_1}+\beta_2 x_{t-2}+\ldots+\beta_p x_{t-q}+\alpha_0+\alpha_1 e_{t-1}\alpha_2 e_{t-2}+\ldots+\alpha_q e_{t-q}+\mu_t

参考文献

  1. ↑ 徐国祥,马俊玲.《统计预测和决策》学习指导与习题[M].上海财经大学出版社.ISBN:7-81098-492-6.2005

Read more ...

How to remove file and commit from history

This post is from here.


假设我们的 commit tree 如下:
R-A-B-C-D-E-HEAD

接下来要移除 B 和 C 的 commit tree, 变成,
R-A-D'-E-HEAD

有两种方式可以移除 B & C
# detach head and move to D commit 
git checkout   < SHA1-for-D > 
# move HEAD to A, but leave the index and working tree as for D 
git reset   --soft   < SHA1-for-A > 
# Redo the D commit re-using the commit message, but now on top of A 
git commit   -C   < SHA1-for-D > 
# Re-apply everything from the old D onwards onto this new place  
git rebase   --onto  HEAD  < SHA1-for-D >  master 
# push it

git push   --force

另一种方法是利用 cherry-pick 方式
git rebase   --hard   < SHA1 of A > 
git cherry-pick   < SHA1 of D > 
git cherry-pick   < SHA1 of E > 

這會直接忽略 B 跟 C 的 history,詳細資料可以查詢 git help cherry-pick 或者是 git help rebase 

Read more ...

10个工具让你的 shell 脚本更强大

This post is from here.


很多人误以为shell脚本只能在命令行下使用。其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等。你可以控制最终的输出,光标位置还有各种输出效果。下面我将介绍一些工具,帮助你创建强大的,互动的,用户友好的 Unix/Linux shell脚本。我在FreeBSD和Linux下测试过这些工具,不过其他UNIX系列的操作系统应该都支持的。 

1. notify-send 命令 
这个命令可以让你通过通知进程发送一个桌面通知给用户。这可以用来向用户发送提示,或者显示一些信息而不用打断用户工作。你需要安装如下软件包: 
$ sudo apt-get install libnotify-bin
下面这个例子展示了如何从命令行向桌面发送一个简单的消息: 
notify-send "rsnapshot done :)" 
输出: 
 

下面是一个复杂一点的例子: 
....
alert=18000
live=$(lynx --dump http://money.rediff.com/ | grep 'BSE LIVE' | awk '{ print $5}' | sed 's/,//g;s/\.[0-9]*//g')
[ $notify_counter -eq 0 ] && [ $live -ge $alert ] && { notify-send -t 5000 -u low -i   "BSE Sensex touched 18k";  notify_counter=1; }
...
输出: 
 

这里的参数解释如下: 
  •  -t 5000:指定超时的时间,毫秒
  •  -u low:设置是否紧急
  •  -i gtk-dialog-info:通知图标,你可以指定图标 -i /path/to/your-icon.png

2. tput 命令 
这个命令是用来设置终端特性的: 
  •   移动光标
  •   获得终端信息
  •   设置前景和背景色
  •   设置粗体模式
  •   设置反模式等等
举例: 
#!/bin/bash
 
# clear the screen
tput clear
 
# Move cursor to screen location X,Y (top left is 0,0)
tput cup 3 15
 
# Set a foreground colour using ANSI escape
tput setaf 3
echo "XYX Corp LTD."
tput sgr0
 
tput cup 5 17
# Set reverse video mode
tput rev
echo "M A I N - M E N U"
tput sgr0
 
tput cup 7 15
echo "1. User Management"
 
tput cup 8 15
echo "2. Service Management"
 
tput cup 9 15
echo "3. Process Management"
 
tput cup 10 15
echo "4. Backup"
 
# Set bold mode
tput bold
tput cup 12 15
read -p "Enter your choice [1-4] " choice
 
tput clear
tput sgr0
tput rc
输出: 
 

3. setleds 命令 
这个命令可以让你控制键盘灯,例如打开数字键盘灯: 
setleds -D +num
关闭数字键盘灯: 
setleds -D -num
  •   -caps: 清除大写灯
  •   +caps:打开大写灯
  •   -scroll:清除滚动锁
  •   +scroll:打开滚动锁

4. zenity 命令 
这个命令可以显示GTK+的对话框,然后返回用户的输入。你可以用这个命令在脚本中显示信息,并要求用户输入信息。下面这段代码就是域名的whois查询: 
#!/bin/bash
# Get domain name
_zenity="/usr/bin/zenity"
_out="/tmp/whois.output.$$"
domain=$(${_zenity} --title  "Enter domain" \
                --entry --text "Enter the domain you would like to see whois info" )
 
if [ $? -eq 0 ]
then
  # Display a progress dialog while searching whois database
  whois $domain  | tee >(${_zenity} --width=200 --height=100 \
                      --title="whois" --progress \
                        --pulsate --text="Searching domain info..." \
                                    --auto-kill --auto-close \
                                    --percentage=10) >${_out}
 
  # Display back output
  ${_zenity} --width=800 --height=600  \
         --title "Whois info for $domain" \
         --text-info --filename="${_out}"
else
  ${_zenity} --error \
         --text="No input provided"
fi
输出: 

Fig.04: zenity in Action 

5. kdialog 命令 
这个命令和zenity很想,只不过它是为KDE/QT应用准备的。使用方法如下: 
kdialog --dontagain myscript:nofilemsg --msgbox "File: '~/.backup/config' not found."
输出 
 

你可以查看 shell scription with KDE Dialogs 来获取更多信息 

6. Dialog 
这个命令可以在shell脚本中显示文本组件。它使用了curses和ncurses类库。示例代码: 
>#!/bin/bash
dialog --title "Delete file" \
--backtitle "Linux Shell Script Tutorial Example" \
--yesno "Are you sure you want to permanently delete \"/tmp/foo.txt\"?" 7 60
 
# Get exit status
# 0 means user hit [yes] button.
# 1 means user hit [no] button.
# 255 means user hit [Esc] key.
response=$?
case $response in
   0) echo "File deleted.";;
   1) echo "File not deleted.";;
   255) echo "[ESC] key pressed.";;
esac
7. logger 命令 
这个命令可以让你写入系统日志例如 /var/log/messages: 
logger "MySQL database backup failed."
tail -f /var/log/messages
logger -t mysqld -p daemon.error "Database Server failed"
tail -f /var/log/syslog
输出: 
Apr 20 00:11:45 vivek-desktop kernel: [38600.515354] CPU0: Temperature/speed normal 
Apr 20 00:12:20 vivek-desktop mysqld: Database Server failed 

8. setterm 命令 
这个命令可以设置中断的属性。下面的例子是强制屏幕全黑15分钟,并且60分钟后把显示器设为待机状态: 
setterm -blank 15 -powersave powerdown -powerdown 60
下面这段命令可以在中断显示加下划线的文字: 
setterm -underline on;
echo "Add Your Important Message Here"
setterm -underline off
或者你可以关闭光标: 
setterm -cursor off
9. smbclient:向 MS-Windows 系统发送消息 
smbclient可以和 SMB/CIFS服务器通信。它可以向MS-Windows系统的指定用户发送消息: 
smbclient -M WinXPPro <<EOF
Message 1
Message 2
...
..
EOF
或者 
echo "${Message}" | smbclient -M salesguy2
10. Bash Socket 编程 
你可以在bash中开启一个socket链接,并且传输数据。Bash有两个特殊的设备文件: 
  •   /dev/tcp/host/port - 如果hostname,和port是合法的话,bash会尝试开启一个TCP连接。
  •   /dev/udp/host/port - 如果hostname和port是合法的话,bash会开启一个UDP连接。
  
你可以利用这个技术来测试一台主机的端口是否是开启的,而不需要使用nmap或者port扫描器: 
# find out if TCP port 25 open or not
(echo >/dev/tcp/localhost/25) &>/dev/null && echo "TCP port 25 open" || echo "TCP port 25 close"
你可以 使用循环来查找开着的端口: 
echo "Scanning TCP ports..."
for p in {1..1023}
do
  (echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open"
done
输出: 
Scanning TCP ports... 
22 open 
53 open 
80 open 
139 open 
445 open 
631 open 

下面的这个例子让你的脚本扮演HTTP客户端: 
#!/bin/bash
exec 3<> /dev/tcp/${1:-www.cyberciti.biz}/80
 
printf "GET / HTTP/1.0\r\n" >&3
printf "Accept: text/html, text/plain\r\n" >&3
printf "Accept-Language: en\r\n" >&3
printf "User-Agent: nixCraft_BashScript v.%s\r\n" "${BASH_VERSION}"   >&3
printf "\r\n" >&3
 
while read LINE <&3
do
   # do something on $LINE
   # or send $LINE to grep or awk for grabbing data
   # or simply display back data with echo command
   echo $LINE
done
关于GUITools和Cronjob 
如果你使用cronjob来调用你的脚本的话,你要通过“ export DISPLAY=[user's machine]:0 ”命令来设置本地的 display/input 服务。例如调用 /home/vivek/scripts/monitor.stock.sh脚本,它使用了 zenity 工具: 
@hourly DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh

所有的命令你都可以通过“man”来查询详细的使用方式。
Read more ...