私が遭遇したほとんどのシステムには、 と の両方がtempfile(1)
ありmktemp(1)
ます。構文の違いがあり、mktemp
ディレクトリを作成することもできますが、それ以外は同じことをしているようです。
両者に違いはありますか?なぜ両方が存在するのですか?一方は他方よりも標準的ですか?一時ファイルを安全に作成したいだけの場合、一方を優先する理由はありますか?
この背後には興味深い Unix 伝承があるのではないかと思いますが、検索しても何も見つかりません。
この背後には興味深い Unix 伝承があるのではないかと思います...
の歴史はOpenBSD 2.1mktemp
までさかのぼることができます。ただし、それはずっと後に GNU coreutils の一部になりました。 この投稿では、forが含まれていることを発表しました。mktemp
coreutils
それまでは、tempfile
多くのプログラムで使用されていました。の周りにラッパーを作成するという提案もありましたが、 の使用を思いとどまらせるために拒否されました。tempfile
mktemp
tempfile
ただし、tempfile
マニュアルに次の内容が追加されました。
NFS パーティションにファイルを作成する場合、排他的な作成は保証されません。
tempfile
一時ディレクトリを作成できません。tempfile
非推奨です。mktemp(1)
代わりに使用する必要があります。
(debian の) ソース コードから見るtempfile
と、パッケージからのものdebianutils
であり、libc 関数tempnam()
を使用mktemp
していますが、GNU coreutils からのものであり、libc 関数を使用していません。