Browse > Home / Archive: 二月 2009

| 订阅RSS

Linux秘笈21. 改变文件内容的大小写

二月 28th, 2009 | 1 Comment | Posted in Linux

把一个文件转换成大小

$ cat employee.txt
100 Jason Smith
200 John Doe
300 Sanjay Gupta
400 Ashok Sharma
$ tr a-z A-Z < employee.txt
100 JASON SMITH
200 JOHN DOE
300 SANJAY GUPTA
400 ASHOK SHARMA

转换一个文件成小写

$ cat department.txt
100 FINANCE
200 MARKETING
300 PRODUCT DEVELOPMENT
400 SALES
$ tr A-Z a-z < department.txt
100 finance
200 marketing
300 product development
400 sales
Tags: , ,

[命令集]对前后台的进程进行调出和调入

二月 27th, 2009 | No Comments | Posted in Linux

前台/后台
当一个进程在shell 中已运行,可以使用[Ctrl]-[Z] (^Z), bg 和fg 来调入调出前后台10。举个例子:启动
2 个进程,调入后台。使用jobs 列出后台列表,然后再调入一个进程到前台。

# ping cb.vu > ping.log
^Z                # ping 使用 [Ctrl]-[Z] 来暂停(停止)
# bg # 调入后台继续运行
# jobs -l         # 后台进程列表
[1] - 36232 Running ping cb.vu > ping.log
[2] + 36233 Suspended (tty output) top
# fg %2           # 让进程 2 返回到前台运行

使用nohup 开启一个持续运行的进程直到 shell 被关闭(避免挂断)。
# nohup ping -i 60 > ping.log &

Tags: , ,

Linux秘笈20. Join命令

二月 27th, 2009 | No Comments | Posted in Linux

Join命令是用一个共同的字段为基础从两个文件中合并行。在下面的例子中,我们有两个文件,employee.txt和salary.txt,两个文件都有一个共同的employee-id字段,所以我们用join命令去合并。

$ cat employee.txt
100 Jason Smith
200 John Doe
300 Sanjay Gupta
400 Ashok Sharma
$ cat bonus.txt
100 $5,000
200 $500
300 $3,000
400 $1,250
$ join employee.txt bonus.txt
100 Jason Smith $5,000
200 John Doe $500
300 Sanjay Gupta $3,000
400 Ashok Sharma $1,250
Tags: ,

Linux秘笈19. 禁止标准的输出以及错误的消息

二月 26th, 2009 | No Comments | Posted in Linux

有些时候当你debug一些shell脚本,你不想看到标准输出或者一些标准的错误消息。象下面的演示的那样,用/dev/null来禁止输出。

Suppress standard output using > /dev/null

当你在debug一些shell脚本的时候,非常有帮助,你不想去显示echo的输出状态,仅仅查看错误消息。

# cat file.txt > /dev/null

# ./shell-script.sh > /dev/null

禁止标准的错误输出用 2> /dev/null

当你仅仅对标准输出感兴趣,不想看错误的消息,下面的命令将有帮助。

# cat invalid-file-name.txt 2> /dev/null

# ./shell-script.sh 2> /dev/null

Linux秘笈18.Find命令

二月 26th, 2009 | Comments Off | Posted in Linux

find是经常使用的命令,用来在UNIX文件系统中查询文件,让我们来回顾一些练习find命令的例子

Syntax: find [pathnames] [conditions]

怎样查询一些特殊字符的文件名呢?

下面的命令是在/etc目录下查询所有包含mail字符的文件。

# find /etc -name "*mail*"

怎样去查询超过一定大小的文件?

下面的命令将列出系统中所有超过100MB的文件。

# find / -type f -size +100M

怎样去查询在过去X天没有修改的文件?

下面的命令将罗列在当前目录下60天前修改过的文件:

# find . -mtime +60

怎样查询在过去X天修改过的文件?

下面的命令将在当期目录下,查询在过去2天修改过的文件:

# find . –mtime -2

怎样删除所有超过100MB且后缀为*.tar.gz的归档文件?

请小心执行下面的命令,有可能回删除一些你不想删除的文件,最好的习惯是在执行删除命令的时候,先用ls命令查看一下。

# find / -type f -name *.tar.gz -size +100M -exec ls -l {} \;
# find / -type f -name *.tar.gz -size +100M -exec rm -f {} \;

怎样去归档已经超过X天没有修改过的文件呢?

下面的命令将查询所有在/home/jsmith目录下60天都没修改过的文件,并且创建一个ddmmyyyy_archive.tar格式的压缩文件。

# find /home/jsmith -type f -mtime +60 | xargs tar -cvf /tmp/`date '+%d%m%Y'_archive.tar`
Tags: ,

[架构师]04.沟通是金;伴随透明度和领导能力

二月 25th, 2009 | 1 Comment | Posted in 软件架构

往往软件架构师坐在自己的象牙塔上,对下面的开发者进行发号施令,制定规范、技术决策,技术的开发方向。这些往往导致了一些问题的出现,和一些不满的群体,最终导致软件产品一点都不接近原始的需求。每个软件架构师应该知道如何去沟通软件项目的宗旨和目标。关键是明确有效的沟通应该是透明的和有领导的。

要明确说明怎样沟通。在你的团队中没人愿意去读一份100页的架构决策文档,使用明确和简洁的方式传达你的想法,是任何软件项目成功的关键。 在项目启动阶段,尽可能的保持简单,并用一切手段不要去写长篇累牍的Word文档。使用一些类似Visio的工具去画一些简单的图标,用来表达你的想法。对那些经常发生变化的人,要保持简单,另一种有效的沟通手段,是非正式的白板会议。没有任何东西比得上,带领一群开发者(或其他架构师)在一个会议室使用白板表达你的想法,此外,请务必在任何时候,你随身携带一台数码相机。没有比你被赶出会议室而所有的想法依然停留在白板上更郁闷的事了,拍照,下载,通过wiki分享给团队的其他成员。所以扔掉冗长的Word文档,更专注于让你的想法更全面,然后关注你的架构决策是否有详细记录。

一个软件架构师也是一个领导者,有些软件架构师没有意识到这点,作为一个领导者,你必须赢得你同事的尊重才能在一个健康和高效的环境里面进行高效的工作,让开发者对于一些架构决策一无所知,显然将导致灾难发生。有开发者和你一起创建一个协作环境,能验证你做出的架构决策是否正确。反过来,你也让开发者也参与到架构的进程中来,和他们一起工作,而不是排斥他们,请记住,所有团队成员(如质量控制小组,系统分析师,和项目管理人员以及开发者)需要清晰的沟通和领导。采用透明和高效的领导将改善沟通和建立一个强大且健康的工作环境。

如果“沟通是金” ,那么透明度和领导能力是其谦卑的仆人。

选自Communication is King; Clarity and Leadership its humble servants

Tags: , ,

[linux秘笈14]grep命令

二月 25th, 2009 | No Comments | Posted in Linux

grep命令被用来搜索所有一些文本文件,它是拥有些参数,非常厉害的一个工具,
Syntax: grep [options] pattern [files]

我怎样能在一个文件中查找所有匹配关键词的行呢?
在下面的例子中,用grep在/etc/passwd中查找John文字且显示匹配的行:

# grep John /etc/passwd
jsmith:x:1082:1082:John Smith:/home/jsmith:/bin/bash
jdoe:x:1083:1083:John Doe:/home/jdoe:/bin/bash

参数-v,将显示所有没有匹配的行,在下面的例子中,它将显示在/etc/passwd文件中没有匹配John的记录。

# grep -v John /etc/passwd
jbourne:x:1084:1084:Jason Bourne:/home/jbourne:/bin/bash

在一个文件中有多少行匹配文字模式吗?
下面的例子,将显示在/etc/passwd文件中有多少行包含了John。

# grep -c John /etc/passwd
2

你也能用-cv参数来得到有多少行没有包含John.

# grep -cv John /etc/passwd
39

怎样在搜索文本的时候忽略大小写呢?
通过-i参数将忽略大小写。

# grep -i john /etc/passwd
jsmith:x:1082:1082:John Smith:/home/jsmith:/bin/bash
jdoe:x:1083:1083:John Doe:/home/jdoe:/bin/bash

我怎样搜索子目录下的的文本文件呢?
用参数-r能够实现这个目的,下面的例子,将在/home/users目录下搜索所有忽略大小写包含”John”的文件。
将以”文件名: 匹配的行”.你也能用-l参数,仅仅展示匹配的文件名。

# grep -ri john /home/users /home/users/subdir1/letter.txt:John, Thanks for your contribution.
/home/users/name_list.txt:John Smith
/home/users/name_list.txt:John Doe
# grep -ril john /root /home/users/subdir1/letter.txt
/home/users/name_list.txt
Tags: , ,

七个处理日志(Logging)的好技巧

二月 24th, 2009 | No Comments | Posted in 软件架构

在web应用程序中,日志是很重要的,能够知道正在发生什么,以及进行性能(performance)分析和意外事情的分析,那么怎样做,才能让你的日志有用途呢?

1. 产品状态下不应该有debug消息。

我看到了一次又一次的在产品中启动调试日志,这可能是一些开发者无意中检查调试日志记录时候的配置,启用调试能够显著降低你应用程序的运行速度,并且使得在去分析日志变得很困难, 请确保在部署的时候,最好是一些脚本,能够在产品阶段禁止debug信息。

2. 关注您的日志

有些公司在其产品系统中有着良好的日志记录,但不关注他们的日志。关注您的日志,能够发现应用程序中的问题(错误,性能,内存), 并解决这些问题 ,那么基本上你应该没有记录什么已知的错误。

3.使用正确的日志级别

写日志代码的开发者经常不知道那种日志级别在产品阶段使用,有一个文件应该能够解释开发者应该使用那一个日志级别。例如SEVERE应该只用于技术问题,需要立即采取行动。 ERROR应当用于错误,需要有人研究和解决 ,如:没有得到数据库连接、低资源或不集成的点。 这些对你的公司和应用是个规范。

4. 不要仅仅在本机记录日志

如果您的服务器有重大问题,如资源问题,它往往无法登录,你就不能找到您的日志,也不能找到问题,日志应该记录在一个网路驱动上,并复制到另外一台主机或者网络驱动,比如SysLog。一个好的解决方法是使用传播工具写入到一个网络多播组中,这也方便监测(见“可扩展的互联网体系结构” ) 。

5. 监控您的日志

类似“关注你的日志”,你应该安装一个监测解决方案,能够在你的日志中查看SERVRE条目、ERROR条目,异常和其他东西,通过传播,能够很容易监控,一个好的方法是能够分类和计数异常,然后去做一些关于严重的和最常见的处理。

6. 使用易读的格式

开发者往往不太考虑在产品阶段的日志输出,:这将导致难以阅读的日志文件。 看看下面有一个易读的输出:

[8/14/06 8:22:14:653 CDT] 0000a SSLComponent I CWPKI00001I: SSL service not available [ 8/14/06 8:22:14:653的CDT ] 0000a SSLComponentCWPKI00001I :
[8/14/06 8:22:14:813 CDT] 0000a WSKeyStore W CWPKI0041W: One or more key [ 8/14/06 8:22:14:813的CDT ] 0000a WSKeyStore W CWPKI0041W :

这样的格式更容易快速扫描日志,对比一下你的日志输出。

7. 在你的日志中使用错误代码

每个导致日志输出的原因应该有一个独特的错误代码。如果没有一个独特的错误代码是很难在您的源代码中找到原因。错误代码也更容易计数和分类, 使日志报表更容易展示。

想了解更多信息吗? 在web站点上也有一些很好的关于日志的书,象: Michael T. Nygard 写的《Release It!》(真的是非常好的一本书)和Theo Schlossnagle著作的《Scalable Internet Architectures》。

Tags: ,

[架构师]03意外才是最大的问题,并非技术

二月 23rd, 2009 | No Comments | Posted in 软件架构

现在有人正在运行一个失败的薪资项目,可能还不止他一个人。

为什么呢?这是因为他们选择了Ruby而未选择Java,或者选择Python而未选择Smalltalk吗?又或是因为他们决定使用Postgresql而未选择Oracle吗?又或选择Linux而未选择Windows,我们都看到了技术上引起了失败项目,但是那些意外的问题,Java都难以解决呢?

大多数项目是人来构建的,这些人是项目成败的基础,因此,要关注如何才能帮助这些人能够取得成功。

同样,也有一些你认为“没有正确做事”并且破坏这一项目的人,在这种情况下,解决问题的技术已经是过时的和不是必须的,事实上在人类历史上,它可能是最重要的技术创新,你需要的是沟通。

仅仅把熟练地谈话做成一种技术是不够的,学会尊重人,并且给予他们学习核心技能的好处,让他们从一个聪明的架构师转变成一个有效的架构师。

有很多关于这方面的东西,但是有些小窍门能够大大提高你的沟通能力:

1 )处理这些事件是对话- 而不是对抗 。
假如你认为文问题是一个对待这些人的一种方式,那么你一定要了解,你不可能把人放在对立面。

2 )在你确信自己能够明辨是非后,再去进行会话。

如果你正处在在生气,沮丧,郁闷,或其他扰乱心情的事情的时候,和其他人进行沟通,容易引起其他人认为你是在攻击。

3 )利用这些机会,以确定共同商定的目标。

不要告诉开发者在会议上保持安静,因为他们从不让别人讲话,而是去问他们是否愿意帮助你多增加其他人手的参与,并解释说一些人更内向,需要更长的思考才能进行交谈,问他们是否愿意帮助他在谈话之前等5秒钟。

如果你从一个共同的目标出发,对待”有问题”的人,你应该把它作为一个学习的契机,学会控制自己的情绪,这样你不仅仅变得更加有效,而且你还发现,你每次可以学到一些东西。

选自:Chances are your biggest problem isn’t technical

Tags: ,

[命令集]重设 root 密码

二月 22nd, 2009 | No Comments | Posted in Hacks, Linux

Linux 方法 1
在引导加载器(lilo 或 grub)中,键入如下启选项:
init=/bin/sh
内核会挂载 root 分区,进程 init 会启动 bourne shell 而不是 rc,然后是运行级别。使用命令 passwd 设
置密码然后重启。别忘了需要在单用户模式下做这些动作。
如果重启后 root 分区被挂载为只读,重新挂在它为读写:

 # mount -o remount,rw /
 # passwd                       # 或者删除 root 密码 (/etc/shadow)
 # sync; mount -o remount,ro /  # sync 在重新挂在为只读之前 sync 一下
 # reboot

FreeBSD 和 Linux 方法 2
FreeBSD 不会让你这么做。解决方案是用其他操作系统(像系统紧急修复光盘)挂载 root 分区,然后更改密码。
• 用 live cd 或安装盘启动进入修复模式后,会得到一个 shell。
• 用 fdisk 查找 root 分区。比如:fdisk /dev/sda
• 挂载它并使用 chroot 命令:

 # mount -o rw /dev/ad4s3a /mnt
 # chroot /mnt
 # passwd
 # reboot
Tags: ,