为什么 var 目录不是特定于用户的?

为什么 var 目录不是特定于用户的?

我对 UNIX 世界还是个新手,所以如果我的问题很愚蠢,请随时告诉我。

所谓的文件系统层次结构标准声明该/var目录应该保存日志和缓存等数据,包括但不限于本地包:

/var包含变量数据文件。这包括假脱机目录和文件、管理和日志记录数据以及瞬态和临时文件。

...

/var此处指定是为了能够安装/usr 只读。曾经进入的一切/usr在系统操作期间(而不是安装和软件维护)写入的数据必须位于/var

我主要想知道它应该如何在本地多用户系统中工作。/var是系统的一种全局目录,所有用户的所有缓存数据和日志似乎在它们之间共享。难道它不被认为是错误的吗?我的意思是,代表不同用户启动的程序(包)将使用相同的缓存,更不用说所有本地用户都可以读取日志并查看彼此的缓存数据了。请帮助我理解这个概念。谢谢。

答案1

/var目录是为了系统日志和缓存。单个用户日志(罕见)和缓存(频繁)保存在用户的主目录中。

答案2

大多数潜在问题都可以通过一个示例来有效地探讨,例如打印机。 Alice 并不真正希望 lpr(1) 阻塞,直到 Joe 打印完他的论文。系统不希望 Alice 在打印文件之前删除她的文件。显而易见的解决方案是将文件的副本放置在假脱机目录中,直到它安全地记录在纸上。

传统上,打印作业在 /usr/spool/lp 中排队。如前所述,问题在于这实际上禁止以只读方式安装 /usr。请记住,该问题会扩展到每个队列(邮件、uucp 等)和所有系统日志。这导致了第二个问题,即 /usr 的大小完全独立于操作系统安装的大小。假设您正在配置一个包含 35MB 二进制文件的新系统。 /usr 分区需要多大?诡计问题! 35MB 加上保留日志所需的时间是电子邮件、打印机、新闻阅读器平均使用时间的倍数。

将所有内容移至 /var 巧妙地解决了只读问题,并在管理噩梦方面取得了重大进展。一方面,它可以轻松测量数据使用了多少空间。扩展或替换单个分区也比担心 /usr/spool、/usr/log 等要轻松得多。

将系统状态存储在主目录中只会增加复杂性。您可能拥有数百个单独的目录来管理权限,而不是一个单一的全局目录。除此之外,您还可能增加不断扫描所有这些目录的开销。

不太明显的是主目录不是特定于系统的。网络安装的相当常见。打印文件时,您可能只希望在您登录的位置打印该文件,而不是在安装您的主目录的每台计算机上打印该文件。可用性也是一个问题,因为如果文件服务器崩溃,主目录可能会消失。或者添加更现代的变化,如果主目录已加密并且系统无法读取它。

从历史上看,全局存储一直充当公共信息的缓存。在没有新闻服务器的情况下,新闻网文章被批量下载并存储在中央位置。毕竟,没有理由在多个用户之间复制大型新闻源。集中式队列还充当传入信息的缓冲区。考虑邮件队列,它可能无法将邮件存入您的加密主目录。 (再次可用性)或者您在度假时收到大量垃圾邮件的情况。超出磁盘配额后,系统应该丢弃所有消息,还是保存它们并让您稍后再整理?

答案3

/var 是系统的一种全局目录,所有用户的所有缓存数据和日志似乎在它们之间共享。

这是部分不正确的。并非所有缓存和日志都存储在 下/var,并且存储在那里的内容不一定由所有用户共享。应用程序和/或操作系统拥有存储在/var.

唯一的例外是所有用户有效共享和可写的目录:/var/tmp.决定在此处存储内容的用户和/或应用程序仍然可以使用 unix 文件权限保护他们创建的子目录和文件。

我的意思是,代表不同用户启动的程序(包)将使用相同的缓存,更不用说所有本地用户都可以读取日志并查看彼此的缓存数据了。

不,不同的用户通常使用不同的缓存。在某些情况下,公共缓存是一个优点。

当机密/个人数据存储在 下时/var,该数据受到应用程序的保护,因此用户无权查看其他人的数据;例如,(非root)用户无法读取邮件假脱机。

相关内容