Unixベースのアプリのアプリケーションキャッシュはどこに配置すればよいですか?


10

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

回答:


12

「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 /にインストールすることを好みます(/ usr / local /内のlib、binなどのvarなどを使用)
  • 多くのLinuxディストリビューションは、キャッシュに/ var / cacheを使用しますが、「一時的」な場合(失われた場合でもかまいません)、/ tmpに保存できます。
  • 一部の「フォルダー内のアプリ」タイプのアプリケーションは、すべてを/ optのサブディレクトリに保存します(特にクリックラップインストーラー)。
  • 一部のアプリは、ユーザーの〜ディレクトリのサブディレクトリ(通常は/ home / username)にインストールされます
  • Solarisでは、/ srvが/ optと同じように使用されていることを確認しました。または、/ srvがwww-rootである場合があります

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

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

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

さらに、システムのブート全体でキャッシュデータを保存する利点がない場合は、/ tmpにも属していると思います。

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

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

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


最初に、実際に非常に詳細な回答をありがとうございました。アプリケーションの性質(Ruby)は、静的コンテンツを提供するAPI呼び出しをキャッシュすることです。これはルビーアプリケーションであり、私のディスクキャッシュの回答場所で読んだものから/tmpフォルダーになります。あなたの質問への答えは(ダウンロード、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ)でしょう。おそらくほとんどの人が結論を下すのは普通のようです/tmpが、私はUNIXシステムに慣れていないので、ubuntu osベースの規則は私には馴染みのないものです。これにより、gemがディスクキャッシングを不可知的に許可するという興味深いアイデアが生まれます(ユーザーに依存しない)。ありがとう、+ 1してください。
ドルフィン

ほとんどのLinuxディストリビューションにインストールされているruby gemシステムには、gemツールによってgemがインストールされる非常に特定のディレクトリがあることに注意してください。ただし、gemによってアプリケーションがダウンロードされるのと同じディレクトリ内に実行時にファイルを作成することはおそらく適切ではありません。一方、あなたはしているが、ユーザーとしてアプリケーションを実行している場合、あなたはのは、書き込みを読むことをディレクトリ必要があるユーザーのために、その手段は、このようなグループの作成などのインストール時にも、より多くのシステム統合作業を必要とする(アクセス権を変更するのいずれかをなど)、または/ tmpなどのグローバルな読み取り/書き込みディレクトリを使用します。
allquixotic 2012

あなたがすることはできません、とにデータを書き込むべきではない/usr/libまたは/binアプリケーションから。
ctrl-alt-delor 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.