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 omurgasıdır. 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, tekrarlanabilir bir yürütülebilir dosyaya paketlemenizi sağlar. Bu kılavuz, Linux’ta shell scriptlerini çalıştırmanın her yönteminde size yol gösterir — temel yürütmeden arka plan işlemlerine ve cron zamanlamasına kadar — üretim ortamlarında geçerli olan en iyi uygulamalarla.
Linux’ta .sh Dosyası Nedir?
Bir .sh dosyası, Linux shell’i tarafından satır satır yorumlanan ve yürütülen shell dilinde (tipik olarak Bash veya POSIX sh) yazılmış düz metin bir scriptdir. Shell scriptleri ş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
- Yedeklemeler ve günlük döndürme gibi bakım işlerini planlamak
- Sağlama sonrasında yeni sunucuları önyüklemek
Bir VPS Hosting ortamını veya bir Dedicated Server‘ı yönetiyorsanız, shell scripting her hafta saatlerce manuel çalışmadan tasarruf ettirecek vazgeçilmez bir beceridir.
Ön Koşullar
Herhangi bir .sh dosyasını çalıştırmadan önce şunlara sahip olduğunuzdan emin olun:
- Linux terminaline erişim (yerel veya SSH aracılığıyla)
- Uygun izinlere sahip bir kullanıcı hesabı
- Script dosyası zaten sistemde (yerel olarak oluşturulmuş veya SCP/SFTP aracılığıyla aktarılmış)
Yöntem 1: chmod ile Dosyayı Yürütülebilir Hale Getirin
Varsayılan olarak, yeni oluşturulan veya indirilen .sh dosyaları yürütme izinlerine sahip DEĞİLDİR. Script’i bir program olarak çalıştırmadan önce, chmod komutu kullanarak açıkça yürütme haklarını vermelisiniz.
Dosyayı yürütülebilir hale getirmek için:
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 group 1024 Jan 15 10:30 script.sh
rwx bayrakları, dosyanın artık sahip, grup ve diğerleri tarafından yürütülebilir olduğunu doğrular.
> Güvenlik ipucu: Yürütmeyi yalnızca dosya sahibine kısıtlamak istiyorsanız, chmod 755 yerine chmod 700 kullanın.
Yöntem 2: Göreceli veya Mutlak Yol Kullanarak Script’i Çalıştırın
Dosya yürütülebilir hale geldikten sonra, bunu doğrudan terminalden çalıştırabilirsiniz.
Göreceli Yol Kullanma (Geçerli Dizin)
Script geçerli çalışma dizininizde ise, bunu ./ ile başlatın:
./script.sh
./ shell’e geçerli dizinde aramak yerine sistem PATH’inde aramak yerine geçerli dizinde aramasını söyler.
Mutlak Yol Kullanma
Script başka bir konumda depolanıyorsa, tam yolunu sağlayın:
/home/user/scripts/script.sh
veya
~/scripts/script.sh
Mutlak yollar kullanmak, özellikle cron işlerinden veya çalışma dizininin farklı olabileceği diğer otomatik bağlamlardan script’ler çalıştırırken önemlidir.
Yöntem 3: bash veya sh ile Script’i Çalıştırın (Yürütme İzni Gerekli Değil)
Dosya yürütme izinlerine sahip olmasa bile, yorumlayıcıyı açıkça çağırarak bir shell script’i çalıştırabilirsiniz. Bu, bir script’i kalıcı olarak yürütülebilir hale getirmeden önce hızlı bir şekilde test etmek için özellikle yararlıdır.
bash script.sh
veya POSIX uyumlu scriptler için:
sh script.sh
bash ve sh Arasındaki Fark
| Komut | Yorumlayıcı | Bash’e Özgü Özellikleri Destekler |
|---|---|---|
| bash | GNU Bash | Evet |
| sh | POSIX sh (Ubuntu’da genellikle dash) | Hayır |
Script’iniz diziler, [[ ]] koşulları veya işlem ikamesi gibi Bash’e özgü söz dizimini kullanıyorsa, sh yerine her zaman bash kullanın.
Yöntem 4: Script’i Süper Kullanıcı Olarak Çalıştırın (sudo)
Bazı scriptler sistem dosyalarını değiştirmek, hizmetleri yönetmek, paketleri yüklemek veya ağ yapılandırması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 script’i doğrudan bash’e yükseltilmiş haklarla geçirin:
sudo bash script.sh
Önemli Güvenlik Hususları
- Bunu ilk okuduğunuz olmadan bir script’i asla root olarak çalıştırmayın. Sudo erişimi olan kötü amaçlı veya kötü yazılmış bir script geri döndürülemez sistem hasarına neden olabilir.
- Script’leri minimum gerekli ayrıcalıklarla çalıştırmayı tercih edin.
- Bir script yalnızca belirli bir dizine yazması gerekiyorsa, tüm script’i root olarak çalıştırmak yerine dizin izinlerini ayarlamayı düşünün.
Yöntem 5: Script’i Arka Planda Çalıştırın
Varsayılan olarak, terminalde bir script çalıştırmak, script tamamlanana kadar oturumunuzu engeller. Uzun süren görevler için — büyük dosya aktarımları, veritabanı göçleri veya sunucu derlemeleri — işlemi arka plana göndermek isteyeceksiniz.
& Operatörünü Kullanma
./script.sh &
& sembolü işlemi arka plana çatallar ve hemen terminalinize kontrol döndürür. Shell, arka plan işinin PID’sini (İşlem Kimliği) yazdırır; bunu daha sonra izlemek veya sonlandırmak için kullanabilirsiniz.
Oturum Kapatıldıktan Sonra Script’i Çalışır Durumda Tutun nohup ile
SSH’den bağlantıyı kesersaniz, & ile başlatılan arka plan işleri tipik olarak sonlandırılacaktır. Bunu önlemek için nohup kullanın:
nohup ./script.sh &
Çıktı varsayılan olarak nohup.out’a yönlendirilir. Özel bir günlük dosyası belirtmek için:
nohup ./script.sh > script.log 2>&1 &
Arka Plan İşlerini İzleyin
jobs
Yöntem 6: Cron ile Script Yürütmesini Planlayın
Yinelenen görevler için — gece yedeklemeleri, haftalık temizlemeler, saatlik sağlık kontrolleri — Linux’un yerleşik cron zamanlayıcısı standart çözümdür.
Crontab Editörünü Açın
crontab -e
Cron Söz Dizimi
* * * * * /path/to/script.sh
│ │ │ │ │
│ │ │ │ └─ Haftanın günü (0-6, 0 = Pazar)
│ │ │ └─── Ay (1-12)
│ │ └───── Ayın günü (1-31)
│ └─────── Saat (0-23)
└───────── Dakika (0-59)
Pratik Cron Örnekleri
| Zamanlama | Cron İfadesi | Örnek Kullanım Durumu |
|---|---|---|
| Her gün saat 2:00’de | 0 2 * * * | Gece veritabanı yedeklemesi |
| Her Pazartesi saat 6:00’da | 0 6 * * 1 | Haftalık günlük 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üklemede bir hizmet veya script başlatın |
Örnek: Otomatik Günlük Yedekleme
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1
Bu, backup.sh’yi her gün saat 2:00’de çalıştırır ve denetim için hem standart çıktıyı hem de hataları bir günlük dosyasına ekler.
> Pro ipucu: Cron girdilerinde her zaman mutlak yollar kullanın. Cron minimal bir ortamla çalışır ve etkileşimli shell’inizle aynı PATH’e erişemeyebilir.
Yöntem 7: Script’i Kaynak Olarak Kullanın (Geçerli Shell Bağlamında Çalıştırın)
Bilmek değer olan bir yürütme yöntemi daha vardır: bir script’i kaynak olarak kullanmak. Yukarıdaki yöntemlerin aksine, kaynak alma script’i bir alt shell oluşturmak yerine geçerli shell oturumunda çalıştırır. Bu, script’te tanımlanan herhangi bir değişken veya işlevin geçerli ortamınızda kalıcı olması anlamına gelir.
. ./script.sh
veya eşdeğer olarak:
source ./script.sh
Bu, ortam değişkenlerini yüklemek, sanal ortamları etkinleştirmek veya geçerli 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 çalıştırın |
| No such file or directory | Yanlış yol veya eksik dosya | pwd ve ls ile yolu doğrulayın |
| Bad interpreter | Yanlış shebang satırı (örn. Windows satır sonları) | dos2unix script.sh çalıştırarak satır sonlarını düzeltin |
| command not found | Script PATH’de değil ve ./ öneki yok | ./script.sh veya tam mutlak yol kullanın |
| Unexpected operator | Script bash için yazılmış ama sh ile çalıştırılmış | bash’i açıkça kullanın |
Shell Script’leri Yazma ve Çalıştırma için En İyi Uygulamalar
Bu uygulamaları takip etmek, script’lerinizi daha güvenli, daha bakımı kolay ve hata ayıklaması daha kolay hale getirecektir — özellikle sunucu ortamlarında.
1. Her Zaman Shebang Satırı ile Başlayın
Her script’in ilk satırı yorumlayıcıyı bildirmelidir:
#!/bin/bash
veya maksimum taşınabilirlik için:
#!/usr/bin/env bash
2. Kesin Modu Etkinleştirin
Her üretim script’inin üst kısmına bunu ekleyin:
set -euo pipefail
- -e — Herhangi bir komut başarısız olursa hemen çık
- -u — Ayarlanmamış değişkenleri hata olarak işle
- -o pipefail — Borulu komutlardaki hataları yakala
3. Script’i Çalıştırmadan Önce Okuyun
Asla harici veya güvenilmeyen bir kaynaktan bir .sh dosyasını içeriğini gözden geçirmeden çalıştırmayın:
cat script.sh
veya bunu bir metin editöründe açın. Bu, özellikle sudo ile çalıştırırken kritiktir.
4. Yorum Kullanın
# Bu, bir yorum satırıdır
echo “Bu kod yürütülür” # Satır içi yorum
5. Script’leri Özel Dizinlerde Organize Edin
| Dizin | Önerilen Kullanım |
|---|---|
| /usr/local/bin | Tüm kullanıcılar tarafından erişilebilen sistem genelinde script’ler |
| ~/bin veya ~/.local/bin | Kişi |
