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

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

本节书摘来自异步社区《UNIX编程环境》一书中的第1章,第1.3节,作者:【美】Brian W. Kernighan , Rob Pike著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.3 目录

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

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

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

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

screenshot

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

如果用户键入

screenshot

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

其次,试一试:

screenshot

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

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

screenshot

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

现在试一下:

screenshot

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

screenshot

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

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

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

screenshot

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

screenshot

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

screenshot

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

screenshot

或者编辑她的文件:

screenshot

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

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

screenshot

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

screenshot

练习1-3 尝试:

screenshot

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

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

screenshot

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

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

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

screenshot

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

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

screenshot

rmdir只删去空目录。

相关文章
|
15小时前
|
安全 Unix Linux
【专栏】`rmdir`命令在Linux和类Unix系统中用于删除空目录,不适用于非空目录
【4月更文挑战第28天】`rmdir`命令在Linux和类Unix系统中用于删除空目录,不适用于非空目录。基本语法为`rmdir [options] directory...`,常用选项包括`-p`(递归删除空父目录)和`--ignore-fail-on-non-empty`(忽略非空目录错误)。与`rm -r`相比,`rmdir`更安全,适用于知道目录为空的情况。在自动化脚本和清理构建目录等场景中,`rmdir`能有效管理空目录。使用时确保目录为空,避免误删,必要时结合`ls`和`sudo`检查或提升权限。
|
15小时前
|
Unix Linux Shell
在Unix/Linux系统中,文件和目录的权限管理
在Unix/Linux系统中,文件和目录的权限管理
36 3
|
Unix 程序员 C语言
《UNIX编程环境》——导读
本书的目的是传播UNIX程序设计的基本原则,由于这个基本原则是以程序间的关系为基础的,因此我们必须用大量的篇幅专门对单个的工具进行讨论,但同时贯穿了程序组合的主题和运用程序进行创建程序的内容。
1730 0
|
Unix Shell C语言
《UNIX编程环境》——5.10 后记
shell是一种很好的编程语言,虽然它的语法有些特殊。shell属于高级语言,它的操作对象为整个程序。由于shell是交互式语言,所以shell程序能够交互式地开发,可以逐级求精直至它能够令人满意地工作。
1740 0
|
Unix Shell Perl
《UNIX编程环境》——5.9 get和put:追踪文件变动
程序在开发过程中不断地改正错误和增加新功能。版本追踪往往是不可少的。特别是有的用户把程序移植到其他的机器上使用—他们常常跑回来问“在我们的版本之后又有哪些改动”,或者“这个那个错误是怎么改的”。
1571 0
|
Unix Shell
《UNIX编程环境》——5.8 news命令:社团服务信息
我们在第1章提到您的系统可以有一个news命令,用以报告用户社团方面的信息。大部分系统都提供新闻服务,尽管命令名和命令细节有所不同。这里给出一个news命令,不是要代替原有的本地命令,而旨在说明在shell里编写这样一个程序是多么地容易。
1270 0
|
Unix Shell C语言
《UNIX编程环境》——5.7 pick命令:空格和参数
本节书摘来自异步社区《UNIX编程环境》一书中的第5章,第5.7节,作者:【美】Brian W. Kernighan , Rob Pike著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1569 0