如何调试bash脚本
Bash 是Linux操作系统的默认Shell脚本。Shell是用来处理操作系统和用户交互的一个程序。Shell的脚本可以帮助用户自动化地和操作系统进行交互。你也可以理解为一种脚本式的编程。即然有编程,那么,程序的编译器,解释器,调试器就必不可少了,Bash也一样,但在调试方面可能会有一些和编程语言不一样的东西和技术,所以,下面这篇文章主要是说明调试bash脚本的各种技术。
跟踪脚本的执行
你可以让bash打印出你脚本执行的过程中的所有语句。这很简单,只需要使用bash的-x选项就可以做到,下面让我们来看一下。
下面的这段脚本,先是输出一个问候语句,然后输出当前的时间:
#!/bin/bash
echo "Hello $USER,"
echo "Today is $(date +'%Y-%m-%d')"
下面让我们使用-x选项来运行这段脚本:
$ bash -x example_script.sh
+ echo 'Hello chenhao,'
Hello chenhao,
++ date +%Y-%m-%d
+ echo 'Today is 2009-08-31'
Toda ...
谁写了Linux
2009年8月,Linux软件基金会发布了一份叫《Who Writes Linux and Who Supports It》(PDF)的报告。这份报告主要对Linux 2.6.x的开发进行了全方位的统计。看了以后才知道,原来Linux的开发的生产率竟是这样的惊人,而且相当的的令人振奋,所以,在第一时间转过来给大家看看。让人不得不惊叹,这不可思议的具有非凡活力的社区。(注意,我们这里说的是Linux,不是GNU的那些东西,所谓Linux就是Linux的Kernel)
下面是一个导读,希望每一个看到这篇文章的朋友都能看看原文的报告:《Who Writes Linux and Who Supports It》(PDF)
这份报告的一开始就对Linux的开发进行了总结:
每2-3个月一个release
最近的每一次release都超过10000个补丁
有超过1000个开发人员进行开发,他们来自200个公司或组织。
自2005年以来,超过5000个来自500个不同公司的开发人员为Linux内核做过贡献。
自2008年以来,每次release,都大约增加了10%左右的开发人员,而且, ...
Unix Pipes 管道原稿
40年前,Unix操作系统横空出世,Unix不仅仅带来了一个操作系统,还创造C语言,Socket,开源,黑客等等文化,这些文化影响着整个计算机世界的文明,直到今天。
如果说Unix是计算机文明中最伟大的发明,那么,Unix下的Pipe管道就是跟随Unix所带来的另一个伟大的发明。管道的出现,解决的就是让不同功能的程序可以互相连通通讯,从而可以让软件开发,程序开发更加的“高内聚,低耦合”,从而可以让程序“Do one thing, Do it well”,从而可以让程序“Keep it Simple Stupid”等等,这一哲学引影了一代又一代的软件架构,直到今天的云计算。
管道的发名者叫,Malcolm Douglas McIlroy,他也是Unix的创建者,是Unix文化的缔造者之一。他归纳的Unix哲学如下:
程序应该只关注一个目标,并尽可能把它做好。让程序能够互相协同工作。应该让程序处理文本数据流,因为这是一个通用的接口。
下面是管道在1964年10月11日,出现的第一个打印稿,下面是扫描件。
全文如下:
- 10 ...
Linus Torvalds 语录 Top 10
下面是Linux的创始人Linus Torvalds的一些言论,这是我个人认为最有意思的10句。如果你想看更多的Linus Torvalds说过的话,你可以看看他在维基百科上的词条:Linux Torvalds。我们在下面给出中英文对照,希望你能喜欢。
“Really, I’m not out to destroy Microsoft. That will just be a completely unintentional side effect ” (真的,我并不是想要干掉Microsoft,如果真是那样了,那完全是一个无意的副作用)——”The Way We Live Now: Questions for Linus Torvalds”, 接受《New York Times》的采访, 2003-09-28.
“Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it”(只有愚昧的人才会用 ...
Linux基金会的广告
今年早些时候,Linux基金会发起了一项面向制作人和一般Linux爱好者的活动,创造60秒创意的广告并评奖。
Linux基金会并没有苹果和微软这样大的投入来聘请大腕,但这次评选出来的好广告却一点也不输于他们,Linux社团的参与力和灵感可见一斑。本次活动获胜的奖品是免费前往东京参与Linux专题研讨会,评奖结果是:
第一:“What does it mean to be free?”
第二:“The Origin,”
第三:“Linux pub”
下面是广告片的视频
What does it mean to be free?
The Origin (起源)
Linux Pub
下面的视频需要你能够访问YouTube(你可以上Google搜索如何访问YouTube的方法)
还有很多很不错的作品,比如:
The Future is Open
Challenges at the Office
更多的视频,你可以上Linux基金会的网站上看看,也一样地非常地有创意。
http://video.linuxfoundation.org/cate ...
恢复Ext3下被删除的文件
下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件。
假设我们有一个文件名叫 ‘test.txt’
$ls -il test.txt
15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt
注意:: “-il” 选项表示显示文件的i-node号(15),如果你不知道Unix/Linux文件系统的“I结点”的话,你有必要先补充一下相关的知识。简单说来,i结点就是操作管理文件的一个标识号。
我们再看一下其内容:
$ cat test.txt
this is test file
好,现在我们开始删除文件:.
$rm test.txt
rm: remove write-protected regular file test.txt'? y</span></span></div> <h4>使用 Journal 和 Inode 号恢复</h4> 注意,如果你删除文件后重启了系统,那么,相 ...
你用Linux命令行吗?
想一想,如果你要把一个图片的尺寸改小一点,你会怎么办?当然,我一定会启动一个图形编辑软件,然后,打开图片文件,从菜单上选择相关的工具选项,更改大小,然后保存文件。就算是在Linux下,我可能也是这么干的,比如Ubuntu下也是这样,如下图:
但其实,如果你用命令行来更改图片大小的话,一条语句就可以搞定了。如:
convert -resize 300 profile.jpg profile_small.jpg
当然,如果你要使用这样的命令,你需要安装Imagemagick,你可通过apt-get install imagemagick来安装一下。
不管怎么说,很简单吧,下面还有几个:
1)给图片加阴影
给图片加阴影可以使用下面的这个命令:
convert screenshot.jpg
\( +clone -background black -shadow 60×5+0+5 \)
+swap -background white -layers merge +repage shadow.jpg
效果如下:
2)把两个MP3拼起来
cat 1.mp3 2.mp3 > ...
Ksplice Uptrack — Ubuntu更新不用重启
Ksplice是马萨诸塞州坎布里奇的一家新兴厂商,它开发的软件可以帮助计算机用户保持其操作系统的安全性而且不需要经常麻烦的重新启动就可升级操作系统,Ksplice被评为麻省理工10万美元创业竞赛的6个入围项目之一。
Ksplice是Web/IT类冠军,它将与其他5个类别的入围者争夺总奖金。该公司是去年由四个麻省理工学院校友成立的,
Ksplice目前支持Linux内核的更新,但它声称其免重启更新技术工作在目标代码层,可以适用于任何操作系统或者用户空间应用。该公司说,其技术对安全更新来说特别有益,可以解决因不方便重启而使安全更新不能及时生效的问题。
昨日他们在剑桥发布了Ksplice解决方案,运用这种技术将实现无缝更新,从企业软件、系统补丁乃至Linux内核的更新都不需要重启就可以直接完成,改变了数十年来计算机运行最新代码需要重启的麻烦问题。
相关链接:
Ksplice Uptrack 主页在这里:http://www.ksplice.com/uptrack/
安装指南在这里:http://www.ksplice.com/uptrack/download
Linux/Unix 新手和专家教程
你正在找一些高质量的Linux 和 UNIX 的教程吗?如果是,这篇文章会告诉你到哪去找到这些教程。这里我们将给出超过30个相当的不错的 Linux 和 UNIX 在线的教程。
需要大家注意的是,他们都是英文的,也许有一些也经被翻译到了中文社区,你可以搜索一下。但不管怎么样,我的建议是应该尽可能的去阅读英文。
Linux 和UNIX 的新手培训教程
免费的新手Linux教程
Introduction to Linux – 这是来自IBM的教程,用于给那些想学习Linux的人。
Linux Desktop 101 – 这是一个 14周 课时的教程,主要用于学校里教学生如何在一个PC上运行一个Linux操作系统。
Hands-On Introduction to Linux – Machtelt Garrels 的一个格式相当不错的教程。
Real Time Linux Introduction – 一系列的介绍Linux的教程,来自National Institute of Standards and T ...
高级Unix命令
在Unix操作中有太多太多的命令,这些命令的强大之处就是一个命令只干一件事,并把这件事干好。Do one thing, do it well。这是unix的哲学。而且Unix首创的管道可以把这些命令任意地组合,以完成一个更为强大功能。这些哲学到今天都在深深地影响着整个计算机产业。比如今天最流行的“云计算”——把一个软件以碎片方式部署,然后这些功能可以任意组合。
这篇文章罗列了很多Unix下比较高级的命令,当然,Unix/Linux下还有更多更多的命令,我们相信你可能见过其中的某些命令,也有可能有一些命令没有见过。不管怎么说,我们希望这些命令一方面可以让你知道怎么使用Unix/Linux操作系统,另一方面,我们也希望你能从中感到Unix的那种软件开发的哲学思想。
ACCTCOM
::
查看所有用户执行过的进程(命令)
acctcom | tail -20
查看指定用户执行过的进程(命令)
acctcom -u <username> | tail -20
使用一个正则表达式查找相关进程 ...
Unix 40年:Unix年鉴
镜像说明:本文原图均不能正常访问,也未在网上找到合适的代替图片,只好将就着看了————2024年2月19日
今年是Unix 40年的生日,这篇文章,主要是一个Unix的年鉴,其记录了40年来所有和Unix有关的里程碑事件。
如果你想知道Unix的一些故事,你可以查看下面这些文章:
《Unix40年:昨天,今天和明天》
《Unix传奇》上篇,下篇
《Unix的现状与未来》
目录
1956
1969
1970
1971
1972
1973
1974
1976
1977
1978
1980
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1996
1999
2001
2002
参考
1956
美国司法部颁布法令责成AT&T公司不得从事除了公共承运人提供的通信服务以外的一切商业活动。 ...
Unix 40年:昨天,今天和明天
镜像说明:本文原图均不能正常访问,调整过程中,根据网上的一些资料补充了本文的3张图,不一定是原博文所采用的图片————2024年2月19日
经历了四个十年,操作系统的未来充满了变数,但传奇将会是永久的
原文:链接—Computerworld
译者前言
今年是Unix40岁的生日。很早就看到这篇文章了,一直想转到中文社区。但一直没有时间,今天看到了CSDN首页的一篇《昨天,今天,明天! Unix系统的40年》号称是转载于cnBeta。这篇文章翻译的要有多烂有多烂,简直就是对Unix 40的历史和原文作者的一种不敬。所以,在这里给出全部译文。
关于更为详细的历史,可以参考我的《Unix传奇》上篇,下篇
以及一篇CSDN对我的采访《Unix的现状与未来》
正文
40年前的一个夏天,一个程序员只用了一个月的时间就创造出了这个世界上迄今为止最重要一个软件的原型。
在1969年8月,Ken Thompson,AT&T公司Bell实验室的一个程序员,因为妻儿不在身边,所以有机会把他的一些关于新的操作系统的想法付诸实现。他用汇编语言在DEC ...
最完美的Linux桌面软件
下面是关于Linux桌面环境下,目前为止最完美的部分。之所以说他们完美,是因为他们不但很养眼,而且也使用最好的多媒体技术,有最好的可用性。在某些方面,他们甚至超过了Windows和Mac-OS。
基础
Debian 或是 Ubuntu。这两个分发包是目前使用最广泛的Linux桌面操作系统的分发包了。
软件包管理器
因为我们使用debian……所以apt 必然是软件包管理器中最不错的一个。
桌面环境
这可能是最难的一个了。
KDE4 是出色的,相当的出色。
QT, 基于Gnome建造,也非常出色。
而在稳重方面, Gnome 桌面则是桌面中更为出色的。
而且,许多的应用基本上来说都是基于 GTK 开发的,而GTK则是基于GNOME桌面环境的。
所以,我们在这里选择 Gnome 作为最完美的图形桌面。对于KDE,只能非常抱歉了。
快捷任务条(Dock)
也许你并不喜欢docks,不过其的确可以帮你更方便地使用图形界面。
CairoDock吗? 当然,非常不错。那么 AWN 呢? 也不错。它 ...
Linux磁盘使用命令du的改进
我们知道,在Linux下,如果你想知道当前目录下,每个文件或子目录的尺寸,你可以使用du命令来完成这一动作。如:
$ du -sh *
这个命令可以以K,M,G的方式显示每个文件和子目录的大小。我们把这种方式叫做,human-readable,也就是可以让人读的方式,如下所示:
8.4G Desktop
2.6G Documents
12K keys
12M Pictures
536K scripts
但是,很可惜的是,我们的du并没有提供相关的排序功能,所以,如果在human-readable下,也就是-h参数下,我们很难使用sort命令来排序。因为那变成了字符串排序,小数点,数字的位数,还有单位K,M,G都会让排序变得混乱。那么,我们如何才能即有human-readble这种功能,还能有排序呢。我们得借用一些脚本语言来处理了。
下面是使用了Perl来达到这一功能:
du -sk * | sort -n | #以 K 字节的方式排序
perl -ne ' #使用Perl来处理 K M 和 G 单位
($s,$f)=spl ...
十个你可能不曾用过的Linux命令
下面可能是你不曾用过后十个Linux的命令。相当的有用。
1)pgrep
pgrep名字前有个p,我们可以猜到这和进程相关,又是grep,当然这是进程相关的grep命令。不过,这个命令主要是用来列举进程ID的。如:
$ pgrep -u hchen
22441
22444
这个命令相当于:
ps -ef | egrep '^hchen' | awk '{print $2}'
2)pstree
这个命令可以以树形的方式列出进程。如下所示:
[hchen@RHELSVR5 ~]$ pstree
init-+-acpid
|-auditd-+-python
| `-{auditd}
|-automount---4*[{automount}]
|-backup.sh---sleep
& ...
25个Linux相关的网站
下面是25个最具有影响力,也是最重要的Linux网站,这些网站提供了Linux的分发包,软件,文件,新闻,以及其它所有的关于Linux的东西。关于Linux的分发包历史,可以看看本站的这篇文章《Linux Distribution Timeline》
1. Linux.org
这个站点主要提供Linux相关的新闻、文档、教程,培训,以及其它一切和Linux相关的东西。这是你需要了解Linux开源社区的总入口。
2. Debian.org
如果你想要了解所有关于 Debian 和Linux/GNU 操作系统的相关信息,这个网站是必需要访问的,因为这是Debian的官网。
3. Ubuntu.com
这可能是桌面系统上最流行的Linux分发包了。
4. Fedora.com
Fedora 的官网。Fedora 是一个开放的、创新的、前瞻性的操作系统和平台,基于 Linux。它允许任何人自由地使用、修改和重发布,无论现在还是将来。它由一个强大的社群开发,这个社群的成员以自己的不懈努力,提供并维护自由、开放源码的软件和开放的标准。Fedora 项目由 Fedora 基金会管理和控制,得到了 ...
Linux 的僵尸(zombie)进程
可能很少有人意识到,在一个进程调用了exit之后,该进程 并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所 有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有 任何内存空间。
僵尸进程的来由,要追溯到Unix,Unix的设计者们设计这个东西并非是因为闲来无事想装装酷什么的。上面说到,僵尸进程中保存着很多对程序员和系统管理员非常重要的信息,首先,这个进程是怎么死亡的?是正常退出呢,还是出现了错误,还是被其它进程强迫退出的?也就是说,这个程序的退出码是什么?其次,这个进程占用的总系统CPU时间和总用户CPU时间分别是多少?发生页错误的数目和收到信号的数目。这些信息都被存储在僵尸进程中,试想如果没有僵尸进程,进程执行多长我们并不知道,一旦其退出,所有与之相关的信息都立刻都从系统中清除,而如果此时父进程或系统管理员需要用到,就只好干瞪眼了。
所以,进程退出后,系统会把该进程的状态变成Zombie,然后给 ...
Linux设备驱动Hello World程序介绍
by Valerie Henson
07/05/2007
(译者注:本文的例子是只能在linux的2.6内核下使用的,2.6以上的内核,译者没有做过实验,2.4是要修改make文件才能运行。)
本文的出处:这里
自古以来,学习一门新编程语言的第一步就是写一个打印“hello world”的程序(可以看《hello world 集中营》这个帖子供罗列了300个“hello world”程序例子)在本文中,我们将用同样的方式学习如何编写一个简单的linux内核模块和设备驱动程序。我将学习到如何在内核模式下以三种不同的方式来打印hello world,这三种方式分别是: printk(),/proc文件,/dev下的设备文件。
目录
准备:安装内核模块的编译环境
使用printk()函数打印”Hello World”
使用/proc的Hello, World!
Hello, World! 使用 /dev/hello_world
准备:安装内核模块的编译环境
一个内核模块kernel module是一段能被内核动态加载和卸载的内 ...
VI的一些小技巧
下面是一些vi的小技巧。
:sp <filename> 打开一个文件,并和当前打开的文件分屏显示。
Ctrl+W+W在分屏显示中的不同文件中切换。
*
向前搜索目前光标所在的单词。
#
向后搜索目前光标所在的单词。
:%s/word1/word2/g全文搜索word1并以word2替换之。
:’a,’bs/word1/word2/g
仅在第a行到第b行间搜索并替换。
:!<command>
执行一个Shell命令。
:!javac %
使用%可以表示当前文件名。比如:sample.java,以达到编译的目的。
:sh
启运一个shell而不退出vi。exit 命令后回到vi.
:line_number
冒号后跟数字表示要到第几行,如果跟1,表示到文件头,如果跟$,表示到文件尾。
Ctrl+G
可以显示当前行在整个文件的百分比。
<number>重复一个命令number次。比如先输入50,然后输入dd,表示删除50行。
yy
拷贝一个行到VI的剪贴版。
p粘贴VI
>> 和 < ...
Ubuntu的并行启动
如果你在使用多核处理器,那么你可以配置Ubuntu的一个参数来使用Ubuntu的启动并行,以加快其启动速度。
这个参数在文件/etc/init.d/rc中,其参数名是CONCURRENCY默认值是none,你可以把这个参数改成如下所示。于是,你就开启了Ubuntu的并行启动的功能。
CONCURRENCY=shell
但是,这个参数会导致dbus, hal和gdm的产生“race condition”竞争条件,所以,这三个程序的启动顺序非常的关键。其必需保证这个顺序:dbus -> hal -> gdm。这个顺序在Ubuntu的Hardy,Intrepid 或Jaunty中是没有问题的。但是,我们不排除在别的版本中会有问题。
所以,在开启“并行启动”时,你需要去检查一下dbus,hal和gdm的启动顺序,其启动顺序你可以在/etc/rc2.d/目录下,查看一个这三个程序的S后面的编号顺序。如果你看到下面的这个顺序,那么你就需要做出调整了。
s12dbus
s13gdm
s24hal
调整也很简单,就是改一下S后面的数字就行了,如下所示:
mv s24hal s1 ...