İleri Bash betikleri: güvenilir ve güvenli otomasyon
Hata karşısında durmayı bilen, girdiyi doğrulayan ve aynı anda birden çok işi yöneten üretim kalitesinde Bash betikleri yazarsın.
Seviye 301 · 24 ders · 21 pratik lab
Dersler
Fonksiyonlar ve kapsam
- Fonksiyonları derinlemesine: parametreler, çıktı ve yeniden kullanım: Parametre alan, çıktı üreten ve başka betiklerde source ile yeniden kullanılabilen fonksiyon kitaplıkları kurarsın.
- Değişken kapsamı: local, genel değişkenler ve sızıntılar: local ile fonksiyon değişkenlerini sınırlar, genel değişkenlerin farkında olmadan ezilmesinden doğan hataları önlersin.
- Dönüş durumu: return, $? ve fonksiyondan sonuç almak: Başarı ve hatayı return koduyla, veriyi standart çıktıyla döndürür ve ikisini karıştırmamayı öğrenirsin.
- Kısa görev: tekrar eden kodu fonksiyon kütüphanesine taşı
Hata yönetimi
- set -euo pipefail: katı kip ve sınırları: set -euo pipefail ile betiği ilk hatada durdurur, bu kipin beklenmedik davrandığı durumları tanırsın.
- trap ile hata, çıkış ve sinyal yönetimi: trap ile ERR, EXIT ve sinyalleri yakalar, betik nasıl biterse bitsin temizlik ve kayıt yapılmasını sağlarsın.
- Hata mesajları ve çıkış kodu sözleşmesi: Hataları stderr’e satır numarasıyla yazan bir yardımcı fonksiyon kurar, anlamlı çıkış kodlarını belgelersin.
- Kısa görev: yarıda kalınca iz bırakan betiği güvenli hale getir
Dizgiler ve veri yapıları
- Dizgi işlemleri: kesme, değiştirme ve harf dönüşümü: Harici komut çağırmadan Bash içinde dizgi keser, değiştirir, uzunluğunu ölçer ve harf dönüşümü yaparsın.
- Diziler: ekleme, döngü ve dilimleme: Dosya ve sunucu listelerini dizilerde tutar, boşluklu öğeleri bozmadan döngüyle işler ve dilimlersin.
- Çağrışımlı dizilerle sayım ve eşleme tabloları: Çağrışımlı dizilerle adres başına deneme sayısı ya da kullanıcıdan departmana eşleme tablosu tutarsın.
- mapfile ve read ile dosyayı güvenle satır satır okumak: mapfile ve read -r ile satırları bozulmadan okur, boşluk ve ters eğik çizgi tuzaklarından kaçınırsın.
- Kısa görev: CSV'den kullanıcı tablosu kuran betik
Girdi, çıktı ve akış
- getopts ile seçenekler ve yardım metni: getopts ile kısa seçenekleri ayrıştırır, eksik değerleri yakalar ve kullanıcıya anlaşılır bir yardım metni gösterirsin.
- here-doc ve here-string ile şablon ve çok satırlı girdi: here-doc ile yapılandırma dosyası ve rapor şablonu üretir, değişkenlerin ne zaman açılacağını denetlersin.
- Alt kabuk ve süreç ikamesi: ( ), $( ) ve <( ): Alt kabuğun değişkenleri neden kaybettiğini anlar, süreç ikamesiyle iki komut çıktısını geçici dosyasız karşılaştırırsın.
- Kısa görev: yardım metni ve seçenekleri olan rapor aracı
Eşzamanlı işler
- Paralel işler: &, wait ve xargs -P: Birden çok sunucuyu aynı anda denetleyen işleri arka planda başlatır, wait ile sonuçlarını toplar ve sayılarını sınırlarsın.
- Kilit dosyası ve flock: aynı betiğin iki kez çalışmasını önlemek: flock ile cron’dan üst üste başlayan aynı betiğin çakışmasını engeller, kalmış kilitleri güvenle temizlersin.
- Kısa görev: yüz sunucuya paralel ve sınırlı sayıda kontrol
Güvenli betik yazımı
- ShellCheck ile betik denetimi: ShellCheck uyarılarını okur, tırnaksız değişken gibi yaygın hataları düzeltir ve denetimi alışkanlık hâline getirirsin.
- Girdi doğrulama ve tırnaklama: komut enjeksiyonuna karşı savunma: Dışarıdan gelen her değeri izin listesiyle doğrular, doğru tırnaklayarak betiğin istenmeyen komut çalıştırmasını önlersin.
- mktemp ile güvenli geçici dosyalar ve temizlik: Tahmin edilebilir geçici dosya adlarının riskini anlar, mktemp ve trap ile güvenli oluşturup her durumda silersin.
- Bitirme görevi: log izleme ve uyarı betiği: Seçenek alan, kilitle çalışan, logları tarayıp eşik aşıldığında uyarı yazan ve ShellCheck’ten temiz geçen bir betik teslim edersin.
Pratik lablar
- Tekrarlanan kodu fonksiyon kütüphanesine taşı: Üç betikte tekrarlanan günlük ve denetim kodunu ortak bir kütüphane dosyasına taşı ve betiklerden kaynak olarak yükle.
- Sızan değişken yüzünden bozulan betiği düzelt: Fonksiyon içindeki döngü değişkeninin çağıranın değişkenini ezdiği hatayı bul ve local ile düzelt.
- Fonksiyondan sonuç ve durum kodunu ayrı döndür: Çıktısı ile hata mesajı karışan fonksiyonu sonucu stdout'a, hatayı stderr'e ve durumu return ile verecek şekilde yeniden yaz.
- Betiği katı kipe geçir: set -euo pipefail eklendiğinde bozulan betikteki tanımsız değişken ve yutulan hata sorunlarını düzelt.
- Betiğe çıkış kodu sözleşmesi tanımla: İzleme sisteminin çağırdığı betiği tamam, uyarı, kritik ve bilinmiyor durumları için ayrı çıkış kodu ve tek satır mesaj verecek şekilde düzenle.
- Hatanın satırını bildiren ERR tuzağı kur: Hata olduğunda komutu, satır numarasını ve çağrı zincirini günlüğe yazan bir ERR trap'i ekle ve alt kabuklarda da çalıştır.
- Kesilince dağınıklık bırakan betiği güvenli yap: Yarıda kesilince yarım dosya ve bağlı dizin bırakan betiğe EXIT ve INT trap'leriyle geri alma adımları ekle.
- Boşluklu satırları bozan okuma döngüsünü düzelt: for ile cat çıktısını gezen ve boşluklu yolları bölen betiği mapfile ya da while read ile doğru çalışır hale getir.
- Günlük izleyip uyarı veren betik yaz: Günlüğü izleyen, belirli sürede eşiği aşan hata sayısında tek uyarı üreten ve aynı uyarıyı tekrarlamayan betik yaz.
- CSV'den kullanıcı tablosu kuran betik yaz: CSV dosyasını satır satır güvenle oku ve ad, departman ve e-posta sütunlarını hizalı tablo olarak yazdır.
- Sunucu adlarından konum ve rolü ayıkla: Adlandırma kuralına uyan sunucu adlarını dize dilimleme ve değiştirmeyle parçala, kurala uymayanları ayrı listele.
- İlişkisel diziyle hata kodlarını açıklamaya çevir: Günlükteki hata kodlarını sayan ve bir arama tablosundan açıklamalarıyla birlikte sıklık sırasına göre raporlayan betik yaz.
- Yardım metni ve seçenekleri olan rapor aracı yaz: Biçim, tarih aralığı ve çıktı dosyası seçeneklerini getopts ile alan ve here-doc ile yardım metni basan araç yaz.
- here-doc şablonundan yapılandırma üret: Site listesindeki her alan adı için here-doc şablonundan sanal sunucu dosyası üreten betik yaz.
- Boru hattında kaybolan sayacı düzelt: While döngüsü alt kabukta çalıştığı için hep sıfır yazan sayacı süreç ikamesiyle düzelt.
- Sunucu denetimlerini paralel çalıştır: Sırayla dakikalar süren denetim listesini arka plan işleri ve wait ile paralel çalıştır ve sonuçları sıralı yazdır.
- Yüz denetimi eşzamanlılık sınırıyla çalıştır: Yüz girdilik listeyi xargs -P ile aynı anda en çok sekiz iş olacak şekilde işle ve başarısızları ayrı dosyada topla.
- Aynı anda iki kez çalışan betiği kilitle: Cron'da üst üste binen eşitleme betiğine flock ile kilit ekle, ikinci kopya günlüğe not düşüp çıksın.
- ShellCheck uyarılarını gider: Betikteki ShellCheck uyarılarını davranışı değiştirmeden gider ve aracın temiz çıktı verdiğini doğrula.
- Komut enjeksiyonuna açık betiği kapat: Dosya adını eval ile işleyen betikteki enjeksiyon açığını kanıtla, girdiyi doğrula ve tırnaklayarak kapat.
- Tahmin edilebilir geçici dosya açığını gider: /tmp altında sabit adlı dosya kullanan betiği mktemp ve temizlik trap'iyle sembolik bağlantı saldırısına karşı güvenli yap.
Kurs hakkında
Hata karşısında durmayı bilen, girdiyi doğrulayan ve aynı anda birden çok işi yöneten üretim kalitesinde Bash betikleri yazarsın.
Ne öğreneceksin
- Fonksiyonlar ve kapsam
- Hata yönetimi
- Dizgiler ve veri yapıları
- Girdi, çıktı ve akış
- Eşzamanlı işler
- Güvenli betik yazımı
Ön koşullar
Aynı yolun 101 ve 201 düzeyindeki konularına hâkim olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 301 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.