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