Linux Terminal’de Bash ve Python Betikleri Çalıştırma: Shebang’ları Anlamak
Linux’ta bir shell veya Python betiği yazdıysanız ve sistemin hangi yorumlayıcıyı kullanacağını nasıl bildiğini merak ettiyseniz — cevap dosyanızın en üstündeki küçük ama güçlü iki karakterlik bir dizide yatmaktadır: shebang (#!).
Sunucu bakım görevlerini otomatikleştiriyor, bir VPS Hosting ortamında dağıtımları yönetiyor veya web sunucunuz için yardımcı programlar yazıyor olsanız da, shebang’ların nasıl çalıştığını anlamak, her sysadmin ve geliştirici tarafından öğrenilmesi gereken temel bir Linux becerisidir.
Bu rehber bilmeniz gereken her şeyi kapsar: shebang’lar nedir, Bash ve Python betiklerinde nasıl kullanılır ve amatör betikleri üretim ortamına hazır otomasyon sistemlerinden ayıran en iyi uygulamalar.
Shebang (#!) Nedir?
Bir shebang (ayrıca *sha-bang*, *hashbang* veya *pound-bang* olarak yazılır), bir betik dosyasının çok ilk satırına yerleştirilen özel bir karakter dizisidir. Linux çekirdeğine dosyanın geri kalanını yürütmek için hangi yorumlayıcının kullanılması gerektiğini söyler.
Sözdizimi basittir:
#!/path/to/interpreterBir betiği çalıştırdığınızda, işletim sistemi dosyanın ilk iki baytını okur. #! bulursa, dosyayı o satırda belirtilen yorumlayıcıya iletir. Shebang olmadan, kabuk betiği kendi yerleşik yorumlayıcısını kullanarak yürütmeye çalışabilir — bu, özellikle dilleri karıştırırken beklenmedik davranışlara veya tamamen başarısızlığa yol açabilir.
Yaygın Shebang Örnekleri
| Betik Türü | Shebang Satırı |
|---|---|
| Bash | #!/bin/bash |
| POSIX Shell | #!/bin/sh |
| Python 3 | #!/usr/bin/env python3 |
| Python 2 (eski) | #!/usr/bin/env python2 |
| Perl | #!/usr/bin/perl |
| Ruby | #!/usr/bin/env ruby |
| Node.js | #!/usr/bin/env node |
/usr/bin/env Neden Önemlidir
Shebang'ları sıklıkla iki farklı stilte yazılmış olarak göreceksiniz:
#!/bin/python3versus:
#!/usr/bin/env python3İkinci form neredeyse her zaman tercih edilir. İşte nedenleri:
- Taşınabilirlik:
python3konumu Linux dağıtımları, macOS ve BSD sistemleri arasında değişiklik gösterebilir./usr/bin/envnerede kurulu olursa olsun doğru yorumlayıcıyı bulmak için kullanıcının$PATHaraması yapar. - Sanal ortamlar: Python sanal ortamları (
venv) kullanırken,/usr/bin/env python3sistem Python ikili dosyası yerine virtualenv'in Python ikili dosyasına doğru şekilde çözümlenir. - Gelecek uyumluluğu: Bir yorumlayıcı güncellenirse veya taşınırsa,
envkullanan komut dosyaları değiştirilmeden çalışmaya devam eder.
Sabit kodlanmış mutlak bir yol (örneğin, #!/bin/bash) kullanmanız gereken tek zaman, belirli bir ikili dosyanın kullanılmasını garantilemek istediğiniz zamandır — örneğin, $PATH manipülasyonunun risk olabileceği güvenlik açısından hassas komut dosyalarında.
Bash Betiklerinde Shebang Kullanımı: Adım Adım
Sıfırdan başlayarak tam, çalıştırılabilir bir Bash betiği oluşturmayı adım adım görelim.
Adım 1: Terminal Açın
Terminalinize doğrudan erişin veya Linux sunucunuza SSH aracılığıyla bağlanın.
Adım 2: Yeni Bash Betiği Dosyası Oluşturun
Yeni bir dosya oluşturmak için nano gibi bir metin editörü kullanın:
nano myscript.shAdım 3: Shebang ve Betik İçeriğini Ekleyin
Dosyanın en üstüne shebang satırını ekleyin, ardından betik mantığınızı yazın:
#!/bin/bash
# A simple greeting script
echo "Hello, World!"
echo "Current date and time: $(date)"
echo "Running as user: $(whoami)"Adım 4: Kaydedin ve Çıkın
nano içinde, CTRL + X tuşuna basın, ardından Y tuşuna basın, sonra dosyayı kaydetmek ve kapatmak için Enter tuşuna basın.
Adım 5: Betiği Çalıştırılabilir Yapın
Varsayılan olarak, yeni oluşturulan dosyalar çalıştırılabilir değildir. chmod kullanarak çalıştırma izni verin:
chmod +x myscript.shİzin değişikliğini şu şekilde doğrulayabilirsiniz:
ls -l myscript.shŞuna benzer bir çıktı görmelisiniz:
-rwxr-xr-x 1 user user 112 Jun 10 14:32 myscript.shAdım 6: Betiği Çalıştırın
Betiği terminalden doğrudan çalıştırın:
./myscript.shBeklenen Çıktı:
Hello, World!
Current date and time: Tue Jun 10 14:32:01 UTC 2025
Running as user: youruser> Not: ./ öneki, kabuğa betiği geçerli dizinde aramasını söyler. Betikler dizininiz $PATH içine eklenirse, betikleri yalnızca adlarıyla çalıştırabilirsiniz.
Python Betiklerinde Shebang Kullanımı: Adım Adım
Python betikleri aynı deseni takip eder, önerilen shebang satırında bir temel fark vardır.
Adım 1: Yeni bir Python Betik Dosyası Oluşturun
nano myscript.pyAdım 2: Shebang ve Python Kodunu Ekleyin
#!/usr/bin/env python3
# A simple Python script demonstrating shebang usage
import sys
import platform
print("Hello from Python!")
print(f"Python version: {sys.version}")
print(f"Platform: {platform.system()} {platform.release()}")Adım 3: Kaydedin, Çıkın ve Çalıştırılabilir Yapın
# Save and exit nano with CTRL+X, Y, Enter
chmod +x myscript.pyAdım 4: Betiği Çalıştırın
./myscript.pyBeklenen Çıktı:
Hello from Python!
Python version: 3.11.2 (main, Mar 13 2023, 12:18:29)
Platform: Linux 5.15.0-76-genericKomutu python3 ile başlatmanız gerekmediğine dikkat edin — shebang yorumlayıcı seçimini otomatik olarak işler.
Pratik Gerçek Dünya Örnekleri
Shebang’ı izole olarak anlamak faydalıdır, ancak bunu gerçek yönetim görevlerine uygulandığını görmek değerini ortaya koymaktadır.
Bash: Otomatik Yedekleme Betiği
#!/bin/bash
# Automated backup script for web files
BACKUP_DIR="/var/backups/webfiles"
SOURCE_DIR="/var/www/html"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="$BACKUP_DIR/backup_$TIMESTAMP.tar.gz"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_FILE" "$SOURCE_DIR"
echo "Backup completed: $BACKUP_FILE"Python: Sistem Sağlığı Kontrol Betiği
#!/usr/bin/env python3
import shutil
import psutil
def check_disk_usage(path="/"):
total, used, free = shutil.disk_usage(path)
percent_used = (used / total) * 100
print(f"Disk Usage ({path}): {percent_used:.1f}% used")
if percent_used > 85:
print("WARNING: Disk usage is critically high!")
def check_memory():
mem = psutil.virtual_memory()
print(f"Memory Usage: {mem.percent}% used")
check_disk_usage()
check_memory()Bu tür betikler altyapı yönetirken paha biçilmezdir — ister tek bir Paylaşımlı Web Hosting hesabı çalıştırıyor olun ister Dedicated Sunucular arasında iş yüklerini yönetiyor olun.
Shebang Davranışı: Arka Planda Neler Olur
Bir betiği shebang ile çalıştırdığınızda, Linux çekirdeği aşağıdaki adımları gerçekleştirir:
- Dosyanın ilk satırını okur ve
#!dizisini tanımlar. - Shebang satırından yorumlayıcı yolunu (ve isteğe bağlı argümanları) ayrıştırır.
- Yorumlayıcıyı çağırır, betik dosyasını bir argüman olarak geçer.
Örneğin, ./myscript.py çalıştırmak dahili olarak şuna eşdeğerdir:
/usr/bin/env python3 ./myscript.pyBu nedenle shebang her zaman ilk satırda başında boşluk olmadan olmalıdır — hatta bundan önce tek bir boş satır bile shebang’in yoksayılmasına neden olacaktır.
Shebang Olmadan Ne Olur?
Shebang yoksa, davranış betiğin nasıl çağrıldığına bağlıdır:
./script.pyolarak çalıştırılırsa, mevcut shell (örn. Bash) onu yorumlamaya çalışır, bu da Python kodu için başarısız olur.python3 script.pyolarak çalıştırılırsa, shebang ilgisizdir — Python açıkça belirtilmiştir.bash script.sholarak çalıştırılırsa, yine shebang atlanır.
Shebang yalnızca betik doğrudan çalıştırıldığında (yani ./script olarak) önemlidir.
Gelişmiş Shebang Teknikleri
Yorumlayıcıya Argümanlar Geçirme
Shebang satırı aracılığıyla yorumlayıcıya bayraklar geçirebilirsiniz:
#!/bin/bash -e-e bayrağı, herhangi bir komut başarısız olursa Bash’in hemen çıkmasına neden olur — üretim betikleri için yaygın bir güvenlik uygulamasıdır.
#!/usr/bin/env python3 -u-u bayrağı Python’da tamponlanmamış çıktıyı zorlar, gerçek zamanlı günlüğe kaydetme için kullanışlıdır.
> Uyarı: Bazı sistemler shebang satırında yorumlayıcı yolundan sonra yalnızca tek bir argümanı destekler. Karmaşık argüman geçişi için, seçenekleri betik içinde ayarlamak daha iyidir (örneğin, Bash’te set -euo pipefail).
env ile Belirli Sürümleri Kullanma
#!/usr/bin/env python3.11Bu, belirli bir Python sürümünü hedefler; birden fazla sürümün bir arada bulunduğu ortamlarda kullanışlıdır.
Çok Dilli Betikler
Bazı gelişmiş durumlarda, geliştiriciler aynı anda birden fazla dilde geçerli olan betikler yazarlar. Shebang, hangi yorumlayıcının ilk çalışacağını kontrol ederek bunu mümkün kılar. Bu niş bir teknik olsa da, shebang’in sağladığı esnekliği gösterir.
Shebang Satırları Yazmanın En İyi Uygulamaları
Bu en iyi uygulamaları takip etmek, özellikle üretim sunucu ortamlarında, komut dosyalarınızı daha sağlam, taşınabilir ve bakımı kolay hale getirecektir.
1. Her Zaman Doğru Yorumlayıcıyı Kullanın
Shebang’ı komut dosyanızın gerektirdiği dil ve sürümle eşleştirin:
#!/bin/bash # For Bash-specific syntax
#!/bin/sh # For POSIX-compliant shell scripts (more portable)
#!/usr/bin/env python3 # For Python 3 scriptsAsla /bin/sh ve /bin/bash değiştirilebilir olduğunu varsaymayın — değildir. Bash, POSIX sh tarafından desteklenmeyen özellikleri (diziler, [[ ]], işlem ikamesi) destekler.
2. Taşınabilirlik için /usr/bin/env Tercih Edin
Daha önce tartışıldığı gibi, env kullanmak komut dosyalarını farklı sistemler ve Python sanal ortamları arasında taşınabilir hale getirir. Güvenlik veya özgüllük gerektirmedikçe yalnızca sabit kodlanmış yolları kullanın.
3. Her Zaman Yürütme İzinlerini Ayarlayın
Yürütme izinleri olmayan komut dosyaları “İzin reddedildi” hatasıyla başarısız olur:
chmod +x script.sh
chmod +x script.pySistemdeki tüm kullanıcılar için tasarlanan komut dosyaları için:
chmod 755 script.sh4. Komut Dosyalarını Ayrılmış Bir Dizinde Düzenleyin
Kişisel komut dosyaları için bir ~/scripts veya ~/bin dizini oluşturun ve bunu $PATH öğesine ekleyin:
mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcBundan sonra, ~/bin öğesine yerleştirilen herhangi bir yürütülebilir komut dosyası, her yerden adıyla çalıştırılabilir.
5. Anlamlı Açıklamalar Ekleyin
Komut dosyalarınızı, amacını, kullanımını ve bağımlılıklarını açıklayan açıklamalarla belgelendirin:
#!/bin/bash
# Script: backup_web.sh
# Purpose: Creates timestamped backups of web root
# Usage: ./backup_web.sh
# Dependencies: tar, gzip
# Author: Your Name
# Last Modified: 2025-06-106. Daha Güvenli Bash Komut Dosyaları için set Seçeneklerini Kullanın
Üretim Bash komut dosyaları için, shebang’ın hemen ardından bu güvenlik seçeneklerini ekleyin:
#!/bin/bash
set -euo pipefail-e: Hata üzerine çık-u: Ayarlanmamış değişkenleri hata olarak işle-o pipefail: Borulu komutlardaki hataları yakala
7. Üretim Ortamına Dağıtmadan Önce Komut Dosyalarını Test Edin
Komut dosyalarını üretim sunucularında çalıştırmadan önce her zaman bir geliştirme veya hazırlama ortamında test edin. Test için izole bir ortama ihtiyacınız varsa, bir VPS Hosting planı, üretim koşullarını yansıtan uygun fiyatlı, tek kullanımlık bir korumalı alan sağlar.
Shebang Sorunlarını Giderme
“İzin Reddedildi” Hatası
bash: ./myscript.sh: Permission deniedÇözüm: Betiğin execute izni yok. chmod +x myscript.sh komutunu çalıştırın.
“Dosya veya Dizin Bulunamadı” Hatası
bash: ./myscript.py: /usr/bin/env: bad interpreter: No such file or directoryÇözüm: Shebang’da belirtilen yorumlayıcı bu yolda yok. which python3 veya which bash ile doğrulayın.
Betik Yanlış Yorumlayıcı ile Çalışıyor
Belirti: .sh dosyasını çalıştırırken Python söz dizimi hataları görünüyor veya tam tersi.
Çözüm: Shebang satırının 1. satırda olduğundan, önünde boşluk veya boş satır olmadığından ve doğru yorumlayıcıya işaret ettiğinden emin olun.
Windows Satır Sonları (rn)
Windows’ta betikleri düzenler ve Linux’a aktarırsanız, Windows tarzı satır sonları shebang’ı bozabilir:
/bin/bash^M: bad interpreterÇözüm: Satır sonlarını dos2unix ile dönüştürün:
dos2unix myscript.shSunucu Yönetimi Bağlamında Shebang
Linux tabanlı hosting altyapısını yöneten herkes için betik yazma yeterliliği vazgeçilmezdir. Shebangler otomasyon için giriş noktasıdır — basit cron işlerinden karmaşık dağıtım boru hatlarına kadar.
Doğru yazılmış betiklerin (doğru shebangler ile) ölçülebilir bir fark yarattığı bu yaygın sunucu yönetimi kullanım durumlarını göz önünde bulundurun:
- Otomatik SSL sertifikası yenileme —
certbotyenilemelerini betikleştirme ve web sunucularını yeniden başlatma. Sertifikaları manuel olarak yönetiyorsanız, akışlı yönetim için SSL Sertifikaları‘nı keşfetmeyi düşünün. - Log döndürme ve temizleme — Eski logları zamanlamaya göre arşivleyen ve silen Bash betikleri.
- Veritabanı yedeklemeleri — MySQL/PostgreSQL’e bağlanan, veri döküm yapan ve uzak depolamaya yükleyen Python betikleri.
- Sistem durumu izleme — Disk kullanımı, bellek ve hizmet durumunu kontrol eden, eşikler aşıldığında uyarı gönderen betikler.
- Dağıtım otomasyonu — Git depolarından çeken, testler çalıştıran ve uygulama sunucularını yeniden başlatan betikler.
Makine öğrenmesi boru hatları veya büyük ölçekli veri işleme betikleri gibi kaynak yoğun iş yükleri için, Python tabanlı hesaplamayı hızlandırmak amacıyla GPU Hosting‘i de göz önünde bulundurmak isteyebilirsiniz.
Hızlı Referans: Shebang Hile Sayfası
# Bash (most common for shell scripts)
#!/bin/bash
# POSIX sh (maximum portability)
#!/bin/sh
# Bash with strict error handling (recommended for production)
#!/bin/bash
set -euo pipefail
# Python 3 (portable, uses PATH)
#!/usr/bin/env python3
# Python 3 with unbuffered output
#!/usr/bin/env python3 -u
# Perl
#!/usr/bin/perl
# Ruby
#!/usr/bin/env ruby
# Node.js
#!/usr/bin/env nodeSonuç
Shebang, Linux otomasyonunun çok büyük bir kısmını destekleyen aldatıcı derecede basit mekanizmalardan biridir. İki karakter — #! — ve bir yol, düz bir metin dosyasını doğrudan çalıştırılabilir bir programa dönüştürmek için yeterlidir.
Bash ve Python betikleri arasında shebang kullanımında ustalaşarak şunları yapabilirsiniz:
- Ortamdan bağımsız olarak doğru şekilde çalışan taşınabilir, kendi kendine yeterli betikler yazın
- Tekrarlayan yönetim görevlerini güvenle otomatikleştirin
- Güçlü dağıtım ve bakım işlem hatları oluşturun
- Diğerlerinin tahmin etmeden anlayabileceği ve çalıştırabileceği betikler üzerinde işbirliği yapın
Paylaşımlı Web Barındırma üzerinde tek bir web sitesini yönetiyor olsanız veya birden fazla Dedicated Sunucu arasında karmaşık iş yüklerini düzenliyor olsanız, betik otomasyonu bir Linux yöneticisi olarak geliştirebileceğiniz en yüksek etkili becerilerden biridir.
Küçük başlayın — bugün manuel olarak yaptığınız bir görevi otomatikleştiren bir betik yazın. Doğru shebang’i ekleyin, izinleri ayarlayın ve çalıştırın. Her harika otomasyon işlem hattı böyle başlar.
tasarruf edin