《UNIX编程环境》——1.3 目录

1.3 目录

系统可以把你的文件(如名为junk的文件)同任何其他人的相同名称的文件区分开。这个区分是依靠把文件分组成目录(文件夹),而不是像图书馆中那样把书放在架上,所以在不同目录中的文件可有相同的名称而不至于出现矛盾。

通常,每个用户都有其个人目录或主目录,也有时称为登录目录,其中只包含了属于用户他或她的文件。当登录时,用户在自己的目录中。用户可以改变工作用的目录—通常称为用户的工作目录或当前目录—但用户的主目录始终不会变化。除非用户采取特别的行动,当建立一个新文件时,它会建在当前目录中。由于当前目录初始装状态下亦即用户自己的主目录,文件不会同其他人的相同名称文件相关。

目录中可以包含其他的目录,当然也可包含一般的文件(“好目录中有较少的目录……”),描述这一段结构组织的自然方式是目录和文件树。可以从树根开始沿着恰当的分支移动,从而找到系统中的任何文件。相反,也可以从任何一处开始,最终到达根部。

我们先从后者开始,所用的基本工具是pwd(print working directory),它显示出用户当前所在的目录的名称:

它说明用户当前在目录you中,you在usr目录中,而usr就在根目录中,根目录通常称为“/”。/字符分隔了名称的每个部分,前面所述的14个字符的限制也适用于名称的每个部分。在很多系统中,/usr是包含系统的普通用户所有目录的一个目录。(即使用户的主目录不是/usr/you,pwd也会印出类似的内容,所以用户能够理解下面的内容是什么。)

如果用户键入

应该得到如同使用ls所得到的完全一样的名单。在没有变量提供时,ls列出当前目录的内容;在给定目录的名称时,它就列出该目录的内容。

其次,试一试:

这应该列出一串名称,其中有读者自己的登录目录。

下一步是试验列出根目录本身。可以得到一个类似于下面的响应:

(不要混淆/的两个含义:它既是根目录的名称,又是文件名的分隔符。)它们多数是目录,但unix实际是一个含有UNIX内核的可执行形式的文件。有关它的更多内容在第2章中讨论。

现在试一下:

(如果junk仍在读者的目录中。)名称:

是称为文件的路径名。路径名表征了从根通过目录树到特定文件的全部路径名。在UNIX系统中有一个通用规则,凡是可以使用普通文件名的地方,都可以使用路径名。

文件系统构造得像一个通用逻辑树,用一幅图像可能会更明晰一些:

从图1-1中可以看出,你的junk文件同Parl的或Mary的junk文件没有任何关系。

如果所关心的所有文件都在你自己的目录中,那么路径名并没有多少作用;但是如果你同其他人合作,或者同时有几个项目在进行,那么路径名就实在很有用了。例如,你的朋友可以通过如下操作显示你的junk文件:

类似地,你可以用如下操作找出Mary文件的内容:

或者对她的文件制作一份自己的副本:

或者编辑她的文件:

如果Mary不想让你随便操作她的文件,那么可以做出私用性设置。每个文件和目录都有对应所有者、组以及其他人的读-写-执行的允许权限,用以控制存取。(请回忆ls-l。)在作者的系统中,多数用户在多数时间里发现开放性还是比私用性更为有益,但是在你的系统中可能有不同的策略,有关内容会在第2章中讨论。

作为与路径名有关的最后一个实验,请试一下:

有什么名称看似熟悉吗?当在提示符后键入命令的名称,然后运行命令时,系统寻找该名称的文件。它通常先寻找当前目录(也许多数不会在此目录中),然后在/bin中寻找,最后是在/usr/bin中寻找。目录收集在一起是为了便于查询和管理。要验证这一点,通过使用它们的全路径名试验执行下面这些程序:

练习1-3 尝试:

按所要求的执行,可能会有比通常上班更为有趣的事发生。

改变目录
如果你经常与Mary一起处理她的主目录中的信息,你可以说“我打算在Mary的文件上而不是在自己文件上工作”。这是通过用cd命令改变当前目录而实现的:

现在,当你使用文件名(不带/)作为cat或pr的变量时,它会指向Mary目录中的文件。改变目录并不会影响文件有关的允许权限—如果不能从自己的目录中访问某一文件,改变至另一个目录并不能改变这一事实。

把同某一事物有关的文件都安排在一个目录中而与其他项目分隔开是会带来便利的。例如,如果某人打算写一本书,他或许会尝试把所有的文件都放在一个称为book的目录中。使用命令mkdir建立一个新的目录:

“..”表示当前所在目录的父目录,更接近根一层的目录。“.”是当前目录的同义词。

上述操作把你带回主目录,即登录目录。

一旦书出版了,就可以清除掉有关文件。要删除目录book,先删去其中的所有文件(我们会简单地展示),再用cd指向book的父目录,然后键入

rmdir只删去空目录。

时间: 2024-10-12 13:54:12

《UNIX编程环境》——1.3 目录的相关文章

《UNIX编程环境》——导读

**前言**"UNIX安装的数量已经增加了10倍,预期还将更多." -UNIX程序员手册,1972年6月第2版 UNIX1操作系统是1969年首次在贝尔实验室的一台丢弃的DEC PDP-7计算机上启用的.当时Ken Thompson从Rudd Canaday.Doug McIlroy.Joe Ossanna和Dennis Ritchie那里获得理念和支持,编写了小型通用分时系统,其适用性能良好,足以吸引热心的用户,并最终为一台较大的计算机-PDP-11/20的购买提供了充分的可靠性.系

《UNIX编程环境》——5.10 后记

5.10 后记 当需要编写一个新程序时,自然立刻会想到如何用你最喜欢的语言来编写这个程序.对我们来说,最常用的语言是shell. shell是一种很好的编程语言,虽然它的语法有些特殊.shell属于高级语言,它的操作对象为整个程序.由于shell是交互式语言,所以shell程序能够交互式地开发,可以逐级求精直至它能够令人满意地工作.如果是一个面向更多的用户,可以对shell程序进一步改造,使之更精巧和更实用,以满足广泛使用的需要.不能用shell程序高效地解决问题的情况微乎其微.如果遇到这种例外

《UNIX编程环境》——1.4 shell

1.4 shell 当系统印出提示符$,你键入命令并得到了执行时,此时并不是内核在与读者对话,而是与一个称为命令解释器或外壳shell的在对话.shell是同date或who一样的普通程序,尽管它可以处理一些不同寻常的事.shell存在于用户和内核机制之间的事实对用户是有帮助的,有些会在这里说明.下面是三个要点. 文件名简写:可以通过指定文件名的模式来选取一套文件名作为程序的变量-shell会找出匹配该模式的文件名. 输入输出重定向:可以把任何程序的输出送到一个文件中而不是终端上,并当作来自文件

《UNIX编程环境》——第1章 初学UNIX 1.1起步

第1章 初学UNIX 第1章初学UNIX 什么是UNIX?狭义地看,它是一个分时操作系统内核,即一个控制计算机的资源并将其分配给用户的程序.它让用户运行其程序,并控制与机器连接的外围设备(硬盘.终端.打印机等),提供一个文件系统用以管理诸如程序.数据及文档等长期存储的信息. 广义地看,UNIX通常不仅包含内核,还包括一些基本程序,如编译器.编辑器.命令语言.用以复制和显示文件的程序等. 从更广的角度来看,UNIX可以包括由用户开发的.运行于用户的UNIX操作系统上的程序,如文档处理工具.统计分析

《UNIX编程环境》——5.5 overwrite:改写文件

5.5 overwrite:改写文件 sort排序命令有一个选顶-o,表示覆盖文件: 如果filel和file2是同一个文件,重定向符号>在排序之前就把输入文件截断.然而,加上-o选项的命令将能正常工作,因为在输出文件建立前,sort先将输入排序并存放在一个临时文件中. 很多其他命令也可用-o选择.例如,sed可以编辑文件如下: 要对所有这样的命令都加上选项-o显然是不现实的.另外,这种做法也不可取:最好是将功能集中起来处理,就像shell使用运算符>那样.我们给出一个程序overwrite完

《UNIX编程环境》——5.2 which

5.2 which 建立自己的命令版本,如cal命令的新版本,会带来一些其他的问题.最明显的例子是,如果Mary一起工作,并且以mary登录,则此时的cal还是标准的版本,除非Mary把新的cal命令连接到她的bin目录里.你可能会非常疑惑-原先的cal命令给出的错误信息不足以使人弄清发生错误的原因.但是这只是这类问题的一个例子.因为shell通过PATH指定的一组目录搜索命令,得到的可能不是所期望的版本.例如,键入一条命令:echo,而实际运行的文件全路径名可能是./echo./bin/ech

《UNIX编程环境》——5.4 trap:捕获中断

5.4 trap:捕获中断 如果在运行watchwho时突然按下Delete键或挂断电话,在目录/tmp中,将保存一个或两个临时文件.Watchwho应该在退出之前清除这些暂存文件.我们需要一定的手段来检测各种中断事件,并进行恢复处理. 按Delete键时,一个中断信号会送给终端上正在运行的所有进程:同样地,当挂断电话时,会传送一个挂断信号.其他信号发生的情形亦同.除非程序有专门处理中断信号措施,否则,中断信号将一律终止程序的运行.如果是中断信号,后台运行的进程(使用&运行)能得到保护,但如果是

《UNIX编程环境》——5.3 while和until循环:观察情况

5.3 while和until循环:观察情况 在第3章中,for循环用于一些简单的迭代程序.一般地,for对一组文件名进行循环,如在for i in .c中:或对shell程序的所有参数进行循环,如for i in $.但实际上,shell中的for循环可以有更大的用途,如在which里的for循环. shell有3种循环:for.while和until.其中for是最常用的一种循环,对于循环变量集中的每一个元素,它执行一次循环体内的一组命令.最常用的循环变量是文件名.while循环和until

《UNIX编程环境》——5.8 news命令:社团服务信息

5.8 news命令:社团服务信息 我们在第1章提到您的系统可以有一个news命令,用以报告用户社团方面的信息.大部分系统都提供新闻服务,尽管命令名和命令细节有所不同.这里给出一个news命令,不是要代替原有的本地命令,而旨在说明在shell里编写这样一个程序是多么地容易.比较两个news命令的实现会是件有趣的事情. 程序利用了一个基本事实,即各个新闻项目是分开存放的,每个文件包含一个新闻项目,存放在特定的目录下,譬如/usr/news.news(我们自己的news程序)将/usr/news目录