Tüm barındırma hizmetlerinde 15% tasarruf edin

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

Kodu kullanın: Skills Başlayın
Bölüm
Linux

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/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, 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/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şiklik gösterebilir. /usr/bin/env nerede kurulu olursa olsun doğru yorumlayıcıyı bulmak için kullanıcının $PATH araması 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 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.sh

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

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

Betiği terminalden doğrudan çalıştırı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, 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.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 Çalıştırılabilir 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 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:

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

Bu 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.py olarak ç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.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 ç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.11

Bu, 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 scripts

Asla /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.py

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

chmod 755 script.sh

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

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

6. 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.sh

Sunucu 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ı yenilemecertbot yenilemelerini 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 node

Sonuç

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.