- Konu sahibi
- #1
Linux shell, kullanıcıdan aldığı komutları yorumlayıp işletim sisteminde çalıştıran komut yorumlayıcısıdır. Terminal penceresi shell’in kendisi değildir; terminal, shell ile etkileşim kurduğunuz arayüzdür. Shell ise yazdığınız komutu çözümler, gerekli programı bulur, girdileri ve çıktıları yönlendirir, ardından işlemin sonucunu gösterir.
Shell yalnızca tek tek komut çalıştırmaz. Değişken, koşul, döngü, fonksiyon, yönlendirme ve boru hattı gibi özelliklerle komut dosyaları hazırlayarak tekrarlanan işleri otomatikleştirmenizi de sağlar.
Bu üç kavram sıkça aynı anlamda kullanılsa da görevleri farklıdır:
Linux sistemlerinde Bash, Zsh, Dash, Fish ve başka shell’ler kullanılabilir. Bu nedenle “shell” genel kavramdır; Bash ise bu kavramın belirli bir uygulamasıdır. Bir komutun çalışıp çalışmaması, kullanılan shell’in sözdizimine ve komutun sistemde bulunmasına bağlı olabilir.
Shell, yazılan satırı kabaca şu sırayla değerlendirir:
Beklenen çıktı şöyledir:
Bu örneği yalnız deneme dizininde, mesaj.txt adlı gerekli bir dosya bulunmadığını doğrulayarak çalıştırın. İlk komut dosyayı oluşturur veya mevcutsa içeriğini değiştirir. İkinci komut dosyanın içeriğini ekrana basar. Dosyanın oluşmadığını veya erişim hatası aldığınızı görürseniz bulunduğunuz dizini ve yazma izinlerini kontrol edin; komutun amacı mevcut dosyaya ek yapmaksa
Shell ile dosya ve dizin işlemleri yapabilir, programları seçeneklerle çalıştırabilir, komutların çıktısını başka komutlara aktarabilir ve işlem sonuçlarına göre karar verebilirsiniz. Örneğin:
Burada
Shell komutlarını dosyaya kaydedip daha sonra çalıştırabilirsiniz. Böyle bir dosya shell script olarak adlandırılır. Ancak Bash’e özgü özellikler kullanan bir script’i farklı bir shell ile çalıştırmak aynı sonucu vermeyebilir. Bu yüzden script’in hangi shell için yazıldığını açıkça belirtmek ve çalıştırma biçimini buna göre seçmek gerekir.
Hayır. Önce hazır komutları çalıştırarak başlanabilir. Programlama bilgisi, komutları koşullara ve tekrarlara bağlayıp otomasyon hazırlarken gerekli hâle gelir.
Shell yalnızca tek tek komut çalıştırmaz. Değişken, koşul, döngü, fonksiyon, yönlendirme ve boru hattı gibi özelliklerle komut dosyaları hazırlayarak tekrarlanan işleri otomatikleştirmenizi de sağlar.
Shell, terminal ve Bash arasındaki fark
Bu üç kavram sıkça aynı anlamda kullanılsa da görevleri farklıdır:
Linux sistemlerinde Bash, Zsh, Dash, Fish ve başka shell’ler kullanılabilir. Bu nedenle “shell” genel kavramdır; Bash ise bu kavramın belirli bir uygulamasıdır. Bir komutun çalışıp çalışmaması, kullanılan shell’in sözdizimine ve komutun sistemde bulunmasına bağlı olabilir.
Bir shell komutu nasıl işler?
Shell, yazılan satırı kabaca şu sırayla değerlendirir:
- Komut satırını okur ve kelimelere, seçeneklere ve özel işaretlere ayırır.
- Değişkenleri, tırnakları, joker karakterleri ve komut ikamelerini değerlendirir.
- Girdi-çıktı yönlendirmelerini ve boru hatlarını hazırlar.
- Komutu yerleşik bir shell komutu olarak veya sistemdeki bir programı çağırarak çalıştırır.
- İşlem durumunu, çıktıyı ve varsa hata mesajını terminale gönderir.
printf çıktıyı üretir, > işareti ise bu çıktıyı mesaj.txt dosyasına yönlendirir:
Kod:
printf '%s\n' 'Linux shell' > mesaj.txt
cat mesaj.txt
Beklenen çıktı şöyledir:
Kod:
Linux shell
Bu örneği yalnız deneme dizininde, mesaj.txt adlı gerekli bir dosya bulunmadığını doğrulayarak çalıştırın. İlk komut dosyayı oluşturur veya mevcutsa içeriğini değiştirir. İkinci komut dosyanın içeriğini ekrana basar. Dosyanın oluşmadığını veya erişim hatası aldığınızı görürseniz bulunduğunuz dizini ve yazma izinlerini kontrol edin; komutun amacı mevcut dosyaya ek yapmaksa
> yerine >> kullanılır.Shell’in pratik kullanım alanları
Shell ile dosya ve dizin işlemleri yapabilir, programları seçeneklerle çalıştırabilir, komutların çıktısını başka komutlara aktarabilir ve işlem sonuçlarına göre karar verebilirsiniz. Örneğin:
Kod:
printf '%s\n' 'bir' 'iki' 'üç' | wc -l
Burada
| işareti ilk komutun çıktısını ikinci komutun girdisi yapar. wc -l satır sayısını hesapladığı için sonuç 3 olur. Bu yapı, büyük işlemleri küçük ve anlaşılır komutların birleştirilmesiyle kurmanızı sağlar.Shell komutlarını dosyaya kaydedip daha sonra çalıştırabilirsiniz. Böyle bir dosya shell script olarak adlandırılır. Ancak Bash’e özgü özellikler kullanan bir script’i farklı bir shell ile çalıştırmak aynı sonucu vermeyebilir. Bu yüzden script’in hangi shell için yazıldığını açıkça belirtmek ve çalıştırma biçimini buna göre seçmek gerekir.
| Kavram | Görevi | Örnek |
|---|---|---|
| Terminal | Komut yazıp sonucu gördüğünüz uygulama veya oturum | Bir masaüstü terminal penceresi |
| Shell | Komutları yorumlayan ve çalıştıran katman | Bash, Dash, Zsh |
| Bash | Yaygın bir shell ve komut dosyası yorumlayıcısı | bash |
Başlangıç için uygulanabilir yol
- Terminali açın ve hesabınız için ayarlanmış oturum açma shell’inin yolunu görmek için
printf '%s\n' "$SHELL"komutunu çalıştırın. Bu ortam değişkeni boş kalabilir veya sonradan açtığınız başka bir shell’e rağmen eski değeri koruyabilir; şu anda çalışan yorumlayıcının kesin kanıtı değildir. - Kesin olarak Bash ile küçük bir deneme yapmak için
bash -c 'printf "%s\n" "$BASH_VERSION"'komutunu çalıştırın. Bir sürüm metni görürseniz Bash çalışmıştır;bash: command not foundbenzeri hata alırsanız Bash kurulu değildir veya çalıştırılabilir dosya arama yolunda bulunmuyordur. - Komutların yardımını ve seçeneklerini incelemek için ilgili programın kılavuzunu veya
--helpseçeneğini kullanın. Shell’in yerleşik komutları ile dış programların yardım biçimleri farklı olabilir. - Birden fazla komutu birleştirmeden önce her komutu ayrı ayrı çalıştırıp çıktısını doğrulayın. Böylece hatanın shell sözdiziminden mi, programdan mı kaynaklandığını daha kolay ayırırsınız.
Sık sorulan sorular
Shell kullanmak için programlama bilmek gerekir mi?
Hayır. Önce hazır komutları çalıştırarak başlanabilir. Programlama bilgisi, komutları koşullara ve tekrarlara bağlayıp otomasyon hazırlarken gerekli hâle gelir.
Komut çıktı vermediyse başarısız mı olmuştur?
Hayır. Bazı komutlar başarı durumunda sessizdir; çıktı başka bir dosyaya da yönlendirilmiş olabilir. Bash’te komuttan hemen sonraprintf '%s\n' "$?" ile çıkış durumunu görebilirsiniz: sıfır genellikle başarıyı, sıfır dışı değer ilgili programın belirlediği başka bir durumu gösterir. Ardından yeni bir komut çalıştırmanız önceki durum değerini değiştirir.