IT博客-darkstaxhttp://www.cnitblog.com/darkstax/slackware linuxzh-cnTue, 23 May 2017 06:48:50 GMTTue, 23 May 2017 06:48:50 GMT60The grep Commandhttp://www.cnitblog.com/darkstax/archive/2007/11/07/35983.htmldarkstaxdarkstaxWed, 07 Nov 2007 08:36:00 GMThttp://www.cnitblog.com/darkstax/archive/2007/11/07/35983.htmlhttp://www.cnitblog.com/darkstax/comments/35983.htmlhttp://www.cnitblog.com/darkstax/archive/2007/11/07/35983.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/35983.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/35983.html 4.1. The grep Command
Previous Section  < Day Day Up >  Next Section

4.1. The grep Command

4.1.1 The Meaning of grep

The name grep can be traced back to the ex editor. If you invoked that editor and wanted to search for a string, you would type at the ex prompt:

: /pattern/p

The first line containing the string pattern would be printed as "p" by the print command. If you wanted all the lines that contained pattern to be printed, you would type:

: g/pattern/p

When g precedes pattern, it means "all lines in the file," or "perform a global substitution."

Because the search pattern is called a regular expression, we can substitute RE for pattern and the command reads

: g/RE/p

And there you have it: the meaning of grep and the origin of its name. It means "globally search for the regular expression (RE) and print out the line." The nice part of using grep is that you do not have to invoke an editor to perform a search, and you do not need to enclose the regular expression in forward slashes. It is much faster than using ex or vi.

4.1.2 How grep Works

The grep command searches for a pattern of characters in a file or multiple files. If the pattern contains whitespace, it must be quoted. The pattern is either a quoted string or a single word,[1] and all other words following it are treated as filenames. Grep sends its output to the screen and does not change or affect the input file in any way.

[1] A word is also called a token.

FORMAT

grep word filename filename

Example 4.1.
grep Tom /etc/passwd

EXPLANATION

Grep will search for the pattern Tom in a file called /etc/passwd. If successful, the line from the file will appear on the screen; if the pattern is not found, there will be no output at all; and if the file is not a legitimate file, an error will be sent to the screen. If the pattern is found, grep returns an exit status of 0, indicating success; if the pattern is not found, the exit status returned is 1; and if the file is not found, the exit status is 2.

The grep program can get its input from a standard input or a pipe, as well as from files. If you forget to name a file, grep will assume it is getting input from standard input, the keyboard, and will stop until you type something. If coming from a pipe, the output of a command will be piped as input to the grep command, and if a desired pattern is matched, grep will print the output to the screen.

Example 4.2.
ps -ef | grep root

EXPLANATION

The output of the ps command (ps 杄f displays all processes running on this system) is sent to grep and all lines containing root are printed.

4.1.3 Metacharacters

A metacharacter is a character that represents something other than itself. ^ and $ are examples of metacharacters.

The grep command supports a number of regular expression metacharacters (see Table 4.1) to help further define the search pattern. It also provides a number of options (see Table 4.2) to modify the way it does its search or displays lines. For example, you can provide options to turn off case sensitivity, display line numbers, display errors only, and so on.

Example 4.3.
grep -n  '^jack:' /etc/passwd

Table 4.1. grep's Regular Expression Metacharacters

Metacharacter

Function

Example

What It Matches

^

Beginning-of-line anchor

'^love'

Matches all lines beginning with love.

$

End-of-line anchor

'love$'

Matches all lines ending with love.

.

Matches one character

'l..e'

Matches lines containing an l, followed by two characters, followed by an e.

*

Matches zero or more characters preceding the asterisk

' *love'

Matches lines with zero or more spaces, followed by the pattern love.

[ ]

Matches one character in the set

'[Ll]ove'

Matches lines containing love or Love.

[^]

Matches one character not in the set

'[^A朘]ove'

Matches lines not containing a character in the range A through K, followed by ove.

\<

Beginning-of-word anchor

'\<love'

Matches lines containing a word that begins with love.

\>

End-of-word anchor

'love\>'

Matches lines containing a word that ends with love.

\(..\)

Tags matched characters

'\(love\)ing'

Tags marked portion in a register to be remembered later as number 1. To reference later, use \1 to repeat the pattern. May use up to nine tags, starting with the first tag at the leftmost part of the pattern. For example, the pattern love is saved in register 1 to be referenced later as \1.

x\{m\}
x\{m,\}
x\{m,n\}[a]

Repetition of character x: m times, at least m times, or between m and n times

'o\{5\}'
'o\{5,\}'
'o\{5,10\}'

Matches if line has 5 occurences of o, at least 5 occurences of o, or between 5 and 10 occurrences of o.


[a] The \{ \} metacharacters are not supported on all versions of UNIX or all pattern-matching utilities; they usually work with vi and grep.

Table 4.2. grep's Options

Option

What It Does

Precedes each line by the block number on which it was found. This is sometimes useful in locating disk block numbers by context.

Displays a count of matching lines rather than displaying the lines that match.

Does not display filenames.

Ignores the case of letters in comparisons (i.e., upper- and lowercase are considered identical).

Lists only the names of files with matching lines (once), separated by newline characters.

Precedes each line by its relative line number in the file.

Works silently, that is, displays nothing except error messages. This is useful for checking the exit status.

Inverts the search to display only lines that do not match.

Searches for the expression as a word, as if surrounded by \< and \>. This applies to grep only. (Not all versions of grep support this feature; e.g., SCO UNIX does not.)


EXPLANATION

Grep searches the /etc/passwd file for jack; if jack is at the beginning of a line, grep prints out the number of the line on which jack was found and where in the line jack was found.

4.1.4 grep and Exit Status

The grep command is very useful in shell scripts, because it always returns an exit status to indicate whether it was able to locate the pattern or the file you were looking for. If the pattern is found, grep returns an exit status of 0, indicating success; if grep cannot find the pattern, it returns 1 as its exit status; and if the file cannot be found, grep returns an exit status of 2. (Other UNIX utilities that search for patterns, such as sed and awk, do not use the exit status to indicate the success or failure of locating a pattern; they report failure only if there is a syntax error in a command.)

In the following example, john is not found in the /etc/passwd file.

Example 4.4.
1   % grep 'john' /etc/passwd          # john is not in the passwd file
2   % echo $status      (csh)
    1

or

2   $ echo $?           (sh, ksh)
     1

EXPLANATION

  1. Grep searches for john in the /etc/passwd file, and if successful, grep exits with a status of 0. If john is not found in the file, grep exits with 1. If the file is not found, an exit status of 2 is returned.

  2. The C shell variable, status, and the Bourne/Korn shell variable, ?, are assigned the exit status of the last command that was executed.

    Previous Section  < Day Day Up >  Next Section


    darkstax 2007-11-07 16:36 发表评论
    ]]>
    界面的困惑http://www.cnitblog.com/darkstax/archive/2007/05/11/26895.htmldarkstaxdarkstaxFri, 11 May 2007 11:45:00 GMThttp://www.cnitblog.com/darkstax/archive/2007/05/11/26895.html前言

    想着从业几年来,我的困惑比我交的女朋友甚至是认识的女孩子多多了。开始为学习一种什么样的语言发愁。后来由于项目用C语言我没的选择只好从PasicalVB转业。在偶尔的机会要让我做一个把各种复杂结构的数据串行和重组,苦于C语言实现的复杂低效,我进入了C++的大门。再到后来,发现公司牛人不少却发现项目管理一团糟,所以迷上了软件工程。觉得软件工程的确要严格遵守。严格的经历过瀑布式开发,尝试着进行了迭代式开发,最后发现结果仍然不是想象的那么好。国内那红火的ISO9000CMM我还没怎么经历它就从媒体上冷却了。Bug依然是一波接一波。于是觉得自己的设计能力不够强。于是乎,执着于设计模式,重构方法。别人敲响了过度设计的警钟,老板也告诉自己做的这个精巧的采用了新技术的软件不够赚钱。在讨论是否将软件嵌入系统内核中间时,在看别人用很老套的方法写的软件却很赚钱时,我突然发现,纯追求技术的高精度,高难度是吃力不讨好的。你的方法再先进,你的设计再严密,最终还是用户说了算。用户从来不会认为你那个搜索引擎架构如何之好代码如何漂亮对他有多重要,他们只需要有有一个文本输入框能输入文字然后一点搜索就能找到他们的最想就可以了。他们从来不觉得一个简单的文本框配上一个强大的搜索引擎是不伦不类,鲜花插在牛粪上。同样,无论你是小作坊开发,无论你用最拙劣的实现方法,用户是不关心的。用户最关心这个软件是自己需要的吗?好用不?便宜吗?只有他们满意了,他们掏腰包了,你的价值才实现了。

    怎么让用户满意,这个问题简直就如爱情的哲学一样复杂。我只想说点简单的、容易找到资料的,就形成了以下的有关于人机界面的文章。重点的地方我会注明来源,好让你们看不懂了再重新看看原著理解理解。J


    良好界面的重要性

    想一想Windows发展的历史,从那种命令行模式的DOS,再到DOS环境下运行win命令出现Windows窗口的Windows 3.1,再到Windows 95,再到Windows NT XP等等,微软靠一次又一次的升级造就了今日的微软帝国。似乎用户也是特别的傻,他们一边抱怨新的操作系统让他的机器落后于时代,一边抱怨Windows就是病毒,一边又忙不迭的安装升级包,为了装一个操作系统去更新他们机器的硬件配置。是微软逼它们的吗?显然不是。Windows的成功真正的原因大体来说应该是在于它不断的满足了用户的需要,不断的提高程序的可用性,不断的提高了界面的易用性,并且采取了有效的市场推销策略。

    总的来说,软件不成功的原因可能不尽相同,但软件成功的有一点是相似的:它们都具有友好的界面。

    好的界面不仅仅是好看,也是软件成功的必要条件。你在界面的投入不仅仅在于满足软件现有用户的需要和支持,而且可以争取更多的用户使用你的软件。所以,你在界面的投入直接影响到软件现在及将来的市场。

    随着计算机硬、软件环境的不断提高,用户对界面的易用性,美观性要求也会逐步的提高;如果你的应用程序的声音现在还是那种PC扬声器发出的嘟嘟声,你的程序还是256色位图,你的程序在1280x768的分辨率下乱糟糟的,这样的程序(除了CMOS配置程序)会有人用吗?对于功能差不多的媒体播放器软件如Winamp, Windows Media PlayerQuickTimeRealOne Player,如果要你付钱的话,你究竟会买那一个?我想,你可能会选操作最简便的那个吧。再者,如果你的软件产品是一种新型技术的产品,比如说是现在的智能手机软件,你如何让用户更快的上手呢?(你可以调查一下周围的手机操作界面,你发现不同品牌的软件操作方式大相径庭,键盘布局变化无穷,你就会发现手机是一种很难用的东西)。如何让你的软件的用户更快的享受到你所创造的价值呢?

    如果你的软件在国内卖得很好而你想扩大市场,你想走向海外。你要做些什么呢?你只要将你的软件和文档翻译成各国语言就可以了吗?不,不,绝对不是如此。为了让你的外国用户使用上手,为了降低你的客户支持成本,你必须想办法让你的软件更符合外国用户的使用习惯,不能有因文化差异而造成软件的误用。让你的软件操作方式尽可能的与操作系统的操作方式一致,这会降低你的服务成本同时更快的让用户上手,而且可以吸引更多的用户使用你的软件。

    所以说,用户界面的好坏直接影响产品的竞争力,所以,在推出市场之前,我们要关注人机交互界面的设计。

    下面,我就简单的说说用户界面的设计原则。这很多来源于《Windows用户体验》一书入门章节。

    用户界面的设计原则――用户为中心

    一切在用户掌控之中

    一个用户界面设计的原则是用户应该感觉是自己在控制软件而不是软件在控制他们。这有几点说明:

    1.  操作的主体是人而不是软件或者计算机。程序可以自动执行一些任务,但用户可以控制这些任务。

    1 Windows XP服务控制窗口。Windows服务进程不能通过任务管理器里杀掉,但大多数服务仍然可以通过服务管理器把它停止。请同时注意Windows考虑到这些高级控制的复杂性,特别为普通用户提供了解释信息以及还有命令超链接。

    2.  由于用户自身的不同情况和喜好,界面必须允许用户做一些个性化设定。操作系统在这方面提供了很多途径让用户自由设定。所以,你的软件必须适应于由于用户更改了系统的诸如颜色,字体等属性而引起的变化。

    2 Microsoft Office Word 2003 选项对话框给用户提供了个性化设置的接口

    3.  你的程序应该尽可能的保持互动性能。应尽量避免程序处于不可操纵状态。不可操纵状态是指某个时刻限制用户做某些操作或者根本不允许用户操作。比如说,你尽量应该不让光标变成沙漏状态(当然,如果需要沙漏状态时,要一定将光标变为沙漏状态);还有,尽量让负载进程在后台运行而让界面仍处于可交互状态。比如打印时虽可能不能重新打开别的文档但还是可以最小化窗口。

    3 Windows XP在更改桌面主题时整个桌面的变化。这时候虽然用户不能操作计算机,但Windows提供了非常好的反馈,特别是那个从彩色渐变到全灰度图片的场面让人过目不忘。

    直观性

    软件的设计目标应该是让用户直接看到操作的结果。无论是用户拖放一个目标对象移动位置或是将打开的文档翻页,用户都应该直接从屏幕上看到他们所操作的结果。可视化的信息和选择可以减轻用户负担。

    使用相类似的比喻可以更直接和直观的让用户操作对象。比喻可以更容易的帮助用户预测要发生的结果和更快的让用户掌握软件的使用方法。

    当使用比喻的时候,你没必要严格与现实情况一一对应。比如说,不像普通的文件夹,计算机中的文件夹就可以将打印机、计算器等归类到一起。

            

    4 微软Windows XP回收站图标与苹果Mac OS X垃圾箱图标有异曲同工之妙。只不过Mac OS X的垃圾箱实在是漂亮,真想取下来拿回家里用。J

    一致性

    一致性允许用户将老知识和经验应用到新的环境中,这样保证了用户学得更快,更加将注意力集中到未解决问题上,因为他们并不需要花时间记忆使用过程中得差别。通过一种稳定的、一致的延续,可以让用户对界面产生熟悉的感觉和更加明确的预测交互的结果。

    界面中的所有元素都需要保持一致性,包括命令的格式,信息的可视化表示,操作方式,在屏幕和窗口中的组件的摆放等。为了将一致性切实落实到软件之中,你必须要考虑以下几点:

    1.  程序内部保持一致:对于常用的功能要使用大体一致的命令和界面。就"拷贝"命令来说吧,要避免在一处采取直接执行的方式而在另一处则通过弹出一个对话框要求用户输入目标地址然后拷贝的方式。也就是说,同一个命令在所有地方的操作方式都应该是一致的。

    2.  和操作系统行为保持一致:操作系统力求所有的交互都达到一个高度的一致,这样如果你的程序的交互行为和操作系统一致,用户就不用学习新的东西就能使用你的软件。

    3.  采用一致的比喻:如果喻体的某些行为和本体的行为不大一致,用户就会对两种事物的联系感到困惑。比如说,如果将一个东西从焚化炉和从垃圾箱中取出,那意义是绝对不一样的。

    当然,界面兼容历史版本的一致性(显示一致性,操作一致性)有时也会造成软件维护和维护添加新功能的困难。其实界面设计和程序设计一样,也需要考虑可扩展性。可扩展性也可以说是一致性的延伸能力的体现。如何提高界面的一致性和可扩展性,也是一个非常值得考虑的问题。纸短话长,就此打住。

    容错性

    用户喜欢尝试着使用一个软件。有效的界面设计会和用户交互从而帮助用户使用这个软件:它们只将可以操作的选项列出,而会让那些使系统或数据发生潜在危险或破坏的命令在执行之前警告用户,而更好的界面则提供了回退或恢复的行为。如很多编辑软件中的回退(Undo)功能。

    即使是设计的最好的界面,用户也会有误操作。原因有可能是物理操作失误(比如说点击了错误的命令或数据操作失误),也可能是而由于意识上的错误(比如用户对命令或数据做了一个错误的决定)。一个有效的设计会消除导致用户误操作的可能性。当然也可以允许用户犯错误而你要提供一个方法使得用户可以从错误状态恢复。

    5  Adobe Photoshophistory控制面板。用户的每一步操作都会在控制面板中所反映。如果用户觉得某个上面的某个操作不当,可以点击该项,通过右键菜单取消这个操作;也可以通过将此项拖到右下角的垃圾箱图标中取消这个操作及以后的所有操作。

    反馈

    总是要对用户的操作提供反馈。好的反馈是输入的响应结果,也是区别不同操作的特征。好的反馈是适时的并且尽可能的符合用户交互的习惯。即使计算机正在执行一个特别的任务,也要告诉用户当前的运行状态并且可能的话提供一个"取消"的命令。没有哪个界面比一个失去响应的屏幕更让用户烦心了。一般的用户对这种状态只能有几秒的容忍时间。

    当然,使用合适的反馈也是同等重要的。你可以使用光标指针形状的变化或者状态栏信息来表示一些简单的信息;而对于一些复杂的任务,你可能需要显示一个进度条或者消息框来表示反馈。

    6 Windows XP的搜索对话框使用列表式文字言简意赅的说明系统现在的动作,同时配以造型生动的动画增加趣味性,从而提供了充分的反馈来缓和用户因为长时间等待而产生的焦虑;同时提供"停止"命令来允许用户随时取消命令。

    美学

    视觉设计是程序界面设计的一大部分。可视化属性对于交互中特定的对象提供了有价值的印象和交流。同时也一定要注意到在屏幕上显示的每一个可视元素都会夺取用户的注意力。每个元素一定要给用户提供一个清晰而又一致的环境从而让用户理解界面提供给用户的信息。图像及视觉效果的技巧对于设计来说具有不可估量的作用。

    换句话说,避免在界面上安排过多的信息。尤其要谨慎使用色彩、声音和图像,设计者往往倾向于使用过多的这类表示而导致界面混杂,这不但不能帮助用户寻找相关信息,反而会分散用户的注意力,让用户反感。

    7 Windows Media Player 9缺省界面保持它一贯的前版本的风格。整个方形的界面被几条曲线所风隔,并且每个区域都有各自的特色,或平面或立体或采用渐变。每个区域的对比度都是非常好的,使各自的内容非常清晰。主次功能的按钮由大小,排放位置来区别;有联系的按钮通过圆弧来连接表示它们的关系。总体来说,命令控制区域都用高光来强调而信息显示区域用柔和的颜色来填充。

    简单性

    对于多数非计算机专业用户来说,计算机仍是一种很难用的东西。软件的某些功能对于开发者来说太简单而用户却不可理寓的认为它很难操作;甚至某些用户找不到他们想用的功能;还有些用户根本不能描述他们想要做什么。

    许多用户都期望计算机应该是非常简单,易于操控,可靠。他们希望使用他们惯用的方法去操作他。所以,在你的软件中保持用户以往的操作习惯是一件很有价值的事。

    用户界面应该是简单的(但不是硬性删简),易学和易用的。界面应该提供了访问该程序的所有功能。创建强大的功能和保持界面简单是具有矛盾的,有效的设计做出了有效的折中。

    保持简单的一个方法是尽量压缩交流的信息。比如说,菜单命令及消息一定要简明扼要。词不达意或罗里罗嗦的信息会给用户发现想要的信息造成困难。另一个办法设计简单有效的界面原则便是使用自然的映射和语法。元素的摆放位置和显示状态会影响用户的理解。

    简单也和相似有关。相似的事物会让用户觉得简单。无论何时,都要将用户的现有知识和经验和要设计的软件联系起来,让用户感到熟悉而简单。

    8 这就是强大的搜索引擎Google的主界面的所有内容。无人不说它简单。它使用cookie可以将你的个性化设置记忆。同时为高级用户提供了高级搜索的入口。简单的界面没有忽略它的文化特色,它的logo图片反映了那天世界上发生的重大事情或者重大节日。

    你可以采用递近的信息显示方法(progressive disclosure)来降低界面的复杂度。递近的的显示方法就是仔细的组织信息从而让它只在需要它出现的时候它才出现。通过无用消息隐藏,使得用户减少了信息的处理量。比如,你可以使用菜单来显示命令项或选择项列表(平时则是隐藏的),也可以用对话框来显示选项列表(只有使用的时候才弹出)。

    递近的信息显示方法并不是说要采用新型方法来显示有意义信息,比如说需要一个组合键才能使用软件的某项常用功能或者要让用户进行一系列的交互才能让用户找到他想要的功能。如果是这样,这只能提高软件使用的难度。

    例 9 Microsoft Office Word 2003的在线帮助,每当F1呼出,它缺省出现在Word窗口右部。非常符合上述的条件。同一个界面通过有层次的信息及命令组织,巧妙的分别为初级,高级用户提供了对应的帮助接口。

    界面提高要点


    程序界面设计含盖了从用户运行安装程序开始安装,一直到用户卸载这个程序的全过程。安装程序要尽可能的简单及减少用户的干预;初次使用要给用户留下简单美观有效的好印象;当用户在安装之后决定不会马上卸载时(如果用户找不到卸载程序,他一定会对你恨之入骨),你的程序才有可能在这个计算机上安家落户。只有通过了这一关,你的软件才可能真正的发挥用处。这要讲的就更多了。省事起见,我就摘录了一些Windows界面的检查要点,出自MSDN所附的《Windows用户体验》一书的入门章节里:

         

    1 Windows User Experience一本如何写一个标准的Windows程序界面的好书

    1.         程序的安装步骤少而简单。

    2.         程序安装结束不需重新启动系统。

    3.         在使用程序之前,用户无须阅读Readme

    4.         用户创建的数据文件的缺省目录在"我的文档"里。

    5.         程序避免把有怪异文件名的文件让用户看到。

    6.         程序不会在"Program Files"文件夹之外创建文件夹。

    7.         程序不会在硬盘根目录下写文件。

    8.         如果程序使用磁盘缓存,那么应该在"磁盘清理工具"里注册。

    9.         在"开始"菜单中,不应该有"帮助"、"Readme"及"卸载"程序链接。

    10.     如果用户没有允许,程序不应该在桌面上创建快捷方式。

    11.     如果程序会在系统一开始就启动,启动过程中不应该有启动屏幕和弹出对话框。

    12.     程序不应该使用系统托盘区作为状态显示,启动程序和应用,或者查询程序属性的地方。系统托盘区是用来警告用户系统发生重大变化的地方。

    13.     如果用户通过"显示属性"设置了不同的显示色彩等方式,程序应该正常显示。

    14.     程序是可以使用键盘完全操作的。

    15.     系统缺省字体大小的改变不会造成程序字体显示不正常。

    16.     如果可行的话,程序支持标准快捷键(如AltF4等)。

    17.     如果文件、注册表值等不是用户创建的,那么程序创建的这些对象卸载后都应该全部消失。

    18.     程序中应该不会出现专业术语,除非用户能够正常理解这些术语。

    19.     如果用户改变了屏幕分辨率或到多显示器状态,程序应该自动调整并正常显示。

    看看您的程序能达到几条?如果您说上面的条条框框没什么意思,那我觉得您可能对挣钱不感兴趣J。



    darkstax 2007-05-11 19:45 发表评论
    ]]>
    图形用户界面的风花雪夜(下)http://www.cnitblog.com/darkstax/archive/2007/05/10/26836.htmldarkstaxdarkstaxThu, 10 May 2007 14:17:00 GMThttp://www.cnitblog.com/darkstax/archive/2007/05/10/26836.html阅读全文

    darkstax 2007-05-10 22:17 发表评论
    ]]>
    图形用户界面的风花雪夜(上)http://www.cnitblog.com/darkstax/archive/2007/05/10/26835.htmldarkstaxdarkstaxThu, 10 May 2007 14:04:00 GMThttp://www.cnitblog.com/darkstax/archive/2007/05/10/26835.html

    朋友,或许你在读这篇文章之前刚刚用过电脑,你用它工作,用它学习,用它玩游戏,用它上网。觉得它挺有意思,或是觉得它怎么那么难用。但如果我们追溯历史,却发现我们的先辈们为今天的成果做出了巨大的努力。这种动机或许为生存,或许为乐趣,或许为科学研究,或许为国家利益。先辈们的喜怒哀乐,苦甜辛酸都浸淫在这个鼠标,或是那个机箱里面。让我们这些后人们就顺着这个系列的文章,来缅怀一下先辈对图形用户界面所做出的巨大努力吧!

     

    纵观图形用户界面的出现,绝对不是偶然的,而是人类智慧的逐步积累,生产力逐步提高的结果。先辈们的想象力和激情,互助和学习等各种因素让图形用户界面逐步加速发展。根据Andries van Dam先生所说,人机交互的历史可以分为四个阶段:第一个阶段在1950年到1960年,计算机以批处理方式执行,主要的操作设备是打孔机和读卡机;第二个阶段从1960年一直到二十世纪八十年代早期,计算机以分时方式执行,主要的界面是命令行界面;第三个阶段大致从二十世纪七十年代早期直到现在仍然还在发展,主要的界面是图形用户界面,主要以鼠标操作那些使用桌面比喻的界面。界面元素有窗口,菜单,图标等等。第四个阶段除了有图形用户界面之外,如姿势识别,语音识别等等的先进交互技术的广泛应用。目前还处于孕育状态。

     

    下面,我们就来跳跃性的谈谈图形用户界面的发展的一些逸闻趣事,就当是一种消遣了。

    .雏形期的图形界面

    “窗口”的概念由于在计算机系统中出现实时图形显示设备而诞生,这第一次出现在SAGE工程及Ivan Sutherland博士发明的Sketchpad程序中。

    SAGE Project

    二十世纪五十年代,美国为冷战而开发了一套空中防御系统,名字就叫半自动地面防空系统(Semi-Automatic Ground Environment)。这个SAGE系统将计算机系统与复杂的雷达通讯系统结合起来,来进行美国空中防御,并且在美国国土的23个雷达站之间传输数据。每个雷达站都有自己的计算机及备份系统。由于SAGE使用了阴极射线管(CRT)作为显示设备,光笔作为获取出现在监视屏幕上的可疑飞行物的详细内容的工具而使用。也就是说,当光笔点到屏幕上的某些区域,电脑会显示出更加细节的内容。当然这个系统在实际上根本就没有发现敌机,因为战斗从来没有发生过,但这个系统的构建为许多参与的公司诸如IBM等积累了丰富的软件系统开发经验。

     

    图表  1 SAGE 系统的原型 Whirlwind I,由麻省理工学院开发,这个系统中已经使用光笔和显示器了。(图片来源:www.answers.com

    Sketchpad

    1963年,由Ivan Sutherland在完成博士毕业论文而开发的程序Sketchpad是一个具有历史意义的里程碑。它改变了人机交互界面的历史。Sketchpad被认为是计算机辅助设计(CAD)程序的鼻祖,也被认为是图形用户界面的出现的一个标志程序。在他的博士论文里,Ivan Sutherland论证了计算机图形图像可以用来作为人机界面的一个手段,这光是美学的需要,也是技术发展的目的。

     

    Sketchpad是第一个完全意义上使用图形用户界面的程序。它使用了xy座标系定点系统及光笔输入方法。并且,程序中首先使用“对象(object)”和“实例(instance)”概念,朝向面向对象编程迈出了一步。其中最主要的想法便是一个图形显示对象可以产生许多个具体实例;改变了这个图形显示对象之后其他的实例也因此改变。另一个发明便是用户在图形描绘过程中可以动态改变一个具体选择的几何图形属性。比如说,改变线段的长度或者两条直线相交的角度等等。

    二.智慧的碰撞

    Douglas Engelbart先生和On-Line 系统

    在以发明了鼠标而著名(还有一个叫William的英国合作伙伴)的科学家Douglas Engelbart的参与下,国际斯坦福研究院(Standford Research Institute International, SRI International)在二十世纪六十年代开发了On-Line系统(NLS)。在这个系统中,使用了鼠标外设及多窗口系统。当然,美国发明家Douglas Engelbart先生得到了Vannevar Bush先生在1945年开发多memex桌面信息机器的启发。Memex也是一个很有意思的系统,这个系统甚至启发了后来的Ted Nelson先生发明超媒体和超文本。

     

    图表  2 On-Line System (1968) (图片来源:www.answers.com

     

    Douglas Engelbart此人也值得一说,他因发明鼠标而广为人知,但就是他领导的小组发明了超文本,网络计算机,图形用户界面的前身等。他也是使用计算机和网络手段来解决日益复杂问题的推崇者。有趣的是,现在叫鼠标的这个东西曾经有一个名字叫“bug”,不过后来被人们忘却了而已。可惜的是,这个鼠标的发明者从来就没有因为发明鼠标而获得专利费,因为鼠标专利在1987年已经过期,也因为鼠标在那时还是个不太顶用的玩意,而且,当时的鼠标运行机理也和最初的专利申请有所不同了。

     

     

    科学家Douglas Engelbart

     

     

    图表 4 Douglas的中年时代

     

    Douglas的生平也让人觉得人生无常。1970年,Douglas获得了他的双金属滚轮外面以木头外壳包装的鼠标专利(专利名称叫“为显示系统定位提供的XY定点器)之后,他主持的项目受到美国国防部高级研究计划署(ARPA)的支持,他致力于在线交互及人机界面方面的研究。所以,他所在的国际斯坦福研究院的两台主机(ARCUCLA)成为Internet鼻祖ARPANET的两个节点,而且ARC还成为第一个网络信息中心而闻名。但是,命运总是捉弄人,1976年之后,Douglas Engelbart先生进入了人生的低谷(当时他45岁),他由于一些不幸及误解,使得他的几个最好的研究伙伴离开了他,也因为越战失败之后国际斯坦福研究院得到的项目经费减少以及管理层又不同意他的研究方法,后来竟然被后来者解雇了,这样他离开了他自己亲手创建的研究中心。再到后来,他住的房屋也失火。一直到1978年,一个叫Tymshare的公司聘用了他,但仍然很不顺利,他仍然未能够受到重用,这种情况一直持续到1986年。

     

    尽管从1980年以后,他的发明日渐闪光,但直到1996年,他才获得Yuri Rubinsky Memorial Aword, 1997年获得Lemelson-MIT Prize(获得50万美元的奖金)以及图灵奖。后来在2001年他还获得英国计算机社会(British Computer Society)的Lovelace Medal奖。也就是说,他在七十多岁后才重新拥有科学家的光环。

     

    一个语言学家Benjamin Lee Whorf认为,语言的复杂度控制说话者的思维能力,而这种思维能力又反过来控制这个人的语言能力。Douglas在此之上,有一个哲学推理,是说我们现有的技术控制我们对这些信息的描述方法,这种方法反过来又控制我们开发新技术的能力。我认为这是对的,也是一个很有咱们马列主义辩证思想特色的观点。

    Xerox PARC

    Douglas Engelbart先生的工作直接促进了施乐帕罗奥托研究中心(Xerox Palo Alto Research Center, PARC)的进步。在上世纪末七十年代初,国际斯坦福研究院几位人员(我猜就是那几位背叛Douglas Engelbart先生的研究者)加入了PARC,他们组成的PARC小组搞定了WIMPWindow, icon, menu, pointing device)范例(WIMP Paradigm)。WIMP范例在人机交互领域代表了这些元素如窗口,图标,菜单,定点设备的交互模式。所以说WIMP范例是由施乐帕罗奥托研究中心发明而由苹果公司在1984年让它逐步走入寻常百姓家的。

    Xerox PARC(图片来源:www.answers.com

     

    创建于1970年的施乐帕罗奥托研究中心是施乐公司的研究机构中的领头羊,座落在美国加里福利亚帕罗奥托城。施乐帕罗奥托研究中心中诞生了许多现代计算的元素,诸如图形用户界面的许多概念,鼠标,所见即所得(WYSIWYG)文本编辑器,激光打印机,桌面计算机,Smalltalk编程语言及集成开发环境,Interpress与分辨率无关的图像页面描述语言, PostScript的先驱),以及以太网。

     

    言归正传,WIMP范例首先使用在Xerox Alto试验计算机上,最终在1981年在Xerox 8010(官方名字),俗称Xerox Star的工作站上产品化。据称,由施乐帕罗奥托研究中心开发的Xerox Alto开启了个人计算机的先河,它也是第一次使用图形用户界面及桌面隐喻(Desktop metaphor)的计算机。它有128K内存(可扩展到256K),2.5的硬盘,有一个小冰箱那么大。它有一个黑白(就两种颜色,没有其它灰度颜色)显示器,键盘,一个使用方法和我们现在的鼠标方向有特别差异(它是水平方向操纵鼠标,显示器的光标却垂直运动)的三键鼠标,还有一个叫5-key chord keyset(早就被淘汰了)的东西。后两个东西是从SRIOnLine System借来的。这个计算机的外设很多,很丰富。它所安装的软件是用BCPL语言编写的,后来还用了一些诸如MesaModula的计算机语言。在图像渲染方面,它发明了位传送技术,也叫BitBlt 技术。尽管Xerox Alto没有商品化,但也制造了几千台,由各大学校使用,而且它的孙子辈产品就促成了Sun公司的成立。笔者在这儿啰嗦这么多,就因为它是个人计算机的爷爷辈东西,而且先辈们的创新的确渗透了很多智慧,值得我们后人们敬仰和怀念。

     

    再说Xerox Star吧。这个也是一个革命性的产品,最终在1981年得到商品化。这个产品里面使用了虚拟机的概念(就是为前面提到的Mesa编程语言准备的)。这个计算机里面发明了许多概念,比如WYSIWYG,以太网等前面都说过了。还有一件有意思的与之相关联的事情,就是据说苹果电脑的创始人Steve Jobs就是参观了Xerox PARC之后,让他的图形界面上多了桌面和图标这两样东西的。从这个传说就可以看出还是毛爷爷说得好:好好学习,天天向上。

    三.苹果公司的前期历史

    历史学家们对现代图形用户界面的功劳究竟是Xerox PARC多一些还是苹果公司多一些是众说纷纭,但有很多事实表明苹果公司在图形用户界面方面的确是做出了瞩目贡献。苹果公司至少发明了窗口可以重叠,实现了窗口的自动重绘(Self-reparing),图标可以拖放,窗口有固定的菜单条,下拉菜单以及文件管理器中的文件对象可以直接操作等等。比如用户可以将文件或者文件夹对象拖到垃圾里面就可以删除该对象。当然,这些都应该归功于苹果公司的第31号员工Jef Raskin领导的麦金塔什团队的共同努力(其中就包括一些前Xerox PARC的小组成员)。

     

    至于苹果公司的诞生,其动人的故事和微软不相上下,都是非常具有传奇色彩的。呵呵,这里就废话几句了。

     

    在苹果公司创建之前,Steve Wozniak是一个供职于HP的员工,也是一个电脑黑客。每天下班之后就带着比他小五岁的朋友Steve Jobs搞点小名堂,赚点外快,比如说写点小游戏什么的。在那个时候,他们从一本名字叫《大众电子》(Popular Electronics)的杂志上看到一篇如何制作自己的电脑终端的文章之后就开始鼓捣自己的电脑了。

    图表  5 两个SteveSteve Wozniak Steve Jobs(右))。Wozniak的电子工程能力
    Jobs的个人信条及魅力创造了一代神话。照片上的两个人正举着Apple公司的
    第一代计算机AppleI的主板。(图片来源:www.answers.com

     

    图表  永远要心疼自己的孩子,要知道,孩子的未来是最有前途和希望的。Apple I代是相当简陋的,但只有伟大的父母才知道辛勤的培育是孩子的未来最有利的保障。
    (图片来源:www.answers.com

     

                  

    图表  7 苹果那种唯美的信条让大众所崇拜,这是苹果公司
    历史上所采用过的几个logo图案(图片来源:www.answers.com

     

     

    1976年的愚人节Apple公司成立了,创始人除两个Steve之外还有Mike Markkula。在年末的时候,在加利福利亚州的十个零售店就有Apple I出售了。1977年,标价为1298美元Apple II发售了,它有4K的内存,而且具有开发的系统结构第三方厂商可以在其上开发自己的产品。从此,Apple II就成为了许多学校家庭所具有的设备,苹果公司由此而兴盛。在1980年,苹果公司公开上市,它打破了1956年由福公司所创下的上市公司筹钱记录,它也在瞬间创造了更多的百万富翁。Apple II是一款成功的产品,它后来的升级版本如Apple IIe Apple IIg等在上世纪末还依然辛勤工作在很多学校里。

    Apple Lisa

    Apple Lisa的研发工作开始于1979年,由Jef Raskin带领,最终于1983年完成。这是计算机历史上出现的第一个含有集成软件及图形界面的商业个人计算机。作为苹果公司的一个失败产品,尽管它有创新的图形界面,但它具备了产品失败的所有因素:设计超前,价格昂贵(1983年一月它就卖9995美元),而且速度缓慢。这种机型在1983年就装了96K内存,而在1990年之后,标配少于96K内存的个人计算机还依然时行。

     

    Apple Lisa的操作系统技术领先,它支持多任务,虚拟内存。但它的所拥有的低速软盘存储器让虚拟内存的速度无法发挥。它有两种用户模式:Lisa办公系统(Lisa Office System)及开发模式(Workshop)。它的办公系统是GUI界面的,开发模式中也配备了图形界面的编辑器。

     

    那时候,能够买这种机器的单位就是那些中型或者大公司。每个中等规模的单位有那么一至两台Apple Lisa,再配上一台Apple点阵打印机,大家共享着使用。尽管速度是慢了点,但它打印的图表相比其它同类产品可是应了现代一句广告词“爽歪歪”。

     

    在美国犹他州的一次填地运动中,苹果公司做出了巨大贡献,他们将一大批此类“超前于时代,永远没有赶上潮流的”高科技产品埋入地下,这件事情大概发射在1986年。

     

    图表  8  Apple Lisa (图片来源:www.answers.com

     

    在由Jef Raskin带领的另一个团队的努力下,就在Apple Lisa开始商业销售之后的第二年,即19841月,苹果公司推出了他们具有历史意义的第一代麦金塔什机Macintosh 128K,这里面也已经融入了Lisa采用的很多先进技术。Macintosh 128K是所有Mac机的祖宗,所以比起今天的Mac X来的确是少儿级的作品。甚至以今天的标准,它的性能有点可笑和简单,但它的确是个人计算机发展史上第一个成功的商业化图形用户界面系统。它那可爱的小盒子告诉我们丑小鸭变成天鹅的机会还是很多的。 

     

     

      

    图表  9 Macintosh 的初始界面。图片来源:(http://toastytech.com/guis/guitimeline2.html

    Macintosh里也采用了桌面隐喻的概念,文件的图标看起来就类似“纸张”的图形,而文件目录则用“文件夹”的图形。而在桌面上,还有一组称为“附件”应用程序快速访问图标。用户通过这些图标可以快速打开最常用的应用程序,如计算器,记事本和时钟等等。而图标对象的拖放功能更是表现得淋漓尽致。

    如果说上述这些功能或多或少有来自Xerox Star的影响的话,Jef Raskin提出的“菜单键盘快捷键”的概念,则是Apple的创举。这使得原来习惯于纯键盘操作的用户也能融入到这个新的图形化界面中来。这也成为了日后所有的GUI系统的标准概念之一。如今使用电脑的人大概没有几个人不掌握几个常用的快捷键吧。

    所有这些都使得Macintosh电脑成为了消费者眼中最不可思议的东西,因为他们从来没有见过类似的东西。然而即便是这样,Macintosh电脑并没有在个人电脑市场上取得重大的胜利。相反,IBM所推出的采用依旧是命令行方式操作,基于DOS系统的PC机在市场上占据了第一的位置——因为Macintosh电脑实在是太超凡脱俗,整个系统都是基于GUI的;而当时绝大部分的应用软件都还是基于命令行接口(command Line Interface, CLI)的方式,要将这些软件完全迁移到Macintosh电脑上工程实是在太浩大了。

    也许是历史往往就是这样捉弄人,创造了奇迹的苹果电脑的功亏一篑,没有能称霸PC世界。而后冒出的Windows,才彻底改变了命令行接口(CLI)的统治地位当然这是后话了。

    Macintosh系统在后来发布了比较重要的版本有System 7,也是从这个版本起Macintosh更名为Mac OS。而到2001年,苹果电脑更是推出了惊世骇俗的Mac OS X。欲知后果,请听下回分解。



    darkstax 2007-05-10 22:04 发表评论
    ]]>
    物理层http://www.cnitblog.com/darkstax/archive/2007/04/24/26122.htmldarkstaxdarkstaxTue, 24 Apr 2007 11:48:00 GMThttp://www.cnitblog.com/darkstax/archive/2007/04/24/26122.html  物理层是OSI参考模型的最低层,其任务就是为它的上一层提供一个传输数据的物理连接。在这一层,数据仅作为原始的比特流(bit流)进行处理。
      该层规定了网络设备之间的物理接口特性及通信规则,即,规定了为建立、维护和拆除物理链路(通信结点之间的物理路径)所需的机械、电气、功能和规程特性。其作用是确保比特流在物理信道上传输。
      2. 物理层协议(标准)的内容
      物理层接口协议实际上是DTE和DCE或其它通信设备之间的一组约定,主要解决网络结点与物理信道如何连接的问题。
      (1) 机械特性
      规定物理连接器的规格尺寸、插针或插孔的数量和排列情况、相应通信介质的参数和特性等。例如,PC机上的COM1和COM2接口称为RS-232接口,使用的是典型的物理层协议RS-232C。
      EIA RS-232C是一种目前使用最广泛的串行物理接口,其定义的连接器的机械特性主要有以下两点:
      ☆ 建议使用25针连接器(DB-25)。
     ☆ 在DTE一侧采用孔式插座形式,DCE一侧采用针式插头形式,并对连接器的尺寸、针或孔芯的排列位置等都作了确切的规定。
         (a) DB-25                 (B) DB-9
    RS-232C规定的连接器的机械特性

      (2) 电气特性
      电气特性规定了在链路上传输二进制比特流有关的电路特性,如信号电压的高低、阻抗匹配、传输速率和距离限制等,通常包括发送器和接收器的电气特性以及与互连电缆相关的有关规则等。
      (3) 功能特性
      功能特性规定各信号线的功能或作用。信号线按功能可分为数据线、控制线、定时线和接地线等。
      (4) 规程特性
      规程特性定义DTE和DCE通过接口连接时,各信号线进行二进制位流传输的一组操作规程(动作序列),如,怎样建立、维持和拆除物理连接,全双工还是半双工操作等等。
      3. 物理层的网络连接设备
      (1) 中继器(Repeater)
      信号在通过物理介质传输时或多或少会受到干扰、产生衰减。如果信号衰减到一定的程度,信号将不能识别。因此,采用不同传输介质的网络对网线的最大传输距离都有规定。
      中继器工作在OSI参考模型的物理层上,其功能是对衰减的信号进行再生和放大(如图所示)。由于中继器在网络数据传输中起到了放大信号的作用,因此可以“延长”网络的距离。

    使用中继器示意

      中继器的主要优点是安装简单、使用方便、价格相对低廉。它不仅起到扩展网络距离的作用,还可以连接不同传输介质的网络。
      (2) 集线器(HUB)
      集线器具有多个端口,不仅用于集中网络连接,还可以重发数字信号。局域网中最常用的是连接以太网的HUB,如图所示。其他类型的HUB包括用于令牌环网络的多站访问单元(MAU),见第4章的相关介绍。
      集线器具有与中继器相似的信号中继和放大特性,因而被称为多端口中继器。两者的主要区别是:中继器一般为两个端口,一个接收数据,一个端口进行放大转发;而集线器具有多个端口(8口、16口和24口等),数据到达一个端口后,将被转发到其他所有端口(广播)。所以图所示的用HUB连接的网络是物理上星形而逻辑上是总线形的拓扑结构。

    以太网HUB连接示意

      集线器有多种分类方法:
      ☆ 依据带宽的不同,集线器分为10Mbps、100Mbps、10/100Mbps自适应、1000Mbps、100/1000Mbps自适应等,小型局域网通常使用前三种。
      ☆ 按配置形式的不同可分为独立型集线器、模块化集线器和堆叠式集线器。
      ☆ 根据管理方式又可分为智能型集线器和非智能型集线器。所谓智能型HUB除了具有HUB的基本功能外,还具有SNMP(Small Network Management Protocol)网管功能。
    目前所使用的集线器基本是以上三种分类的组合。例如,10/100M自适应智能型可堆叠式集线器。



    darkstax 2007-04-24 19:48 发表评论
    ]]>
    单片机结构http://www.cnitblog.com/darkstax/archive/2006/11/21/19434.htmldarkstaxdarkstaxTue, 21 Nov 2006 05:01:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/11/21/19434.html单片机本身相当于一个运算器和一个控制器,在一个单片机中最为重要的片外结构就是存储器了。

    存储器

    存储器有两种结构,普林斯顿结构和哈佛结构。如下图所示。

    普林斯顿结构的特点是只有一个地址空间,ROM和RAM安排在这一地址空间的不同区域,一个地址对应唯一的一个存储器单元,CPU访问ROM和访问RAM使用相同的访问指令。如8086、奔腾等微型计算机采用这种结构。

    哈佛结构的特点是微机的ROM和RAM分别安排在两个不同的地址空间,ROM和RAM可以有相同的地址,CPU访问ROM和RAM存储器用不同的指令访问。

    ROM用来存放程序、表格和始终要保留的常数,单片机中称其为程序存储器;RAM通常用来存储程序运行中所需的数据(常数或变量)或运算的结果,单片机中称其为数据存储器。

    51单片机采用哈佛结构。

    从物理地址空间看,8XX51有4个存储器地址空间,即片内ROM、片外ROM、片内RAM、片外RAM。其中片内ROM和片外ROM共用一个寻址空间,由引脚EA来控制。

    例如:
                                  当 EA=1 时, 内部ROM占用 0000H - 0FFFH
                                                            外部ROM占用 1FFFH - FFFFH
                                  当 EA=0 时, 内部ROM被屏蔽
                                                            外部ROM占用 0000H - FFFFH

    由于片内、片外程序存储器统一编址,因此从逻辑上看,8XX51有3个存储器地址空间,即片内RAM、片外RAM、片内片外统一编址的程序存储器(ROM)。

    程序计数器PC

    51单片机执行时,由程序计数器PC指示指令地址,复位后的PC内容为0000H。程序存储器中的某些地址被用于中断服务程序的入口地址。例如:
                                  复位时, PC = 0000H
                                  外部中断0时, PC = 0003H
                                  串行IO中断时, PC = 0023H

    由于两入口地址之间的存储器空间有限,在这些地址处通常放一些跳转指令,跳到中断服务程序例程的地址。



    darkstax 2006-11-21 13:01 发表评论
    ]]>
    slackware linux 中文环境设置(step by step)http://www.cnitblog.com/darkstax/archive/2006/11/17/19274.htmldarkstaxdarkstaxFri, 17 Nov 2006 14:57:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/11/17/19274.htmlhttp://www.cnitblog.com/darkstax/comments/19274.htmlhttp://www.cnitblog.com/darkstax/archive/2006/11/17/19274.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/19274.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/19274.html
      先把控制台的中文弄出来吧。虽然选择很多,不过我还是喜欢cce,安装使用都很简单,运行cce,出中文了。祭起lynx四处转了一圈,工作正常。

    X

      X要出中文就简单多了。到/etc/profile里把export LC_ALL=POSIX改成
    export LC_ALL=
    export LC_LANG=zh_CN.GB2312
    然后startx,果然已经有些中文字了。

      然后改/etc/X11/XF86Config,加上
    Section "InputDevice"
    Identifier "Mouse1"
    Driver "mouse"
    Option "Protocol" "IMPS/2"
    Option "Device" "/dev/input/mice"
    Option "ZAxisMapping" "4 5"
    Option "Buttons" "5"
    EndSection
    再把ServerLayout里的Mouse改成
    InputDevice "Mouse1" "CorePointer"
    再启动X,结果,X说找不到这个鼠标。有点妖。经过一番狂搜,发觉是还有个模块要启:
    modprobe mousedev
    ok,己可用了,把这三个modprobe加到/etc/rc.d/rc.modules里。

      俺的这个笔记本内置有一个鼠标,在windows底下两个可以同时用的。在X底下要是也能同时用就爽了。在InputDevice部份再定义一个鼠标(Mouse1),
    Section "InputDevice"
    Identifier "Mouse1"
    Driver "mouse"
    Option "Protocol" "IMPS/2"
    Option "Device" "/dev/input/mice"
    Option "ZAxisMapping" "4 5"
    Option "Buttons" "5"
    EndSection
    在ServerLayout部份加上
    InputDevice "Mouse1" "CorePointer"
    InputDevice "Mouse1" "SendCoreEvents"
    然后起X,好,这回两鼠标都用上了。

    TTF

      X里虽然出中文了,但是难看点。还是弄成TrueType吧。先找来ttf字体文件,就放到/usr/X11/lib/X11/font/ttf里并加到XF86Config的fontpath里。然后搞来并装上freetype1.3和ttmkfdir,本来想耍ft2的,结果用它没法子编译俺下的这个ttmkfdir,又不打算花太多时间折腾,只好退回1.3,还算顺利。然后到ttf目录里ttmkfdir >fonts.dir,进去把每行都复制出*-iso8859-1,*-ascII-0,*-gb2312.1980-0三种,当然第一行的总字体数自然要乘3。然后cp fonts.dir fonts.scale。再启X,祭起xfontsel,果然用kaiti_gb2312等字体了。

    最后, 俺发现XFree86 4.1.0里面带的freetype居然不支持中文ttf,那么咱只好换xtt了,还好,xtt特顺利. 后来发现俺新装的freetype1.3是可以处理中文的,要用新编译的库文件换调/usr/X11/lib底下的libfreetype*,不过,既然xtt工作,何必再折腾自己呢?

      下一步当然是把GNome的默认字体换成ttf啦,于是在硬盘里一顿乱找,发现/etc/opt/gnome里有俺要的东东,把其下gtk/gtkrc.zh_CN里的所有fontset前面塞上一个KaiTi_GB2312。再找,发现/opt/gnome/etc/gtk底下居然也有一个,自然改之。再看,/opt/gnome/share底下也有,再改,虽然这个其实没什么影响。再startx,不错,全是矢量字啦。



    darkstax 2006-11-17 22:57 发表评论
    ]]>
    slackware 11.0 安装和设置(step by step)http://www.cnitblog.com/darkstax/archive/2006/11/09/18996.htmldarkstaxdarkstaxThu, 09 Nov 2006 06:04:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/11/09/18996.htmlhttp://www.cnitblog.com/darkstax/comments/18996.htmlhttp://www.cnitblog.com/darkstax/archive/2006/11/09/18996.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/18996.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/18996.html实验室以前装的slackware启动不了了,所以我重新安装了slackware 11.0。安装期间我把安装过程详细地记录下来,希望作为slackware“手把手”的安装方案。


    第一步:了解安装环境

    安装系统首先要了解你的系统安装环境,如果事先安装了windows操作系统,则可以从windows系统里得知你的硬件环境。方法为在运行对话框里输入:
    dxdiag
    这时,会显示系统的基本信息。从中我们可以得到显卡,磁盘等重要的信息。

    安装环境:

                系统:slackware 11.0
              处理器:Intel(R) Pentium(R) 4 CPU 3.00GHz (2 CPUs)
                内存:1024MB RAM
                显卡:RADEON X300/X550 Series
              制造商:ATI Technologies Inc.
                显存:256.0 MB
           显示模式:1280×1024 (32bit) (75Hz)
        磁盘控制器:ATA Storage Controllers

    知道这些安装环境,对我们以后的安装(如选择内核,安装显卡驱动等)有很大的帮助。

    第二步:预安装

    现在的电脑尤其是实验室的电脑,一般都没有软驱和光驱,这样我们只能通过硬盘或者网络安装来实现我们的目的。网络安装对网络环境要求较高,我还没有试过。这里所描述的均为从硬盘安装。

    上面说过,由于电脑没有软驱和光驱,我们只好从U盘启动。首先准备一张没有重要数据的U盘,将其接入电脑。为了制作一张U盘启动盘,我们介绍一个实用的小工具,liubenBootU,只有250K大小。启动后,工作模式选择ZIP模式,点击“开始”,它将格式化U盘并将dos环境拷入到U盘中。这样,我们从U盘启动后将直接进入纯dos环境。

    待会儿进入dos后我们需要用grub加载内核,那么grub放在哪里呢?放在硬盘上,当然可以。不过要是就放在这个U盘上不是更方便吗?嘿嘿,我们干脆把slackware第一张盘里解压出来的内核文件bzImage和initrd.img也放在这个U盘上,这样从grub启动后就可以直接加载内核文件安装系统了。当然,系统安装文件是放在硬盘上的。如果你有那么大的U盘,放在U盘上也未尝不可啊。:-) 这里还要注意一点,由于我们的硬盘是串行硬盘,选择内核时要注意了,需要支持硬盘类型的内核,否则加载内核后不能识别硬盘,安装就无法继续了。我选择的是sata.i内核文件。

    启动盘做好了,我们还需要修改主板设置,将其设置为从U盘启动。现在的各种主板型号不同,功能也不相同,多数还是支持从U盘启动的。如果不支持,那就没办法了。首先插入U盘,这一步很重要,如果现在没有插入U盘,在主板BIOS选项里将不会出现U盘这一选项。进入主板BIOS,选择boot菜单,一般都是在这里设置。我用的主板BIOS系统在这个菜单下有两个选项,一个为“boot device priority”,另一个为“removable devices”。在“removable devices”里我们将首选项设置为我们的U盘名字,我这里为“se at land”,然后进入“boot device priority”将首选项设置为从U盘启动,这样就设置完毕。

    第三步:硬盘安装

    从U盘启动后,进入dos系统,我们找到grub目录,进入后直接敲grub命令,将会启动grub(grub的详细介绍请看这里)。然后选择内核文件和根分区镜像文件,进入系统安装。

    在安装之前,我们首先要将磁盘分好区。用命令
    fdisk -l
    查看磁盘的状态,然后按照提示分区。最少要增加两个分区,一个为swap分区,大小为内存大小的两倍,另一个为根分区,大小自定义。

    分完区后就可以使用命令
    setup
    安装文件系统。安装过程很容易,随着它的提示一步一步来就可以了,具体的过程就不在赘述。这里只注意一点,当要求选择安装方式时,要选择从硬盘安装。硬盘必须为fat分区,不能为ntfs分区,安装内核不能识别ntfs格式。安装文件不是镜像文件,而是每个镜像文件解压后的slackware目录。安装程序将安装这个目录中所有的后缀为.tar.gz格式的软件包。第三张盘为支持kde桌面系统的多国语言包,只需要安装中文字体文件即可。

    安装完毕后,用lilo重写MBR。再经过一些简单的设置,slackware系统就安装成功了。

    第四步:系统设置

    安装完系统后,需要一些初始的系统设置,还要安装一些驱动程序和使用工具。具体请参考文章slackware初始设置

    现在,系统安装设置就算告于段落了。现在就开始享受slackware给你带来的快乐吧。:-)



    darkstax 2006-11-09 14:04 发表评论
    ]]>
    slackware从10.2升级到11.0(step by step)http://www.cnitblog.com/darkstax/archive/2006/11/08/18953.htmldarkstaxdarkstaxWed, 08 Nov 2006 01:35:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/11/08/18953.htmlhttp://www.cnitblog.com/darkstax/comments/18953.htmlhttp://www.cnitblog.com/darkstax/archive/2006/11/08/18953.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/18953.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/18953.htmlSlackware 10.2 to 11.0 Upgrade HOWTO  <volkerdi@slackware.com>

    This document explains how to upgrade from Slackware 10.2 to Slackware 11.0

    -----------------------------------------------------------------------------


    Before you begin, I would strongly recommend making a backup of your
    system, or, if not the entire system, at least the /etc directory.  You
    might find that you need to refer to a few things after the upgrade
    process is complete. Back it up, or take your chances.

    OK, now that everything is safely backed up, let's proceed. :-)

    To do this, you'll need the Slackware 11.0 packages.  If these are on a CD,
    create a new directory to mount the CD on so that it doesn't get in the
    way during the upgrade:

    mkdir /packages
    mount /dev/cdrom /packages

    The packages don't have to be on a CD-ROM, as an alternative you could
    copy the slackware directory (the one with the various package
    subdirectories in it, basically the "slackware" directory from the install
    CD) to someplace like /root/slackware/.  The important thing is that you
    know where the slackware packages directory is.  We'll use /root/slackware
    in the following examples.


    0.  Put your machine in single-user mode:
        telinit 1


    1.  Upgrade your glibc shared libraries.  This is important, or things
        might go haywire during the first part of the upgrade:

        upgradepkg /root/slackware/a/glibc-solibs-*.tgz


    2.  Upgrade your package utilities:

        upgradepkg /root/slackware/a/pkgtools-*.tgz


    3.  Install sed.  You should already have this, but since it's used by
        the package utilities it is best to be sure:

        upgradepkg --install-new /root/slackware/a/sed-*.tgz


    4.  Upgrade everything else (and install new packages):

        upgradepkg --install-new /root/slackware/*/*.tgz


    5.  Make sure your system will boot.  If you use LILO, make sure the
        paths in /etc/lilo.conf point to a valid kernel and then type 'lilo'
        to reinstall LILO.  If you use a bootdisk, you'll need to use
        makebootdisk to make a new bootdisk using the kernel in /boot.


    6.  Fix your config files.  Some of the config files in /etc are going to
        need your attention.  You'll find the new incoming config files on
        your system with the ".new" extension.  You may need to fill these in
        with information from your old config files and then move them over.

        Feel brave?  You can use this little script to install all of the
        .new config files in /etc.  If you've made any local changes you'll
        need to add them to the newly installed files.  Your old config files
        will be copied to *.bak.  Anyway, it might be an easier starting
        point.  Here it is:

     

          # !/bin/sh
         cd  / etc
         find 
    .   - name  " *.new "   |   while   read  configfile ;  do
           
    if  [  !   " $configfile "   =   " ./rc.d/rc.inet1.conf.new "   \
             
    - !   " $configfile "   =   " ./group.new "   \
             
    - !   " $configfile "   =   " ./passwd.new "   \
             
    - !   " $configfile "   =   " ./shadow.new "  ]; then
             cp 
    - a $(echo  $configfile   |  rev  |  cut  - 2 -   - .   |  rev)  \
               $(echo 
    $configfile   |  rev  |  cut  - 2 -   - .   |  rev) . bak  2 >   / dev / null
             mv 
    $configfile  $(echo  $configfile   |  rev  |  cut  - 2 -   - .   |  rev)
           fi
         done

     

        You'll probably also need to edit your /etc/X11/xorg.conf to change
        the name of the keyboard driver from "Keyboard" to "kbd".  I don't
        know why this changed, but it did.


    7.  Return to multi-user mode:
        telinit 3


    8.  Remove obsolete packages.

        If you go into /var/log/packages and take a look at the package list:

        ls -lt | less

        You may spot some old, obsolete, or discontinued packages.  If so,
        you can remove these using 'removepkg'.


    9.  Remove KDE language bloat.  By upgrading all packages using
        --install-new you've probably installed all of the KDE language
        translations from the KDEI series, which will use up about
        500MB.  If you need only US English, you may remove the KDE
        language packs like this:

        cd /var/log/packages
        removepkg kde-i18n* koffice-l10n*

        Even if you need one of these, it might be best to start by
        removing them all, and then go back and install the ones you
        need with installpkg.   

     

    At this point you should be running Slackware 11.0.  :-)

    I wish everyone good luck with this!

    ---
    Patrick Volkerding
    volkerdi@slackware.com



    darkstax 2006-11-08 09:35 发表评论
    ]]>
    网线的制作方法http://www.cnitblog.com/darkstax/archive/2006/10/27/18508.htmldarkstaxdarkstaxFri, 27 Oct 2006 06:47:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/10/27/18508.htmlhttp://www.cnitblog.com/darkstax/comments/18508.htmlhttp://www.cnitblog.com/darkstax/archive/2006/10/27/18508.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/18508.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/18508.html排列水晶头8根针脚:

    将水晶头有塑造料弹簧片的一面向下,有针脚的一方向上,使有针脚的一端指向远离自己的方向,有方型孔的一端对着自己,此时,最左边的是第1脚,最右边的是第8脚,其余依次顺序排列。1、2用于发送,3、6用于接收,4、5,7、8是双向线。

    5类线(100m)的制作:

    a:绿白(3)、绿(6)、橙白(1)、蓝(4)、蓝白(5)、橙(2)、棕白(7)、棕(8)

    b:橙白(1)、橙(2)、绿白(3)、蓝(4)、蓝白(5)、绿(6)、棕白(7)、棕(8)


    常见直连线:b-b
    常见交叉线:a-b(1-3、2-6交叉)


    6类线的制作(千兆线):
    a:橙白(1)、橙(2)、绿白(3)、蓝(4)、蓝白(5)、绿(6)、棕白(7)、棕(8)
    b:绿白(3)、绿(6)、橙白(1)、棕白(7)、棕(8)、橙(2)、蓝(4)、蓝白(5)、

    常见直连线为:b-b
    常见对拷线:a-b(1-3、2-6、4-7、5-8交叉)-(与100m的不同)

    5类线或者现在市场上常见的超5类线就是我们所说的100m网线,当然也只能作出100的线来。而6类线就常说的1000网线。
    他们的区别是:5类线是由4对8芯组成,每芯是由1根铜线构成。而6类线也是由4对8芯组成,不过每芯则是由更细的多股铜线组成。另:100m的水晶头和1000的水晶头是有区别的。购买时应当注意。



    darkstax 2006-10-27 14:47 发表评论
    ]]>
    big-endian和little-endianhttp://www.cnitblog.com/darkstax/archive/2006/10/21/18210.htmldarkstaxdarkstaxFri, 20 Oct 2006 17:46:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/10/21/18210.htmlhttp://www.cnitblog.com/darkstax/comments/18210.htmlhttp://www.cnitblog.com/darkstax/archive/2006/10/21/18210.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/18210.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/18210.html简而言之:
    Big endian machine: It thinks the first byte it reads is the biggest.
    Little endian machine: It thinks the first byte it reads is the littlest.
    举个例子,从内存地址0x0000开始有以下数据
     0x0000     0x12
     0x0001     0x34
     0x0002     0xab
     0x0003     0xcd
    如果我们去读取一个地址为0x0000的四个字节变量,若字节序为big-endian,则读出
    结果为0x1234abcd;若字节序位little-endian,则读出结果为0xcdab3412.
    如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
                    big-endian     little-endian
    0x0000     0x12              0xcd
    0x0001     0x23              0xab
    0x0002     0xab              0x34
    0x0003     0xcd              0x12
    x86系列CPU都是little-endian的字节序.


    darkstax 2006-10-21 01:46 发表评论
    ]]>
    slackware初始设置http://www.cnitblog.com/darkstax/archive/2006/10/20/18184.htmldarkstaxdarkstaxFri, 20 Oct 2006 05:16:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/10/20/18184.htmlhttp://www.cnitblog.com/darkstax/comments/18184.htmlhttp://www.cnitblog.com/darkstax/archive/2006/10/20/18184.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/18184.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/18184.html安装好slackware后需要对系统进行如下初始设置:

    0. 默认进入桌面系统
    slackware默认工作在系统级别3模式,为命令行终端模式。
    修改inittab使系统工作在系统级别4模式,即桌面系统模式。

    1. bash的环境变量
    .profile是存放在主目录下的普通正文文件(Text File),通过
    设置环境变量(Variable)和终端模式,可以使环境个人化,每
    次注册进入系统时,shell会读入.profile文件,并执行所列出的
    指令。

    每当系统管理员创建新用户的户口时,系统都会自动构造一个相
    应的.profile文件;而整个系统的环境文件就放置在
    /etc/.profile中。

    关掉系统声音的方法
    把BEEP的声音永远关掉:
    如果用的是bash作shell,在~/.profile的最后添加
    setterm -blength 0
    在 console 下: setterm -blength 0
    在 X-win 的 terminal 下: xset -b

    2. fcitx设置
    fcitx需要设置环境变量XMODIFIERS
    进入/etc/profile.d,在lang.sh中可以看到
    export LNAG=en_US
    在后面加上
    export XMODIFIERS="@im=fcitx"
    这样就设置了环境变量。
    另外,fcitx需要在LC_CTYPE为中文环境时才能运行。
    在~/.profile中添加
    export LC_CTYPE=zh_CN.gbk
    注意,在lang.sh中声明是不行的,这样X的shell中LC_CTYPE
    为中文环境,但console shell本身的环境还是英文环境。
    要把console本身的LC_CTYPE设为中文环境。

    3. 拷贝字体文件
    将windows下的simsun,tahoma等字体文件拷贝
    到/usr/share/fonts目录,这样启动桌面后可以显示
    中文字体。

    4. 安装显卡驱动
    安装ati显卡驱动,安装提示安装。安装完毕后还需要设置参数,
    命令为aticonfig,具体用法见命令帮助。一般需要设置显卡的
    初始化文件和分辨率。ati显卡支持1280x1024模式。

    5. 让slackware能够自动关闭电源
    slackware默认是不会自动关闭电源的,这主要是针对服务器设置的。
    对于普通PC来说用起来就不方便了。
    修改/etc/rc.d/rc.modules,片断如下:
    #### APM support ###
    # APM is a BIOS specification for saving power using several different
    # techniques. This is mostly useful for battery powered laptops.
    /sbin/modprobe apm

    让普通用户可以关机
    同样为服务器而设置的,普通用户不能关机。
    #chmod +s /sbin/halt
    这样,普通用户使用 /sbin/halt -p能够关机了。



    darkstax 2006-10-20 13:16 发表评论
    ]]>
    XFree86和X.Org之间的关系http://www.cnitblog.com/darkstax/archive/2006/10/19/18165.htmldarkstaxdarkstaxThu, 19 Oct 2006 11:20:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/10/19/18165.htmlhttp://www.cnitblog.com/darkstax/comments/18165.htmlhttp://www.cnitblog.com/darkstax/archive/2006/10/19/18165.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/18165.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/18165.html
  • The XFree86 Project, Inc

    • XFree86是由X11R6发展出来的最初专门给Intel X86 结构PC机使用的X Window的系统。

    • 而后XFree86发展成为几乎适用于所有类UNIX操作系统的X Window系统。

    • XFree86是一个开放源代码的基于X11的桌面基础构架。

    • Red Hat 9中使用的X Window系统就是 XFree86 4.3。

    • XFree86从2004年发布的版本4.4起不再遵从GPL许可证发行,而是遵循新的XFree86 1.1 许可证。

    • 由于XFree86不再遵从GPL许可证发行,导致许多发行套件不再使用XFree86,转而使用Xorg。

  • The XOrg Foundation(X.org)

    • Xorg 是由 X.Org 基金会发行的开放源代码 X Window 系统实现的 X 服务。

    • Xorg 遵从GPL许可证发行。

    • Xorg 基于 XFree86 4.4RC2 和 X11R6.6 的代码。

    • X.Org 基金会在 2004 年 4 月发布了 X11R6.7。

    • 在 2005 年 2 月发布了 X11R6.8.2。



  • darkstax 2006-10-19 19:20 发表评论
    ]]>
    数据通信http://www.cnitblog.com/darkstax/archive/2006/10/10/17819.htmldarkstaxdarkstaxTue, 10 Oct 2006 02:23:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/10/10/17819.htmlhttp://www.cnitblog.com/darkstax/comments/17819.htmlhttp://www.cnitblog.com/darkstax/archive/2006/10/10/17819.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/17819.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/17819.html数据通信

    前面讨论了传输的基础和信息传送所必需的各种机制,下面开始讨论通信。

    “传输和通信有什么区别呢?”

    用人的讲话来作一个比方。我们弄懂了人说话的内部机制,人的嘴巴如何巧妙处理这些声音,从而形成我们所称的语音--但这还远远不能算是通信。你发出的单词必须加以组织以形成句子。如果你说得太快或者太慢,别人将无法理解。如果很多人同时说话,那也将一事无成。如果有人用一种你不懂的语言讲话,沟通也无法进行。如果句子中少掉了某些单词或者短语,也将会丢失一些含义。

    电子通信也存在相似的问题。为了理解报文,接收方必须知道信息比特的组织方式。为了解释报文,接收方必须清楚报文到达的速度。如果同时有许多人要使用同一媒体,那将出现什么情况?这在局域网中经常发生。有没有办法可以少传输几个比特,但仍然保持信息的完整含义?

    传输模式

    传输模式定义了比特组合从一个设备传到另一个设备的方式。它还定义了比特是可以同时在两个方向上传输,还是设备必须轮流地发送和接收信息。

    串行和并行传输

    首先,我们来区分串行和并行传输。并行传输指可以同时传输一组比特,每个比特使用单独的一条线路(导线)。这些线路通常被捆扎在一条电缆里。并行传输非常普遍,特别是用于两个短距离的设备之间。

    并行传输应用到长距离的连接上就无优点可言了。首先,在长距离上使用多条线路要比使用一条单独线路昂贵。其次,长距离的传输要求较粗的导线,从而降低信号的衰减。这时要把它们捆到一条单独电缆里相当困难。第三个问题涉及比特传输所需要的时间。短距离时,同时发送的比特几乎总是能够同时收到。但长距离时,导线上的电阻或多或少地阻碍比特的传输,从而使它们的到达稍快或稍慢,这将给接收端带来麻烦。

    串行传输提供了并行传输以外的另一种选择。它只使用一条线路,逐个地传送所有的比特。它比较便宜,用在长距离连接中也比并行传输更加可靠。因为它每次只能发送一个比特位,所以其速度也比较慢。

    这种传输方式给发送设备和接收设备增加了额外的复杂性。发送方必须明确比特发送的顺序。同样,接收方必须知道一个目标字节中收到的第一个比特位应该放在什么位置上。这个问题虽然看起来比较琐碎,但不同体系结构对字节内比特的编号各不相同,如果各协议在比特的顺序上无法取得一致的话,信息的传输将出现错误。



    异步和同步传输

    有两种提供串行通信的方法:异步传输和同步传输。异步传输指比特被划分成小组独立传送。发送方可以在任何时刻发送这些比特组,而接收方从不知道它们会在什么时候到达。

    异步传输是一种典型的基于字节的输入输出。这是一个操作系统术语,指数据按每次一个字节进行传送。

    异步传输存在一个潜在的问题。注意接收方并不知道数据会在什么时候到达。在它检测到数据并作出响应之前,第一个比特已经过去了。这就像有人出乎意料地从后面走上来跟你说话,而你没来得及反应过来,漏掉了最前面的几个词。因此,每次异步传输都以一个开始位开头,它通知接收方数据已经到达了。这就给了接收方响应、接收和缓存数据比特的时间。在传输结束时,一个停止位表示一次传输的终止。按照惯例,空闲的线路实际携带着一个代表二进制1的信号,开始位使信号变成0。其他的比特位使信号随比特值而变化。最后,停止位使信号重新变回1,该信号一直保持到下一个开始位到达。



    异步传输被设计用于低速设备,比如键盘和某些打印机等。另外,它的开销较多。在上面的例子中,每8个比特就多传送两个比特。这样,总的传输负载就增加25%,对于数据传输量小的低速设备来说还好,对于那些数据传输量很大的高速设备来说,25%的负载增值就相当严重了。

    同步传输的比特分组要大得多。它不是独立地发送每个字符,每个字符都有自己的开始位和停止位,而是把它们组合起来一起发送。我们称这些组合为数据帧,或简称为帧。

    数据帧的具体组织形式随协议而定,数据帧有许多公共的特征。下图显示了一个数据帧的一般组织形式。方向是从右向左。

    数据帧的第一部分包含同步字符(SYN),它是一个独特的比特组合,用于通知接收方一个帧已经到达。SYN字符类似于前面提到的开始位,但它还能确保接收方的采样速度和比特的到达速度保持一致。

    接下来是控制位,可能包含下列这些元素:
    源地址。指出数据帧从哪里来的。

    目的地址。指出数据帧到哪里去。这在数据帧需要经过几个节点才能到达目的地的网络中非常重要。

    序列号。它用于有很多帧被传送出去,但由于某种原因无法按顺序到达目的地的情况。接收方使用序列号对帧进行重组。

    帧类型。随协议而定。

    数据位定义了要发送的信息。字符之前不需要开始位和停止位。

    错误检查位。用来检查或校正传输错误。

    最后是一个帧结束标记。和SYN字符一样,它是一个独特的比特串,用于表示没有别的即将到达的比特了(至少在下一帧开始之前)。

    同步传输通常要比异步传输快速很多。它的开销也相应较少。注意随着数据比特量的增加,开销所占的百分比相应地较少。另一方面,数据域越大,缓存数据所需的缓冲区也越大,这就限制了一个帧的大小。另外,帧越大,它占据传输媒体的连续时间也越长。在极端的情况下,这将导致其他用户等的太久。

    单工、双工和全双工通信

    接口标准

    前面描述了传送信息的几种方法。你可能由此推断说两台设备只要使用相同的机制收发信息,就能互相通信。其实不然。如果两人同时说话,谁都不去听对方在说些什么,那它们将无法沟通。常识告诉我们要实现沟通,就必须轮流倾听和发言。有序的讨论要求建立能够对发言个体作出认可的规则(协议)。设备间的通信同样也需要协议的引导。如果设备没有准备好对信号进行接收和解释,那么给它发送调制信号是没有用的。

    下面给出了一种设备连接的典型方案。集中讨论DTE-DCE接口标准。



    RS-232接口

    一个众所周知的接口标准是RS-232标准。我们这里只介绍于60年代晚期制定的RS-232-C标准,因为它是最常见的版本。

    该标准最为明显的一点是DTE和DCE之间的连线数(25)。如果标准被完全实现的话,DTE和DCE的连接使用一条25线的电缆(有时称为DB-25电缆),电缆与设备的接口是一个25针的连接器。





    //一个PC和一个调制解调器信号交换的例子。。。

    RS-232的子集

    如果观察一下PC机的背面,我们会发现连接RS-232端口的连接器并没有25针,而是8或9针。我们刚刚讨论了RS-232标准,生产商是否完全地实现了整个标准是另一回事。而实际的情况是很多接口只包含RS-232标准的一个子集。

    为了实现多种功能,很多调制解调器遵循完整的标准。但大多数用户并不需要RS-232的所有功能。它们的主要通信需求就像刚才的例子中描述的那样。因此,调制解调器端口通常只需要一个8至9针的连接器,其中包括刚才例子中提到的那七条线路,再加上一两条地线。作出这样的决定,通常是处于经济上的考虑。

    RS-232标准的一个缺点是它在带宽和距离上的限制。它一般用于50英尺的距离内每秒传输20k个比特。

    空调制解调器

    //一个空调制解调器的例子。。。



    darkstax 2006-10-10 10:23 发表评论
    ]]>
    广域网http://www.cnitblog.com/darkstax/archive/2006/10/09/17780.htmldarkstaxdarkstaxMon, 09 Oct 2006 12:17:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/10/09/17780.htmlhttp://www.cnitblog.com/darkstax/comments/17780.htmlhttp://www.cnitblog.com/darkstax/archive/2006/10/09/17780.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/17780.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/17780.html
    再用高速公路系统的例子来作一下类比。许多城市都有一条穿过中心的高速公路(公共总线)或环形公路(环形网络)。如果城市不大,这一设计将能相当妥善地应付大部分的公路交通。但对于更大的范围,采用这种架构显然是不合理的。取而代之的是一种复杂的连接策略,连接主要的高速公路、高架及省、市的公路系统。将这类系统列为总线、环形结构,或者是两者的结合都是不恰当的,它要复杂的多。

    darkstax 2006-10-09 20:17 发表评论
    ]]>
    局域网http://www.cnitblog.com/darkstax/archive/2006/10/08/17726.htmldarkstaxdarkstaxSun, 08 Oct 2006 10:00:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/10/08/17726.htmlhttp://www.cnitblog.com/darkstax/comments/17726.htmlhttp://www.cnitblog.com/darkstax/archive/2006/10/08/17726.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/17726.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/17726.html
    以太网:IEEE 802.3标准

    以太网有一个总线拓扑。竞争网段的站点使用一种带冲突检测的载波侦听多路访问(CSMA/CD)的竞争协议。局域网标准有三种:802.3,802.4,802.5。

    网络操作通常被最低的3层所定义:物理层、数据链路层和网络层。数据链路层立足于物理层之上为网络层提供服务。详细地说,数据链路层负责一个网络中两个节点间的精确通信。这牵涉到帧格式、错误检测和流量控制。这些主题是独立于网络拓扑的。例如,错误检测算法不会关心一个帧是迈过总线还是环被发送。

    因此,数据链路层被进一步分为两个子层:逻辑链路控制(LLC)和媒体访问控制(MAC)。



    逻辑链路控制处理两个站点之间的逻辑链接,而媒体访问控制控制对传输媒体的访问。逻辑链路控制也是一个标准(IEEE 802.2),并且是基于高级数据链路控制协议的(HDLC)。基本上,逻辑链路控制为网络层提供服务,并且为了具体的任务调用媒体访问控制。

    IEEE 802.3标准是一个媒体访问控制协议。令牌环和令牌总线标准也是媒体访问控制协议。

    darkstax 2006-10-08 18:00 发表评论
    ]]>
    通信基础http://www.cnitblog.com/darkstax/archive/2006/10/07/17698.htmldarkstaxdarkstaxSat, 07 Oct 2006 09:06:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/10/07/17698.htmlhttp://www.cnitblog.com/darkstax/comments/17698.htmlhttp://www.cnitblog.com/darkstax/archive/2006/10/07/17698.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/17698.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/17698.html▲ 通信媒体

    共有三种类型的传输媒体,每一种类型都有许多品种。第一种媒体是铜、铁等金属导体。第二种媒体是透明玻璃或塑胶绳,它们可以通过光波实现数据传输。第三种媒体根本不需要物理连接,而是依靠电磁波,正如无线电视和无线电广播一样。它们的生产成本都不一样。另外,它们连接的设备成本也有差别。

    各种媒体每单位时间传输的比特位有两个重要的指标:比特速率和带宽。比特速率是每单位时间传输比特位的量度标准,单位是bps。带宽就是媒体能够传输的最高频率和最低频率的差值。比如说,电话信号的频率是300~3300Hz,那么它的带宽就是3000Hz。从技术角度上说,带宽和比特速率是两个不同的概念,但是它们之间有重要的联系。

    要在两台设备之间传送比特位,通常需要一个物理连接,或是利用无线电和电视广播中使用的电磁波。下面介绍几种物理连接的方法及无线通信技术。

    金属导体:双绞线

    双绞线由扭在一起的两根绝缘铜线组成。双绞线通常用于传输平衡信号。也就是说,每条导线都带有电流,但它们分别携带的信号相位相差180度。外界电磁干扰给两个电流带来的影响将相互抵消,从而使信号不至于迅速衰退。螺旋状结构有助于抵消电流流经导线过程中有可能增大的电容。



    双绞线的模拟信号带宽可以达到250kHz。数字信号的数据速率随距离而不同。比如说,快速以太网的局域网协议采用双绞线传输数据,速率可达100Mbps,每段长100米。

    金属导线:同轴电缆

    同轴电缆由四个部分构成。最里层是铜质或铝质导体,和双绞线一样,裸线携带着信号。外面是一层绝缘体,防止金属导体碰到第三层材料。第三层通常是一层紧密缠绕的网状导线。这种编织导线起着屏蔽作用,保护裸线免受电磁干扰。同时它也能防止动物破坏裸线。最外层是起保护作用的塑料皮。



    由编织导线构成的屏蔽层能够很好地隔离外来的电信号。因此,同轴电缆大约有100MHz的带宽,数据速率可达500Mbps。然后,同轴电缆要比双绞线昂贵的多。同轴电缆通常采用基带模式或宽带模式传输信息。

    光导纤维

    光纤线的三个主要部分是核心、覆层和保护层。核心部分由纯净的玻璃或塑胶材料制成。覆层包围着核心部分,它也是玻璃或塑料的,但它的光密度要比核心部分低。



    无线通信

    有两种类型的无线通信十分重要:微波传输和卫星传输。微波传输一般发生在两个地面站之间。如果要实现长途传输,可以在中间设置几个中继站。卫星传输是微波传输的一种,只不过它的一个站点是绕地球轨道运行的卫星。

    以下是各种传输媒体的比较:

    编码

    无论媒体是使用光波、电流还是微波,都无法避开一个可能是最基本的通信问题:信息是怎样被编码成适合传输的格式的?计算机能够存储的最小单元是比特位,用0和1表示。0和1任意组合可以对应莫个确定的内容,这种联系称为编码。目前有很多种编码。比较讨厌的问题是如何在编码不同的设备之间建立通信。为了使通信容易一点,人们发明了一些标准的编码格式。然而即使是这些标准,也各不相同,互不兼容!通信领域里有一句更加深刻的话,“标准的唯一问题就是它们太多了。”。最广为流传的编码是ASCII码。第二种最常用的编码是EBCDIC码。另外还有博多码、莫尔斯码和BCD码。

    数字编码方案

    数字信号和数位化编码的数据之间存在着自然的联系。数位化存储的数据表现为0和1的序列。由于数字信号能够在两个恒量之间交替变换,所以可以把0赋给一个恒量,1赋给另一个恒量。恒量的取值并不重要,为了保持论述的普遍性,我们把它们称为“高电平”和“低电平”。

    不归零法编码(NRZ)

    不归零法编码可能是最简单的一种编码方案。它传送一个0时把电压升高,而传送一个1时把电压降低。这样通过高低电平的变换可以传送0和1的任何序列。NRZ指的是在一个比特位的传送时间内,电压是保持不变的(比如说,不回到零点)。图2-31描述了二进制串10100110的NRZ传输过程。


    NRZ编码虽然简单,但是却存在一个问题。假设我们传送一个“0的序列”,到底是多少个0呢?对于这个问题,你会回答说着取决于一个比特位的持续时间。这会给数据传输带来什么样的影响呢?当一台设备传送一个比特的数字信号时,它将在一定的周期T内,产生一个持续的信号。一个内置的时钟负责定时。接收设备必须知道信号的周期,这样它才能在每个T时间单元内对信号进行采样。它也有一个负责定时的内置时钟。剩下的就是确保两个时钟使用同样的T。下一个问题是:所有的时钟总是能保持一致吗?几乎可以肯定的说不能。就像指挥家确保演奏者的同步一样,通信设备也需要某种机制以使它们的定时保持一致。不变的信号不具备同步机制。但如果信号可以改变的话,这种改变就可以用来保持设备的同步。有些强制信号改变的编码方案就是这个原因。

    曼彻斯特编码

    曼彻斯特编码用信号的变化来保持发送设备和接收设备之间的同步。也有人称之为同步码。为了避免2-32中出现的情况,它用电压的变化来分辨0和1。它明确规定,从高电平到低电平的跳变代表0,从低电平到高电平的跳变代表1。图2-33给出了比特串01011001的曼彻斯特编码。



    如图所示,信号的保持不会超过一个比特位的时间间隔。即使是0或1的序列,信号也将在每个时间间隔的中间发生跳变。这种跳变将允许接收设备的时钟与发送设备的时钟保持一致。曼彻斯特编码的一个缺点是需要双倍的带宽。也就是说,信号的跳变频率是NRZ编码的两倍。

    这种编码的一个变形称为差分曼彻斯特编码。与曼彻斯特编码的区别是在每个时间间隔的开始处。0将使信号在时间间隔的开始处发生跳变,1将使信号保持它在前一个时间间隔尾部的取值。在这里我们通过检查每个时间间隔开始处信号有无跳变来区分0和1。检测跳变通常更加可靠,特别是线路上有噪音干扰的时候。如果有人把连接的导线颠倒了,也就是把高低电平颠倒了,这种编码仍然是有效的。

    模拟信号

    模拟信号的处理给数据通信添加了复杂性。其中一个问题是数字计算机不兼容于模拟传输媒体。我们需要一种能够将数字信号转换为模拟信号(调制)的设备和一种能够将模拟信号转换为数字信号(解调)的设备。调制解调器实现了这两种功能。

    模拟信号以其频率、振幅和相移为特征。模拟信号要比一个简单的正弦波复杂的多。振幅、频率和相移的变化数不胜数。那么需要对不同的模拟信号的函数作单独的分析吗?答案是否定的。著名数学家傅立叶提出一个定理:任何一个周期函数都可以表示成无数个具有不同振幅、频率和相移的正弦函数的和。这个和称为傅立叶级数。它的重要性在于无论周期函数多么复杂,它们都包含有同样的成分。   现给出一个数学描述。假设s(t)是一个周期为P的周期函数。依据傅立叶变换的其中一种形式:



    对我们来说,重要的是傅立叶变换告诉我们每一个周期信号都是具有不同频率和振幅的模拟信号的叠加。从中可以得出一个结论:媒体发送和分解一个模拟信号的能力取决于它能够处理的频率的范围(带宽)。

    傅立叶变换的应用

    傅立叶变换是学习通信的基础。在一个带宽有限的媒体上传送一个复杂的模拟信号就和用傅立叶级数来近似一个函数一样。

    傅立叶变换也可以应用于硬件的设计。比如,一个滤波器可以挡住某一频率,而让其他频率通过。它有非常广泛的应用。

    ▲ 比特率

    尼奎斯特定理和无噪声通道

    给定一种媒体,它能够传送多少个比特?我们使用比特率来描述一种媒体的容量,其单位为比特每秒(bps)。通信理论中有一个重要的定理给出了比特率和带宽的关系。很简单,媒体的带宽越大,比特率越高。

    比特率取决于两个要素:信号单元变化的频率(波特率)和比特串中比特的个数n。事实上,比特率=波特率×n。但是一些经典的结论给出了数据速率的上限。尼奎斯特指出,如果媒体传输的最大频率为F,那么接收方只要以每秒2f次的频率进行采样,就能完整地重现信号(这是对于完全无噪声信道而言)。现假设发送方以1/(2f)的时间间隔改变信号。也就是说波特率为2f。根据尼奎斯特定理可以得到:

    比特率=波特率×n=2f×n=2f×log2(B);B是不同单元的个数

    噪声通道

    到目前为止,似乎没有证据证明给定最大频率的数据速率存在一个上限。然而我们给出两个强有力的论据。首先,信号单元的个数越多,它们之间的差别就越小。另一个论据是很多通道都受噪声的影响,这意味着一个传输信号可能会发生畸变。

    香农定理

    香农定理将最大的数据速率和频率以及信噪比联系在一起,明确指出

    比特率=带宽×log2(1+S/N) bps

    这一公式表明带宽和信噪比越大,比特率就越高。

    ▲ 数模转换

    把数字信号转换成模拟信号并不困难。只需要为一组一个或多个的比特值分配一个特定的模拟信号。模拟信号有三种变化方式:频率,振幅和相移。

    频率调制

    第一种方法称为频移键控(FSK),也叫频率调制,它给数字0和1分别分配一个模拟信号频率。频率调制也可以使用更多的频率,一般的,n个比特位可以有2^n个组合,每一个组合可以对应2^n个频率中的一个。这样的话,比特率就是波特率的n倍。

    调幅

    幅移键控(ASK),也叫调幅(AM),类似于频移键控。

    相位调制

    相移键控(PSK),也叫相位调制(PM),也是和前面类似的一种技术。信号的差异在于相移,而不是频率或振幅。通常,一个信号的相移是相对于前一个信号而言的。因此,它也经常被人们称为差分相移键控(DPSK)。如前所述,n个比特位的每一个组合可以对应于2^n个相移中的一个,从而使比特率n倍于波特率。

    正交调幅

    信号模式的数目越多,意味着比特率相对于波特率的倍数越大。问题是要提高比特率就必须增加信号的个数,从而也将减小信号间的差别。一种普遍的解决方案是结合使用频移,振幅和相移,这样不但可以增加合法信号的数目,也能让信号之间保持较大的差异。一种常用的技术称为正交调幅(QAM),它为每个比特组合分配一个给定振幅和相移的信号。这样对于两种不同的振幅和4种不同的相移可以产生8种不同的信号,可以对应于一个3比特位组。注意相同的比特位(比如3个比特位011)所产生的信号并不总是一样的。当然,他们的振幅是一致的。但是相移是相对于前一个信号的终止位置而言的。因此,尽管两者的相移都是1/(4f),它们的开始位置却不同。

    模数转换

    如果模拟信号的特征是不变的,那么只需要检查信号的振幅、频率和相移,并产生相应的数字信号即可。如果碰到特征不断变化的模拟信号时该怎么办呢?它们比数字数据产生的信号要复杂的多,并且需要另一种转换技术。

    脉冲幅度调制

    数字化模拟信号的方式之一是采用脉冲幅度调制(PAM)。其处理过程相当简单:按一定的时间间隔对模拟信号进行采样,接着产生一个振幅等于采样信号的脉冲。

    脉码调制

    由PAM产生的信号看起来似乎是数字式的,但由于脉冲的幅度和采样信号一样,所以其取值是随意的。使脉冲真正数字化的一种方法是为采样信号分配一个预先确定的振幅。这种处理方法称为脉码调制(PCM)。接收端重建模拟信号的精确度取决于两个要素。其一是采样的频率s。其二是可以选择的振幅的个数。根据尼奎斯特定理,如果原始信号的最大频率为f,那么不管s>2f,还是s=2f,其效果都是一样的。采样信号的幅度如果和脉冲之间的相对差距较大的话,重建信号将出现畸变现象。

    还有其他调制技术。比如,脉冲宽带调制是通过产生振幅相等而宽度变化的脉冲来对信息进行编码。差分脉冲编码调制测量连贯的采样之间的差分。增量调制是差分脉冲编码调制的一种变形,它的每个采样只用一个比特位。

    darkstax 2006-10-07 17:06 发表评论
    ]]>
    通信、标准和协议http://www.cnitblog.com/darkstax/archive/2006/10/06/17683.htmldarkstaxdarkstaxFri, 06 Oct 2006 09:16:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/10/06/17683.htmlhttp://www.cnitblog.com/darkstax/comments/17683.htmlhttp://www.cnitblog.com/darkstax/archive/2006/10/06/17683.html#Feedback0http://www.cnitblog.com/darkstax/comments/commentRss/17683.htmlhttp://www.cnitblog.com/darkstax/services/trackbacks/17683.html
    通信技术就像是一座大城市的交通建设。四通八达的道路通向四面八方,可以带你到任何想去的地方。这样它就必须要有应付巨大交通流量的能力,特别是在大城市里。设计者必须处理好流量和成本之间的平衡。一个10车道的环城公路当然比一个6车道的公路具有更高的交通流量,但车道越多,成本越高,这样是否值得呢?在大城市里答案或许是肯定的,但在小城市里就未必了。通信系统也是一样。它必须具有一定信息量的传输能力,但具体多少取决于实际的需要。需要传输的信息量将影响通信设备的连接方式。

    一旦建立了连接,就需要确定一些通信的标准。正如如果没有交通信号和交通法规,城市道路将难以发挥作用一样,不管是以电缆作为媒体还是在空中传播,都有很多信源想要发送信息,所以必须要建立一套标准用来防止信息发生冲突或者解决冲突。

    最后即使我们解决了以上所有的问题,建立起高效率、低成本、既安全又方便信息传递的计算机网络,还存在另一个问题:很多计算机系统都是不兼容的。有时候,从一台计算机传输信息到另一台去就像把一个变速器从一辆车换到另一辆车去一样。如果两辆车都是福特生产的Escorts,那没什么问题。但如果一辆是Escorts,另一辆是Grand Prix,那就麻烦了。

    为了解决这些问题,建立了OSI协议模型的7个层次,每一个层次都定义了各自的计算机网络通信协议,使上层与下层实现细节隔离。它们一起将用户和数据通信的具体细节隔离开来。如果充分实现的话,它们将允许不兼容的设备互相通信。

    较低的三个层次主要处理网络通信的具体问题。

    物理层负责发送和接收比特流,而不管其具体含义。它不知道这些数据代表什么,甚至不知道它们是否正确。物理层也包含连接策略:电路交换、报文交换和分组交换。电路交换在节点间建立和保持专有线路;报文交换经由网络传送报文,没有专有的线路连接特定的节点;分组交换把报文划分为多个分组,然后分别进行传送。

    数据链路层为物理层提供错误检测和竞争策略。错误检测技术包括奇偶校验位和其他检错码或纠错码。竞争策略包括冲突检测。冲突检测让多个同时发起传输的设备能够检测到冲突的存在。于是每个设备都等待一段随机时间后重新进行传输。而在令牌网中,随着令牌的传递,只有获得令牌的节点才能传输数据。

    网络层是底层三个层次的最高层。它包括路由策略。路由算法负责在两节点间寻找最便宜的路径,路径上的每个节点都知道它的后继节点。最便宜的路径可能随着网络情况的变化而变化,因此可以使用适当的路由策略来检测网络发生的变化,并相应的作出改动。

    顶部的四个层次为用户服务。

    其中的最低层是运输层。它提供缓冲、多路复用和连接管理功能。连接管理确保被延迟的报文不会给正常的连接建立或释放带来影响。

    会话层负责管理用户间的会话。在半双工的通信中会话层决定谁可以通话,谁必须收听。同时它还允许定义同步点,以应付在高层出现的故障。

    表示层解决数据表示中存在的差异问题。它允许两个信息存储方式不同的系统交换信息。表示层也提供数据压缩功能,以减少传输量。另外它还实现加密和解密。

    最后,也是最高层,即应用层,它包括许多用户服务。它直接与用户或应用程序通信。

    据说传送实物将是数据通信的最高境界!



    darkstax 2006-10-06 17:16 发表评论
    ]]>
    基本的UNIX命令http://www.cnitblog.com/darkstax/archive/2006/04/18/9339.htmldarkstaxdarkstaxTue, 18 Apr 2006 12:49:00 GMThttp://www.cnitblog.com/darkstax/archive/2006/04/18/9339.html设定口令
       如果想设置或改变个人的密码,随时可以以命令 passwd 来改变。

    虚拟主控台(virtual console)
       在 linux 下提供了虚拟控制台的功能,它允许你在同一时刻进行不同的工作。如,你可以在一个控制台安装一个冗长的程序,然后在另外一个控制台轻松的阅读邮件和浏览网页等。 linux 下的切换控制台命令为按住左边的 Alt 键,然后按 F1 到 F8 切换。

    常用的命令

    目录
       登陆到系统后,系统会把你放在个人主目录下,用命令 pwd 可以查看当前目录。 pwd 即为 print working directory 的缩写。你可以用命令 pwd 来证实这一点:
       $ pwd
          /home/bill

       如果我们想切换目录,可以用命令 cd 来完成这一点:
       $ cd /usr/bin
       $ pwd
          /usr/bin

       如果输入 cd ,会出现什么现象呢? cd 将会把目录切换到你的主目录下。此外, ~ 用来代表主目录。如   ~/program 表示 program 是放在你的主目录下的。

       你可以在主目录下创建这个 program 目录,用下面任意一个命令即可:
       $ mkdir program
       或者使用完整的路径,
       $ mkdir /home/bill/program

       现在切换到这个目录下:
       $ cd program
       $ pwd
          /home/bill/program

       有时候我们目录陷的太深,想返回上一层应该怎么办呢,难道又要输入冗长的路径名?在 linux 下,.. 用来代表上一层目录。如果想返回上一层目录,我们输入:
       $ cd ..

       和 mkdir 相对应的是 rmdir ,这个命令可以用来删除目录:
       $ rmdir program

    列出文件
       键入 ls 不加任何参数,将会列出当前目录的文件,当然你也可以键入你相列出的目录:
       $ ls /home

       有些系统提供了比较花哨的 ls ,它会把一些特殊的文件如目录和可执行文件等用粗体字甚至是有颜色的字来显示。在这类系统中,如果想改变系统的预设颜色,你可以编辑 /etc/DIR_COLORS ,或者将它复制到你的主目录下,并命名为 .dir_colors ,然后编辑。

       正如大部分的 UNIX 命令一样,你可以在 ls 命令后加上以 -(连字号)为开头的选项来控制它,不要忘记在 - 前留下一个空白号。其中 -a 是一个比较有用的选项,这里的 a 是 all 的意思。加上这个选项,ls 将会列出一些你想象不到的文件。 其中 . 是表示当前的目录, .. 是表示上一层目录,而以 . 开头的文件表示的是隐藏文件,它在一般的 ls 中不显示出来。

       另一个有用的参数是 -l ,它是 long  的意思,这个选项可以显示文件的详细信息。如
    文件类型   权限   物理连接数   所有者   群组   文件字节数   上次修改的日期和时间   文件名称

    浏览文件
       使用编辑器是阅读文件内容的一种方法,就想下面这样:
       $ emacs .bashrc

       如果你只是想快速的扫过它,而不是编辑,你可以用下面的命令:
       $ cat .bashrc

       但是对于比较大的文件,它向上扫动的太快以至于无法阅读,人们通常使用 more 命令来替代。
       $ more .bashrc

       less 是 more 变化来的一个命令,它比 more 的功能更为强大。如你可以在文件的一个位置作上标记,等一会儿再回到那里。

    符号连接(symbolic link)
       当需要引用一个位置的文件,而在此位置该文件不存在,可以在此位置建立该文件的一个连接来解决问题。这个机制就是符号连接(symbolic link)。UNIX 提供了 links 这个命令来处理此类状况。符号连接是一种指向另一个文件的虚拟文件(dummy file),如果你阅读、编辑或执行这个符号连接,系统会很聪明的直接作用到那个真的文件上。

       以 prog 为例,如果你要建立一个连接 prog, 让它连接到真实文件 prog.1 上,执行如下命令:
       $ ln -s prog.1 prog
       现在你已经建立了一个叫 prog 的虚拟文件,当你执行 prog 时,实际上执行的是 prog.1 这个文件。

    Shell
       你可以使用一下的命令找出你目前正在使用的 shell:
       $ echo $SHELL
       你可以用 chsh 这个命令来改变你的 shell:
       $ chsh

    常用的按键以及用法
       当你键入一个命令后,按下退格键(backspace),应该会清楚最后一个字符;Ctrl-U应该会删除整行(Ctrl-U 表示先按下 Ctrl 再按下 U);当你输完一个命令正在执行时,Ctrl-C 可以中断它,而 Ctrl-Z 可以暂停它。当你想要再继续进行下去时,可以键入 fg (foregroud) 把它拉回前台继续执行。

       如果其中任何的按键失效了,有可能是你的终端没有正确的设置,你可以用 stty 这个命令来修复它:
       $ stty function key
       其中 function 表示你想作的事,key 表示你按下的键,可以用 ^ 来表示 Ctrl 键。

       下面的命令用来设定我们刚刚所描述的功能:
       $ stty erase ^H
       $ stty kill ^U
       $ stty intr ^C
       $ stty susp ^Z
       注意:^H 是退格键所产生的 ASCII 代码。

       另外,你也可以用 stty -a 来显示目前的终端配置。但其结果并非人人都能理解,因为 stty 是一个多用途的复杂命令,有些用途你需要对你的终端有很深入的了解。

    darkstax 2006-04-18 20:49 发表评论
    ]]>