Linux Terminal’de Bash ve Python Betikleri Çalıştırma: Shebang’ları Anlamak
Eğer 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ünde yer alan 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 sistem yöneticisi ve geliştirici tarafından öğrenilmesi gereken temel bir Linux becerisidir.
Bu kılavuz ihtiyacınız olan her şeyi kapsar: shebang’lar nedir, bunları Bash ve Python betiklerinde nasıl kullanılır ve amatör betikleri üretim ortamına hazır otomasyon’dan 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, shell 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 |
Neden /usr/bin/env Önemlidir
Shebang’ları sıklıkla iki farklı stilte yazılı 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şebilir./usr/bin/envnerede yüklü olduğuna bakılmaksızın doğru yorumlayıcıyı bulmak için kullanıcının$PATHaramasını 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 betikler 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ğinizdir — örneğin, $PATH manipülasyonunun risk olabileceği güvenlik açısından hassas betiklerde.
Bash Betiklerinde Shebang Kullanma: Adım Adım
Sıfırdan tam, yürütülebilir bir Bash betiği oluşturma konusunda adım adım ilerleyelim.
Adım 1: Terminal Açın
Terminale doğrudan erişin veya Linux sunucunuza SSH aracılığıyla bağlanın.
Adım 2: Yeni Bir Bash Betik Dosyası Oluşturun
Yeni bir dosya oluşturmak için nano gibi bir metin düzenleyici kullanın:
nano myscript.shAdım 3: Shebang ve Betik İçeriğini Ekleyin
Dosyanın çok başına 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, sonra Enter dosyayı kaydetmek ve kapatmak için.
Adım 5: Betiği Yürütülebilir Yapın
Varsayılan olarak, yeni oluşturulan dosyalar yürütülebilir değildir. chmod kullanarak yürütme 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 yürütün:
./myscript.shBeklenen Çıktı:
Hello, World!
Current date and time: Tue Jun 10 14:32:01 UTC 2025
Running as user: youruser> Not: ./ öneki shell’e betiği geçerli dizinde aramasını söyler. Betikler dizininiz $PATH öğesine eklenmişse, betikleri yalnızca adlarıyla çalıştırabilirsiniz.
Python Betiklerinde Shebang Kullanma: Adım Adım
Python betikleri aynı deseni izler, ö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 Yürütülebilir 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 ön ek olarak eklemeniz gerekmediğine dikkat edin — shebang yorumlayıcı seçimini otomatik olarak işler.
Pratik Gerçek Dünya Örnekleri
Shebang’ı izolasyon içinde anlamak yararlıdır, ancak bunu gerçek yönetim görevlerine uygulamak değerini açıkça gösterir.
Bash: Otomatikleştirilmiş 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 — tek bir Paylaşılan Web Hosting hesabı yönetiyor veya Özel Sunucular arasında iş yüklerini düzenliyor olsanız da.
Shebang Davranışı: Arka Planda Neler Olur
Bir shebang ile bir betiği yürüttüğünüzde, 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 ayrıştırır (ve isteğe bağlı argümanları).
- Yorumlayıcıyı çağırır, betik dosyasını bir argüman olarak iletir.
Ö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 ondan önce tek bir boş satır bile shebang’ın göz ardı edilmesine 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, geçerli shell (örneğin, Bash) bunu 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 yürütüldüğünde (yani, ./script olarak) önemlidir.
Gelişmiş Shebang Teknikleri
Yorumlayıcıya Argümanlar İletme
Shebang satırı aracılığıyla yorumlayıcıya bayraklar iletebilirsiniz:
#!/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ı.
#!/usr/bin/env python3 -u-u bayrağı Python’da arabelleğe alınmamış çıktıyı zorlar, gerçek zamanlı günlüğe kaydetme için yararlıdır.
> Uyarı: Bazı sistemler shebang satırında yorumlayıcı yolundan sonra yalnızca tek bir argümanı destekler. Karmaşık argüman iletişi için, seçenekleri betiğin içinde ayarlamak daha iyidir (örneğin, Bash’te set -euo pipefail).
Belirli Sürümlerle env 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 yararlı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 olarak çalışacağını kontrol ederek bunu mümkün kılar. Bu niş bir teknik olsa da, shebang’ın sağladığı esnekliği gösterir.
Shebang Satırları İçin En İyi Uygulamalar
Bu en iyi uygulamaları izlemek, betiklerinizi daha sağlam, taşınabilir ve bakımı kolay hale getirecektir — özellikle üretim sunucu ortamlarında önemlidir.
1. Her Zaman Doğru Yorumlayıcıyı Kullanın
Shebang’ı betiğinizin gerektirdiği dile ve sürüme 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 scripts/bin/sh ve /bin/bash değiştirilebilir olduğunu asla varsaymayın — değildirler. Bash, POSIX sh tarafından desteklenmeyen özellikler (diziler, [[ ]], işlem ikamesi) destekler.
2. Taşınabilirlik İçin /usr/bin/env Tercih Edin
Daha önce tartışıldığı gibi, env kullanmak betikleri farklı sistemler ve Python sanal ortamları arasında taşınabilir hale getirir. Güvenlik veya özgüllük talep ettiğinde yalnızca sabit kodlanmış yolları kullanın.
3. Her Zaman Yürütme İzinlerini Ayarlayın
Yürütme izinleri olmayan betikler “İ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 betikler için:
chmod 755 script.sh4. Betikleri Özel Bir Dizinde Düzenleyin
Kişisel betikler 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 içine yerleştirilen herhangi bir yürütülebilir betik her yerden adıyla çalıştırılabilir.
5. Anlamlı Yorumlar Ekleyin
Betiklerinizi amacını, kullanımını ve herhangi bir bağımlılığı açıklayan yorumlarla 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 Betikleri İçin set Seçeneklerini Kullanın
Üretim Bash betikleri için, shebang’dan hemen sonra bu güvenlik seçeneklerini ekleyin:
#!/bin/bash
set -euo pipefail-e: Hatada çık-u: Ayarlanmamış değişkenleri hata olarak değerlendir-o pipefail: Borulu komutlardaki hataları yak
