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.shx 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.shveya
/usr/local/bin/script.shMutlak 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.shveya POSIX uyumlu betikler için:
sh script.shbash ve sh Arasındaki Fark
| Komut | Yorumlayıcı | Bash’a Özgü Özellikleri Destekler |
|---|---|---|
bash script.sh | GNU Bash | Evet |
sh script.sh | POSIX 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.shveya 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 processYö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 -eCron 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
| Zamanlama | Cron İfadesi | Örnek Kullanım Durumu |
|---|---|---|
| Her gün saat 02:00’de | 0 2 * * * | Gece veritabanı yedeklemesi |
| Her Pazartesi saat 06:00’da | 0 6 * * 1 | Haftalık log döndürme |
| Her saat | 0 * * * * | Ç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>&1Bu, 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.shveya eşdeğer olarak:
. script.shBu, 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 denied | Dosya yürütme izni eksik | chmod +x script.sh komutunu çalıştırın |
No such file or directory | Yanlış yol veya eksik dosya | Yolu ls ve pwd ile doğrulayın |
bad interpreter: No such file or directory | Yanlış 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 found | Script $PATH içinde değil ve ./ öneki yok | ./script.sh veya tam mutlak yol kullanın |
syntax error near unexpected token | Script 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/bashveya maksimum taşınabilirlik için:
#!/usr/bin/env bash2. 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.shveya 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>&17. 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.
screenveyatmuxgibi 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öntem | Komut | Kullanım Durumu |
|---|---|---|
| İzinle yürütme | chmod +x script.sh && ./script.sh | Standart yürütme |
| bash ile çalıştırma | bash script.sh | Yürütme izni gerekmez |
| sh ile çalıştırma | sh script.sh | POSIX uyumlu betikler |
| root olarak çalıştırma | sudo ./script.sh | Yükseltilmiş ayrıcalık gerektiren betikler |
| Arka planda çalıştırma | ./script.sh & | Engellemeyen yürütme |
| Kalıcı olarak çalıştırma | nohup ./script.sh & | SSH oturumu kapatıldıktan sonra devam et |
| cron ile zamanlama | crontab -e | Yinelenen otomatik görevler |
| Betiği kaynak olarak kullanma | source script.sh | Değ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.
tasarruf edin