C
私は次のようにDebianシステム用のデーモンを作成しています。Unixドメインソケット。
デーモンの作業ディレクトリがルートディレクトリの場合、ファイルシステムにソケットを配置するための慣用的なディレクトリはありますか?
答え1
/tmp
通常はそのサブディレクトリにあります。閉じると、すべての内容が/tmp
消去されます。必ずクリアされるわけではなく注意してください。できるしたがって、使用する場合は、毎回サブディレクトリを作成する必要があることを確認してください。権限でアクセスを制限するには、サブディレクトリを使用する必要があります。サブディレクトリは/tmp
誰でも読むことができるからです。
/run
そして/var/run
(おそらく一緒にシンボリックリンクされている)同様の方法で使用されますが、通常はtmpfsファイルシステムとしてマウントされます。つまり、起動時に作成され、常駐します。記憶の中、ディスクにはありません(したがって、大量のデータをダンプする場所として使用しないでください)。これはランタイムソケットに適した選択肢です。
ここ/run
で言及されている他のすべてのディレクトリと一緒にとは別に /tmp
、ルートとしてのみ書くことができます。システムプロセスの場合は問題ありませんが、権限のないユーザーがアプリケーションを実行する可能性がある場合は、どこかに/tmp
永続ディレクトリを使用または作成し、その権限を設定するか、ユーザーの$ HOMEの場所を使用しようとします。
ディレクトリはインストール中/usr/share
(または)で作成できます。ディレクトリとコンテンツは、またはのようにブートストラップを通過でき/usr/local/share
ません。しかし、次のように/tmp
/run
ヨルダンコメントで指摘したように、読み取り専用/usr
でインストールが可能で、Linuxファイルシステム階層ガイドラインこれを反映する。もちろん、アプリケーションがインストールされている場合は読み取り専用にすることはできません。ソケットを作成したい場合はそれを保持してから後で使用できます(ファイルが読み取り専用の場合でも)。
/etc
これは通常、システム全体の構成と再構成に使用されるため、読み取り専用でマウントされていない場所でクロスブート永続性が必要な場合は非常に安全な方法です。 OTOH、デバイスのデフォルトのルートファイルシステム全体が読み取り専用であり(組み込みシステムなど)、/ tmpと/ runが異なるデバイスにあるシステム(おそらくメモリのtmpfs)がある可能性があります。したがって、最も強力な2つの戦略は次のとおりです。
アプリケーションをインストールするときは、ソケットを永久位置にマウントします。
/run
実行時または実行時にディレクトリを作成し、/var/run
そこにソケットを配置します。でのみ同じことを行います
/tmp
。
最初の方法の利点は、アプリケーションがインストールされると使用できるソケットがあることです。第二の利点は可能通常のプログラミングに役立ちます。 3番目の方法の利点は、スーパーユーザー権限が必要ないことです。後で心が変わると、ある実装から別の実装に簡単に切り替えることができます。
最後に、ブッチX一度発生したら、少なくともこれに設定オプションを提供し、選択したデフォルト値を使用する必要があります。