Unix 系统的缺陷与应对策略
1. 文件名扩展的问题
Unix 系统中,每个程序通常是独立运行的,但文件名扩展是个例外。Unix 外壳为文件组命名提供了一种简写方式,外壳会对其进行扩展,生成一个文件列表并传递给相应的实用程序。例如,在一个包含文件 A、B 和 C 的目录中,若要删除这些文件,可输入rm *,外壳会将*扩展为A B C并传递给rm命令。
不过,这种方法存在诸多问题。虽然使用外壳进行文件名扩展是经过深思熟虑的设计决策,但也有人对此表示质疑。有人认为,标准 I/O 库以统一的方式供程序使用,那为何不提供库函数来进行文件名扩展呢?而且,相关效率的说法也缺乏数据支持,也未明确“高效”的具体含义。
在大多数情况下,让外壳扩展文件名并无大碍,但有时也会引发严重问题。比如,新手用户在一个目录中有A.m和B.m两个文件,习惯了 MS - DOS 系统的用户想将它们重命名为A.c和B.c,由于 Unix 没有rename命令,用户可能会使用mv命令,输入mv *.m *.c。结果,外壳会将其扩展为mv A.m B.m,导致B.m被A.m覆盖,而这可能是用户花费数小时工作后的唯一副本。经过思考会发现,理论上很难修改 Unix