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.
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.
İ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.
İ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.