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 Yönetim

Linux’ta .sh Dosyası Nasıl Çalıştırılır: Başlangıççılar ve Sistem Yöneticileri için Tam Rehber

Shell scriptleri Linux otomasyonunun temelini oluşturur. Bir web uygulaması dağıtıyor, yedeklemeleri planlıyor veya yeni sağlanan bir sunucuyu yapılandırıyor olsanız da, .sh dosyaları karmaşık komut dizilerini tek bir, tekrarlanabilir yürütülebilir dosyaya paketlemenizi sağlar. Bu kılavuz, temel yürütmeden arka plan işlemlerine ve cron zamanlamasına kadar Linux’ta shell scriptlerini çalıştırmanın her yönteminde size yol gösterir — üretim ortamlarında geçerli olan en iyi uygulamalarla birlikte.

.sh Dosyası Linux’ta Nedir?

Bir .sh dosyası, Linux kabuğunun satır satır yorumladığı ve yürüttüğü shell dilinde (tipik olarak Bash veya POSIX sh) yazılmış düz metin bir komut dosyasıdır. Shell komut dosyaları şu amaçlarla kullanılır:

  • Tekrarlayan sistem yönetimi görevlerini otomatikleştirmek
  • Uygulamaları dağıtmak ve yapılandırmak
  • Kullanıcıları, izinleri ve dosya sistemlerini yönetmek
  • Yedekleme ve günlük döndürme gibi bakım işlerini planlamak
  • Sağlamadan sonra yeni sunucuları önyüklemek

Bir VPS Hosting ortamını veya bir Dedicated Server‘ı yönetiyorsanız, shell komut dosyası yazımı her hafta saatlerce manuel çalışmadan tasarruf ettirecek vazgeçilmez bir beceridir.

Ön Koşullar

Herhangi bir .sh dosyasını çalıştırmadan önce, aşağıdakilere sahip olduğunuzdan emin olun:

  • Linux terminaline erişim (yerel veya SSH aracılığıyla)
  • Uygun izinlere sahip bir kullanıcı hesabı
  • Sistem üzerinde zaten bulunan script dosyası (yerel olarak oluşturulmuş veya SCP/SFTP aracılığıyla aktarılmış)

Yöntem 1: chmod ile Dosyayı Çalıştırılabilir Hale Getirin

Varsayılan olarak, yeni oluşturulan veya indirilen .sh dosyaları çalıştırma izinlerine sahip değildir. Betiği bir program olarak çalıştırmadan önce, chmod komutu kullanarak açıkça yürütme haklarını vermelisiniz.

chmod +x script.sh

İzinlerin doğru şekilde uygulandığını doğrulamak için:

ls -l script.sh

Şuna benzer bir çıktı görmelisiniz:

-rwxr-xr-x 1 user user 1024 Jun 10 14:32 script.sh

x bayrakları, dosyanın artık sahip, grup ve diğerleri tarafından çalıştırılabilir olduğunu doğrular.

> Güvenlik ipucu: Yürütmeyi yalnızca dosya sahibine kısıtlamak istiyorsanız, chmod +x yerine chmod 700 script.sh kullanın.

Yöntem 2: Komut Dosyasını Göreli veya Mutlak Yol Kullanarak Çalıştırın

Dosya çalıştırılabilir hale geldikten sonra, bunu doğrudan terminalden çalıştırabilirsiniz.

Göreli Yol Kullanma (Geçerli Dizin)

Komut dosyası geçerli çalışma dizininizde ise, bunu ./ ile başlatın:

./script.sh

./ kabuğa geçerli dizinde aramak için sistem $PATH içinde arama yapmak yerine söyler.

Mutlak Yol Kullanma

Komut dosyası başka bir konumda depolanıyorsa, tam yolunu sağlayın:

/home/user/scripts/script.sh

veya

/usr/local/bin/script.sh

Mutlak yollar kullanmak, özellikle cron işleri veya çalışma dizininin farklı olabileceği diğer otomatik bağlamlardan komut dosyaları çalıştırırken önemlidir.

Yöntem 3: Betiği bash veya sh ile Çalıştırın (Execute İzni Gerekli Değil)

Dosya execute izinlerine sahip olmasa bile, açıkça yorumlayıcıyı çağırarak bir shell betiğini çalıştırabilirsiniz. Bu, bir betiği kalıcı olarak çalıştırılabilir hale getirmeden önce hızlı bir şekilde test etmek için özellikle yararlıdır.

bash script.sh

veya POSIX uyumlu betikler için:

sh script.sh

bash ve sh Arasındaki Fark

KomutYorumlayıcıBash’a Özgü Özellikleri Destekler
bash script.shGNU BashEvet
sh script.shPOSIX sh (Ubuntu’da genellikle dash)Hayır

Betiğiniz Bash’a özgü sözdizimi kullanıyorsa, örneğin diziler, [[ ]] koşulları veya işlem ikamesi, her zaman bash yerine sh kullanın.

Yöntem 4: Betiği Süper Kullanıcı Olarak Çalıştırın (sudo)

Bazı betikler sistem dosyalarını değiştirmek, hizmetleri yönetmek, paketleri yüklemek veya ağ yapılandırmalarını değiştirmek için kök düzeyinde ayrıcalıklara ihtiyaç duyar. İzinleri yükseltmek için sudo kullanın:

sudo ./script.sh

veya betiği doğrudan bash’e yükseltilmiş haklarla geçirin:

sudo bash script.sh

Önemli Güvenlik Hususları

  • Bir betiği okumadan asla root olarak çalıştırmayın. sudo erişimine sahip kötü niyetli veya kötü yazılmış bir betik, geri dönülemez sistem hasarına neden olabilir.
  • Betikleri gereken minimum ayrıcalıklarla çalıştırmayı tercih edin.
  • Bir betik yalnızca belirli bir dizine yazma yapması gerekiyorsa, tüm betiği root olarak çalıştırmak yerine dizin izinlerini ayarlamayı düşünün.

Yöntem 5: Betiği Arka Planda Çalıştırın

Varsayılan olarak, bir betiği terminalde çalıştırmak, betik tamamlanana kadar oturumunuzu engeller. Uzun süren görevler için — büyük dosya aktarımları, veritabanı göçleri veya sunucu derlemeleri gibi — işlemi arka plana göndermeniz gerekir.

& Operatörünü Kullanma

./script.sh &

& sembolü işlemi arka plana ayırır ve terminale hemen kontrol döndürür. Shell, arka plan işinin PID’sini (İşlem Kimliği) yazdırır ve bunu daha sonra izlemek veya sonlandırmak için kullanabilirsiniz.

Oturumu Kapatıldıktan Sonra Betiği nohup ile Çalıştırılı Tutun

SSH’den bağlantınız kesilirse, & ile başlatılan arka plan işleri genellikle sonlanır. Bunu önlemek için nohup kullanın:

nohup ./script.sh &

Çıktı varsayılan olarak nohup.out öğesine yönlendirilir. Özel bir günlük dosyası belirtmek için:

nohup ./script.sh > /var/log/myscript.log 2>&1 &

Arka Plan İşlerini İzleyin

jobs          # List background jobs in the current session
ps aux | grep script.sh   # Find the process by name
kill PID      # Terminate a specific background process

Yöntem 6: Cron ile Script Yürütmesini Zamanla

Tekrarlayan görevler için — gece yedeklemeleri, haftalık temizlikler, saatlik sağlık kontrolleri — Linux’un yerleşik cron zamanlayıcısı standart çözümdür.

Crontab Editörünü Aç

crontab -e

Cron Sözdizimi

* * * * * /path/to/script.sh
│ │ │ │ │
│ │ │ │ └── Day of week (0–7, Sunday = 0 or 7)
│ │ │ └──── Month (1–12)
│ │ └────── Day of month (1–31)
│ └──────── Hour (0–23)
└────────── Minute (0–59)

Pratik Cron Örnekleri

ZamanlamaCron İfadesiÖrnek Kullanım Durumu
Her gün saat 02:00’de0 2 * * *Gece veritabanı yedeklemesi
Her Pazartesi saat 06:00’da0 6 * * 1Haftalık log döndürme
Her saat0 * * * *Çalışma süresi izleme kontrolü
Her 15 dakikada*/15 * * * *Önbellek yenileme
Sistem yeniden başlatıldığında@rebootÖnyükleme sırasında bir hizmet veya script başlat

Örnek: Otomatik Günlük Yedekleme

0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

Bu, backup.sh dosyasını her gün saat 02:00’de çalıştırır ve hem standart çıktıyı hem de hataları denetim için bir log dosyasına ekler.

> Pro ipucu: Cron girişlerinde her zaman mutlak yolları kullanın. Cron minimal bir ortamla çalışır ve etkileşimli shell’inizle aynı $PATH erişimine sahip olmayabilir.

Method 7: Source a Script (Run in Current Shell Context)

Bilmeniz gereken bir yürütme yöntemi daha vardır: script’i kaynak olarak kullanmak. Yukarıdaki yöntemlerin aksine, kaynak olarak kullanmak script’i mevcut shell oturumunda çalıştırır ve yeni bir alt shell oluşturmaz. Bu, script’te tanımlanan tüm değişkenlerin ve fonksiyonların mevcut ortamınızda kalıcı olması anlamına gelir.

source script.sh

veya eşdeğer olarak:

. script.sh

Bu, ortam değişkenlerini yüklemek, sanal ortamları etkinleştirmek veya mevcut oturuma yapılandırma değişiklikleri uygulamak için yaygın olarak kullanılır.

Yaygın Hataları Giderme

Hata MesajıOlası NedenÇözüm
Permission deniedDosya yürütme izni eksikchmod +x script.sh komutunu çalıştırın
No such file or directoryYanlış yol veya eksik dosyaYolu ls ve pwd ile doğrulayın
bad interpreter: No such file or directoryYanlış shebang satırı (örn. Windows satır sonları)Satır sonlarını düzeltmek için dos2unix script.sh komutunu çalıştırın
command not foundScript $PATH içinde değil ve ./ öneki yok./script.sh veya tam mutlak yol kullanın
syntax error near unexpected tokenScript bash için yazılmış ama sh ile çalıştırılmışbash script.sh komutunu açıkça kullanın

Shell Betikleri Yazma ve Çalıştırma için En İyi Uygulamalar

Bu uygulamaları takip etmek, betiklerinizi daha güvenli, daha kolay bakım yapılabilir ve hata ayıklaması daha kolay hale getirecektir — özellikle sunucu ortamlarında.

1. Her Zaman Shebang Satırı ile Başlayın

Her betiğin ilk satırı yorumlayıcıyı bildirmelidir:

#!/bin/bash

veya maksimum taşınabilirlik için:

#!/usr/bin/env bash

2. Katı Modu Etkinleştirin

Her üretim betiğinin üst kısmına bunu ekleyin:

set -euo pipefail
  • -e — Herhangi bir komut başarısız olursa hemen çıkın
  • -u — Ayarlanmamış değişkenleri hata olarak işleyin
  • -o pipefail — Borulu komutlardaki hataları yakalayın

3. Betiği Çalıştırmadan Önce Okuyun

Harici veya güvenilmeyen bir kaynaktan gelen bir .sh dosyasını içeriğini gözden geçirmeden asla çalıştırmayın:

cat script.sh

veya bir metin editöründe açın. Bu, özellikle sudo ile çalıştırırken kritik öneme sahiptir.

4. Yorumları Bolca Kullanın

#!/bin/bash
# backup.sh — Daily backup script for /var/www
# Author: sysadmin@example.com
# Last updated: 2024-06-10

# Define source and destination directories
SOURCE="/var/www"
DEST="/mnt/backup"

5. Betikleri Özel Dizinlerde Düzenleyin

DizinÖnerilen Kullanım
/usr/local/bin/Tüm kullanıcılar tarafından erişilebilen sistem genelinde betikler
~/scripts/ veya ~/bin/Kişisel kullanıcı betikleri
/opt/scripts/Uygulamaya özgü otomasyon betikleri
/etc/cron.daily/Cron aracılığıyla günlük çalıştırılacak betikler

6. Betiğin Çıktısını Günlüğe Kaydedin

Katılımsız çalışan betikler için her zaman çıktıyı bir günlük dosyasına yönlendirin:

./script.sh >> /var/log/script.log 2>&1

7. Betikleri Önce Güvenli Bir Ortamda Test Edin

Bir betiği bir üretim sunucusuna dağıtmadan önce, bir hazırlama ortamında veya hataların kapalı kalma süresine neden olmayacağı tek kullanımlık bir VPS örneğinde test edin.

Linux Sunucusunda Shell Betikleri Çalıştırma: Pratik Hususlar

Uzak bir Linux sunucusunda betik çalıştırırken — ister paylaşılan bir ortam ister özel bir makine olsun — birkaç ek faktör devreye girer:

  • SSH erişimi: Çoğu sunucu tarafı betik çalıştırma SSH üzerinden gerçekleşir. screen veya tmux gibi araçlar, uzun süreli betiklerin bağlantı kopması durumunda da devam etmesini sağlayan kalıcı oturumlar oluşturmanıza olanak tanır.
  • Kullanıcı izinleri: Paylaşılan barındırma ortamlarında, betikleri çalıştırma yeteneğiniz sınırlı olabilir. cPanel ile VPS, tam root erişimi ve betik yürütme üzerinde tam kontrol sağlar.
  • Otomatik dağıtımlar: Shell betiklerini cron işleriyle birleştirerek dağıtımları, sertifika yenilemelerini (özellikle SSL Sertifikaları ile birlikte kullanıldığında faydalı) ve rutin bakım görevlerini otomatikleştirin.
  • Ortam değişkenleri: Cron veya SSH aracılığıyla çalışan betikler, etkileşimli kabuğunuzun ortamını devralabilir. Tüm gerekli değişkenleri açıkça betik içinde tanımlayın veya bir profil dosyasını kaynak olarak kullanın.

Hızlı Referans: Tüm Yöntemler Bir Bakışta

YöntemKomutKullanım Durumu
İzinle yürütmechmod +x script.sh && ./script.shStandart yürütme
bash ile çalıştırmabash script.shYürütme izni gerekmez
sh ile çalıştırmash script.shPOSIX uyumlu betikler
root olarak çalıştırmasudo ./script.shYükseltilmiş ayrıcalık gerektiren betikler
Arka planda çalıştırma./script.sh &Engellemeyen yürütme
Kalıcı olarak çalıştırmanohup ./script.sh &SSH oturumu kapatıldıktan sonra devam et
cron ile zamanlamacrontab -eYinelenen otomatik görevler
Betiği kaynak olarak kullanmasource script.shDeğişiklikleri geçerli shell’e uygula

Sonuç

Linux’te .sh dosyalarını çalıştırmak, sistem otomasyonunun tam gücünü açığa çıkaran temel bir beceridir. Temel iş akışı basittir: chmod +x ile yürütme izni verin, ardından betiği ./script.sh veya bash script.sh ile çalıştırın. Üretim ortamları için, mutlak yollar, katı mod, günlüğe kaydetme ve cron planlama kombinasyonunu kullanarak güçlü ve güvenilir otomasyon boru hatları oluşturun.

Bir sunucuda betikleri yönetiyorsanız, barındırma altyapınızın kalitesi önemlidir. AlexHost’un VPS Hosting ve Dedicated Servers hizmetleri size tam root erişimi, kararlı çalışma süresi ve otomasyon iş yüklerini güvenle çalıştırmak için gereken performansı sağlar — gece yedeklemeleri planlıyor, uygulamaları dağıtıyor veya karmaşık çok betikli iş akışlarını yönetiyor olsanız da.