Özet
mktemp [-d] [-p tmpdir] [-q] [-t önek] [-u] şablon ...
mktemp [-d] [-p tmpdir] [-q] [-u] -t önek
Açıklama
mktemp yardımcı programı, kabuk betiklerinin geçici dosyaları güvenli bir şekilde oluşturabilmesini ve kullanabilmesini sağlamak amacıyla tasarlanmıştır.
Geleneksel olarak kabuk betikleri, program adının sonuna süreç kimliğini (PID) ekleyerek geçici dosya oluştururdu (/tmp/betik.$$). Bu yaklaşım tahmin edilebilir olduğu için yarış durumlarına (race condition) ve sembolik bağ saldırılarına karşı güvensizdir. mktemp ise benzersiz, tahmin edilemeyen dosya isimleri üreterek ve bunları güvenli izinlerle doğrudan oluşturarak bu güvenlik açıklarını kapatır.
Geçirilen dosya adı şablonunun sonundaki X karakterleri, süreç numarası ve benzersiz bir karakter kombinasyonu ile değiştirilir:
- Büyük-küçük harfe duyarlı dosya sistemlerinde, 6 adet
Xkarakteri kullanıldığında $62^6 \approx 56.8$ milyar benzersiz kombinasyondan biri üretilir. - Büyük-küçük harfe duyarsız dosya sistemlerinde (macOS APFS varsayılanı gibi), 6 adet
Xkarakteri ile $36^6 \approx 2.17$ milyar benzersiz kombinasyon elde edilir.
Benzersiz ad başarıyla üretilirse, dosya varsayılan olarak sahibine özel 0600 (-rw-------) izin moduyla diskte oluşturulur ve dosya adı standart çıktıya yazdırılır.
Seçenekler
Aşağıdaki seçenekler mevcuttur:
-d,--directory: Geçici bir dosya yerine güvenli bir geçici dizin (klasör) oluşturur. Dizin0700(-rwx------) izinleriyle oluşturulur.-p tmpdir,--tmpdir[=tmpdir]:TMPDIRortam değişkeni ayarlanmamışsa,-tbayrağı içintmpdirdizinini kullanır. Ayrıca, sağlanan herhangi bir şablon argümanı,tmpdirolarak belirtilen yola göre yorumlanır.-q,--quiet: Bir hata oluştuğunda sessizce başarısız olur ve ekrana hata basmaz. Hataları betik içinde sessizce yakalamak için idealdir.-t önek: Belirtilenönek(prefix) dizesini ve varsaTMPDIRortam değişkenini kullanarak otomatik bir geçici dosya şablonu üretir.-u,--dry-run: "Güvensiz" (dry-run) modda çalışır. Geçici dosya adı oluşturulur ancak dosya fiziksel olarak diskte oluşturulmaz. Bu seçeneğin kullanılması güvenlik açığı (yarış durumu) oluşturabileceği için önerilmez.
Çıkış Durumu
mktemp aracı başarı durumunda 0, bir hata oluştuğunda ise 0'dan büyük bir değerle çıkış yapar.
Örnekler
Aşağıdaki örnekler kabukta (shell) çalıştırılabilecek şekilde gösterilmiştir:
/tmpaltında adı betik ismiyle başlayan güvenli bir geçici dosya oluşturma:temp_ad=$(basename "$0") TMPFILE=$(mktemp /tmp/"${temp_ad}".XXXXXX) || exit 1 echo "Geçici çıktı verileri" >> "$TMPFILE"[!NOTE] Yukarıdaki örnekte basename(1) yardımcı programı betiğin adını almak için kullanılmıştır.
Sistem varsayılan geçici dizinini (
$TMPDIR) kullanarak otomatik şablonla geçici dosya oluşturma:temp_ad=$(basename "$0") TMPFILE=$(mktemp -t "${temp_ad}") || exit 1Güvenli bir geçici dizin (klasör) oluşturma (
-d):TMPDIR_TEMP=$(mktemp -d -t "proje_isleme") || exit 1 echo "Geçici klasör yolu: $TMPDIR_TEMP"Sessiz modda (
-q) geçici dosya oluşturup hataları betik içinde yakalama:temp_ad=$(basename "$0") TMPFILE=$(mktemp -q /tmp/"${temp_ad}".XXXXXX) if [ $? -ne 0 ]; then echo "Hata: Güvenli geçici dosya oluşturulamadı!" >&2 exit 1 fi
Ayrıca Bakınız
basename(1), confstr(3), mkdtemp(3), mkstemp(3), mktemp(3), environ(7)