Örnek sorular
Linux Shell Scripting Ops AutomationZorluk 1
Bir deploy script'i #!/usr/bin/env bash ile başlayıp bir sonraki satırda set -e içeriyor. set -e ne yapar?
- aHerhangi bir basit komut sıfırdan farklı bir exit status döndürürse, script'in hemen durmasını sağlar.✓
- bVerbose modu açar, her komutu çalıştırmadan önce stderr'e yazdırır
- cBash'e tanımlanmamış değişkenleri hata sayıp çıkmasını söyler
- dSonradan atanan her değişkeni otomatik olarak environment'a export eder
Açıklama:set -e (errexit), bir komut sıfırdan farklı bir status ile bittiği an script'in çalışmayı durdurmasına neden olur; bu, başarısız bir adımdan sonra sessizce devam etmek yerine bir ops script'inin istediği tam olarak fail-fast davranıştır. c şıkkı set -u'yu, b şıkkı set -x'i, d şıkkı ise set -a/export'u tarif eder.
Linux Shell Scripting Ops AutomationZorluk 1
Bir health-check script'i $SERVICE_NAME'e referans veriyor ama script'te daha önce yapılan bir yazım hatası yüzünden (SERVICE_NAM=web) bu değişken hiç set edilmemiş. set -u etkinken script $SERVICE_NAME referansına geldiğinde ne olur?
- aBash sessizce boş bir string koyar ve script'in geri kalanını çalıştırmaya devam eder
- bShell, tanımlanmamış bir değişkene referans vermeyi hata sayar ve script sıfırdan farklı bir status ile çıkar✓
- cBash otomatik olarak script'te en son atanan değişkene geri döner
- d
set -u yalnızca fonksiyonlar içinde kullanılan değişkenleri etkiler, bu yüzden script üst seviyede normal şekilde devam eder
Açıklama:set -u (nounset), tanımlanmamış bir değişkene referans vermeyi script'i sonlandıran bir hata haline getirir; bu tam olarak SERVICE_NAM ile SERVICE_NAME gibi yazım hatalarını script sessizce boş bir değerle çalışmaya devam etmeden erken yakalamak için faydalıdır.
Linux Shell Scripting Ops AutomationZorluk 2
Bir log-parsing script'i, error satırlarını saymak için cat access.log | grep ERROR | wc -l çalıştırıyor. Script'in başına set -o pipefail eklemek bu satır için neden önemli olur?
- a
wc -l'i satır yerine byte saymaya zorlar, daha kesin bir error sayısı verir - b
grep'in cat'ten önce çalışmasını zorunlu kılar, pipeline'ın çalışma sırasını tersine çevirir - cBu olmadan pipeline'ın exit status'ü yalnızca son komutunkidir, bu yüzden
cat veya grep'teki daha önceki bir hata sessizce gizlenir.✓ - dHerhangi bir aşama başarısız olursa tüm pipeline'ı otomatik olarak üç kere yeniden dener
Açıklama:Varsayılan olarak bir pipeline'ın exit status'ü son komutunun exit status'üdür, bu yüzden cat access.log başarısız olsa bile (ör. dosya yok) grep/wc -l yine çalışıp bir çıktı üretirse hata fark edilmeden geçer. set -o pipefail, pipeline'ın exit status'ünü gerçekten başarısız olan son komutu yansıtacak şekilde ayarlar, böylece set -e (veya manuel $? kontrolleri) bunu yakalayabilir.
Linux Shell Scripting Ops AutomationZorluk 1
Bir shell script'inde, az önce biten bir komut veya script için 0 exit code'u geleneksel olarak ne anlama gelir?
- aKomut hâlâ arka planda çalışıyor ve henüz bitmemiştir
- bKomut başarılı olup olmadığından bağımsız olarak hiç çıktı üretmemiştir
- cKomut, önceki bir
set -e hatası yüzünden tamamen atlanmıştır - dKomut hatasız, başarıyla tamamlanmıştır✓
Açıklama:Uzun süredir devam eden Unix geleneğine göre 0 exit status'ü başarı anlamına gelir, sıfırdan farklı herhangi bir değer (1-255) ise bir tür başarısızlığı veya belirli bir hata durumunu işaret eder. Script'ler ve pipeline'lar devam edip etmeme, yeniden deneme veya iptal etme kararını bu kurala dayandırır.
Linux Shell Scripting Ops AutomationZorluk 1
Bir deploy script'inde şu satır var:
mkdir -p /opt/app/releases/current && systemctl restart app
İki komut arasındaki
&& neyi garanti eder?
- aHer iki komut da her zaman çalışır,
&& yalnızca çıktılarının nasıl gösterildiğini etkiler - b
systemctl restart app, yalnızca mkdir -p ... status 0 ile (başarıyla) çıkarsa çalışır✓ - cİki komut aynı anda, paralel arka plan job'ları olarak çalışır
- dÖnce
systemctl restart app çalışır, mkdir -p ... yalnızca o başarısız olursa çalışır
Açıklama:&& koşullu bir VE'dir: sağdaki komut yalnızca soldaki komut başarıyla (status 0) çıktıysa çalışır. Burada bu, restart'ın yalnızca dizin gerçekten oluşturulduktan sonra denenmesi anlamına gelir, servisin yarı-hazır bir release dizinine restart edilmesini önler.
Linux Shell Scripting Ops AutomationZorluk 2
Bir script şunu içeriyor:
ping -c 1 db.internal || echo "WARNING: db.internal unreachable" >> health.log
echo komutu ne zaman çalışır?
- a
ping başarılı olsun ya da olmasın, script her çalıştığında - bYalnızca
ping başarılı olursa, çünkü || solundaki komutun önce başarılı olmasını gerektirir - cYalnızca
ping -c 1 db.internal sıfırdan farklı bir status ile (başarısız) çıkarsa✓ - dAsla, çünkü
|| yalnızca iki echo komutu arasında geçerlidir
Açıklama:|| koşullu bir VEYA'dır: sağdaki komut yalnızca soldaki komut başarısız olduysa (sıfırdan farklı exit) çalışır. Yani uyarı, log'a yalnızca ping başarısız olduğunda eklenir; bu, bir health-check script'inde tipik bir hafif fallback/uyarı deseni.