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为独立同分布的随机变量htut互相独立,ut为标准正态分布。(1)式称为条件均值方程;(3)式称为条件方差方程,说明时间序列条件方差的变化特征。为了适应收益率序列经验分布的尖峰厚尾特征,也可假设 服从其他分布,如Bollerslev (1987)假设收益率服从广义t-分布,Nelson(1991)提出的EGARCH模型采用了GED分布等。另外,许多实证研究表明收益率分布不但存在尖峰厚尾特性,而且收益率残差对收益率的影响还存在非对称性。当市场受到负冲击时,股价下跌,收益率的条件方差扩大,导致股价和收益率的波动性更大;反之,股价上升时,波动性减小。股价下跌导致公司股票价值下降,如果假设公司债务不变,则公司的财务杠杆上升,持有股票的风险提高。因此负冲击对条件方差的这种影响又被称作杠杆效应。由于GARCH模型中,正的和负的冲击对条件方差的影响是对称的,因此GARCH模型不能刻画收益率条件方差波动的非对称性。

GARCH模型的发展

  为了衡量收益率波动的非对称性,GlostenJagannathanRunkel(1989)提出了GJR模型,在条件方差方程(3)中加入负冲击的杠杆效应,但仍采用正态分布假设。Nelson(1991)提出了EGARCH模型Engle等(1993)利用信息反应曲线分析比较了各种模型的杠杆效应,认为GJR模型最好地刻画了收益率的杠杆效应。GlostenJagannathanRunkel(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是独立同分布的随机变量序列,且满足:
  Et) = 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 = θ(Bt
  特殊情况: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 ...

Wednesday, January 30, 2013

GREP command : How to use ??


GREP:
Three version of grep command in UNIX 'grep, fgrep, egrep'.
'fgrep' stands for Fixed 'grep'.
'egrep' Extended 'grep'.

1. To find relevant word and exclusion irrelevant word.
# grep Exception logfile.txt | grep -v ERROR

2.If you want to count of a particular word in log file you can use grep -c option to count the word.
# grep -c "Error" logfile.txt

3. grep --context option allows us to print lines around matching pattern. Below example of grep command in UNIX will print 6 lines around matching line of word "successful" in logfile.txt
# grep --context=6 successful logfile.txt
# grep -C 2 'hello' *
Prints two lines of context around each matching line.

4. egrep stands for extended grep and it is more powerful than grep command in Unix and allows more regular exception
# egrep 'Error|Exception' logfile.txt

5. If you want to do case insensitive search than use -i option from grep command in UNIX. Grep -i will find occurrence of both Error, error and ERROR
# grep -i Error logfile

6. Below command will print all files which have "Error" on them. ZGREP used to perform same operation as grep does but with .gz files
# zgrep -i Error *.gz

7. Above grep command in UNIX searches only for instances of 'ERROR' that are entire words; it does not match `SysERROR'.
# grep -w ERROR logfile
# grep 'ERROR>' *
Searches only for words ending in 'ERROR', so it matches the word `SysERROR'.

8. "grep -l" which display only the file names which matches the given pattern. Below command will only display file names which have ERROR
# grep -l ERROR *.log

9. If you want to see line number of matching lines you can use option "grep -n" below command will show on which lines Error has appeared.
# grep -n ERROR log file.

10. If you want to do recursive search using grep command in Unix there are two options either use "-R" command line option or increase directory one by one as shown below.
Read more ...

grep命令基础练习题


常用的grep选项是:

-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。

文件格式:

第1列:城市位置编号。
第2列:月份。
第3列:存储代码及出库年份。
第4列:产品代号。
第5列:产品统一标价。
第6列:标识号。
第7列:合格数量。

file.txt文件内容:
48      Dec     3BC1977 LPSX   68.00   LVX2A   138
483     Sept    5AP1996 USP    65.00   LVX2C   189
47      Oct     3ZL1998 LPSX   43.00   KVM9D   512
219     dec     2CC1999 CAD    23.00   PLV2C   68
484     nov     7PL1996 CAD    49.00   PLV2C   234
483     may     5PA1998 USP    37.00   KVM9D   644
216     sept    3ZL1998 USP    86.00   KVM9E   234

练习:

1. 含有“48”字符串的行的总数
[root@www.linuxidc.com]# grep -c 48 file.txt
4

2. 显示含有“48”字符串的所有行的行号
[root@www.linuxidc.com]# grep -n 48 file.txt
1:48      Dec     3BC1977 LPSX    68.00   LVX2A   138
2:483     Sept    5AP1996 USP     65.00   LVX2C   189
5:484     nov     7PL1996 CAD     49.00   PLV2C   234
6:483     may     5PA1998 USP     37.00   KVM9D   644

3. 精确匹配只含有“48”字符串的行
[root@www.linuxidc.com]# grep "48\>" file.txt
48      Dec     3BC1977 LPSX    68.00   LVX2A   138

PS:使用grep抽取精确匹配的一种更有效方式是在抽取字符串后加\ >

4. 抽取代码为4 8 4和4 8 3的城市位置
[root@www.linuxidc.com]# grep -E "48[3|4]\>" file.txt
483     Sept    5AP1996 USP     65.00   LVX2C   189
484     nov     7PL1996 CAD     49.00   PLV2C   234
483     may     5PA1998 USP     37.00   KVM9D   644

PS:使用[ ]来指定字符串范围

5. 显示使行首不是4或8
[root@www.linuxidc.com]# grep -v "^[4|8]" file.txt

[root@www.linuxidc.com]# grep -v "^[48]" file.txt

[root@www.linuxidc.com]# grep -v "^[4,8]" file.txt

[root@www.linuxidc.com]# grep "^[^48]" file.txt       #这个是直接最简单的方法
219     dec     2CC1999 CAD     23.00   PLV2C   68
216     sept    3ZL1998 USP     86.00   KVM9E   234

PS:可以在方括号中使用^记号,表示行首不是某字符

6. 显示含有九月份的行
[root@www.linuxidc.com]# grep -i Sept file.txt

[root@www.linuxidc.com]# grep -E "[Ss]ept" file.txt
483     Sept    5AP1996 USP     65.00   LVX2C   189
216     sept    3ZL1998 USP     86.00   KVM9E   234

PS :使用- i开关可以屏蔽月份S e p t的大小写敏感

7. 显示以K开头,以D结尾的所有代码
[root@www.linuxidc.com]# grep "K...D" file.txt
47      Oct     3ZL1998 LPSX    43.00   KVM9D   512
483     may     5PA1998 USP     37.00   KVM9D   644

PS:点.代表任意一个字符,由于代码是五位字符的字符串,所以中间用三个点表示任意字符

8. 显示头两个是大写字母,中间两个任意,并以C结尾的代码
[root@www.linuxidc.com]# grep "[A-Z][A-Z]..C" file.txt
483     Sept    5AP1996 USP     65.00   LVX2C   189
219     dec     2CC1999 CAD     23.00   PLV2C   68
484     nov     7PL1996 CAD     49.00   PLV2C   234

PS:[A-Z]表示任意一个大写字母

9. 查询所有以5开始以1 9 9 6或1 9 9 8结尾的所有记录
[root@www.linuxidc.com]# grep "5..199[68]" file.txt
483     Sept    5AP1996 USP     65.00   LVX2C   189
483     may     5PA1998 USP     37.00   KVM9D   644

10. 假定要取得城市代码,第一个字符为0-9,第二个字符在0到5之间,第三个字符在0到6之间
[root@www.linuxidc.com]# grep "[0-9][0-5][0-6]" file.txt        #一般情况下很多人会想到使用这个错误方式,没考虑到最后一列也是三位数字
47      Oct     3ZL1998 LPSX    43.00   KVM9D   512
484     nov     7PL1996 CAD     49.00   PLV2C   234
483     may     5PA1998 USP     37.00   KVM9D   644
216     sept    3ZL1998 USP     86.00   KVM9E   234

[root@www.linuxidc.com]# grep "^[0-9][0-5][0-6]" file.txt
216     sept    3ZL1998 USP     86.00   KVM9E   234

11. 抽取包含数字4至少重复出现两次的所有行
[root@www.linuxidc.com]# grep "4\{2,\}" file.txt
483     may     5PA1998 USP     37.00   KVM9D   644

12. 匹配8重复出现2到6次,并以3结尾
[root@www.linuxidc.com]# cat num.txt
83.
888883
8884
88883

[root@www.linuxidc.com]# grep "8\{2,6\}3" num.txt
888883
88883

13. 匹配特殊字符
查询有特殊含义的字符,诸如$ . ' " * [] ^ |\ + ? ,必须在特定字符前加\进行转义
如要查询文件名c o n f t r o l l . co n f(这是一个配置文件)
[root@www.linuxidc.com]# grep "conftroll\.conf" file.txt

14. 查询格式化文件名
格式:最多六个小写字符,后跟句点,接着是两个大写字符
[root@www.linuxidc.com]# grep "[a-z]\{1,6\}\.[A-Z]\{2\}" file.txt

15. 查询IP地址
要查看n n n . n n n网络地址
[root@www.linuxidc.com]# grep "[0-9]\{3\}\.[0-9]\{3\}\." 的IP地址范围为1.0.0.1-127.255.255.254;

16. 类名
[ [ : u p p e r : ] ][ A - Z ] [ [ : a l n u m : ] ] [ 0 - 9 a - zA-Z]
[ [ : l o w e r : ] ] [ a - z ] [ [ : s p a c e : ] ] 空格或t a b键
[ [ : d i g i t : ] ] [ 0 - 9 ] [ [ : a l p h a : ] ] [ a - z A - Z ]
围为:192.0.1.1-223.255.255.254

取以5开头,后跟至少两个大写字母
[root@www.linuxidc.com]# grep "5[[:upper:]]\{2,\}" file.txt
483     Sept    5AP1996 USP     65.00   LVX2C   189
483     may     5PA1998 USP     37.00   KVM9D   644

取以P或D结尾的所有产品代码
[root@www.linuxidc.com]# grep "[[:upper:]]\{2\}[P,D]" file.txt
483     Sept    5AP1996 USP     65.00   LVX2C   189
219     dec     2CC1999 CAD     23.00   PLV2C   68
484     nov     7PL1996 CAD     49.00   PLV2C   234
483     may     5PA1998 USP     37.00   KVM9D   644
216     sept    3ZL1998 USP     86.00   KVM9E   234
Read more ...

Wednesday, December 12, 2012

Mac OS X 下用 iTunes 截取音乐任意部分的方法

右击进入歌曲 显示简介->选项,里面有“起始时间”和“停止时间”两个选择,填入你刚才记录的时间段。

选中歌曲,右击选择“转换所选内容为ACC”。就可以完成音乐截取了。
Read more ...

Tuesday, December 11, 2012

Mac OS X 下直接从视频中提取音频文件

  • 找到并右键点击需要进行操作的视频文件
  • 在弹出的右键菜单中选择“编码所选视频文件”(Encode Selected Video Files)
  • 在弹出的“编码媒体”(Encode Media)对话框的“Setting”下拉菜单中选择“Audio Only”
  • 选择好目标文件的路径后点击“Continue”即可
Read more ...

Problem with printing PDFs from Safari

Problem:
When I view a PDF in Safari it looks good. When I go to print it either the preview is totally blank or one page that I was viewing at the time previews and the print dialog box shows the additional 8 pages but they are all blank. I'm baffled. If I use Chrome and go from its interface to preview it works perfectly. Thank you for any guidance.

Solution:
Go to /Library/Internet Plug-Ins
Move the Adobe PDF plugin to the Trash.
Quit then relaunch Safari.
Read more ...

Thursday, December 6, 2012

iTunes 播放 ape flac

APE是Monkey's Audio,一种无损压缩格式。这种格式的压缩比远低于其他音频格式,但能够做到真正无损,同时其开放源码的特性,也获得了不少音乐发烧友的青睐。在现有不少无损压缩方案中,APE是一种有着突出性能的格式,令人满意的压缩比以及飞快的压缩速度,在国内应用比较广泛,成为了不少朋友私下交流发烧音乐的选择之一。

由于其无损压缩的特性,造就了APE音乐CD级的音质输出,同时接近原文件一半大小的压缩比,也减少了存储空间的占用,而通过MP3这种目前主流的播放器来表现,则更为人性化。
      具体表现在:
  1.高压缩比:APE的压缩比大约在55.50%,接近源文件的一半大小。

  2.编码速度快:编码速度考验用户的耐心,同FLAC(国内目前只有台电T19支持FLAC无损压缩音频格式)一样,APE有着超快的编码速度,这在目前众多的音频编码标准中具备了同FLAC相同的速度优势。

  3.平台的广泛支持:音频压缩不但需要硬件的支持,也需要的软件的支持,因此能够被更广泛的平台支持,也就意味着被更多用户使用。FLAC与APE在这方面做的都非常出色,能够兼容所有系统平台,现在无论您是Windows用户还是众多版本的Linux用户,哪怕您是Mac OS的忠实FANS,都无需担心无法使用FLAC或APE。

  4.开源特性:同FLAC一样,APE具备开源特性,这意味着任何组织或个人都可以免费使用这种压缩技术,任何组织或个人都可以修改和发布基于这两种技术的新产品,这给众多MP3厂商降低成本提供了有力保障,且消费者也能够以相对低廉的价格购买到只有世界级MP3(例如:iPod支持ALAC)才支持的无损压缩音频、CD级的音质表现!

  5.资源的广泛性:庞大的网路资源,决定了APE的普及度,用户只需通过网路搜索引擎,即可找到数量众多的APE下载资源,无论您使用BT还是讯雷皆可轻松获取APE资源。

       和APE一起的CUE文件有什么用?
       通常我们下载的APE文件有两种:一种是下载一张专辑中有好几个APE文件一个文件一首歌,就和我们平时听的MP3文件一样。还有一种是一张专辑只有单个APE文件,并且附有一个CUE文件。其实这个CUE文件很小,但是非常有用,它记录着这个大的APE文件中的音乐的段落,音乐的名称以及作者专辑等内容。对于第一种APE,您就可以像播放MP3一样,将所有的APE文件全加到千千静听中,进行播放就行了。对于第二种APE,如果只把APE文件加到播放器中,你就会发现一整张专辑成了一首歌。所以对于第二种APE,你要将APE带的CUE文件利用Foobar、千千静听打,这些播放软件就会自动依照CUE中的内容,将指定的APE文件分段后在播放列表中出现。如果你想把这个APE文件还原成CD的话,也要利用到这个CUE文件。

然后打开偏好设置,进行如下设置。
点 import settings


然后去网上寻找一款可以加载虚拟CD的软件比如DAEMTOOLS,先点击挂载,选择想要挂在的文件,选择以CUE后缀结尾的文件。接着会自动跳出虚拟CD,ITUNES 会自动跳出,询问你是否需要导入CD。导入后还可以自己添加专辑图片。选中全部音乐然后get info,在artwork中添加相应图片即可。

Read more ...