web-dev-qa-db-ja.com

mktempの改善

暗号化されたコンテナまたはファイルシステムで使用するためにmktempを改善する最善の方法を考えています。

私が扱っている問題は、可能であれば、シェルスクリプトに作業ディレクトリを含むファイルシステム内に一時ファイルを保存させたいということです。

mktempの通常の動作は、環境変数または/tmpで指定されたルートパスを使用することのようです。ただし、暗号化されたコンテナ内のファイルを操作している場合、これにより、暗号化されていない場所に一時データが定期的にリークされます。

アイデアは、最初に現在のファイルシステムのマウントポイントにtmpディレクトリが存在することを確認し、最後の手段として/tmponlyを使用することです。どうすればそれを確実に(そして効率的に)実現できますか。

編集

特定のパスのマウントディレクトリを特定するための可能な方法は次のとおりです。

dir=`realpath [path]`; 
res=1; 
while [ $res -ne 0 ]; do 
  dir="${dir%/*}"; 
  mountpoint -q "$dir/"; 
  res=$?; 
done; 
echo "$dir";

しかし、それが最も効率的なものかどうかはわかりません。

1
highsciguy

任意のディレクトリをmktempに指定できます。 -pオプションを使用するか、別のTMPDIRを設定します。

-p temp-dir, --tmpdir=temp-dir
          temp  directory  for  the  file.  This option is a member of the
          tmpdir class of options.

          If this option is not provided, mktemp will use the  environment
          variable  TMPDIR to find a suitable directory.  If these are not
          available, it will fall back to ~/tmp  or  /tmp.   A  <file-pat>
          command line argument containing a directory component will con-
          flict with this option.

例えば:

#!/bin/bash
TMPDIR=`pwd`
mktemp
1
Rui F Ribeiro

私があなたの要件を誤解しないのなら、あなたはmktemp /WORKING/DIR/tmp.XXXXXXXXXXまたは、名前を次のようにします(すべてのXはランダムな英数字に置き換えられます)。

0
PePa