一時ディレクトリとして `/ run / shm`(以前は` / dev / shm`)を使用します


9

/run/shm(以前は/dev/shm)にディレクトリを作成し、それをアプリケーションの一時ディレクトリのように使用することは良い習慣ですか?

背景:ファイルとディレクトリを使って多くのことを行うプログラムのブラックボックステストを書いています。すべてのテストで、多くのファイルとディレクトリを作成してからプログラムを実行し、次に予想されるファイルとディレクトリのセットを作成してから、diffを実行して比較します。現在、約40のテストがあり、実行に2秒以上かかっています。スピードアップを期待して、ある種のramdisk上のディレクトリでテストを実行したいと思います。

ram diskについて調べたところ、ディレクトリを作成して一時ディレクトリのように使用しても大丈夫であるとの回答で質問に遭遇しまし/dev/shm。しかし、さらに調べてみると、直接使用するのは誤りであるとdebianのwikiページに出くわしまし/dev/shmshm_*関数を使用する必要があります。残念ながら、shm_*関数はシェルスクリプトで使用できないようです。

今私は混乱しています。一時ディレクトリのように/run/shm(以前は/dev/shm)使用しても大丈夫ですか?


はい、多くのユーザーも/tmp共有メモリにマウントします。
Eddy_Em 2013

私はそれ/tmpがよりセマンティックであることを想像します。ユーザーが/dev/shm一時ファイルに使用して速度を上げるのに十分なRAMを持っている場合は、そこにマウントします。しかし、十分なRAMがなく、そこにマウントすると、すべてのプロセスでスワップファイルを使用するように強制され、コンピューターの速度が低下し/tmpます。さらに重要なことのためにRAMを保存し、ファイルシステムに通常のディスク領域を使用します。つまり、/tmpより調整可能です。
ジャック

回答:


10

/run適切な権限を持っている限り、ディレクトリを使用してもかまいません。最近の一部のディストリビューションで/tmpは、はすでにメモリ内の仮想ファイルシステム、または内のディレクトリへのシンボリックリンク/runです。これが当てはまる場合(で確認するか、/etc/fstabと入力mtabすることができます)、/tmp一時ディレクトリとして使用できます。

また、Debianの記事と混同しないでください。shm_*関数は、プロセス間通信用の共有メモリセグメントを作成するために使用されます。これらの関数を使用すると、2つ以上のプロセス間でメモリのフラグメントを共有して、同じデータを使用して通信またはコラボレーションさせることができます。プロセスには、独自のアドレス空間に接続されたメモリのセグメントがあり、通常どおりそこに読み書きできます。カーネルは複雑さを扱います。これらの関数はシェル関数としては使用できません(シェルのコンテキストではあまり役に立ちません)。詳細については、をご覧くださいman 7 shm_overview。この記事の要点は、共有セグメントを表す疑似ファイルをプログラムで直接管理するのではなく、適切な関数を使用して共有メモリセグメントを作成、アタッチ、削除することです。


2
以下の最も適切な場所は/runかもしれません/run/user/${UID}/
ポールフェニー14

1
実際、私のシステムでは、pulseaudioとsystemdがpidファイルなどのファイルをインストールします。ただし、/ tmpは一時ファイルの優先的な場所です。
lgeorget 2014

2
@PaulFenney:/実行/ユーザー/ $ UIDはまた$ XDG_RUNTIME_DIRとして知られている
user2394284
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.