man/files
man · Dosyalar

$ mktemp

Bölüm 1 · Dosyalar

benzersiz ve güvenli geçici dosya veya dizin adları oluşturur

Ö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 X karakteri 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 X karakteri 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. Dizin 0700 (-rwx------) izinleriyle oluşturulur.
  • -p tmpdir, --tmpdir[=tmpdir]: TMPDIR ortam değişkeni ayarlanmamışsa, -t bayrağı için tmpdir dizinini kullanır. Ayrıca, sağlanan herhangi bir şablon argümanı, tmpdir olarak 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 varsa TMPDIR ortam 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:

  1. /tmp altı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.

  2. 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 1
  3. Gü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"
  4. 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)