2009年5月4日星期一

Bash 使用技巧

Bash 是我们经常与之打交道的 Shell
程序,本文针对其使用技巧进行了搜罗。相信在你看过这些内容之后,定会在 Bash
的世界里游刃有余。
从历史中执行命令
有时候,我们需要在 Bash
中重复执行先前的命令。你当然可以使用上方向键来查看之前曾经运行过的命令。但这里有一种更好的方式:你可以按
Ctrl + r 组合键进入历史搜索模式,一旦找到需要重复执行的命令,按回车键即可。
重复命令参数
先来看一个例子:
mkdir /path/to/exampledir
cd !$
本例中,第一行命令将创建一个目录,而第二行的命令则转到刚创建的目录。这里,"!$"的作用就是重复前一个命令的参数。事实上,不仅是命令的参数可以重复,命令的选项同样可以。另外,Esc
+ . 快捷键可以切换这些命令参数或选项。
用于编辑的快捷键
Ctrl + a:将光标定位到命令的开头
Ctrl + e:与上一个快捷键相反,将光标定位到命令的结尾
Ctrl + u:剪切光标之前的内容
Ctrl + k:与上一个快捷键相反,剪切光标之后的内容
Ctrl + y:粘贴以上两个快捷键所剪切的内容
Ctrl + t:交换光标之前两个字符的顺序
Ctrl + w:删除光标左边的参数(选项)或内容
Ctrl + l:清屏
处理作业
首先,使用 Ctrl + z
快捷键可以让正在执行的命令挂起。如果要让该进程在后台执行,那么可以执行 bg
命令。而 fg 命令则可以让该进程重新回到前台来。使用 jobs
命令能够查看到哪些进程在后台执行。
你也可以在 fg 或 bg 命令中使用作业 id,如:
fg %3
又如:
bg %7
使用置换
命令置换
先看例子:
du -h -a -c $(find . -name *.conf 2>&-)
注意 $() 中的部分,这将告诉 Bash 运行 find 命令,然后把返回的结果作为 du
的参数。
进程置换
仍然先看例子:
diff <(ps axo comm) <(ssh user@host ps axo comm)
该命令将比较本地系统和远程系统中正在运行的进程。请注意 <() 中的部分。
xargs
看例:
find . -name *.conf -print0 | xargs -0 grep -l -Z mem_limit | xargs -0 -i
cp {} {}.bak
该命令将备份当前目录中的所有 .conf 文件。
使用管道
下面是一个简单的使用管道的例子:
ps aux | grep init
这里,"|"操作符将 ps aux 的输出重定向给 grep init。
下面还有两个稍微复杂点的例子:
ps aux | tee filename | grep init
及:
ps aux | tee -a filename | grep init
将标准输出保存为文件
你可以将命令的标准输出内容保存到一个文件中,举例如下:
ps aux > filename
注意其中的">"符号。
你也可以将这些输出内容追加到一个已存在的文件中:
ps aux >> filename
你还可以分割一个较长的行:
command1 | command2 | ... | commandN > tempfile1
cat tempfile1 | command1 | command2 | ... | commandN > tempfile2
标准流:重定向与组合
重定向流的例子:
ps aux 2>&1 | grep init
这里的数字代表:
0:stdin
1:stdout
2:sterr
上面的命令中,"grep init"不仅搜索"ps aux"的标准输出,而且搜索 sterr 输出。

你从未用过的 10 条 Linux 命令?

1. pgrep:比如,你可以使用 pgrep -u root 来代替 ps -ef | egrep '^root ' |
awk '{print $2}',以便抓取属于 root 的 PID。
2.
pstree:我觉得这个命令很酷,它可以直接列出进程树,或者换句话说是按照树状结构来列出进程。
3.
bc:这个命令在我的系统中没有找到,可能需要安装。这是用来执行计算的一个命令,如使用它来开平方根。
4.
split:这是一个很有用的命令,它可以将一个大文件分割成几个小的部分。比如:split
-b 2m largefile LF_ 会将 largefile 分割成带有 LF 文件名前缀且大小为 2 MB
的小文件。
5.
nl:能够显示行号的命令。在阅读脚本或代码时,这个命令应该非常有用。如:nl
wireless.h | head。
6.
mkfifo:作者说这是他最喜欢的命令。该命令使得其他命令能够通过一个命名的管道进行通信。嗯,听起来有点空洞。举例说明,先创建一个管道并写入内容:
mkfifo ive-been-piped
ls -al split/* | head > ive-been-piped
然后就可以读取了:head ive-been-piped。
7. ldd:其作用是输出指定文件依赖的动态链接库。比如,通过 ldd
/usr/java/jre1.5.0_11/bin/java 可以了解java 依赖(动态链接)了哪些库。
8. col:可以将 man 手册页保存为无格式的文本文件。如:
PAGER=cat
man less | col -b > less.txt
9. xmlwf:能够检测 XML 文档是否良好。比如:
curl -s 'http://bashcurescancer.com' > bcc.html
xmlwf bcc.html
perl -i -pe 's@<br/>@<br>@g' bcc.html
xmlwf bcc.html
bcc.html:104:2: mismatched tag
10. lsof:列出打开的文件。如:通过 lsof | grep TCP 可以找到打开的端口。

UNIX 高手的 10 个习惯

当您经常使用某个系统时,往往会陷入某种固定的使用模式。有时,您没有养成以尽可能最好的方式做事的习惯。有时,您的不良习惯甚至会导致出现混乱。
纠正此类缺点的最佳方法之一,就是有意识地采用抵制这些坏习惯的好习惯。本文提出了
10 个值得采用的 UNIX
命令行习惯——帮助您克服许多常见使用怪癖,并在该过程中提高命令行工作效率的好习惯。下面列出了这
10 个好习惯,之后对进行了更详细的描述。
采用 10 个好习惯
要采用的十个好习惯为:
在单个命令中创建目录树。
更改路径;不要移动存档。
将命令与控制操作符组合使用。
谨慎引用变量。
使用转义序列来管理较长的输入。
在列表中对命令分组。
在 find 之外使用 xargs。
了解何时 grep 应该执行计数——何时应该绕过。
匹配输出中的某些字段,而不只是对行进行匹配。
停止对 cat 使用管道。
在单个命令中创建目录树
清单 1 演示了最常见的 UNIX 坏习惯之一:一次定义一个目录树。
清单 1. 坏习惯 1 的示例:单独定义每个目录树
~ $ mkdir tmp
~ $ cd tmp
~/tmp $ mkdir a
~/tmp $ cd a
~/tmp/a $ mkdir b
~/tmp/a $ cd b
~/tmp/a/b/ $ mkdir c
~/tmp/a/b/ $ cd c
~/tmp/a/b/c $

使用 mkdir 的 -p
选项并在单个命令中创建所有父目录及其子目录要容易得多。但是即使对于知道此选项的管理员,他们在命令行上创建子目录时也仍然束缚于逐步创建每级子目录。花时间有意识地养成这个好习惯是值得的:
清单 2. 好习惯 1 的示例:使用一个命令来定义目录树~ $ mkdir -p tmp/a/b/c

您可以使用此选项来创建整个复杂的目录树(在脚本中使用是非常理想的),而不只是创建简单的层次结构。例如:
清单 3. 好习惯 1 的另一个示例:使用一个命令来定义复杂的目录树~ $ mkdir -p
project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

过去,单独定义目录的唯一借口是您的 mkdir
实现不支持此选项,但是在大多数系统上不再是这样了。IBM、AIX®、mkdir、GNU
mkdir 和其他遵守单一 UNIX 规范 (Single UNIX Specification)
的系统现在都具有此选项。
对于仍然缺乏该功能的少数系统,您可以使用 mkdirhier
脚本(请参见参考资料),此脚本是执行相同功能的 mkdir 的包装:~ $ mkdirhier
project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

更改路径;不要移动存档
另一个不良的使用模式是将 .tar
存档文件移动到某个目录,因为该目录恰好是您希望在其中提取 .tar
文件的目录。其实您根本不需要这样做。您可以随心所欲地将任何 .tar
存档文件解压缩到任何目录——这就是 -C
选项的用途。在解压缩某个存档文件时,使用 -C
选项来指定要在其中解压缩该文件的目录:
清单 4. 好习惯 2 的示例:使用选项 -C 来解压缩 .tar 存档文件~ $ tar xvf -C
tmp/a/b/c newarc.tar.gz

相对于将存档文件移动到您希望在其中解压缩它的位置,切换到该目录,然后才解压缩它,养成使用
-C 的习惯则更加可取——当存档文件位于其他某个位置时尤其如此。

将命令与控制操作符组合使用
您可能已经知道,在大多数 Shell
中,您可以在单个命令行上通过在命令之间放置一个分号 (;)
来组合命令。该分号是 Shell 控制操作符,
虽然它对于在单个命令行上将离散的命令串联起来很有用,但它并不适用于所有情况。例如,假设您使用分号来组合两个命令,其中第二个命令的正确执行完全依赖
于第一个命令的成功完成。如果第一个命令未按您预期的那样退出,第二个命令仍然会运行——结果会导致失败。相反,应该使用更适当的控制操作符(本文将描述
其中的部分操作符)。只要您的 Shell 支持它们,就值得养成使用它们的习惯。
仅当另一个命令返回零退出状态时才运行某个命令
使用 && 控制操作符来组合两个命令,以便仅当
第一个命令返回零退出状态时才运行第二个命令。换句话说,如果第一个命令运行成功,则第二个命令将运行。如果第一个命令失败,则第二个命令根本就不运行。例如:
清单 5. 好习惯 3 的示例:将命令与控制操作符组合使用~ $ cd tmp/a/b/c && tar
xvf ~/archive.tar

在此例中,存档的内容将提取到 ~/tmp/a/b/c
目录中,除非该目录不存在。如果该目录不存在,则 tar
命令不会运行,因此不会提取任何内容。
仅当另一个命令返回非零退出状态时才运行某个命令
类似地,||
控制操作符分隔两个命令,并且仅当第一个命令返回非零退出状态时才运行第二个命令。换句话说,如果第一个命令成功,则第二个命令不会运行。如果第一个命令失败,则第二个命令才会
运行。在测试某个给定目录是否存在时,通常使用此操作符,如果该目录不存在,则创建它:
清单 6. 好习惯 3 的另一个示例:将命令与控制操作符组合使用~ $ cd tmp/a/b/c
|| mkdir -p tmp/a/b/c

您还可以组合使用本部分中描述的控制操作符。每个操作符都影响最后的命令运行:
清单 7. 好习惯 3 的组合示例:将命令与控制操作符组合使用~ $ cd tmp/a/b/c ||
mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar

谨慎引用变量
始终要谨慎使用 Shell
扩展和变量名称。一般最好将变量调用包括在双引号中,除非您有不这样做的足够理由。类似地,如果您直接在字母数字文本后面使用变量名称,则还要确保将该变
量名称包括在方括号 ([]) 中,以使其与周围的文本区分开来。否则,Shell
将把尾随文本解释为变量名称的一部分——并且很可能返回一个空值。清单 8
提供了变量的各种引用和非引用及其影响的示例。
清单 8. 好习惯 4 的示例:引用(和非引用)变量~ $ ls tmp/
a b
~ $ VAR="tmp/*"
~ $ echo $VAR
tmp/a tmp/b
~ $ echo "$VAR"
tmp/*
~ $ echo $VARa
~ $ echo "$VARa"
~ $ echo "${VAR}a"
tmp/*a
~ $ echo ${VAR}a
tmp/a
~ $

使用转义序列来管理较长的输入
您或许看到过使用反斜杠 (\)
来将较长的行延续到下一行的代码示例,并且您知道大多数 Shell
都将您通过反斜杠联接的后续行上键入的内容视为单个长行。然而,您可能没有在命令行中像通常那样利用此功能。如果您的终端无法正确处理多行回绕,或者您的
命令行比通常小(例如在提示符下有长路经的时候),反斜杠就特别有用。反斜杠对于了解键入的长输入行的含义也非常有用,如以下示例所示:
清单 9. 好习惯 5 的示例:将反斜杠用于长输入~ $ cd tmp/a/b/c || \
> mkdir -p tmp/a/b/c && \
> tar xvf -C tmp/a/b/c ~/archive.tar

或者,也可以使用以下配置:
清单 10. 好习惯 5 的替代示例:将反斜杠用于长输入~ $ cd tmp/a/b/c \
> || \
> mkdir -p tmp/a/b/c \
> && \
> tar xvf -C tmp/a/b/c ~/archive.tar

然而,当您将输入行划分到多行上时,Shell
始终将其视为单个连续的行,因为它总是删除所有反斜杠和额外的空格。
注意:在大多数 Shell
中,当您按向上箭头键时,整个多行输入将重绘到单个长输入行上。

在列表中对命令分组
大多数 Shell
都具有在列表中对命令分组的方法,以便您能将它们的合计输出向下传递到某个管道,或者将其任何部分或全部流重定向到相同的地方。您一般可以通过在某个
Subshell 中运行一个命令列表或通过在当前 Shell
中运行一个命令列表来实现此目的。
在 Subshell 中运行命令列表
使用括号将命令列表包括在单个组中。这样做将在一个新的 Subshell
中运行命令,并允许您重定向或收集整组命令的输出,如以下示例所示:
清单 11. 好习惯 6 的示例:在 Subshell 中运行命令列表~ $ ( cd tmp/a/b/c/ ||
mkdir -p tmp/a/b/c && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"

在此示例中,该存档的内容将提取到 tmp/a/b/c/
目录中,同时将分组命令的输出(包括所提取文件的列表)通过邮件发送到地址
admin。
当您在命令列表中重新定义环境变量,并且您不希望将那些定义应用于当前 Shell
时,使用 Subshell 更可取。
在当前 Shell 中运行命令列表
将命令列表用大括号 ({}) 括起来,以在当前 Shell
中运行。确保在括号与实际命令之间包括空格,否则 Shell
可能无法正确解释括号。此外,还要确保列表中的最后一个命令以分号结尾,如以下示例所示:
清单 12. 好习惯 6 的另一个示例:在当前 Shell 中运行命令列表~ $ { cp
${VAR}a . && chown -R guest.guest a && \
> tar cvf newarchive.tar a; } | mailx admin -S "New archive"

在 find 之外使用 xargs
使用 xargs 工具作为筛选器,以充分利用从 find 命令挑选的输出。find
运行通常提供与某些条件匹配的文件列表。此列表被传递到 xargs
上,后者然后使用该文件列表作为参数来运行其他某些有用的命令,如以下示例所示:
清单 13. xargs 工具的经典用法示例~ $ find some-file-criteria
some-file-path | \
> xargs some-great-command-that-needs-filename-arguments

然而,不要将 xargs 仅看作是 find
的辅助工具;它是一个未得到充分利用的工具之一,当您养成使用它的习惯时,将会希望进行所有试验,包括以下用法。
传递空格分隔的列表
在最简单的调用形式中,xargs
就像一个筛选器,它接受一个列表(每个成员分别在单独的行上)作为输入。该工具将那些成员放置在单个空格分隔的行上:
清单 14. xargs 工具产生的输出示例~ $ xargs
a
b
c
Control-D
a b c
~ $

您可以发送通过 xargs
来输出文件名的任何工具的输出,以便为其他某些接受文件名作为参数的工具获得参数列表,如以下示例所示:
清单 15. xargs 工具的使用示例~/tmp $ ls -1 | xargs
December_Report.pdf README a archive.tar mkdirhier.sh
~/tmp $ ls -1 | xargs file
December_Report.pdf: PDF document, version 1.3
README: ASCII text
a: directory
archive.tar: POSIX tar archive
mkdirhier.sh: Bourne shell script text executable
~/tmp $

xargs
命令不只用于传递文件名。您还可以在需要将文本筛选到单个行中的任何时候使用它:
清单 16. 好习惯 7 的示例:使用 xargs 工具来将文本筛选到单个行中~/tmp $ ls
-l | xargs
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \
root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \
16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \
joe joe 3239 Sep 30 12:40 mkdirhier.sh
~/tmp $

谨慎使用 xargs
从技术上讲,使用 xargs 很少遇到麻烦。缺省情况下,文件结束字符串是下划线
(_);如果将该字符作为单个输入参数来发送,则它之后的所有内容将被忽略。为了防止这种情况发生,可以使用
-e 标志,它在不带参数的情况下完全禁用结束字符串。

了解何时 grep 应该执行计数——何时应该绕过
避免通过管道将 grep 发送到 wc -l 来对输出行数计数。grep 的 -c
选项提供了对与特定模式匹配的行的计数,并且一般要比通过管道发送到 wc
更快,如以下示例所示:
清单 17. 好习惯 8 的示例:使用和不使用 grep 的行计数~ $ time grep and
tmp/a/longfile.txt | wc -l
2811
real 0m0.097s
user 0m0.006s
sys 0m0.032s
~ $ time grep -c and tmp/a/longfile.txt
2811
real 0m0.013s
user 0m0.006s
sys 0m0.005s
~ $

除了速度因素外,-c 选项还是执行计数的好方法。对于多个文件,带 -c 选项的
grep 返回每个文件的单独计数,每行一个计数,而针对 wc
的管道则提供所有文件的组合总计数。
然而,不管是否考虑速度,此示例都表明了另一个要避免地常见错误。这些计数方法仅提供包含匹配模式的行数——如果那就是您要查找的结果,这没什么问题。但是在行中具有某个特定模式的多个实例的情况下,这些方法无法为您提供实际匹配实例数量
的真实计数。归根结底,若要对实例计数,您还是要使用 wc 来计数。首先,使用
-o 选项(如果您的版本支持它的话)来运行 grep 命令。此选项仅
输出匹配的模式,每行一个模式,而不输出行本身。但是您不能将它与 -c
选项结合使用,因此要使用 wc -l 来对行计数,如以下示例所示:
清单 18. 好习惯 8 的示例:使用 grep 对模式实例计数~ $ grep -o and
tmp/a/longfile.txt | wc -l
3402
~ $

在此例中,调用 wc 要比第二次调用 grep 并插入一个虚拟模式(例如 grep
-c)来对行进行匹配和计数稍快一点。

匹配输出中的某些字段,而不只是对行进行匹配
当您只希望匹配输出行中特定字段 中的模式时,诸如 awk 等工具要优于 grep。
下面经过简化的示例演示了如何仅列出 12 月修改过的文件。
清单 19. 坏习惯 9 的示例:使用 grep 来查找特定字段中的模式~/tmp $ ls -l
/tmp/a/b/c | grep Dec
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf
-rw-r--r-- 1 root root 238 Dec 03 08:19 README
-rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar
~/tmp $

在此示例中,grep 对行进行筛选,并输出其修改日期和名称中带 Dec
的所有文件。因此,诸如 December_Report.pdf
等文件是匹配的,即使它自从一月份以来还未修改过。这可能不是您希望的结果。为了匹配特定字段中的模式,最好使用
awk,其中的一个关系运算符对确切的字段进行匹配,如以下示例所示:
清单 20. 好习惯 9 的示例:使用 awk 来查找特定字段中的模式~/tmp $ ls -l |
awk '$6 == "Dec"'
-rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar
-rw-r--r-- 1 root root 238 Dec 03 08:19 README
~/tmp $

有关如何使用 awk 的更多详细信息,请参见参考资料。

停止对 cat 使用管道
grep 的一个常见的基本用法错误是通过管道将 cat 的输出发送到 grep
以搜索单个文件的内容。这绝对是不必要的,纯粹是浪费时间,因为诸如 grep
这样的工具接受文件名作为参数。您根本不需要在这种情况下使用
cat,如以下示例所示:
清单 21. 好习惯和坏习惯 10 的示例:使用带和不带 cat 的 grep
~ $ time cat tmp/a/longfile.txt | grep and
2811
real 0m0.015s
user 0m0.003s
sys 0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811
real 0m0.010s
user 0m0.006s
sys 0m0.004s
~ $

此错误存在于许多工具中。由于大多数工具都接受使用连字符 (-)
的标准输入作为一个参数,因此即使使用 cat 来分散 stdin
中的多个文件,参数也通常是无效的。仅当您使用带多个筛选选项之一的 cat
时,才真正有必要在管道前首先执行连接。

结束语:养成好习惯
最好检查一下您的命令行习惯中的任何不良的使用模式。不良的使用模式会降低您的速度,并且通常会导致意外错误。本文介绍了
10
个新习惯,它们可以帮助您摆脱许多最常见的使用错误。养成这些好习惯是加强您的
UNIX 命令行技能的积极步骤。

Linux 系统下查找进程并终止命令详解

使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程。这在linux系统下是极其容易的事情,你只需要kill
xxx即可,这里xxx代表与此软件运行相关的进程PID号。

首先,我们需要使用linux下另外一个命令ps查找与进程相关的PID号:ps aux |
grep program_filter_word

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。

2)ps -A 显示所有程序。

3)ps c
列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

4)ps -e 此参数的效果和指定"A"参数相同。

5)ps e 列出程序时,显示每个程序所使用的环境变量。

6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

7)ps -H 显示树状结构,表示程序间的相互关系。

8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

9)ps s 采用程序信号的格式显示程序状况。

10)ps S 列出程序时,包括已中断的子程序资料。

11)ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。

12)ps u 以用户为主的格式来显示程序状况。

13)ps x 显示所有程序,不以终端机来区分。

最常用的方法是ps
aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。

其次,使用kill命令结束进程:kill xxx

1)作用
kill命令用来中止一个进程。

2)格式
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]

3)参数
-s:指定发送的信号。
-p:模拟发送信号。
-l:指定信号的名称列表。
pid:要中止进程的ID号。
Signal:表示信号。

4)说明
进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。批处理进程和终端没有联系,是一个进程序列。监控进程(也称系统守护进程)是Linux系统启动时启动的进程,并在后台运行。例如,httpd
是著名的Apache服务器的监控进程。

kill命令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。

5)应用实例
(1)强行中止(经常使用杀掉)一个进程标识号为324的进程:
#kill -9 324

(2)解除Linux系统的死锁

Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序即可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如,如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用ps命令查找该程序的
PID,然后使用kill命令停止这个程序:
#kill -SIGKILL XXX
其中,XXX是包含有Mozolla浏览器的程序的进程标识号。

(3)使用命令回收内存
我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些"越轨"的程序或很长时间没有相应的程序。例如,使用top命令发现一个无用
(Zombie) 的进程,此时可以使用下面命令:
#kill -9 XXX
其中,XXX是无用的进程标识号。

然后使用下面命令:
#free
此时会发现可用内存容量增加了。

(4)killall命令
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:
# killall -HUP inetd

2009年5月3日星期日

Joke

      女友胸部小,每次摸完后我都不断摇头哀叹。
  谁知她很得意得一挺胸脯:"都说'女人胸大无脑',你看我多聪明呀!"
  "是呀,你简直聪明绝顶啊~"
  郁闷,再摸!
  她见我郁闷,自己瞄了瞄,而后很沮丧问我"难道我的真的很小吗?"
  看她楚楚可怜的样子,我很仗义地指着她胸部说:"别这么说,一分钱也是钱啊!"
  当我再摸时,她幽怨道:"小你还摸~"
  我用低沉且具有磁性的男低音道:"精致,典雅,切工钻石……"
  她生气了:"真搞不懂为什么你嫌小却总要摸它?有什么好摸的!!"
  我用暧昧的声音说:"我喜欢这样的感觉,就好像……"
  她破涕为笑,娇滴滴的温柔声音在我耳畔萦绕:"好像什么感觉呀?"

  她笑了,我却哭了,"那是一种若有若无的感觉……"

2. 装晕
    有一次下课打铃大家都要回家,下楼梯时我左脚踩到自己右脚,“啪”地以大字型的姿势摔在了路中央..我当时就想:不对,糗大了,我装晕。 
 结果我旁边的同学看我一动不动,赶紧扶起我,然后左右开打狂扇我耳光...

3. 放那么大声...
       一次带GF回寝室 然后寝室没人 然后.... 
  结果完事我刚下床一个人敲门 我还庆幸他没有来早点 
  开门结果是隔壁一WS男 说: 你的H片传我 
  我说: 啊?! 什么? 
  他说 你刚没在看么 还放那么大声...

4. 在吃面前..一切阻挠都是那么苍白无力

5. 单车
      单车底子好,但盖了厚厚的灰尘,显旧。一直认为这样让车更加保险,于是便从来不擦拭。结果也果然安全地过了几年。
      临毕业,要卖车。心想:把车擦新一番,也好卖个好价钱。于是便抹布加冲水伺候一番,果然焕然一新。心里大喜:肯定能卖个好价钱!
      然后把车放一边晾干。几个小时后回来一看,丢了!  


今天自己干的蠢事

论坛上看见一个妹妹的征友贴,我就随便写了一封信,碰碰运气,然后附上了照片,很快不到一个小时,那个妹妹就回信了,并惊讶的说,照片真的是你吗?并且打了一堆感叹号,我偷偷暗喜,难道妹妹以为我太帅了?于是乎,回信非常肯定是说照片是本人。

刚发完信,我似乎感觉到了什么,到发件箱一看原信,我FT,竟然把我家小狗的照片发了过去。靠!!!!!!!!

Philip A. Fisher(菲利普・费雪)

菲利普・费雪(Philip A. Fisher,1907-2004):现代投资理论的开路先锋之一,成长股价值投资策略之父,教父级的投资大师,华尔街极受尊重和推崇的投资专家之一.

1、菲利普・费雪生平简介
  菲利普・费雪:美国人,被视为现代投资理论的开路先锋之一,成长股价值投资策略之父,教父级的投资大师,华尔街极受尊重和推崇的投资专家之一。
  费雪1907年生于三藩市,父母均是各自家中众多儿女排行最小的,父亲是个医生。他与祖母特别亲近。小时候费雪就知道股票市场的存在以及股价变动带来的机会。事缘于费雪上小学时,有一天下课后去看望祖母,恰好一位伯父正与祖母谈论未来工商业的景气,以及股票可能受到的影响。费雪说:"一个全新的世界展开在我眼前。"两人虽然只讨论了10分钟,但是费雪却听得津津有味。不久,费雪就开始买卖股票。1920年代是美股狂热的年代,费雪亦赚到一点钱。然而他父亲对于其买卖股票的事情很不高兴,认为这只是赌博。
  1928年费雪毕业于斯坦福大学商学院。1928年5月三藩市国安盎格国民银行到商学研究所招聘一名主修投资的研究生,费雪争取到这个机会,受聘于该银行当一名证券统计员(即是后来的证券分析师)。开始了他的投资生涯。
  1929年美股仍然涨个不停,但费雪评估美国基本产业的前景时,见到许多产业出现供需问题,前景相当不稳。1929年8月,他向银行高级主管提交一份 "25年来最严重的大空头市场将展开。"这可以说是一个小伙子一生中最令人赞叹的股市预测,可惜费雪"看空做多"。他说:"我免不了被股市的魁力所惑。于是我到处寻找一些还算便宜的股票,以及值得投资的对象,因为它们还没涨到位。"他投入几千美元到3只股票中。这3只股票均是低P/E股,一家是火车头公司,一家是广告看板公司,另一家是出租汽车公司。美股终于崩溃!尽管费雪预测无线电股将暴跌,但是他持有的3只股票亦好不了多少,到1932年,他损失惨重。
  1930年1月,费雪当上部门主管。不久,一家经纪公司高薪挖角费雪。这家经纪公司给予他相当大的自由,他可以自由选取股票进行分析,然后将报告分发给公司的营业员参考,以帮助他们推广业务。费雪过档,干了8个月公司就倒闭了,股市崩溃给金融行业带来的冲击是巨大的。费雪又干了文书作业员一段时间――其唯一能找到的工作――他觉得"很没意思",之后再也按捺不住,要开创自己的事业了。费雪所向往的事业是管理客户的投资事务,向客户收取费用――投资顾问。
1931年3月1日,费雪终于开始了投资顾问的生涯,他创立费雪投资管理咨询公司。最初他的办公室很小,没有窗户,只能容下一张桌子和两张椅子。
  到1935年,费雪已经拥有一批非常忠诚的客户,其事业亦获利可观。其后费雪的事业进展顺利。
  珍珠港事件之后太平洋战争爆发,美国被迫卷入第二次世界大战。费雪于1942-1946年服役3年半。他在陆军航空兵团当地勤官,处理各种商业相关工作。服役期间,费雪思考着如何壮大自己的事业。战前,费雪投资管理咨询公司服务大众,不管资金大小;战后,他打算只服务于一小群大户,这样一来可以集中精力选取高成长的股票向客户推荐。
  不久费雪的投资顾问事业重新开张。1947年春,他向客户推荐道氏化工,这是他花了三个月调研的结果。
  1954-1969年是费雪辉煌腾达的15年。他所投资的股票升幅远远超越指数。1955年买进的德州仪器到1962年升了14倍,随后德州仪器暴跌80%,但随后几年又再度创出新高,比1962年的高点高出一倍以上,换言之比1955年的价格高出30倍。
  1960年代中后期,费雪开始投资摩托罗拉,持有21年,股价上升了19倍――即21年内股价由1美元上升至20美元。不计算股利,折合每年平均增长15.5%。
  1961和1963年费雪受聘于斯坦福大学商学研究所教授高级投资课程。
  1999年,费雪接近92岁才退休。
  2004年3月,一代投资大师与世长辞,享年96岁。

2、菲利普・费雪的投资术
  本杰明・格雷厄姆是"低风险"的数量分析家,他侧重:固定资产、当前利润以及红利分析。他的兴趣在于形成容易被普通投资者所接受的安全投资获利的方法。为了减少风险,他建议投资者彻底多元化组合,并购买低价的股票。
  菲利普・费雪是"高风险"的质量分析家,他和本杰明・格雷厄姆恰恰相反。他侧重:可以增加公司内在价值的分析,发展前景、管理能力。他建议投资者购买有成长价值期望的股票。他建议投资者在投资前,做深入的研究、访问。他建议投资者投资组合集中化,仅买入一种或极少的品种的股票。
  费雪的投资管理顾问公司每年平均报酬率都在20%以上,1958出版的《非常潜力股》一书,至今仍是所有美国投资管理研究所的指定教科书。
  终其一生,费雪投入了他的热情在成长型股票,他时时关心并寻找一档能在几年内增值数倍的股票,或是一档能在更长期间内涨更高的股票。
  费雪执着于成长性投资,重视公司经营层面质化的特征,此乃现代投资管理理论的重要基础。他强调到处闲聊以挖掘可投资标的的葡萄藤理论,后来也深受金融投资人及许多基金经理人所推崇,并付诸实践。费雪被称为最伟大的成长型投资大师,他与价值型投资之父格雷厄姆同为投资大师巴菲特的启蒙老师。巴菲特曾经推崇地说:我的血管里85%流着格雷厄姆的血,15%流着费雪的血。巴菲特融合了两者的理念与逻辑,为他自己及伯克希尔公司投资人创造了可观的财富,也造就了现代投资市场的投资典范。
  费雪个人最主要的持股是摩托罗拉和德州仪器,前者是他持股最多的股票,他抱了二十一年,股价总计上涨了二十倍。从费雪的实例中,我们可以体会一个成功的投资者如何以最有用的方式,找到他知之甚详的出色公司,抱持套牢三年的原则,买进并套牢,只要原来的买进原则未变,就不理会市埸的风风雨雨,最后胜率一定大增。

3、费雪的基本论点
  费雪的基本论点有:
  超额利润的创造
・ 投资那些潜力在平均水平之上的公司(幸运且有能力或幸运来自其能力者)
・ 向那些最有能力的经营阶层看齐(重研发与营销)。
  利润必须相对成长
・ 没有公司能永远维持其利润,除非公司能同时分析成本结构,了解制程中每个步骤所耗费的成本。    
・ 落实会计制度与成本分析。
・ 以盈余维持成长,非以不断增资,扩充资本。
・ 有卓越的管理阶层:经营者能制定公司长期生存的策略,将短期利润列为次要目标,兼顾长期发展与日常运作。
・ 要了解经营者的意图,唯一的方法是观察他们如何与股东沟通,特别是对困境的反应。
・ 与员工是否发展出良好的关系,升迁是否基于能力而非偏爱。

  买进优良普通股的十五个要点
  一、这家公司的产品或服务有没有充分的市埸潜力──至少几年内营业额能大幅成长。
  二、管理阶层是否决心开发新产品或制程,在目前有吸引力的产品线成长潜力利用殆尽之际,进一步提升总销售潜力。
  三、和公司的规模相比,这家公司的研发努力,有多大的效果?
  四、公司有没有高人一等的销售组织?
  五、公司的利润率高不高?
  六、公司做了什么事,以维持或改善利润率?
  七、公司的劳资和人事关系好不好?
  八、公司的高阶主管关系很好吗?
  九、公司管理阶层深度够吗?
  十、公司的成本分析和会计纪录做得好吗?
  十一、是不是有其它的经营层面,尤其是本行业较为独特的地方,投资人能得到重要的线索,晓得一家公司相对于竞争同业,可能多突出?
  十二、公司有没有短期或长期的盈余展望?
  十三、在可预见的将来,这家公司是否会因为成长而必须发行股票,以取得足够资金,使得发行在外的股票增加,现有持股人的利益将预期的成长而大幅受损?
  十四、管理阶层是否报喜不报忧?
  十五、管理阶层的诚信正直态度是否无庸置疑?

投资人十不原则
  一、不买处于创业阶段的公司
  二、不要因为一支好股票在未上市交易,就弃之不顾。
  三、不要因为你喜欢某公司年报的格调,就去买该公司的股票。
  四、不要因为一家公司的本益比高,便表示未来的盈余成长已大致反映在价格上。
  五、不要锱铢计较
  六、不要过度强调分散投资
  七、不要担心在战争阴影笼罩下买进股票
  八、不要忘了你的吉尔伯特和沙利文.(英国剧作家和作曲家,意思是不要受无关紧要的事情的影响)应该牢记的是:对他重要的事,是未来,而不是过去。
  九、买进真正优秀的成长股时,除了考虑价格,不要忘了时机因素。
  十、不要随群众起舞

4、费雪与成长股
  作为一名一流的投资大师,费雪显得异常低调,几乎从不接受各种访问,以至于在一般投资者中并不知名,但是1959年他的名著《怎样选择成长股》一经出版,立时成为广大投资者必备的教科书,该书随即成为《纽约时报》有史以来登上畅销书排行榜的第一部投资方面的著作。"成长股" 这一概念也随着该书的畅销而成为投资者耳熟能详的名词,追寻"成长股"的"成长型投资"更是自此成为了美国股市多年以来的主流投资理念之一。菲利普A .费雪的投资哲学虽然提出已经有数十年了,但就是到了今天,《怎样选择成长股》一书也不仅只有金融专业人士仍详加研读并付诸实践,还有许多人也将其奉为投资理财方面的经典之作。
  在费雪的传世名著《怎样选择成长股》里,他对有关成长股的标准、如何寻找成长股、怎样把握时机获利等一系列重要问题进行了全面而详尽的阐述。

5、菲利普・费雪的8点投资心得
  费雪经历半个世纪的投资,得出8点投资心得:
  (1)投资目标应该是一家成长公司,公司应当有按部就班的计划使盈利长期大幅成长,且内在特质很难让新加入者分享其高成长。这是费雪投资哲学的重点。盈利的高速增长使得股价格相对而言愈来愈便宜,假如股价不上升的话。由于股价最终反映业绩变化,因此买进成长股一般而言,总是会获丰厚利润。
  (2)集中全力购买那些失宠的公司。这是指因为市场走势或当时市场误判一家公司的真正价值,使得股票的价格远低于真正的价值,此时则应该断然买进。寻找到投资目标之后,买进时机亦很重要;或者说有若干个可选的投资目标,则应该挑选那个股价相对于价值愈低的公司,这样投资风险降到最低。费雪有过教训,在股市高涨的年代,买到一家成长股,但是由于买进的价格高昂,业绩即使成长,但亦赚不了钱。
(3)抱牢股票直到公司的性质从根本发生改变,或者公司成长到某个地步后,成长率不再能够高于整体经济。除非有非常例外的情形,否则不因经济或股市走向的预测而卖出持股,因为这方面的变动太难预测。绝对不要因为短期原因,就卖出最具魁力的持股。但是随着公司的成长,不要忘了许多公司规模还小时,经营得相当有效率,却无法改变管理风格,以大公司所需的不同技能来经营公司。长期投资一家低成本买进、业绩高成长的公司,不应因为外部因素而卖出持股,应该以业绩预期为卖出依据。因为外部因素对公司的影响很难精确分析和预测,同时这些因素对股价的影响亦不及业绩变动对股价的影响大。我们投资的是公司不是GDP,亦不是CPI或者定期存款利率。许多人信奉波段操作,但是至今没有一个靠波段操作成为投资大师的。波段操作企图提高赢利效率,所谓超底逃顶,这些乌托帮式的思维,实际可望而不可及。
  (4)追求资本大幅成长的投资人,应淡化股利的重要性。获利高但股利低或根本不发股利的公司中,最有可能找到十分理想的投资对象。分红比例占盈余百分率很高的公司,找到理想投资对象的机率小得多。成长型的公司,总是将大部分盈利投入到新的业务扩张中去。若大比例分红,则多数是因为公司的业务扩张有难度,所以才将盈利的大部分分红。不过,这是指现金分红,而以红股形式的分红则应该鼓励。
  (5)为了赚到厚利而投资,犯下若干错误是无法避免的成本,重要的是尽快承认错误。一如经营管理最好和最赚钱的金融贷款机构,也无法避免一些呆帐损失,了解它们的成因,并学会避免重蹈覆辙。良好的投资管理态度,是愿意承受若干股票的小额损失,并让前途较为看好的股票,利润愈增愈多。好的投资一有蝇头小利便获利了结,却听任坏的投资带来的损失愈滚愈大,是不良的投资习惯。绝对不要只为了实现获利就获利了结。无论是公司经营还是股票投资,重要的是止损和不止盈。此处的止损是指当你发现持有的股票出现与当初判断公司基本面的情况有相当大的变化则卖出持股的做法。不止盈是即使持有的股票大幅上升但公司盈利仍将高速增长且目前股价相对偏低或者合理的情况下继续持股的做法。许多投资者往往是做反了,买进一只股票一旦获利,总是考虑卖出;相反,买进的股票套牢了便一直持有,让亏损持续扩大。
  (6)真正出色的公司数量相当少,当其股价偏低时,应充分把握机会,让资金集中在最有利可图的股票上。那些介人创业资金和小型公司(如年营业额不到2500万美元)的人,可能需要较高程度的分散投资。至于规模较大的公司,如要适当分散投资,则必须投资经济特性各异的各种行业,对投资散户(可能和机构投资人以及若干基金类别不同)来说,持有20种以上的不同股票,是投资理财能力薄弱的迹象。通常10或12种是比较理想的数目。有些时候,基于资本利得税成本的考虑,可能值得花数年的时间,慢慢集中投资到少数几家公司。投资散户的持股在20种时,淘汰一些最没吸引力的公司,转而持有较具吸引力的公司,是理想的做法。务请记住:ERISA的意思是"徒劳无功:行动时思虑欠周"(Emasculated Results: Insufficient Sophisticated Action)。出色的公司在任何市场都只有5%左右,而找到其中股价格偏低的则更是千载难逢的好机会,应该重仓买进,甚至是全部资金买进。
  (7)卓越的普通股管理,一个基本要素是能够不盲从当时的金融圈主流意见,也不会只为了反其道而行便排斥当时盛行的看法。相反的,投资人应该拥有更多的知识,应用更好的判断力,彻底评估特定的情境,并有勇气,在你的判断结果告诉你,你是对的时候,要学会坚持。
  (8)投资普通股和人类其他大部分活动领域一样,想要成功,必须努力工作,勤奋不懈,诚信正直。
  费雪说,股票投资,有时难免有些地方需要靠运气,但长期而言,好运、倒霉会相抵,想要持续成功,必须靠技能和运用良好的原则。根据费8点指导原则架构,相信未来主要属于那些能够自律且肯付出心血的人。