Mac OS X是否实现XDG基本目录规范?如果没有,有没有与$XDG_RUNTIME_DIR等效的东西?我协助维护的应用程序需要一个临时目录,其中可以放置和执行二进制(即可执行)文件。因此,这个目录最好是用户唯一的,并且必须保证允许文件设置可执行位(如果Mac OS X使用的文件系统支持这样的功能)。
Mac OS X是否实现XDG基本目录规范?如果没有,有没有与$XDG_RUNTIME_DIR等效的东西?我协助维护的应用程序需要一个临时目录,其中可以放置和执行二进制(即可执行)文件。因此,这个目录最好是用户唯一的,并且必须保证允许文件设置可执行位(如果Mac OS X使用的文件系统支持这样的功能)。
根据规范:
$XDG_RUNTIME_DIR 定义了相对于哪个基本目录存储用户特定的非必需运行时文件和其他文件对象(如套接字、命名管道等)。该目录必须由用户拥有,并且他必须是唯一具有读写访问权限的用户。它的 Unix 访问模式必须为 0700。
没有给出太多其他指导。我认为这意味着您可以将其放在您的 $HOME
中的任何文件夹中。如果权限正确且数据类似缓存,则我认为这与您的 $XDG_CACHE_HOME
可能没有太大区别。
$HOME
中的任何文件夹”违背了使用特定的、标准化的位置,例如XDG基本目录规范的目的。(这个想法是防止文件系统被成百上千个不同的缓存、配置和临时文件夹所淹没,每个应用程序都使用一个不同的文件夹。)问题是关于Mac OS X(现在的macOS)的设计者是否明确指定了一个特定的位置用于临时可执行文件,而不是是否安全地使用您选择的位置。 - Psychonaut~/.run
。 - mattmc3XDG_RUNTIME_DIR
是/run/user/$(id -u)
,其中/run
是一个tmpfs
(内存虚拟文件系统),这是一个很大的提示,说明其预期目的:您的运行时目录基本上是工作内存或临时空间,只是恰好位于文件系统而不是进程中 - 不希望在系统重新启动、用户登录以及(尽管这不太明显)甚至程序执行之间保留。 - mtraceur~/Library/Caches/TemporaryItems
作为"runtime"目录;MacOS不遵循XDG规范。~/Library/Caches
内的内容是一个很好的选择,因为它会自动被排除在Time Machine(内置备份和版本控制工具)之外。因此,MacOS和遵循MacOS约定的第三方应用程序会自然地理解该目录中的任何内容都是类似缓存的东西 - 特别是排除了永久应用程序数据、稳定的程序库/可执行文件以及配置等。TemporaryItems
子目录过去常被用于临时的"工作内存"样式的东西 - 例如,MacOS上的Microsoft Outlook曾经将其用于打开的(因此是本地下载的)附件。platformdirs
似乎也做出了相同的决定。
还有 /private/var
... 我不知道有什么明显的理由选择它而不是 ~/Library/Caches/TemporaryItems
。少数用户觉得随机删除 ~/Library/Caches
是可以接受的 - /private/var
看起来更像系统级别,也许在人类感知上给了它一点更多的保护。此外,用户的主目录可能被挂载到 MacOS 服务器/集群上,但没有 "标准" 的设置将 /private/var
进行网络挂载。如果这些对您足够重要,请考虑使用 /private/var/run
或 /private/var/folders
。我进行了快速搜索,但并没有立即找到如何正确使用 /private/var/folders
的任何提示…例如,您如何获得您的 /private/var/folders/??
子目录?但 /var/run
是 原始(根/系统)运行时目录,/private/var/run
是每个用户的运行时目录,所以似乎值得完整介绍。
但截至目前,我会使用 ~/Library/Caches/TemporaryItems
,因为那似乎是流行的约定。
XDG_RUNTIME_DIR
的情况下,假设不存在运行时目录,因为据我所知,XDG并没有为运行时目录指定默认值,就像它为许多其他目录指定了默认值一样,但由于MacOS不会将其放入环境中,这意味着你要么总是失败,要么总是使用备用方案,要么只是将运行时目录的问题向根节点推进)。 - mtraceurruntime
的子目录中,以减少潜在的冲突,虽然这样做并不安全,但至少更安全一些。同时,使用mkdir
和chmod 0700
命令来遵循XDG的指南。 - Martin Braun/var
只是一个指向/private/var
的软链接,所以在这里没有系统和每个用户之间的区别。因此,/var/run
在技术上违反了标准要求它由用户拥有并且权限为700。不过,我还是会选择使用它,因为其他所有文件似乎都存储在那里。如果遇到任何问题,我会将其切换到/var/run/user/$USER
。 - undefined