Kabuk (SHELL) Nedir? Nasıl Kullanılır?

Terminal kullanımı ve örneklerinin öncesinde temel bir giriş olması adına Kabuk ile ilgili kısa bir özet geçmek istiyorum. Linux dağıtımları ve UNIX işletim sistemleri içerisinde yorumlama ve yönetim amacıyla kullanılan komutları işleten araç Kabuk olarak nitelendirilir.

AA

Kabuk, arayüzler ve çalışır uygulamalar dışında (öncesinde ve paralelinde) komutların işletildiği ana ve hatta çoğu zaman zorunlu bir paneldi. Şimdilerde kullanıcı arabirimlerinin merkezileştirilmesi ve son tüketiciye uygun olarak standartlaştırılması nedeniyle çoğunlukla işlemler aracı birimler üzerinden yürütülmeye başlandı. Sürecin zorluğu ve kolaylığı tartışılır elbette. Ancak, şu bir gerçek ki bir aracı üzerinden gerçekleştirilen işlemler belirli bir argüman standardı içerisinde işlenecektir.

Spesifik işlem komutları ve harici erişimlerde (SSH, vb.) kabuk tek erişim sağlayıcı olabilmektedir. Windows işletim sisteminin sunduğu cmd.exe1 ve PowerShell2, macOS için Terminal, iTerm, Linux için xterm3, konsole4 örnek olarak gösterilebilecek bir çok farklı öykünücü mevcuttur.

SHELL

Aşağıda macOs için standart terminal ve özelleştirilmiş örnek bir öykünücü görüntüleri iletiyorum.

Terminal

İlk açılışta karşımıza kullanıcıadı@bilgisayaradı:~$ çıkacaktır. ~ (tilde) işareti bulunulan dizini ifade eder. Bu ifadeye göre root dizinde olduğumuzu anlarız. /etc dizini için komut girdiğimizde (cd) ifade kullanıcıadı@bilgisayaradı:/etc # olarak değişecektir. Satırın sonundaki işaret yetki seviyesini ifade etmektedir. Varsayılan olarak $ (dolar) işareti tanımlıdır ve normal bir kullanıcıyı işaret eder. $ işareti normal (sınırlı erişime sahip) bir kullanıcı için varsayılan işarettir. # (diyez) ise root kullanıcısını belirtir ve yetkilendirme sınırı yoktur.

echo $SHELL komutu bize aktif olan kabuğu verecektir. Aşağıda iki farklı öykünücünün yazdırdığı kabuk yolunu iletiyorum. Görüldüğü üzere panellerden biri bu anlamda bash diğeri ise zsh kabuğunu kullanmaktadır.

Shell kabuk

İkinci paneldeki zsh oh my zsh'i ifade etmektedir. Ayrı bir yazı altında oh my zsh ile ilgili detayları ileteceğim.

Bash Kabuğu

UNIX ortamında5 en çok kullanılan kabuklara bash (Bourne Again Shell) dışında tcsh ve ksh (Korn Shell) örnek gösterilebilir. Bash için Bourne Shell (sh)’in geliştirilmiş hali diyebiliriz. Tcsh ise C shell (csh)’in geliştirilmiş halidir. Alternatifleriyle kıyaslandığında en çok özelliğe ve işleve sahip olan Bash kabuğudur6. Linux dağıtımlarında derlenen bash ise hem tcsh hem de ksh özellikleri barındırır7.

SHELL Script

Defalarca yazılması gereken komutlar bir dosya içerisinde kullanılabilir. Kabuk script olarak ifade edilen bu dosyalar sayesinde döngüler ve case deyimleri gibi programlama yapılarını kullanarak komutlar pratik bir şekilde işlenir.

Sunucularda SHELL Kullanımı

Sunucularda genelde kullanıcı erişimleri sınırlı olarak sunulmaktadır. Ancak, root yetkisi ile birlikte sunucuda yükleme, silme, düzenleme gibi bir çok işlem gerçekleştirmek mümkün hale gelmektedir. Kabuk erişimi, firmaların tercihine bağlı olarak TELNET veya SSH üzerinden sağlanabilir. TELNET hem kullanıcılar hem de sunucular açısından oldukça güvensiz olduğu için pek tercih edilmemektedir. Windows ortamında telnet ve PuTTY kullanım için tercih edebileceğiniz uygulamalardır. macOS X Üzerinde Kurulumsuz PHP Çalıştırmak, Terminal FTP Erişimi ve İşlemler, SIPS (Scriptable Image Processing System) başlıklı yazırlarda kısmen değindiğim komutları özetlemek gerekirse;

mkdir temp

mkdir “temp” adında bir klasör oluşturmanızı sağlayacaktır.

cd temp

cd “temp” klasörüne giriş yapmanızı sağlar. Eğer böyle bir klasör yoksa hata mesajı dönecektir.

pwd

pwd bulunduğunuz dizini gösterir.

Argümanlar ve Kullanımı

Komutların çoğu temel ifadelerin ardından ya da satır sonunda argüman tanımlama olanağına sahiptir. Argümanı komut tarafından işlenebilecek ekstra bilgi parçası olarak ifade edebiliriz. Belirtilen bir dosya veya dizin adı da argümandır.

İpuçları

Bir komutun ne işe yaradığı, herhangi bir alt parametre barındırıp barındırmadığını öğrenmek için bazı yardımcı komutlar kullanabilmekteyiz. Örneğin UBUNTU da man komutu, LINUX dağıtımlarının bir çoğundaysa –help kullanılmaktadır. Kullanım aşamasında yine size pratiklik kazandıracak diğer ipuçları ise şöyle;

Tamamlama

Tab tuşu ile dosya ve dizin isimlerinin tamamlanmasını sağlayabiliriz. Örneğin, /Desktop dizini yazmak için /De yazıp Tab tuşuna basmanız yeterli olacaktır. Tab tuşuna ek olarak uzun yazımlarda dosya isminin tamamlanması için * (yıldız) işaretini de kullanabilirsiniz. /Desktop için /De* yazmanız yeterli olacaktır. Bu arada komutların, dizin ve dosya isimlerinin case sensitive (büyük-küçük harf duyarlı) olduğunu unutmamalısınız.

History

Oturum süresince işlenen her komut kayıt edilmektedir. Bu sayede klavyenizdeki yukarı ok tuşunu kullanarak en son kullanılan komut ilk olacak şekilde kullanılan komutlar arasında geçiş yapabilmeniz mümkün olmaktadır.

Dizin Geçişleri

., .., ~ ifadeleri dizinler arasında geçişler yapmanızı sağlamaktadırlar. . bulunduğunuz dizini, .. bir üst dizini, ~ root dizini ifade etmektedir. Örneğin aynı dizindeki temp klasörüne geçil için ./temp veya temp yazmanız yeterlidir. Bir üst dizinde yer alan temp klasörüne erişmek için ise ../temp ifadesini kullanabilirsiniz. root dizindeki temp klasörüne erişmek için ise kullanmanız gereken ifade ~/temp olacaktır.

Dosya İşlemleri

İşlemlerin büyük çoğunluğunu dizinler arasında geçişler, klasör ve dosya oluşturma, silme ve taşıma işlemleri ve izin atamaları oluşturmakta. Aşağıda sıklıkla kullanacağınız bu komutlarla ilgili kısa bilgiler iletiyorum. Çok daha detaylı bilgi için Terminal Hile Sayfası Mac (Temel)8 sayfasını inceleyebilirsiniz.

Dosya Oluşturma

touch** [dosya adi.uzanti] bulunduğunuz ya da belirttiğiniz dizinde dosya oluşturmanızı sağlayacaktır. Ek olarak nano ve vi gibi editörlerle açtığınız ve dizinde yer almayan dosyaları da editörü kayıt ederek oluşturabilirsiniz.

touch ~/Desktop/dokuman.txt

ile Desktop klasörü içerisinde dokuman.txt adında bir döküman oluşturabilirsiniz. Aynı şekilde Desktop içerisinde dokuma.txt adında bir dosya yoksa;

nano ~/Desktop/dokuman.txt

şeklinde doğrudan editörün açılacağı komut üzerinden düzenlemelerinizi yapabilir, Ctrl + X komutu sonrasında dosyasınıza isim verip kayıt işlemini gerçekleştirebilirsiniz.

Klasör Oluşturma

Yazının ilk bölümünde yer alan işlem komutları arasında da belirttiğim gibi mkdir komutu bulunduğumuz veya belirttiğimiz dizinlerde klasör oluşturmamızı sağlar. Aşağıdaki komut bulunduğunuz dizinde tmp isimli bir klasör oluşturmanızı sağlar.

mkdir temp
Listeleme

Bulunduğunuz dizindeki dosya ve klasörleri listelemek için ls komutunu kullanabilirsiniz. man ls komutunu kullanarak listeleme parametrelerini (sıralama, detaylandırma vb.) detaylıca görüntüleyebilirsiniz.

Dosya Silme

rm [dosya adi.uzanti] bulunduğunuz ya da belirttiğiniz dizindeki dosyaları silmenizi sağlar. Belirli bir klasörün içeriğini silmek için aşağıdaki komut kullanılabilir.

rm ~/klasora adi/*
Klasör Silme

rmdir [klasor adi] belirttiğiniz dizinin silinmesini sağlayacaktır. Ancak, klasörün içeriğinin boş olmaması durumunda komut daha döndürecektir. Hata almadan klasör ve içeriğini silmek için aşağıdaki kodu kullanabilirsiniz.

rmdir -r
Dosya ve Klasör Taşıma

mv [klasor adi] [yeni klasor yolu] ile bir dizinden belirttiğiniz bir diğer dizine dosya ve klasör taşıyabilirsiniz. Örneğin aşağıdaki kod ile test klasörü içerisinde yer alan 1 nolu klasörün içeriğindeki tüm png uzantılı dosyalar 2 nolu klasöre taşınacaktır.

mv ./test/1/*.png ./test/2/
Dosya ve Klasör Kopyalama

cp [klasor adi] [yeni klasor yolu] ile bir dizinden belirttiğiniz bir diğer dizine dosya ve klasör taşıyabilirsiniz. Örneğin aşağıdaki kod ile test klasörü içerisinde yer alan 1 nolu klasörün içeriğindeki tüm png uzantılı dosyalar 2 nolu klasöre taşınacaktır.

cp ./test/1/*.png ./test/2/
İzin Tanımlama

chmod [izinler] [dosya/klasor adi] ile dosya ve klasörler için izin düzenlemeleri ve izinler dahilinde kullanıcı atamaları yapabiliriz.

chmod 777 ~/Desktop/test/

Yukarıdaki kod belirtilen dizindeki tüm dosya ve klasörleri 777 (okuma izni -> 4 + yazma izni -> 2 + çalıştırma izni -> 1) ile yetkilendirecektir. Detaylı bilgi için Chmod Komutunun Kullanımı başlıklı yazıyı inceleyebilirsiniz.

Yeniden Adlandırma

Bir klasörü yeniden adlandırmak için mv komutunu kullanabiliriz. Örneğin aşağıdaki dizin içerisinde 3 nolu klasör tanımlı olmadığı için bu klasör oluşturularak 1 nolu klasörün içeriğini alacaktır.

mv ~/Desktop/test/1/ ~/Desktop/test/3/

Aşağıdaki kod ise Screen Shot 2017-10-20 at 13.37.15.png dosyayı imaj.png olarak tanımlayacaktır.

mv Screen*.png imaj.png
Özel Karakterler

Yukarıdaki işlemlerde sıklıkla kullandığım bazı karakterler işimizi oldukça kolaylaştırmakta. Örneğin uzun tanımlamalarda sıklıkla kullandığım * ve dökülen bir veriyi bir metin dökümanına kayıt etmemi sağlayan > karakterler bunlardan sadece birkaçı. Biraz daha detay vermek gerekirse;

test rm ./*/*.png

Yukarıdaki komut test içerisinde yer alan her klasörün içeriğine bakıp her png dosyasını silecektir.

who am i  > ./report.txt

Yukarıdaki komut ise who am i komutunun döndürdüğü değeri report.txt adındaki klasöre yazdıracaktır.

Dosya İçeriğini Görüntüleme

cat [dosya adi.uzanti] komutu dosya içeriğini görüntülememizi sağlar. Örneğin aşağıdaki kod az önce yarattığımız report.txt dökümanının içeriği olan who am i çıktısını görüntüleyecektir.

cat report.txt
Metin Editörleri

Terminal içerisinde nano ve vim kullanabileceğiniz ön tanımlı editörlerdir. Ayrıca farklı editörleri de kullanmanız mümkün ancak bunun için harici birkaç işlem yapmanız gerekiyor (bu konuya değineceğim).

nano

Benim favorim. Vim’e bir türlü alışamadığım için nano’yu daha sıklıkla kullanmaktayım. Herhangi bir dosya içeriğini görüntülemek isteriğinizde nano [dosya adi.uzanti] komutunu uygulamanız yeterli olacaktır.

vim

Seveni ve sevmeyeni oldukça çok. Sevmek belki yanlış bir ifade olur, neticede hız ve performans bu anlamda değerlendirmemiz gereken asıl faydalar. vi [dosya adi.uzanti] ile istediğiniz döküman içeriğini görüntüleyebilirsiniz. Elbette kabuklarla ilgili pek çok daha detaylı bilgi vermek mümkün. Ancak sonraki yazılara ve paylaşımlara temel olarak temel bir giriş şu an için yeterli.

Bu arada dipnot olarak ekleyeyim bilgisayarımda iTerm, telefonumda Termux uygulamalarını kullanıyorum.