资源描述
UNIX基础
第一章:UNIX操作系统简介
1.1 什么是操作系统?
操作系统是一种特殊的用于控制计算机(硬件)的程序(软件)。
操作系统在资源使用者和资源之间充当中间人的角色。为众多的消耗者协调分配有限的系统资源。系统资源包括,CPU,内存,磁盘,和打印机。举个例子,一个用户(也可以是程序)将一个文件存盘,操作系统就会开始工作:管理磁盘空间的分配,将要保存的信息由内存写到磁盘等。
当用户要运行一个程序时,操作系统必须先将程序载入内存,当程序执行时,操作系统会让程序使用CPU。在一个分时系统中,通常会有多个程序在同一时刻试图使用CPU。
操作系统控制应用程序有序地使用CPU ,就好象一个交通警察在一个复杂的十字路口指挥交通。十字路口就象是CPU;每一条在路口交汇的支路好比一个程序,在同一时间,只有一条路的车可以通过这个路口,而交通警察的作用就是指挥让哪一条路的车通过路口,直到让所有路口的车辆都能通过路口。
UNIX操作系统的历史
UNIX操作系统1969年在贝尔实验室诞生。Ken Thompson 在Rudd Canaday,
,Doug Mcllroy,Joe Ossana,and Dennis Ritchie,的协助下,写出一个小的分时系统,开始得到关注,在许诺为实验室的管理人员提供一个文档准备工具后, UNIX先驱们可以使用到一台更大的计算机,从而得以继续他们的开发工作。
在七十年代的中期,一些大学得到使用UNIX的许可,并很快在学院之间得到广泛流行,其主要的原因是:
小巧:最早的UNIX系统只占用512K字节的磁盘空间,其中系统内核使用16K,用户程序使用8K,文件使用64K。
灵活:源代码是可利用的,UNIX是用高级语言写成,提高了操作系统的可移植性。
便宜:大学能以一盘磁带的价格得到一个UNIX系统的使用许可。早期的UNIX系统提供了强大的性能,使其能在许多昂贵的计算机上运行。
以上优点在当时掩盖了系统的不足:
没有技术支持:AT&T在当时大部分的资源和都用在MUTICS上,没有兴趣开发UNIX系统。
Bug的修补:由于没有技术支持,bug的修补也得不到保证。很少的,或者根本没有说明文档:用户有问题经常只能是去看源代码。当UNIX传播到位于California的Berkeley大学的时候,Berkeley大学的使用者们创建了自己的UNIX版本,在得到国防部得支持后,他们开发出了许多新的特性。但是,作为一个研究机构,Berkeley大学提供的版本和AT&T的版本一样,也没有技术支持。当 AT&T意识到这种操作系统的潜力后就开始将UNIX商业化,为了加强产品性能,他们在AT&T的不同部门进行UNIX系统开发,并且开始在系统中结合Berkeley开发出的成果。
UNIX最终的成功可以归结为:
一个灵活的、包含多种工具的用户界面与操作环境。
模块化的系统设计可以很容易地加入新的工具。
支持多进程,多用户并发的能力。
Berkeley大学 的DARPA支持。
强大的系统互连的能力。
能在多种硬件平台上运行。
标准化的界面的定义促进应用的可移植性。
1.3 UNIX系统的特性
UNIX为用户提供了一个分时的系统以控制计算机的活动和资源,并且提供一个交互,灵活的操作界。UNIX被设计成为能够同时运行多进程,支持用户之间共享数据。同时,UNIX支持模块化结构,当你安装UNIX操作系统时,你只需要安装你工作需要的部分,例如:UNIX支持许多编程开发工具,但是如果你并不从事开发工作,你只需要安装最少的编译器。用户界面同样支持模块化原则,互不相关的命令能够通过管道相连接用于执行非常复杂的操作。
运行中的系统
内核是运行中的系统,它负责管理系统资源和存取硬件设备。内核中包含有它检测到的每个硬件的驱动模块,这些模块提供了支持程序用来存取CPU、内存、磁盘、终端、网络的功能。当安装了一种新的硬件,新的模块会被加入到内核之中。
运行环境
工具和应用程序
UNIX的模块化设计在这里表现得非常明显,UNIX系统命令的原则就是每条命令做好一件事情,组合一系列命令就组成工具箱,选择合适的命令就可以完成你的工作,恰当地组合这些工具能够帮你完成更复杂的任务。
从开始,UNIX“工具箱”就包括了一些可以同系统进行交互的基本命令,UNIX系统也提供了以下几种工具:
电子邮件(mail,mailx)
文字编辑(ed,ex,vi)
文本处理(sort,grep,wc,awk,sed)
文本格式化(nroff)
程序开发(cc,make,lint,lex)
源程序版本管理(SCCS,RCS)
系统间通讯(uucp)
进程和用户帐号(ps ,du,acctcom)
因为UNIX系统的用户环境被设计为一种交互的,可编程的,模块化的结构,新的工具能很容易地开发,并且添加到用户工具箱之中,而哪些不是必须的工具能够被省略,这种省略不会影响系统的操作。
举个例子,一个程序员和一个打字员同时在使用UNIX系统,他们会使用许多普通的命令,虽然他们的工作性质不相同。他们会用一些与他们的工作相关的工具。程序员使用的工具会包括程序开发和程序管理的工具,而打字员会使用字处理,文档管理的工具。有趣的是:程序员用来修订程序的工具同时也被打字员用来文档的修订。因此,他们的系统看上去十分相似,但是,每一个用户选择模块都与他或她的应用要求密切相关。
UNIX系统的流行很大程度可以归结与:
UNIX系统的完整性与灵活性使其能适应许多的应用环境。
众多的集成的工具提高了用户的工作效率。
能够移植到不同的硬件平台。
SHELL
Shell 是一个交互的命令解释器。命令是在SHELL提示符下键入,shell会遵照执行键入的命令。用户通过shell与计算机交互。shell从键盘获得用户键入的命令,然后将命令翻译为内核能够理解的格式。然后系统就会执行这个命令。
你会注意到shell与内核是分离的两部分。如果你不喜欢当前shell提供的特性,你能很容易地用另一种shell代替当前的shell。
一些shell是命令行方式,一些提供菜单界面。UNIX系统支持的普通的shell都包括一个命令解释器和一个可编程的接口。
有四个最通用的shell,分别是:
Bourne shell:
由AT&T提供的最原始的shell,由贝尔实验室的Stephen Bourne开 发。可提供命令的解释,支持可编程接口,提供诸如变量定义、变量替代、变量与文件测试,分支执行与循环执行等功能。
C Shell (/usr/bin/csh):
C Shell是在California Berkeley大学的Bill Joy开发,一般存 在于BSD系统中,于是被称为California shell,简写名称为C Shell。它被认为是Bourne-Shell的一个改进版本。因为它提供拉交互的特征例如命令堆栈(-允许简单地调用和编辑以前输入的命令,)别名(提供对已有命令取个人的别名)
Korn Shell(/usr/bin/ksh):
贝尔实验室最新的开发成果,由David Korn开发成功。它被认为是是一种增强型的Bourne Shell,因为它提供对简单可编程的Bourne Shell界面的支持,同时提供C Shell 的简便交互的特征。它的代码也被优化来提供一种更快,更高效的shell。
POSIX Shell:
POSIX是一种命令解释器和命令编程语言,这种shell同Korn Shell在许多方面都很相似,它提供历史机制,支持工作控制,还提供许多其它有用的特性
表1-1 shell 特征的比较
1.4 UNIX的其他特征
层次化的文件系统
存储在磁盘上的信息称为文件。每一个文件都分配有一个名字,用户通过这个名字来访问文件,文件的内容通常是数据,文本,程序等等,UNIX系统通常有几百个文件存在,于是另外一种容器:目录被用来让用户在一个逻辑上的分组里管理它的文件。在UNIX系统中,目录被用来存储文件和其它的目录。
文件系统的结构非常复杂,如果用户的工作部门改变,用户的文件和目录能很容易移动,改名,或组织到新的或不同的目录中,这些操作只需使用一些简单的UNIX系统的命令即可完成。文件系统就象一个电子排列柜,它能让用户分割,组织他们的信息到适合自己环境与应用的目录中去。
多任务
在UNIX系统中,能有几个不同的任务在同一时刻执行。 一个用户在一个终端可以执行几个程序,看上去好象是同时在运行。这意味着一个用户可以编辑一个文本文件时格式化另一个文件,同时打印另一个文件
实际上,CPU在同一时刻只能执行一个任务,但是UNIX系统能够将CPU的执行分成时间片,通过调度,使在同一时间内执行,对用户看来,就好象在同时执行不同的程序一样。
多用户
多用户就是允许多个用户在同一时刻登录和使用系统。多个终端和键盘能连接在同一台计算机上。这是多任务功能的一种自然延伸。如果系统能够同时运行多个程序,一些程序也能够支持多个用户线索。另外,一个单个用户能够通过多个终端在不同的时刻登录同一个系统。 这种体系结构的一个很大的好处是:工作组的成员能同时操作相同的数据。
第二章:用户登录和普通命令定位
目标
完成了这一章,你能够做以下事情:
登录UNIX系统
退出UNIX系统
使用联机帮助查找命令用法
理解shell命令的格式
用一些简单的命令来鉴别系统用户
用一些简单的命令来与系统中的用户通信
用一些简单的命令来实现多种功能并输出结果
2.1一个典型的终端会话过程
为了能和计算机通信,需要有以下条件:
一个具有完全ASCII字符集的终端
一条连接计算机的数据通信线路
一个登录ID(用户身份确认)
一个密码
一个终端会话过程开始于用户登录一个系统认可的终端,结束于退出信号(logoff),计算机会在你登录期间响应你的键入的命令
UNIX通过用户名(有时也称为登录ID)来识别是否是系统中的用户。你的用户名,就是系统管理员分配给你的名称,通常是你的名字或是名字的缩写。你帐号的密码可以是一个随意的的字符串,你的系统管理员会提供给你一个你可以更改的初始化密码,你的密码是你私人所有的,你自己决定密码是什么,没人知道或能找出你的密码是什么。如果你忘记了你的密码,你就不得不求助于你的系统管理员。因为只有系统管理员有权删除修改用户的密码。
在终端上出现登录提示符时,你就可以输入用户名和密码登录以系统。
在登录上系统后,你可以输入命令,SHELL会解释命令,操作系统会为你执行命令,任何执行命令产生的响应都会显示在你的屏幕上。
当工作结束后,你可以退出系统以终止终端对话,这会释放终端以便让其他人可以通过这台终端登录系统。建议你在离开时退出系统,以防其他人使用你的帐号使用系统。
2.2登录和退出
你需要执行以下步骤来登录系统:
打开终端,如果一些终端显示已经超时(现象为屏幕上没有任何显示)你只需要敲一个键(例如shift键)激活显示。
如果你没有看到login:提示符,或者出现一些垃圾字符,敲一下回车,如果仍旧不工作,敲一下break键。垃圾字符通常是计算机试图以错误的速度与你的终端联结,break键告诉计算机尝试另外一种速度,你可以通过敲break键来实验不同的速度,但记住在每次敲键后要等待机器响应。
当login:提示符出现后,键入你的登录ID。
如果passwd:提示符出现,键入你的密码,为了确保安全,你键入的密码不会在屏幕上显示。
注意:键盘上的退格键在登录过程中没有删除功能。
$符号是Bourne Shell(/usr/old/bin/sh),korn Shell(/usr/bin/ksh),和POSIX Shell(/usr/bin/sh)的标准提示符,而%符通常表示这是C Shell(/usr/bin/csh)。如果你用的是POSIX shell,你会看到一个$提示符。而#提示符一般是为系统管理员保留的。当你以系统管理员的身份登录时,会出现这个符号。这也为你的特殊身份提供一个有用的提示功能:因为作为系统管理员,你能更改(或删除)系统中的任何数据。
密码的说明:
第一次登录系统,你的帐号可能被设置为要你键入密码。你提供的密码必须满足以下条件:
你的密码必须不小于六个字符
前六个字符中至少要有两个字母。
前六个字符中至少要有一个不是字母。
当你第一次输入你的密码后,系统会提示你重新输入一次以确认密码。然后系统会重新出现登录提示符,你可以用你的新的密码来完成登录步骤。
2.3 Shell-命令解释器
当你登录的过程中,shell已经开始在为你工作。终端上会出现提示符,并且解释执行你输入的命令,我们会在本章剩下的部分讨论不同的命令,包括如何使用在线帮助,找出谁登录了你的系统,和如何同你系统中的其他用户通信等等。
正如你在上图中所看到的,shell还支持许多其他的命令解释功能
2.4 命令行的格式
在你看到shell提示符($)后,你就可以键入命令。一个正确的命令名通常是在命令行的第一项。许多的命令还有命令选项,选项的作用是为了扩展命令功能,而参数通常是一些文本,一个文件名,或者是目录名等命令可以操作的东西。选项通常以短横线(-)开始。
空字符的作用是分割命令,选项,参数,空字符被定义为一个或多个空格符(space),或TAB键,例如:命令echo Hi和echoHi是有很大的差别的,计算机会将第一个理解为命令echo 和一个命令的参数 (Hi),而第二个会被认为是一个名为echoHi的命令,而这个命令可能不是一个有效的命令
每个命令输入之后都应该输入回车符,回车符会将命令送往计算机执行。在上图中,回车符会被系统识别,而其他的字符不会产生作用。
终端的输入支持“预键入”,预先键入的意思是在你键入一个命令后在提示符返回前立即键入另一个命令,你键入的命令会先被缓存,并在当前命令执行完成之后执行。
注意:UNIX的命令是对大小写敏感的,大多数的命令和参数都是小写字符。因而,“echo hi”是一个合法的命令而ECHO hi不能被系统识别。
注意:你可以同时键入两个命令,方法是用分号(;)分割两个命令,
如:
$ ls;pwd
2.5 第二提示符
Bourne ,Korn,和POSIX shells 都支持多命令行。如果shell要求更多的输入来完成一个
命令,在回车前,就会出现第二提示符(>)。
有些命令是成对出现的,而有的字符要求有结束字符,(例如一个开始的 if 要求 fi
来结束,开始的括号要求一个结束的括号,一个开始的引号要求一个结束的引号。)
如果你键入一个错误的命令,就像上图中描述的一样,SHELL会显示第二提示符。通常按ctrl +c会中止当前正在运行的程序,然后返回到SHELL提示符下,你可以通过 stty
-a 命令来自行定义你的中止键
2.6 帮助手册
联机帮助手册对查找命令用法非常有用,但是它不是作为教材而设计的,它对学习如何使用UNIX操作系统的帮助也不大。有经验的UNIX系统用户使用帮助来查找命令的细节和用法
就像上图中表示的那样,帮助手册被分为几个部分。
以下是每一节的简短的说明:
第一节:用户命令
这一节描述直接被用户或是shell脚本使用的程序。任何系统中的用户都可以使用这个帮助。
第1M节:系统维护
这一节描述系统管理员用来维护系统的命令的使用,只有root用户才能使用。
第二节:系统调用
这一节描述与UNIX系统内核接口的函数,包括C语言的接口。
第三节:函数与函数库
这一节阐述了系统提供的与直接系统调用不同的一些二进制格式的函数。这些函数通常通过C程序来存取,例如:输入输出处理和数学计算的函数。
第四节:文件格式
这一节定义用户配置文件的组成,文档,和不同文件类型的格式(例如a.out)
第五节:多方面的主题
这一节包括不同的信息,例如头文件的描述,字符集,宏包。和其它的主题。
第七节: 特殊的设备文件
这一节讨论特殊的设备文件的特性,这些文件提供uniz系统与系统I/O设备,如磁盘,磁带机,打印机)之间的链接。
第九节:字典
这一节定义了贯穿整个帮助手册中的术语。
在每一个章节里,命令以字母的顺序列出,用户可以通过检索手册的索引来找到 一个命令。
2.7 手册页中的内容
了解帮助页的格式是非常重要的。在整个UNIX系统的文档中,参考以cmd(n)的格式给出,其中cmd是命令名,而n 代表八个帮助章节的其中一个,因而,date(1)代表在帮助手册第一节中关于date命令的内容,在每一个章节里,命令是以字母的顺序列出的,这是由维护帮助手册的方式造成的,页的编号没有意义,每一个命令都是从第一页开始的。
每一个帮助页(一些命令有多个帮助页)有几个主要的标题。帮助页也不总是有标题。
以下是每个标题的列表和其内容的描述;
名字 包括命令名和简短的描述,章节中的这个文本被用来产生索引。
大纲 定义了如何引用一个命令。黑体字的条目表示必须在终端上正确输入的部分。方括 号中的是任选项,规则类型的条款会被你所选择的合适的文本所代替,省略号( .....)被用来显示先前重复的参数。如果对摘要的意思有疑问,你可以去阅 读DESCRIPTION项。
描述 包括每个命令和选项的功能的详细描述。
额外的影响 提供不同口语的编程信息,这对于国际化的支持非常有用。
网络特性 基于网络特征的功能。
返回值 描述程序调用完成后的返回值。
诊断信息 解释命令可能出现的错误信息
错误 列出错误的条件合相应的错误信息或是返回值。
范例 提供命令使用的范例。
警告 指出潜在的陷阱。
相关性 指出与不同硬件平台相关的UNIX系统操作的变化。
作者 命令的开发人员。
文件 命令使用的任何特殊的文件。
SEE ALSO 指明帮助手册中的其他页,或是其他包含附加信息的文档。
BUGS 讨论已知的漏洞和缺陷和所支持的修正
标准一致性 描述每一个条目支持的标准。
2.9 联机手册
有另外一种方法从帮助手册中检索信息。
在许多UNIX 系统中,帮助手册通常是在线的。在线帮助手册通过 man 命令来存取。
语法是:
man -k keyword
或者
man [12345791m] command
其中:
man -k keyword 列出所有的命令,在命令描述中有字符串 keyword。
man [1234579m] command 显示指明帮助章节的命令的帮助页。
man command 显示命令的默认的帮助条目。也许一个
命令的条目,在不止一个的帮助页中。
以上的所有的命令要求系统管理员已经正确地安装了在线帮助。在以上的例子中,
man passwd 会显出改变密码的命令。man 4 passwd会显示passwd 文件的格式。
在指定命令的帮助条目的第一页已经出现在屏幕上。你可以使用以下的方法浏览:
return 显示下一行
space 显示下一页
Q或q 退出 man 命令并且回到提示符下:
有时,在你读取在线手册时会看到一下的信息:
reformatting retry .wait..............
这个信息的意思是指定命令的帮助手册页需要解压缩,因为对当前用户来说是第一次使用。这条信息在用户下一次检索这个手册时不会再出现。
多个帮助手册页
一些命令有多个帮助条目。你可以用 whereis 命令来显示帮助的章节。例如:
$ whereis passwd
passwd :/sbin/passwd /usr/bin/passwd /usr/share/man/man.1.z/passwd.1
/usr/share/man/man4.Z/passwd.4
$whereis nothere
nothere:
这说明在章节1和4中有一个关于passwd命令的帮助条目,没有关于nothere 的帮助手册。
2.10 一些初级命令
我们将学习一些基本的命令,其中的大多数命令除本书提到的选项之外的还有更多的选项,你可以使用联机手册来了解其它的选项的用法。
id 命令
为了用户存取文件和执行程序的安全性考虑,UNIX必须要知道你的用户和组的id号,这种由操作系统维护ID号,对应哪些为用户方便而使用文字名称,当你登录时,系统会使用ID号确认你的身份。在你已经登录后,你也可以更改你的用户和组。id 命令的作用就是显示你当前的用户和组的定义。
计算机将所有的用户的信息存储在文件 /etc/passwd中,组的信息存储在/etc/group中。
组
组的用途在于可以让一组用户共享地存取文件。只有系统管理员才能定义组中的用户,每一个用户都能存在于不同的组中。组通常由机构中已经定义的工作组组成。例如,一个机构可能由生产,管理,帐务组组成。这些组的用户结构可能定义为一下的结构:
*号指明登录时的组的定义
其中:
chris 是所有的三个组的成员。
mike 是两个组的成员。
因而,chris能够使用与生产,管理,帐务三个部门有关的文件,mike能够存取与生产,帐务部门有关的文件。其他的用户只能存取他们登录组中的文件。
who 命令
who命令可以报告哪些用户登录系统,每一个用户连接的终端和登录时间的信息。who am i 报告本用户的用户名和端口信息,whoami 命令报告系统与本地终端的关联的用户名。用户是否有权执行一个命令,依靠的是用户的ID,一个用户能够通过更改他的身份ID来存取其它的命令或程序。
date 命令
date 命令被用来报告系统的当前日期和时间。date可以加上参数来更改输出的格式
通常date命令不带任何选项和参数使用。
系统管理员有权限修改系统时间和日期。
passwd 命令
在许多的系统中,系统管理员控制着用户的密码。在UNIX系统中,系统管理员能允许用户直接控制他们自己的密码,用户可以使用passwd命令改变他们的口令,语法如下:
$ passwd
输入这个命令后,系统会要求输入你当前的密码,(老密码)。这是为了避免在你登录了系统后,离开你的终端时间内有人更改你的密码。然后系统会要求你输入新密码,并要求重输入一次以确认你的新密码,这样做是为了避免你打字的错误。你的新旧密码必须至少有三个字符不同。
在你输入密码时,新旧密码字符都不会出现在屏幕上。
密码限制:
你的密码至少有六个字符,前六个字符中至少要有两个是字母,前六个字符中至少有一个不是字母。
系统管理员不受这些规则限制,所以如果系统管理员给你的帐号分配一个密码,这个密码可能不符合这些规则。
echo命令
echo命令使你可以显示命令行参数的,这个意思是,一个如下的命令:
$ echo hello
输出:
helllo
这看上去十分平常,但是这个命令让我们可以佷方便地在shell程序中显示用户信息和检查shell变量的值。在shell编程中,echo命令用的很普遍。
clear 命令
clear命令清除终端屏幕上的字符。这个命令仅仅清除当前的屏幕,所以,用户有可能向上翻屏来查看以前的屏幕信息,想要清除所有的屏幕信息,按HOME 键,将光标至到home,然后键入clear 命令。
write 命令
使用write 命令可以向当前登录到同一个系统的用户的终端发送信息。当你使用write时,write 会让你输入信息,每一次你敲回车,信息就会被传送到接收者的终端上,接收者可以向你回写信息,你可以通过你的终端进行交互的对话。当你完成键入信息后,敲入ctrl+d.就可以结束你的对话。
注意:除非你已经禁用此项功能,否则别人在任何时候都可以发送信息到你的终端上来,如果这时你正在使用一个工具,如man,mail,或是一个编辑器的时候,这些信息会出现在你的屏幕上,并与你正常的信息交错在一起,因此造成混乱。
如果你想要发送信息给一个用户,而这个用户当前没有登录系统,你会得到如下提示:
user is not logged on(用户没有登录系统),其中user表示你试图发送信息的人的用户名
mesg 命令
你可以通过mesg命令禁止其它用户发送信息到你的终端。如果你给一个已经禁止接收其它用户发送信息的用户发送信息,你会接到Permission Denied 错误。
mesg n 拒绝其他人write 到你的终端。
mesg y 允许其他人write 到你的终端。
mesg 报告是允许或是不允许其他人写到你的终端。
即使你的终端是禁止写入的,系统管理员一样能发送信息到你的终端。
news 命令
系统中的所有用户都感兴趣的信息可以通过news命令广播出去。这个命令通常是系统管理员对系统中所有用户进行通告的时候,例如在系统关闭,备份时,或是在新的硬件生效时使用。
你可以键入news命令来阅读新闻。如果命令后没有选项,只有那些你还没有阅读过的信息会显示。
news命令的选项有:
-a 读取所有的新闻,不管是否已经被读取过。
-n 只显示未读过的新闻的标题
每一个存取新闻的用户在他的HOME目录下都有一个.news_time文件。每一个UNIX系统中的文件都有一个时间标志,时间标志记录有上一次文件被修改的时间。.news_time上的时间标志会被更新,以匹配你最后读取得新闻信息的时间。如果一条新的新闻加入,news命令知道这条新闻还没有被阅读,因为你的.news_time文件的时间标志比新的新闻的时间标志早。
第三章:文件系统导航
第三章 文件系统
目标
完成这一节,你能做以下事情:
描述UNIX文件系统的布局
了解文件与目录的不同之处
自如地操作一个UNIX 文件系统。
建立和删除目录
描述绝对路径和相对路径的不同
在可能的情况下,使用相对路径来简化你的输入。
3.1 什么是文件系统
UNIX系统提供文件系统来管理和组织你的文件和目录。文件通常是数据的一个容器,而目录是文件和(或)其他目录的容器,一个目录包含下的另一个目录通常被称为子目录,
UNIX的文件系统与文件柜十分相似。整个文件系统就象一个文件柜,文件柜包含所有的抽屉,文件夹,和报表。抽屉同子目录一样能够包含报告和文件夹。一个文件夹当它包含报表时就像一个子目录。报表就代表一个文件,因为它存储实际的数据。
3.2 树型结构
目录结构能够用一个层次化的树形结构来表示。树上的每一个分支可以是目录或者文件。目录用椭圆来表示,文件用矩形来表示,以便在图中能够区别它们。
3.3 文件系统层次
象整齐的文件柜一样,UNIX文件系统层次提供了一种简单有效的机制来组织你的文件。由于一个UNIX发布版本通常包括几百个文件和程序,所以每个UNIX系统都使用一种默认的目录结构。在目录的顶端是根目录(因为它在一个倒转的树的顶部),根目录由一个反斜杠(/)来表示。
UNIX 系统同时提供了一些命令,可以让你在你需要时很容易地创建新的目录,也可以从一个目录移动或是拷贝文件到另一个目录。就象加入一个新的文件夹到一个文件柜的抽屉中和将新的文件夹移动一个报表到一个老的文件夹一样容易。
UNIX系统中的文件可以分为两类:静态文件和动态文件。
静态文件(共享的文件)主要存在于三个目录中:/opt, /usr , /sbin
/opt:这个目录一般用来存放应用程序。开发人员和系统管理员会用它来安装新的产品和本地使用的应用程序。
/usr/bin:这个目录包含了基础的UNIX系统操作和文件处理的命令,所有的用户都有权限读取这个目录("bin" 是 binary 的缩写)。
/usr/sbin: 这个目录中有所有的在帮助手册1m章节中的命令,这些命令都是系统管理命令。其中的大多数命令只有超级用户才能使用。在帮助手册 1m中有关于这些命令的文档。
/usr/lib:这个目录包括应用程序使用的文档和共享的库
/usr/share:这个目录包括独立提供的文件(其中最重要的是帮助手册)
/usr/share/man:这个目录包括所有的语在线帮助页有关的所有的文件。
/uar/local/bin:这个目录通常用来存放本地开发的程序和工具。
/usr/contrib/bin:这个目录通常用来存放公用的程序和工具
/sbin:这个目录包括基本的用于启动与关闭系统的命令。
动态文件
动态文件(私有的文件)主要存在于七个目录中:
/home, /etc, /stand , /tmp , /dev, /mnt , 和/var;
/home 每一个UNIX系统的用户都有他或她自己的帐号。同登录id和口令一起,系统管理员会分配给你一个你自己的目录。 而这个目录一般都存放在 /home目录下。用户对自己的目录有完全的控制权,并负责对自己的目录下面的子目录和文件进行组织和管理。当你登录进一个系统,你会进入与你帐号相联系的目录中,这个目录,通常被称为HOME目录或是登录目录。从这个目录出发,你可以进入任何你有权进入的其它目录,至少你可以存取在你HOME目录中的任何东西;甚至你还可移动到UNIX系统的其它目录中(默认情况如此),除非系统管理员限制用户对系统中特殊目录的存取。
/etc这个目录中有许多的系统配置文件,这些文件在帮助手册第四节有说明文档。
/stand/vmUNIX 这个文件存储的是UNIX系统内核的文件。当系统启动时,会将这个文件装载入内存,对通过内核对所有的系统操作进行控制。
/tmp 这个目录通常用作操作系统的一个临时空间,操作系统创建中间文件,或是应用程序或者用户的临时文件通常都是放在这个目录下面。
注意:UNIX系统的惯例:无论何时,都可以删除tmp目录下的任何文件。
/dev 这个目录下有那些可以被联接到你系统中的硬件设备的文件,由于这些设备是作为一个到设备之间的联接,数据从来不会被直接存储到这些文件中,这些问文件通常被叫 做特殊文件或是设备文件。
/mnt 这个用来安装其它的设备 (例如:光驱)
/var/mail 这个目录包括每一个有邮件的用户的信箱。
/var/news 这个目录包括当前的新闻信息的所有的文件。他的内容可以通过键入news -a 来显示。
/var/tmp 这个目录通常被用于用户的临时空间。
3.4 目录名称
绝对路径: 相对于/home/user3的路径
/home/user3/f1 f1
/home/user3/memo memo
/home/user3/memo/f1 memo/f1
相对/home/user1的路径
/home/user1/f1 f1
许多的UNIX系统命令的操作对象是文件和目录。由于系统中的文件和目录很多,并且有可能有同名的文件名或者目录名。为了指明你需要对哪个文件或目录进行操作,需要提供一个路径名作为这个命令的一个参数。路径名代表遍历一个层次结构来找到你所需要的文件或目录所经历的路由。
$ command [options] [pathname pathname.......]
为了阐明目录名的概念,我们使用模拟的方法,用一只铅笔从沿着UNIX系统的树形结构从一个位置画到另一个位置。路径名也就是铅笔的笔迹通过的层次结构所遇到的节点(即目录)的一个列表,这个列表直到你想要到达的目录或文件为止。
当指明文件或目录的路径名时,反斜杠(/)被用来分割目录或文件名。
Directory/directory/directory(目录/目录/目录)
Directory/file(目录/文件)
每当你登录一个UNIX系统,你都会发现你存在于层次结构的一个目录下,你可以 通过UNIX系统命令来将你更换到另外的目录中去,但无论什么时候你都是在处在一个目录下。举个例子:当你登录一个系统,系统会初始化将你置于你的HOME目录中。
绝对路径和相对路径都能够指明文件和目录的位置
绝对路径
给出文件或目录的位置的完全的描述。
通常由层次结构的顶端开始(根目录)。
通常第一个字符是 /。
不关心你当前在目录结构中所处的位置。
整个目录结构只有一条路线。
绝对路径名的例子
以下的路径名指明目录结构中的所有的叫做 f1 的文件的位置。请注意,有许多f1 文件,但是每一个文件的绝对路径都是不相同的。
/tmp/f1
/home/user1/f1
/home/user2/f1
/home/user2/f1
/home/user2/f1
/home/user3/memo/f1
相对路径
通常由目录结构中的当前的位置开始
不由 "/" 开始。
相对当前的位置只有唯一表示方法。
一般都比绝对路径要短。
相对路径的例子
以下的例子再次指明名为 f1 的文件的路径,但是这些路径的定义必须依靠用户在目录结构中的当前位置。
假设当前的位置是 /home:
user1/f1
user2/f1
user3/f1
user3/memo/f1
假设当前的位置是/home/user3:
f1
memo/f1
假设当前的位置是/home/user3/memo
f1
请f1不是唯一的,但是UNIX系统知道应该去找哪个文件,因为系统知道你是在/home/user1检索/home/user1/f1,还是在/home/user3/memo的位置检索/home/user3/memo/f1。同时,你可能已经注意到:相对路径可能比绝对路径要短的多,例如,如果在目录/home/user3/mem中,你可以用一下两个命令来打印文件f1:
绝对路径: lp /home/user3/memo/f1
相对路径: lp f1
这表明使用相对路径名可以减少你大量的键盘操作。
注意:如果系统中有同名的文件存在于不同的目录中,而你又要使用相对路径来存取文件,这时,知道你当前的位置是非常重要的。
在 UNIX 系统内部是通过绝对路径来查找所有的目录和文件。因为绝对路径名可以绝对并且唯一地确定一个文件和目录,(由于只有一个根(/)),UNIX系统允许使用相对路径仅仅是为了方便用户的键入。
3.5 一些特殊的目录
绝对路径 相对于/home/user3的路径
/home ..
/home/user2 ../user2
/home/user1/f1 ../user1/f1
/ ../..
/tmp/f1 ../../tmp/f1
/usr/bin/vi ../../bin/vi
任何目录在创建时,两个条目会自动被创建,它们分别是 点(.),和点点(..)。在使用相对路径的时候通常会用到这两个条目。在上一个例子中,你也许已经注意到:相对路径的例子仅仅只能向下穿越文件结构,但如果使用.. ,你也能够向上穿越文件系统。
登录目录
当一个新的用户被加入到系统中,他(或她)会被分配一个登录id,可能还有一个密码,和一个用户自己拥有和控制的目录。这个目录通常创建在
展开阅读全文