分类归档: Linux

[个人记录用]Fedora 8 常规使用设置

Fedora 8 常规使用设置

以前装linux都没有作记录,虽然再装起来也不是什么难事,但总会忘这忘那,找资料也总会花不少时间的。

昨天挂了一晚上下了Fedora 8(F9test官方已经有消息了…这速度也太快了),这次也干脆来次重新安装,顺便记录一下一些设置啊什么的。

[安装]
我用的是硬盘安装,本来安装的系统是Fedora 7

硬盘安装方法:

我的驱动器信息
________________________
挂载点       对应标号
/       sda1
/home       sda2
/workspace   sda3
/soft       sda6
————————

1、挂载iso文件
mount -t iso9660 -o loop ISO文件路径 挂载路径

2、复制安装引导程序
然后进入iso目录把isolinux拷到 / 下面

3、编辑启动菜单
编辑 /etc/grub.conf
追加一下4行

title Fedora 8 Installation # 引导项目标题
        root (hd0,0) # 根目录(/)的位置
        kernel /isolinux/vmlinuz
        initrd /isolinux/initrd

4、启动安装
重新启动系统,从引导菜单中选择 “Fedora 8 Installation”
选择安装介质的时候选 Hard Disk
然后选择Fedora-8-i386-DVD.iso所在的分区确定就行
确定….
重新启动以后就会开始安装,根据需要选择一些要安装的附件什么以后就可以开始安装了。

主要选了几个
KDE   我比较喜欢这个,感觉可配置的地方多一些
Eclipse 比较强大的IDE
MySQL   F8带的版本也比较新,刚好装上得了,反正我
   就算自己装也懒得去下源码包编译的,毕竟是自己用作测试的。
   至于HTTP,PHP什么的,还是自己装吧,要配置的东西比较多。

其他乱七八糟的好像也选了几个….反正是无关紧要的东西

[字体安装]
直接到windows下面弄了点字体过来 放进 /usr/share/fonts/zh_CN 里面
然后执行
ttmkfdir -o fonts.scale
ttmkfdir
fc-cache -fv
就行了…其实我还没搞明白上面几句是干嘛的..哈…哈哈….

我用到的字体:
arialbd.ttf
arialbi.ttf
ariali.ttf
arial.ttf
fonts.scale
simfang.ttf
simhei.ttf
simkai.ttf
simsun.ttc
tahomabd.ttf
tahoma.ttf
verdanab.ttf
verdanai.ttf
verdana.ttf
verdanaz.ttf

[配置]
。。。。。。。。
突然发现也没什么好写的,随便记吧。。。本来就是是方便自己记忆而已。。。

第一个问题,音乐
没有音乐怎么能行?以前用KDE一直在用 Amarok 感觉很好,不过现在我打算用用Gnome,F8里看起来挺舒服的打算试试
查了一下,听说Audacious不错。

先到 http://rpm.livna.org/rlowiki/ 把livna的repo加上
然后
yum install audacious
yum install audacious-plugins-nonfree-mp3
yum install audacious-plugins-nonfree-wma

OK了,MP3也能放了
附上一文顺便解释一下关于MP3中文标签在LINUX乱码的问题:
[Amarok的中文支持到底是怎么回事]http://www.myswear.net/forum/viewthread.php?tid=7536&extra=page%3D10

[PHP开发环境配置]
apache 2.2.6
php 5.2.5

apache configure :
./configure –prefix=/usr/local/apache –enable-rewrite –enable-so

php configure :
./configure
–prefix=/usr/local/php
–with-apxs2=/usr/local/apache/bin/apxs
–enable-mbstring
–with-zlib
–with-gd
–with-mysql=shared
–with-sqlite=shared
–enable-pdo=shared
–with-pdo-sqlite=shared
–with-pdo-mysql=shared

/usr/kerberos/sbin:/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/gik/bin:/sbin

因为可能会经常改配置,所以把配置文件的链接弄到etc里,方便点,免得用起来还要输个长长的路径
ln -s /usr/local/php/lib/php.ini /etc/php.ini
ln -s /usr/local/apache/conf/httpd.conf /etc/httpd.conf

再编译PHP/PDO 什么的时候 有时候会出现 Cannot find MySQL header files under 之类的问题
解决方法: sudo ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config

[FIREFOX 字体问题]
F8 界面字体很小的,不知道被改过什么地方。
不管,直接动手术

cd ~/.mozilla/firefox/XXXXXXXX.default/chrome/
cp userChrome-example.css userChrome.css

修改浏览器界面字体
vi userChrome.css
加上这两行
*{ font-size:10pt; font-family:sans; }
menupopup > * { font-size:12pt; }

保存退出

再修改页面字体大小
cp userContent-example.css userContent.css
vi userContent.css
加上 body,input,button { font-size:12px; }

改完以后很多页面看着还是很奇怪,英文字体和中文字体大小参差不齐,查了一下 发现是DPI的问题
打开firefox进入 about:config
找到 layout.css.dpi , 这项默认为-1,据说值为-1的时候字体DPI为96(我们平时用的字体分辨率都是72),所以字体看起来会特别小

修改
layout.css.dpi = 0

好了 FIREFOX正常了

另外,如果是自己安装firefox会由于缺少 libstdc++.so.5 而运行不了 直接 yum install libstdc++.so.5 就行了

[ZEND安装问题]
装zend的时候出现新问题了,运行安装程序出现 “xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock failed”
据说是JDK导致的问题

解决办法:
还原到F7的libX11
rpm -e –nodeps libX11-1.1.3-4.fc8
rpm -e –nodeps libX11-devel-1.1.3-4.fc8

到http://rpm.pbone.net/找到下面那两个包 装上
rpm -ivh libX11-1.0.3-8.fc7.i386.rpm
rpm -ivh libX11-devel-1.0.3-8.fc7.i386.rpm

再加上下面两行到 /etc/yum.conf,防止更新的时候又恢复到新版本
# List of packages to exclude from updates or installs
exclude=libX11 libX11-devel

[ZEND中文问题]
linux下安装的ZEND辑中文时会变成方块,这个问题是由于ZEND自带的JRE没有中文字体造成的
找到ZEND的安装目录
进入 jre/lib/fonts/
建立一个 fallback 目录
找点中文字体放进去就行了,我比较喜欢用宋体

[PHP extensions问题]
由于编译mysql,sqlite,pdo的时候用的是shared方式
所以还要在PHP.ini中设定相应的选项才行

编译的时候由于没有特别指定,所以.so文件产生的位置是在

PHP安装目录/lib/php/extensions/[no-debug-non-zts-20060613]
中括号括起的部分可能会变
还有,linux下面的extension是.so不是.dll哦。。。别搞错了,反正我自己是忘了。。哈哈。。。以前一直用静态编译
还有编译产生的so文件前面是没有 php_前缀的 不过php.ini里的是有的 一定要注意。。。表像我那么粗心

2008年的第一天补上。。。。

关于字体发虚的问题,其实主要体现是在中文字体上,还有默认用的好像是那个什么Mingliu的字体,在FIREFOX里面看起来好恶心哦。。。

恩。。。解决办法如下:

一、关闭部分大小的字体反锯齿功能
二、设置替换字体

具体。。。

/etc/fonts/conf.d/10-XXXXXXXX.conf

内容——————————————————————–
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!– /etc/fonts/conf.avail/50-user.conf file to configure system font access –>
<fontconfig>
<!–
   default settings for all fonts.
–>
<match target="font" >
<!– 打开字体的反锯齿即AA,大号字用AA会更美观   –>
       <edit mode="assign" name="antialias" >
           <bool>t</bool>
       </edit>
       <edit mode="assign" name="hintstyle" >
           <const>hintslight</const>
       </edit>
<!– 打开hint –>
       <edit mode="assign" name="hinting" >
           <bool>t</bool>
       </edit>
<!– 关闭autohint –>
       <edit mode="assign" name="autohint" >
           <bool>false</bool>
       </edit>
</match>

<!– 关闭 8到17号字体的AA –>
<match target="font" >
                <test compare="contains" name="lang" >
                        <string>zh-cn</string>
                        <string>zh-tw</string>
                        <string>ja</string>
                        <string>ko</string>
                </test>
                <test compare="more_eq" name="pixelsize" qual="any" >
                        <double>9</double>
                </test>
                <test compare="less_eq" name="pixelsize" qual="any" >
                        <double>14</double>
                </test>
                <edit mode="assign" name="antialias" >
                        <bool>false</bool>
                </edit>
</match>

<!– 解决英文字体间距过宽 –>
<match target="font">

                <test target="pattern" name="lang" compare="contains">
                        <string>zh-tw</string>
                        <string>zh-cn</string>
                        <string>ja</string>
                        <string>ko</string>
                </test>
                <edit name="spacing">
                        <const>proportional</const>
                </edit>
                <edit name="globaladvance">
                <bool>false</bool>
                </edit>
</match>

<!–
设定中文最小字号,使得小字的中文美观
–>
<match target="font" >
   <test name="family" qual="any" >
       <string>SimSun</string>
       <string>NSimSun</string>
       <string>SimHei</string>
       <string>AR PL ShanHeiSun Uni</string>
       <string>AR PL ZenKai Uni</string>
       <string>AR PL New Sung</string>
       <string>FZSongTi</string>
      <string>FZMingTiB</string>
       <string>FangSong_GB2312</string>
       <string>KaiTi_GB2312</string>
   </test>
   <test compare="more_eq" name="pixelsize" >
       <int>8</int>
   </test>
   <test compare="less_eq" name="pixelsize" >
       <int>12</int>
   </test>
   <edit compare="eq" name="pixelsize" >
       <int>12</int>
   </edit>
</match>
<!–
把serif ,sans,monospace的family(字体族)重新排序,适应中文用户的用字习惯
–>
   <alias>
      <family>serif</family>
      <prefer>
         <family>Times New Roman</family>
         <family>Nimbus Roman No9 L</family>
         <family>Luxi Serif</family>
         <family>Times</family>
   <family>Bitstream Vera Serif</family>
         <family>Simsun</family>
   <family>MingLiu</family>
         <family>WenQuanYi Bitmap Song</family>
   <family>AR PL ShanHeiSun Uni</family>
   <family>AR PL ZenKai Uni</family>
         <family>AR PL New Sung</family>
   <family>FZSongTi</family>
   <family>FZMingTiB</family>
         <family>Kochi Mincho</family>
         <family>AR PL SungtiL GB</family>
         <family>AR PL Mingti2L Big5</family>
         <family>Baekmuk Batang</family>
      </prefer>
   </alias>
   <alias>
      <family>sans-serif</family>
      <prefer>
   <family>Arial</family>
   <family>Verdana</family>
   <family>Tahoma</family>
   <family>Helvetica</family>
   <family>Bitstream Vera Sans</family>
         <family>SimSun</family>
   <family>MingLiu</family>
         <family>WenQuanYi Bitmap Song</family>
   <family>AR PL ShanHeiSun Uni</family>
   <family>AR PL ZenKai Uni</family>
         <family>AR PL New Sung</family>
   <family>FZSongTi</family>
   <family>FZMingTiB</family>
         <family>Kochi Gothic</family>
         <family>AR PL KaitiM GB</family>
         <family>AR PL KaitiM Big5</family>
         <family>Baekmuk Dotum</family>

      </prefer>
   </alias>
   <alias>
      <family>monospace</family>
      <prefer>
   <family>Courier New</family>
   <family>Courier</family>
         <family>Andale Mono</family>
         <family>Luxi Mono</family>
         <family>Nimbus Mono L</family>
   <family>Bitstream Vera Sans Mono</family>
   <family>NSimSun</family>
   <family>PMingLiu</family>
         <family>WenQuanYi Bitmap Song</family>
   <family>AR PL ShanHeiSun Uni</family>
   <family>AR PL ZenKai Uni</family>
         <family>AR PL New Sung</family>
   <family>FZSongTi</family>
   <family>FZMingTiB</family>
         <family>Kochi Gothic</family>
         <family>AR PL KaitiM GB</family>
         <family>Baekmuk Dotum</family>
      </prefer>
   </alias>
</fontconfig>
内容——————————————————————–

待续。。。。

Read: 755

[转]翻译: 高效率编辑器 VIM – 操作篇, 非常适合VIM新手

转自:http://srandy.yo2.cn/2007/07/21/%E7%BF%BB%E8%AF%91-%E9%AB%98%E6%95%88%E7%8E%87%E7%BC%96%E8%BE%91%E5%99%A8-vim-%E6%93%8D%E4%BD%9C%E7%AF%87-%E9%9D%9E%E5%B8%B8%E9%80%82%E5%90%88vim%E6%96%B0%E6%89%8B%E8%BD%AC/

虽然从很久前就开始用VIM了,但一直都是半调子,翻来覆去只用自己会的命令。最近为了提高书写代码的效率,还有coding时候的乐趣,又重新钻研了一下VIM,发现了一篇很好的VIM入门的文章,原文是英文版的,我觉得非常适合VIM使用入门,所以翻译了过来。这里是简单的介绍了VIM的操作方式,并没有说为什么要用VIM,如果你想知道答案可以去GoogleVIM被誉为编辑器之神。
原文的英文名是:Efficient Editing With vim (点击可以欣赏原文),本译文欢迎转贴,但请注明出处和译者Jay
现在开始~~


这篇教程写了在不同工作模式下使用VIM的一些基本技巧 — 即插入模式(insert mode), 命令模式(command mode), 存取文件等。目的是帮助刚刚接触VIM的新手更加有效率的使用这个出色的编辑器。

说明:在这篇文章里面,<C-X>代表Ctrl + X — 就是按住Ctrl键然后再按X。而且你可以在很多情况下使用 :help command 来获得大部分命令的帮助,这个是VIM的内部帮助文件命令。

高效率移动

在插入模式之外

基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面VIM就像一个“哑巴”编辑器一样。很多新手都会一直呆在插入模式里面,因为这 样易于使用。但VIM的强大之处在于他的命令行模式!你会发现,在你越来越了解VIM之后,你就会花越来越少的时间使用插入模式了。

使用 hjkl

使用VIM高效率编辑的第一步,就是放弃使用箭头键。使用VIM,你就不用频繁的在箭头键和字母键之间移来移去了,这会节省你很多时间。当你在命令 模式时,你可以用h,j,k,l来分别实现左,下,上,右箭头的功能。一开始可能需要适应一下,但一旦习惯这种方式,你就会发现这样操作的高效之处了。

在你编辑你的电子邮件或者其他有段落的文本时,你可能会发现使用方向键和你预期的效果不一样,有时候可能会一次跳过了很多行。这是因为你的段落在 VIM看来是一个大的长长的行。这时你可以在按h,j,k或者l之前键入一个g,这样VIM就会按屏幕上面的行如你所愿的移动了。

在当前行里面有效的移动光标

很多编辑器只提供了简单的命令来控制光标的移动(比如左,上,右,下,到行首/尾等)。VIM则提供了很多强大的命令来满足你控制光标的欲望。当光 标从一点移动到另外一点,在这两点之间的文本(包括这两个点)称作被“跨过”,这里的命令也被称作是motion。(简单说明一下,后面会用到这个重要的 概念)

这里是常用到的一些命令(motion):

fx:移动光标到当前行的下一个x处。很明显,x可以是任意一个字母,而且你可以使用;来重复你的上一个f命令。

tx:和上面的命令类似,但是是移动到x的左边一个位置。(这真的很有用)

Fx:和fx类似,不过是往回找。

w:光标往前移动一个词。

b: 光标往后移动一个词。

0: 移动光标到当前行首。

^:移动光标到当前行的第一个字母位置。

$: 移动光标到行尾。

):移动光标到下一个句子。

( : 移动光标到上一个句子。

在整个文件里面有效移动光标

VIM有很多命令,可以用来到达文件里面你想到达的地方。下面是一些在文件里面移动的命令:

<C-F>:向下移动一屏。

<C-B>:向上移动一屏。

G:到文件尾

numG:移动光标到指定的行(num)。(比如10G就是到第10行)

gg:到文件首

H:移动光标到屏幕上面

M:移动光标到屏幕中间

L:移动光标到屏幕下面

*:读取光标处的字符串,并且移动光标到它再次出现的地方。

#:和上面的类似,但是是往反方向寻找。

/text:从当前光标处开始搜索字符串text,并且到达text出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按n。

?text:和上面类似,但是是反方向。

ma:在当前光标的位置标记一个书签,名字为a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。

`a:到书签a处。注意这个不是单引号,它一般位于大部分键盘的1的左边。

`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。

高效的输入

使用关键词自动完成

VIM有一个非常漂亮的关键词自动完成系统。这表示,你可以输入一个长词的一部分,然后按一下某个键,然后VIM就替你完成了这个长词的输入了。举 个例子:你有一个变量名为 iAmALongAndAwkwardVarName 在你写的代码的某个地方。也许你不想每回都自己一个一个字母的去输入它。

使用关键词自动完成功能,你只需要输入开始几个字母(比如iAmAL),然后按<C-N>(按住Ctrl,再按N)或者<C-P>。如果VIM没有给出你想要的词,基本按,直到你满意为止,VIM会一直循环它找到的匹配的字符串。

聪明的进入插入模式

很多新手进入插入模式都只是用i。这样当然可以进入插入模式,但通常不是那么合适,因为VIM提供了很多进入插入模式的命令。下面是最常用的一些:

i:在当前字符的左边插入

I:在当前行首插入

a:在当前字符的右边插入

A:在当前行尾插入

o:在当前行下面插入一个新行

O:在当前行上面插入一个新行

c{motion}:删除motion命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。

d{motion}:和上面差不多,但是不进入插入模式。

有效的移动大段的文本

使用可视选择(visual selections)和合适的选择模式

不想最初的VI,VIM允许你高亮(选择)一些文本,并且进行操作。这里有三种可视选择模式:

v:按字符选择。经常使用的模式,所以亲自尝试一下它。

V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。

<C-V>:按块选择。非常强大,只在很少的编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。

在选择模式的时候使用上面所述的方向键和命令(motion)。比如,vwww,会高亮光标前面的三个词。Vjj将会高亮当前行以及下面两行。

在可视选择模式下剪切和拷贝

一旦你高亮了选区,你或许想进行一些操作:

d:剪贴选择的内容到剪贴板。

y:拷贝选择的内容到剪贴板。

c:剪贴选择的内容到剪贴板并且进入插入模式。

在非可视选择模式下剪切和拷贝

如果你很清楚的知道你想拷贝或者剪切什么,那你根本就不需要进入可视选择模式。这样也会节省时间:

d{motion}:剪切motion命令跨过的字符到剪贴板。比如,dw会剪切一个词而dfS会将从当前光标到下一个S之间的字符剪切至剪贴板。

y{motion}:和上面类似,不过是拷贝。

c{motion}:和d{motion}类似,不过最后进入插入模式。

dd:剪切当前行。

yy:拷贝当前行。

cc:剪切当前行并且进入插入模式。

D:剪切从光标位置到行尾到剪贴板。

Y:拷贝当前行。

C:和D类似,最后进入插入模式。

x:剪切当前字符到剪贴板。

s:和x类似,不过最后进入插入模式。

粘贴

粘贴很简单,按p。

使用多重剪贴板

很多编辑器都只提供了一个剪贴板。VIM有很多。剪贴板在VIM里面被称为寄存器(Registers)。你可以列出当前定义的所有寄存器名和它们的内容,命令为":reg"。最好使用小写字母来作为寄存器的名称,因为大写的有些被VIM占用了。

使用寄存器的命令为双引号“。

比如:我们要拷贝当前行到寄存器k。你应该按 "kyy。(你也可以使用 V"ky。为什么这样也可以呢?)现在当前行应该已经存在了寄存器k里面直到你又拷贝了一些东西进入寄存器k。现在你可以使用命令 "kp 来粘贴寄存器k里面的内容到你想要的位置。

避免重复

令人惊奇的 . 命令

在VI里面,输入 . (小数点符号),将会重复你给入的上一个命令。比如,你上个命令为 ‘dw’(删除一个词),VI将会接着再删除一个词。

使用数字

使用数字也是VIM强大的而且很节省时间的重要特性之一。在很多VIM的命令之前都可以使用一个数字,这个数字将会告诉VIM这个命令需要执行几次。比如:

3j 将会把光标向下移动三行。

10dd 将会删除十行。

y3" 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。

数字是扩展motion命令作用域非常有效的方法。

记录宏

有时候,你会发现你自己在文章的每段或者每行都重复相同的一系列动作。VIM允许你记录一个宏来完成你的特殊需要。

qregister记录宏到寄存器register,这里register是任意的你的寄存器的名字。比如qa,将会记录并且把宏存在寄存器a里面。

q:结束宏的记录。

@register:使用存在寄存器register的宏。比如@a,将会使用存在寄存器a里面的宏。

必须要记住的是,宏只记录了你的系列按键并且重复执行它们。它们不是魔法。因为在VIM里面完成目的的方法有很多,所以有时候你要小心选择命令来记录你的宏。因为它们会在所有你要执行它的地方执行。

用VIM写代码

VIM是一个绝好的编辑器来写代码,因为它有一些特性是专门为程序员而设。这里是一些常用的:

]p:和p的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。试一下!

%:匹配花括号,方括号,括号等。在一个括号的上面,然后按%,鼠标就会出现在匹配的另外一半括号处。

>>:缩进所有选择的代码

<<:和上面类似,但是反缩进

gd:到达光标所在处函数或者变量的定义处。

K:在Man里面查找光标当前所在处的词。

Read: 899

[转]Linux系统Shell程序设计的流程控制

和其他高级程序设计语言一样,Shell提供了用来控制程序执行流程的命令,包括条件分支和循环结构,用户可以用这些命令创建非常复杂的程序。

  与传统语言不同的是,Shell用于指定条件值的不是布尔运算式,而是命令和字串。

  1.测试命令

  test命令用于检查某个条件是否成立,它可以进行数值、字符和文件3个方面的测试,其测试符和相应的功能分别如下。

  (1)数值测试:

  -eq 等于则为真。

  -ne 不等于则为真。

  -gt 大于则为真。

  -ge 大于等于则为真。

  -lt 小于则为真。

  -le 小于等于则为真。

  (2)字串测试:

  = 等于则为真。

  != 不相等则为真。

  -z字串 字串长度伪则为真。

  -n字串 字串长度不伪则为真。

  (3)文件测试:

  -e文件名 如果文件存在则为真。

  -r文件名 如果文件存在且可读则为真。

  -w文件名 如果文件存在且可写则为真。

  -x文件名 如果文件存在且可执行则为真。

  -s文件名 如果文件存在且至少有一个字符则为真。

  -d文件名 如果文件存在且为目录则为真。

  -f文件名 如果文件存在且为普通文件则为真。

  -c文件名 如果文件存在且为字符型特殊文件则为真。

  -b文件名 如果文件存在且为块特殊文件则为真。

  另外,Linux还提供了与(!)、或(-o)、非(-a)三个逻辑操作符,用于将测试条件连接起来,其优先顺序为:!最高,-a次之,-o最低。

  同时,bash也能完成简单的算术运算,格式如下:

  $[expression]

  例如:

  var1=2

  var2=$[var1*10+1]

  则var2的值为21。

  2.if条件语句

  Shell程序中的条件分支是通过if条件语句来实现的,其一般格式为:

  if 条件命令串

  then

  条件为真时的命令串

  else

  条件为假时的命令串

  fi

  3.for循环

  for循环对一个变量的可能的值都执行一个命令序列。赋给变量的几个数值既可以在程序内以数值列表的形式提供,也可以在程序以外以位置参数的形式提供。for循环的一般格式为:

  for变量名    [in数值列表]

  do

  若干个命令行

  done

  变量名可以是用户选择的任何字串,如果变量名是var,则在in之后给出的数值将顺序替换循环命令列表中的$var。如果省略了in,则变量var的取值将是位置参数。对变量的每一个可能的赋值都将执行do和done之间的命令列表。

  4.while和until循环

  while和until命令都是用命令的返回状态值来控制循环的。While循环的一般格式为:

  while

  若干个命令行1

  do

  若干个命令行2

  done

  只要while的“若干个命令行1”中最后一个命令的返回状态为真,while循环就继续执行do…done之间的“若干个命令行2”。

  until命令是另一种循环结构,它和while命令相似,其格式如下:

  until

   若干个命令行1

  do

   若干个命令行2

  done

  until循环和while循环的区别在于:while循环在条件为真时继续执行循环,而until则是在条件为假时继续执行循环。

  Shell还提供了true和false两条命令用于创建无限循环结构,它们的返回状态分别是总为0或总为非0。

  5.case条件选择

  if条件语句用于在两个选项中选定一项,而case条件选择为用户提供了根据字串或变量的值从多个选项中选择一项的方法,其格式如下:

  case string in

  exp-1)

  若干个命令行1

  ;;

  exp-2)

   若干个命令行2

  ;;

  ……

  *)

  其他命令行

  esac

  Shell通过计算字串string的值,将其结果依次和运算式exp-1, exp-2等进行比较,直到找到一个匹配的运算式为止。如果找到了匹配项,则执行它下面的命令直到遇到一对分号(;;)为止。

  在case运算式中也可以使用Shell的通配符(“*”、“?”、“[ ]”)。通常用 * 作为case命令的最后运算式以便在前面找不到任何相应的匹配项时执行“其他命令行”的命令。

  6.无条件控制语句break和continue

  break用于立即终止当前循环的执行,而contiune用于不执行循环中后面的语句而立即开始下一个循环的执行。这两个语句只有放在do和done之间才有效。

  7.函数定义

  在Shell中还可以定义函数。函数实际上也是由若干条Shell命令组成的,因此它与Shell程序形式上是相似的,不同的是它不是一个单独的进程,而是Shell程序的一部分。函数定义的基本格式为:

  functionname

  {

   若干命令行

  }

  调用函数的格式为:

  functionname param1 param2…

  Shell函数可以完成某些例行的工作,而且还可以有自己的退出状态,因此函数也可以作为if, while等控制结构的条件。

  在函数定义时不用带参数说明,但在调用函数时可以带有参数,此时Shell将把这些参数分别赋予相应的位置参数$1, $2, …及$*。

  8.命令分组

   在Shell中有两种命令分组的方法:()和{}。前者当Shell执行()中的命令时将再创建一个新的子进程,然后这个子进程去执行圆括弧中的命令。 当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、当前工作目录等)的改变影响到下面语句的执行时,就应该把这些命令放在圆括弧 中,这样就能保证所有的改变只对子进程产生影响,而父进程不受任何干扰。{}用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。当我们要 真正使用圆括弧和花括弧时(如计算运算式的优先顺序),则需要在其前面加上转义符()以便让Shell知道它们不是用于命令执行的控制所用。

  9.信号

  trap命令用于在Shell程序中捕捉信号,之后可以有3种反应方式:

  (1)执行一段程序来处理这一信号。

  (2)接受信号的默认操作。

  (3)忽视这一信号。

  trap对上面3种方式提供了3种基本形式:

  第一种形式的trap命令在Shell接收到与signal list清单中数值相同的信号时,将执行双引号中的命令串。

  trap ‘commands’ signal-list

  trap "commands" signal-list

  为了恢复信号的默认操作,使用第二种形式的trap命令:

  trap signal-list

  第三种形式的trap命令允许忽略信号:

  trap " " signal-list

  注意:

  (1)对信号11(段违例)不能捕捉,因为Shell本身需要捕捉该信号去进行内存的转储。

  (2)在trap中可以定义对信号0的处理(实际上没有这个信号),Shell程序在其终止(如执行exit语句)时发出该信号。

  (3)在捕捉到signal-list中指定的信号并执行完相应的命令之后,如果这些命令没有将Shell程序终止的话,Shell程序将继续执行收到信号时所执行的命令后面的命令,这样将很容易导致Shell程序无法终止。

   另外,在trap语句中,单引号和双引号是不同的。当Shell程序第一次碰到trap语句时,将把commands中的命令扫描一遍。此时若 commands是用单引号括起来的话,那么Shell不会对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具体 的值来替换。

Read: 682

什么是开放源码技术?

该 指南将开放源码的所有基础知识放入上下文中,帮助您开始了解当今范围最广的、并且在不断扩大的软件开发的动态领域。developerWorks 的开放源码专区是获得 how-to 信息、工具和项目更新的一个好地方,这些信息有助于您利用开放源码技术进行开发,并将它们与 IBM 产品结合使用。主题区包括 EclipseApache DerbyApache Geronimo、脚本语言(如 PHPPython 文章Python 教程Perl 文章Perl 文章),以及关于 开放源码许可 和开放源码开发的更广泛讨论。

 

什么是开放源码技术?
概括地说,开放源码是一种协作。更具体地说,它是软件项目上的公共协作。IBM 在开放源码方面作出了巨大贡献,奉献了 120 多个项目,其中包括耗资超过 10 亿的 Linux® 开发。根据开放源码促进会(Open Source Initiative,OSI)的定义,可将开放源码定义为:“开放源码通过支持源代码的独立同业互查(independent peer review)和快速发展演变提高了软件的可靠性和质量。要通过 OSI 认证,软件必须在获得许可证的情况下发布,该许可证可保证免费读取、重新发布、修改和使用该软件的权利。”

开放源码还经常应用于个人、组织和公司的民众运动,寻求将这类软件融入主流应用的方法。根据 开放源码促进会 的定义,开放源码由 10 点组成,下面对这 10 点进行了复述。开放源码并不只意味着访问源代码。开放源码软件的发布(distribution)条款必须遵从以下标准:

1. 免费重新发布
当软件是几个不同来源的程序集成后的软件发行版本中的其中一个组件时,许可证不能限制任何团体销售或分发该软件,并且不能向这样的销售或分发收取许可费和其他费用。

2. 源代码
程序必须包含源代码,并且必须允许以源代码或已编译的形式发布。如程序在发布时未带源代码,则必须以一种非常公开的方式,在不超过合理重造成本的情况下, 让人们获得源代码,例如可以在不收取费用的情况下,放在网络上供人们下载。源代码无疑是编程人员最容易修改程序的形式。不允许故意混乱源代码。也不允许使 用中间形式,比如预处理器或转换器的输出。

3. 衍生产品
许可证必须允许修改原产品和衍生产品,并且必须允许在与原始软件相同的授权情况下发布修改过的产品。

4. 作者的源代码的完整性
许可证可以禁止他人以修改过的形式发布源代码,只在该许可证基于修改程序的目的时,才允许随源代码发布 “补丁文件”。该许可证必须明确允许发布根据修改过的源代码构建的软件。许可证可能要求衍生产品必须附加不同于原始软件的名称或版本号。

5. 不得歧视任何人或团体
许可证不得歧视任何人或任何团体。

6. 不得歧视程序在任何领域内的使用
许可证不得禁止任何人在特定领域内使用某一程序。例如,不得禁止程序在商业上的应用,或者在基因研究上的使用。

7. 许可证的发布
附加在程序上的权利必须应用于那些使用重新发布的程序的人,无需通过其他人额外加以授权使用。

8. 许可证不得专属于特定产品
附属于程序的权利不得仅限于作为特定软件发行版一部分的程序。如果程序衍生自该发行版并以获得该程序的授权的名义被使用或发布,则使用重新发布的该程序的其他所有人应该享有原始软件发行版本中所授予的那些权利。

9. 许可证不得对其他软件加以限制
许可证不得对其他随已许可的软件一起发布的软件附加任何限制。例如,不得规定在相同媒体上发布的其他所有程序接受该许可证的限制。

10. 许可证必须是技术中立的
任何许可证规定都不可以基于任何单独某项技术或界面风格。

请参阅 developerWorks 文章 “开放源码许可,第 1 部分: 意图” 和 “开放源码许可,第 2 部分: 学术许可与互惠许可”,以获得额外的信息。

回页首
开放源码技术为什么那么重要?
开放源码软件最初吸引大多数计算机用户注意的是它的价格。开发源码程序通常是由作者捐献的。不过,零支付成本不是开放源码软件的本质。

有一些实际的、辨证性的讨论有助于您理解开放源码开发:

  1. 开放源码程序允许开发人员查看代码,看看它是否可以改良,然后用于用户自己的程序中。来自世界各地的贡献者可以贡献和提供翻译、文档、bug 报告和其他形式的帮助。一些想法的免费交换加速了软件的发展。
  2. 根据 GNU Manifesto,人们有权利获得计算机程序的人类可读形式。
回页首
什么是 FOSS?
FOSS 指 “免费和开放源码软件”(Free and Open Source Software)。该术语用于那些满足 freeopen source 中的定义的软件(当不需要对这两个定义进行区分时)。
回页首
开放源码与 “免费啤酒” 和 “自由言论” 有何关系?
英语单词 “free” 在其意思表达上有所取巧,既有自由 的含义,也有免费 的意思,即获取者不需花费任何成本的意思。当开放源码的支持者登上临时演讲台时,他们通常必须对其评论发表一个序言,让听众知道演讲者所指的 “free” 是 “自由言论” 中的自由,还是 “免费啤酒” 中的免费,这是一个策略问题。因为任何大学生都可以作报告,所以一些人必须承担酿制啤酒(或软件)的成本,而另一些人则免费享用啤酒(或软件)。
回页首
如何入门开放源码?
开始开发开放源码软件的决定是一个政治决定和许可决定,至少是一个技术上的决定。请参阅 受支持的开放源码许可证 的 OSI 列表,使您的选择满足您的需求和项目计划。请参阅 developerWorks 文章 “开放源码许可,第 1 部分: 意图” 和 “开放源码许可,第 2 部分: 学术许可与互惠许可”,以获得额外的信息。如果发现现有许可证中的一些条款让您感到迷惑,或者遇到一些问题,那么您可以咨询知识产权方面的专业律师。

在 2005 年初,开放源码许可证并不像社区所预言的那样杰出,尽管不清楚该预言是否更多的只是一种希望,而非一种预期。

回页首
什么是 LAMP?
LAMP 代表着 Linux、Apache、MySQL 和 PHP。不过,根据您所谈论的对象,P 可能代表着 Perl 或 Python。通常,P 被假定为 PHP。LAMP 还具有更深远的意义。LAMP 代表了创建基于服务器的应用程序的非专有的灵活方式。每个由该术语组成的程序都可以用一个最符合应用程序需要的代用品来替代。每个组件都可以单独升级,尽 管这通常是非常小心地、有计划地进行的。最棒的是,LAMP 中的所有程序都是免费的,或者说既是免费的也是自由的。

developerWorks 提供了一些极好的关于 LinuxApache 文章Apache 教程MySQLPHPPython 文章Python 教程Perl 文章Perl 文章

回页首
开放源码是用哪种语言编写的?
所有语言都可以用来编写开放源码。开放源码背后的技术不是开放源码最重要的元素。最重要的元素是作者的决定,或者是将软件发布为开放源码并使用许多开放源码许可证之一的作者。

回页首

Read: 731