web-dev-qa-db-ja.com

Unixベースのアプリのアプリケーションキャッシュはどこに置くべきですか?

コマンドラインアプリケーションを構築していますが、一時データをファイルに保存する必要があります。アプリケーションがUNIXベースのシステム(この場合はUbuntu 12.0.4)にキャッシュを保存するための規則がどこにあるのかわかりませんか?

10
Dolphin

「Unixベースのシステム」は、すべてのUnixベースのシステムに適用される一般的に適用可能なあらゆる種類の決定を行うにはあまりにも一般的なカテゴリです。問題は、ファイルシステムの構造(および物を置くための「適切な」/「従来の」場所)が「Unix」のさまざまなフレーバー間で非常に大きく異なるため(それと呼べる場合でも)、ほとんど処理する必要があることです。ケースバイケースで。

いくつかの例:

  • Ubuntuでは、64ビットライブラリは/ usr/libまたは/ usr/lib/x86_64-linux /に移動し、32ビットライブラリは/ usr/lib32に移動します
  • Fedoraでは、64ビットライブラリは/ usr/lib64に移動し、32ビットライブラリは/ usr/libに移動します
  • Fedoraには/ libまたは/ binの概念はもうありません(これらは同等の/ usrディレクトリへのシンボリックリンクにすぎません)
  • ほとんどのLinuxディストリビューションは、ユーザーがインストールしたソフトウェア(つまり、パッケージマネージャーによって提供されないソフトウェア)を/ usr/local /(lib、binなど、var、/usr/local /内など)
  • 多くのLinuxディストリビューションはキャッシュに/ var/cacheを使用しますが、それが「一時的」である場合(失われたかどうかは関係ありません)、/ tmpに保存できます。
  • 一部の「フォルダー内のアプリ」タイプのアプリケーションは、すべてを/ optのサブディレクトリに保存します(特にクリックラップインストーラー)
  • 一部のアプリは、ユーザーの〜ディレクトリのサブディレクトリ(通常は/ home/username)にインストールするだけです。
  • Solarisでは、/ srvが/ optと同じように使用されているのを見たことがあります。または、/ srvがwww-rootである場合もあります。

答えは、Linux、BSDのディストリビューションであるかどうかにかかわらず、オペレーティングシステムのどこに何かを格納するかについての標準的で、社会的に受け入れられ、十分に統合された規則です。 、Solaris、HP-UXなどは正確な状況に依存します。具体的には:

  • パッケージはどのように配布されますか?
  • ユーザーはそれをインストールするためにrootアクセスが必要ですか?
  • パッケージは、システムにすでに存在する他のパッケージに依存しているか、直接統合されていますか?プラグインまたはアドオン?
  • パッケージはディストリビューションのアップストリームリポジトリに統合されるので、ユーザーはapt-getyumなどのコマンドを使用して、Webサイトからインストーラーをダウンロードせずに直接インストールできますか?
  • ソフトウェアは、コンピューターを操作するユーザーごとに個別の構成になりますか?
  • ソフトウェアには、管理者(root)のみが変更できるグローバル構成設定がありますか?
  • ソフトウェアはinitシステムと統合する必要がありますか(起動時に起動するなど)?

すべての要因を考慮せずにこれに対する正解はありません。ただし、Ubuntu 12.04、特にの場合、PPAで配布するため、またはUbuntuに送信するために、パッケージを.debファイルにビルドする場合独自のパッケージリポジトリ(mainまたはuniverse)の場合、キャッシュを/var/cacheに保存することをお勧めします。しかし、それはUbuntuのみであり、あなたは確かに仮定を適用すべきではありませんすべてのディストリビューションまたはUnixベースのOSは、これを許容できると見なします。

さらに、システムの起動間でキャッシュデータを保存することに利点がない場合は、/ tmpにも属している可能性があると思います。

プログラムが使用するすべてのタイプのファイル(共有データ、実行可能ファイル、ライブラリ、ヘルプファイル)について、これらのパス規則の問題が発生することに注意してください。 、画像、音声、Webページなど。したがって、キャッシュファイルについて質問している場合、他のファイルタイプをどのように処理する予定であるか疑問に思う必要があります。あなたはただ素朴な仮定をしていて、誰もあなたに反対しないことを望んでいますか? Ubuntuのドキュメントや標準を読んでいない場合は、それらをどこに置くかを提案しているので、何かを想定するのは悪い考えです。たとえば、ライブラリが他の場所に属している場合があるため、ライブラリを常に/ usr/libに貼り付けるのは間違いである可能性があります。

さらに、ソフトウェア開発者として最も責任があるのは、エンドユーザーがファイルを配置する場所を決定できるようにすることだと思います。デフォルトを設定できますが、ユーザー(およびディストリビューター)は、ディストリビューションに合わせてビルドをカスタマイズできます。

これを行う最も簡単な方法は、 GNU Autoconf を使用してプログラムをビルドすることです。 Autoconfは、ユーザーがコマンドライン引数をビルドスクリプトに渡して、さまざまな「ディレクトリタイプ」のパスをデフォルトから変更できるビルドシステムです。ほとんどすべてのディストリビューションには、すべてのAutoconfパッケージ用のビルドスクリプトがあり、タイプごとにディストリビューションに適した従来のディレクトリを設定します。それらは特にキャッシュ用のディレクトリタイプを持っています: sharedstatedir

12
allquixotic