15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
01.11.2024

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/interpreter

Bir 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/python3

versus:

#!/usr/bin/env python3

İkinci form neredeyse her zaman tercih edilir. İşte nedenleri:

  • Taşınabilirlik: python3 konumu Linux dağıtımları, macOS ve BSD sistemleri arasında değişebilir. /usr/bin/env nerede yüklü olduğuna bakılmaksızın doğru yorumlayıcıyı bulmak için kullanıcının $PATH aramasını yapar.
  • Sanal ortamlar: Python sanal ortamları (venv) kullanırken, /usr/bin/env python3 sistem 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, env kullanan 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.sh

Adı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.sh

Adım 6: Betiği Çalıştırın

Betiği terminalden doğrudan yürütün:

./myscript.sh

Beklenen Çı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.py

Adı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.py

Adım 4: Betiği Çalıştırın

./myscript.py

Beklenen Çıktı:

Hello from Python!
Python version: 3.11.2 (main, Mar 13 2023, 12:18:29)
Platform: Linux 5.15.0-76-generic

Komutu 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:

  1. Dosyanın ilk satırını okur ve #! dizisini tanımlar.
  2. Shebang satırından yorumlayıcı yolunu ayrıştırır (ve isteğe bağlı argümanları).
  3. 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.py

Bu 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.py olarak ç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.py olarak çalıştırılırsa, shebang ilgisizdir — Python açıkça belirtilmiştir.
  • bash script.sh olarak ç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.11

Bu, 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.py

Sistemdeki tüm kullanıcılar için tasarlanan betikler için:

chmod 755 script.sh

4. 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 ~/.bashrc

Bundan 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-10

6. 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
15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın