FreeBSD QandA 2031

FreeBSD QandA

Q. /tmp に知らないファイルがあるんですが、消してよいですか?

A. そもそも /tmp には様々なテンポラリファイルが置かれます。当然その中には
   今その瞬間において、使用中のファイルもあるかもしれません。従って、無闇
   に消して良いというものではありません。

   しかし、中にはプログラムが異常終了したとか、お行儀の悪いプログラムによっ
   て、そのままほったらかしにされたファイルもあるでしょう。また、複数のユー
   ザが使用するようなマシンでは、作業ファイルを /tmp に残したままにする人
   もいるかもしれません。このような場合、いくつか対策が考えられます。

   1. 相手が実体を持つ人の場合は、まずはその人に消してくれるように頼む。(^^;

   2. 繁雑にリブートを繰り返すマシンなら、リブート時に自動的に消去してくれ
      るように、rc.conf(5) に次の設定を追加する。ただし、セキュリティ的に
      は少々マイナスかもしれない。 

      clear_tmp_enable="YES"

   3. periodic(8) を利用して定期的に古い一時ファイルを消去する。この機能を
      有効にするには /etc/periodic.conf に次の設定を追加します。詳細につい
      ては periodic.conf(5) を参照。

      daily_clean_tmps_enable="YES"

   4. 手作業でファイルが使用中かどうか確認しながら消去する。これには 
      fstat(1), sockstat(1), netstat(1) などのコマンドが役に立つでしょう。

      例えば、X をセットアップしたら、/tmp に `.X11-unix' というディレクトリ、
      `.XF86Setup284' というディレクトリが出来ますが、`.XF86Setup284' は 
      XF86Setup を実行したときの作業用ファイルでしょうから消してよいでしょう。

      しかし /tmp/.X11-unix/ は消してはダメです。それを ls(1) で見ると
       % ls -l /tmp/.X11-unix/
       srwxrwxrwx  1 root  wheel  0 Oct  5 11:07 X0
       ^ここ
      というファイルがあります。この先頭が s になっているものはソケットで 
      (see ls(1))、このソケットファイルを経由してデータをやりとりしている
      プログラムがいるということです。 

      具体的にそのソケットを使っているプログラムを見るには sockstat(1) を
      使います。
       % sockstat -u
       root     kterm     1191    3 stream XF86_Mach64[245]:21
       root     kterm     1153    3 stream XF86_Mach64[245]:19
       root     kterm     1048    3 stream XF86_Mach64[245]:20
       mat      mozilla-   370    8 stream XF86_Mach64[245]:17
       mat      emacs-dl   316    4 stream XF86_Mach64[245]:18
       mat      emacs-dl   316    5 stream cannaserver[172]:8
       root     kterm      254    3 stream XF86_Mach64[245]:10
       mat      kinput2    250    3 stream XF86_Mach64[245]:8
       mat      kinput2    250    6 stream /tmp/.ki2-unix/_0-ja_JP
       root     XF86_Mac   245    1 stream /tmp/.X11-unix/X0
       root     XF86_Mac   245    6 stream /tmp/.X11-unix/X0
       root     XF86_Mac   245    7 stream /tmp/.X11-unix/X0
       root     XF86_Mac   245    8 stream /tmp/.X11-unix/X0
       root     XF86_Mac   245    9 stream /tmp/.X11-unix/X0
       root     XF86_Mac   245   10 stream /tmp/.X11-unix/X0
       root     XF86_Mac   245   11 stream /tmp/.X11-unix/X0
       mat      xinit      244    3 stream XF86_Mach64[245]:6
       bin      cannaser   172    0 stream /tmp/.iroha_unix/IROHA
       bin      cannaser   172    8 stream /tmp/.iroha_unix/IROHA
       (略)
      なので
       - /tmp/.X11-unix/X0 を使っているのは XF86_Mach64 (Xサーバ)
       - その X サーバと通信しているのは kterm や emacs や mozilla など
         (つまり Xクライアント) ということがわかります。他の項目を見れば
       - /tmp/.iroha_unix/IROHA を使っているのは cannaserver
       - /tmp/.ki2-unix_0-ja_JP を使っているのは kinput2
      ということも読み取れます。

      ちなみに X サーバと X クライアントが
      やりとりしている内容は、
      「今そっちのウィンドウにマウスがのったよ」(X サーバから X クライアントへ)
      「マウスボタンの右が押されたよ」          (X サーバから X クライアントへ)
      「座標 (x,y) に赤色の円を描いて」         (X クライアントから X サーバへ)
      といったことです。

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。