43、Unix 手册页与文件系统使用指南

Unix 手册页与文件系统使用指南

1. 手册页语法检查

在 Unix 系统中,检查手册页的正确格式通常有两种方式:通过打印输出或在屏幕上查看。
- 打印输出
- groff -man -Tps pathfind.man | lp
- troff -man -Tpost pathfind.man | /usr/lib/lp/postscript/dpost | lp
- 屏幕查看
- nroff -man pathfind.man | col | more
- groff -man -Tascii pathfind.man | more
- groff -man -TX100 pathfind.man &

col 命令用于处理 nroff 生成的某些特殊转义序列,对于 groff 输出则不需要该命令。

部分 Unix 系统有简单的语法检查器 checknr ,使用命令 checknr pathfind.man 可进行检查,它能检测字体不匹配的问题,但对手册页格式了解有限。

大多数 Unix 系统有 deroff 工具,它是一个简单的过滤器,可去除 troff 标记。可以使用以下命令进行拼写检查:

deroff pathfind.man | spell

此外,还有一些实用工具可用于捕捉文档中难以发现的错误,如双词查找器( http://www.math.utah.edu/pub/dw/ )和分隔符平衡检查器( http://www.math.utah.edu/pub/chkdelim/ )。

2. 手册页格式转换

将手册页转换为 HTML、Texinfo、Info、XML 和 DVI 文件很简单,可使用以下命令:
- man2html pathfind.man
- man2texi --batch pathfind.man
- makeinfo pathfind.texi
- makeinfo --xml pathfind.texi
- tex pathfind.texi

由于输出文件较长,这里不展示 .html .texi .info .xml 文件,你可以自己生成并查看。

3. 手册页安装

历史上, man 命令期望在由环境变量 MANPATH 定义的搜索路径的子目录中找到手册页,通常类似 /usr/man:/usr/local/man

一些较新的 man 版本假设程序搜索路径 PATH 中的每个目录都可以后缀 /../man 来确定对应的手册页目录,从而无需 MANPATH

在每个手册页目录中,常见的是有以 man cat 为前缀、以章节号为后缀的子目录对。在每个子目录中,文件名也以后缀章节号。例如, /usr/man/man1/ls.1 是记录 ls 命令的 troff 文件, /usr/man/cat1/ls.1 保存 nroff 的格式化输出。当存在时, man 会使用后者以避免不必要地重新运行格式化程序。

大多数 GNU 软件将可执行文件安装在 $prefix/bin 中,手册页安装在 $prefix/man/man1 中,其中 prefix 默认是 /usr/local ,这种方式在各处都适用。

系统管理员通常会定期运行 catman makewhatis 来更新一个包含手册页 NAME 部分单行描述的文件。该文件由 apropos man –k whatis 命令使用,以提供手册页的简单索引。如果这些方法找不到你要的内容,可能需要使用 grep 进行全文搜索。

4. 文件与文件系统概述

有效使用计算机需要了解文件和文件系统。下面将介绍 Unix 文件系统的重要特性,包括文件的定义、命名方式、内容以及文件系统层次结构和属性。

4.1 文件的定义

简单来说,文件是驻留在计算机系统中的数据集合,可以从计算机程序中作为单个实体引用。文件提供了一种在进程执行和计算机重启后仍能保存数据的存储机制。

早期,文件存储在计算机系统外部,如磁带、纸带或穿孔卡片,由用户自行管理。后来,磁盘变得常见,其物理尺寸大幅减小,容量大幅增加,成本和访问时间显著降低。如今,磁盘数量与人口数量相当。

此外,还有光盘存储设备(如 CD-ROM 和 DVD),它们价格便宜且容量大,在 20 世纪 90 年代,CD-ROM 很大程度上取代了软盘和磁带用于商业软件分发。非易失性固态存储设备也已出现,可能最终取代有机械运动部件的设备,但目前它们价格较高、容量较小且重写次数有限。

4.2 文件的命名

早期操作系统不命名文件,由人工操作员逐个处理。随着文件处理自动化的需求,文件需要有人类和计算机都能使用的名称。现代文件系统通过将唯一命名的文件分组到目录中来解决名称冲突问题。

文件命名使用主机操作系统字符集的字符。早期字符集差异大,后来标准化需求促使 ASCII 字符集的出现。ASCII 是 1963 年美国标准协会提出的 7 位字符集,可表示 128 个不同字符,能处理拉丁字母、数字和一些特殊符号,但对于大多数世界语言来说字符集太小。

后来,系统设计者使用 8 位字节,扩展了字符集,但缺乏国际标准,产生了数百种不同的代码页。ISO 开发了 ISO 8859 系列代码页,20 世纪 90 年代开始开发 Unicode 字符集,Unix 系统使用 UTF - 8 编码,允许现有 ASCII 文件成为有效的 Unicode 文件。

除 IBM 大型机 EBCDIC 字符集外,当前所有字符集都在低 128 位包含 ASCII 字符。因此,将文件名限制为 ASCII 子集可提高文件名的通用性。

原始 Unix 文件系统允许在文件名中使用 256 字符集中除 NUL(所有位为零的控制字符)和正斜杠(/)之外的所有字符。但建议进一步限制文件名,原因如下:
- 文件名供人使用,应只包含可见字符。
- 计算机程序需要更精确的规则来识别文件名。
- 文件名中的 shell 元字符需要特殊处理,应尽量避免。
- 文件名以连字符开头会看起来像 Unix 命令选项。

一些非 Unix 文件系统在比较文件名时忽略大小写,但 Unix 原生文件系统区分大小写。Unix 文件名通常全部使用小写,一些重要文件名如 AUTHORS BUGS 等通常使用大写或混合大小写。为了便于移植到其他操作系统,建议文件名只包含拉丁字母、数字、连字符、下划线和最多一个点。

文件名的长度取决于文件系统和软件中用于存储文件名的固定大小缓冲区。早期 Unix 系统限制文件名长度为 14 个字符,20 世纪 80 年代中期以后的 Unix 系统通常允许最多 255 个字符。可以使用 getconf 命令查看系统的文件名长度限制:

$ getconf NAME_MAX .
What is longest filename in current filesystem?
255
4.3 文件内容

Unix 文件的一个巨大成功之处在于其简单的文件视图:Unix 文件只是零个或多个匿名字节的数据流。

与其他操作系统不同,Unix 文件复制操作非常简单,以下是一个通用的复制逻辑:

try-to-get-a-byte
while (have-a-byte)
{
    put-a-byte
    try-to-get-a-byte
}

这种循环可以在多种编程语言中实现,且程序无需知道数据的来源。

Unix 系统对文件有一个轻微的区分,人类创建的文件通常是文本文件,由以换行符结尾的文本行组成,且不包含大多数不可打印的 ASCII 控制字符。文本文件可以进行编辑、屏幕显示、打印、电子邮件发送和网络传输,且能保证数据完整性。但处理文本文件的程序可能对过长的行或不可打印字符有异常反应,处理文本文件时建议将行长度限制在 50 - 70 个字符。

文本文件使用 ASCII 换行符(LF,十进制值为 10)标记行边界,许多编程语言用 \n 表示该字符。在混合操作系统环境中,可使用 dosmacux 包( http://www.math.utah.edu/pub/dosmacux/ )在不同行终止约定之间转换文本文件。

除文本文件外,Unix 中的其他文件可视为二进制文件,每个字节可以取 256 种可能的值,文本文件是二进制文件的子集。

与其他操作系统不同,Unix 文件系统不会使用某个字符来标记文件结尾,而是记录文件的字节数。尝试读取超过文件字节数的内容会返回文件结束指示,不会看到磁盘块的先前内容。此外,Unix 允许空文件,有时文件的存在比其内容更重要,如时间戳、文件锁和警告文件等。

Unix 将文件视为字节流的观点促使操作系统设计者实现了对非传统文件数据的类文件视图,一些 Unix 系统实现了进程信息伪文件系统,可使用 man proc 查看系统提供的功能。

以下是文件类型的简单总结表格:
| 文件类型 | 特点 |
| ---- | ---- |
| 文本文件 | 由以换行符结尾的文本行组成,不包含大多数不可打印字符,使用 ASCII 换行符标记行边界 |
| 二进制文件 | 每个字节可取值 0 - 255,文本文件是其二进制文件的子集 |
| 空文件 | Unix 允许空文件,文件存在本身可能有重要意义 |

下面是一个简单的流程图,展示 Unix 文件复制的过程:

graph TD;
    A[开始] --> B[尝试获取一个字节];
    B -- 有字节 --> C[写入一个字节];
    C --> B;
    B -- 无字节 --> D[结束];

Unix 手册页与文件系统使用指南

5. 文件系统结构

Unix 文件系统采用层次结构,将文件和目录组织成树形结构。根目录用 / 表示,所有其他文件和目录都从根目录分支出来。

目录是包含文件和其他目录的容器,用于组织文件系统。每个目录可以包含多个文件和子目录,形成嵌套结构。例如, /usr 目录通常包含系统软件和用户程序, /home 目录包含用户的主目录。

文件路径用于指定文件或目录在文件系统中的位置。绝对路径从根目录开始,以 / 开头,例如 /usr/bin/python 。相对路径从当前工作目录开始,不包含根目录,例如 ./documents/report.txt 表示当前目录下的 documents 子目录中的 report.txt 文件。

为了更好地理解文件系统结构,以下是一个简单的文件系统层次结构示例表格:
| 目录 | 描述 |
| ---- | ---- |
| / | 根目录,所有文件和目录的起点 |
| /bin | 包含系统启动和运行所需的基本命令 |
| /etc | 包含系统和应用程序的配置文件 |
| /home | 用户主目录,每个用户有一个子目录 |
| /usr | 包含系统软件和用户程序 |
| /var | 包含可变数据,如日志文件和邮件队列 |

5.1 文件权限

Unix 文件系统为每个文件和目录分配了特定的权限,以控制谁可以访问和修改它们。权限分为三种类型:读(r)、写(w)和执行(x),分别对应于读取文件内容、修改文件内容和执行文件的能力。

权限可以分配给三种不同的用户类别:文件所有者(u)、所属组(g)和其他用户(o)。例如,权限 rwxr-xr-- 表示文件所有者具有读、写和执行权限,所属组具有读和执行权限,其他用户只有读权限。

可以使用 chmod 命令来修改文件和目录的权限。以下是一些常见的 chmod 命令示例:

# 给文件所有者添加写权限
chmod u+w file.txt
# 给所属组和其他用户删除执行权限
chmod go-x file.sh
# 给文件所有者、所属组和其他用户添加读权限
chmod a+r file.log
5.2 文件属性

除了权限,文件还具有其他属性,如文件大小、创建时间、修改时间和访问时间。可以使用 ls -l 命令查看文件的详细信息,包括权限、所有者、所属组、文件大小、修改时间和文件名。

以下是 ls -l 命令输出的示例:

-rw-r--r-- 1 user group 1234 May 10 12:34 file.txt

其中,第一列表示文件权限,第二列表示文件链接数,第三列表示文件所有者,第四列表示所属组,第五列表示文件大小,第六列和第七列表示修改时间,最后一列表示文件名。

可以使用 stat 命令查看文件的更详细属性,包括创建时间、访问时间和修改时间的精确时间戳。

6. 文件操作命令

Unix 系统提供了许多实用的文件操作命令,用于创建、删除、复制、移动和重命名文件和目录。以下是一些常用命令的介绍:

6.1 创建文件和目录
  • touch :用于创建一个空文件或更新文件的访问和修改时间。
touch newfile.txt
  • mkdir :用于创建一个新目录。
mkdir newdir
6.2 删除文件和目录
  • rm :用于删除文件或目录。使用 -r 选项可以递归删除目录及其所有子目录和文件。
rm file.txt
rm -r olddir
  • rmdir :用于删除空目录。
rmdir emptydir
6.3 复制和移动文件
  • cp :用于复制文件或目录。使用 -r 选项可以递归复制目录及其所有子目录和文件。
cp file.txt backup.txt
cp -r sourcedir destdir
  • mv :用于移动文件或目录,也可以用于重命名文件或目录。
mv file.txt newlocation/
mv oldname.txt newname.txt

以下是一个简单的流程图,展示文件复制和移动的操作流程:

graph TD;
    A[开始] --> B{选择操作};
    B -- 复制 --> C[指定源文件和目标文件];
    C --> D[执行复制操作];
    B -- 移动 --> E[指定源文件和目标位置];
    E --> F[执行移动操作];
    D --> G[结束];
    F --> G;
7. 总结

Unix 系统的手册页和文件系统是其重要组成部分,掌握手册页的检查、转换和安装方法,以及文件和文件系统的相关知识,对于有效使用 Unix 系统至关重要。

通过本文的介绍,你了解了手册页语法检查、格式转换和安装的方法,以及文件的定义、命名、内容、文件系统结构、权限、属性和常用操作命令。希望这些知识能帮助你更好地管理和操作 Unix 系统中的文件和手册页。

在实际使用中,建议遵循文件名的命名规范,合理组织文件系统结构,正确设置文件权限,以提高系统的安全性和可维护性。同时,熟练掌握常用的文件操作命令,能够更高效地完成文件管理任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值