Hamit YAY

Blog Journey...

Linux Terminal

Bu yazı, bir yazılım geliştiricisi olarak linux terminalde en çok kullanılan komutlar hakkında olacaktır. Linux terminal açık kaynak felsefesi ile yazılım geliştiren bir kimsenin eli ayağı niteliğindedir. Bu yüzden terminale dolayısı ile terminal komutlarına elimizden geldiğince hakim olmakta yarar var. Bu düşünceye dayanarak, Lnux yaz kampında bu gün gösterilen terminal komutlarına değineceğim.

İlk olarak

$PATH

komutu.(Büyük yazıldığına dikkat edelim) PATH çalıştırılabilir dosyaların yerini gösteren değişken. Kullanıcı tarafından çalıştırılabilecek komut ve yazılımların aranacakları yerleri belirtir. Yukarıdaki komutta tanımlı olan dzinleri listeler.

export PATH=$PATH:~/project

komutu ile bir önceki komut ile listelenen dizinlere kök dizinindeki project klasör dizininin eklenmesini sağlar. Bu işlem sadece terminalin kullanıldığı oturum için geçerli olur.

Kalıcı olarak eklemek için kök dizininde bulunan .bashrc dosyasına istenilen dizin eklenebilir. Bu işlemi terminal üzerinden nano editörü kullanılarak yapılabilir.

nano .bashrc

komutu terminal üzerinde .bashrc dosyasının içeriğinin düzenlenebilmesine olanak tanır. İstenilen değişiklikler yapıldıktan sonra

ctrl + x

kısa yolu editörden çıkılmasını sağlar. Değişiklikleri kaydetmek için “y” ve “enter” tuşlarına basılması yeterli olacaktır.

Dosya işlemleri ile ilgili komutlar

ls

komutu bulunulan dizindeki klasör ve dosyaları listeler.

ls -a

komutu bulunulan dizindeki dosya ve klasörleri gizli olanlar ile birlikte listeler.

cd ~/project

komutu kök dizindeki project klasör dizinine geçmeyi sağlar.

cd ..

komutu bir üst dizine geçmeyi sağlar.

pwd

bulunulan dizini gösterir.

mkdir deneme

Bulunulan dizine deneme isimli klasör oluşturur.

mkdir -p deneme/deneme1

Bulunulan dizinde iç içe dosya açar.

rm -rf deneme.txt

komutu klasör ya da dosya silmek için kullanılabilir.

nano deneme.txt

komutu eğer dizinde deneme.txt dosyası yoksa oluşturur ve terminal üzerinde düzenleyebilmek için açar.

cat gemfile

gemfile dosyasının içeriğini terminal üzerinde gösterir.

tail -f development.log

tail komutu dizindeki dosyanın son bölümünü gösterir. -f parametresi ile log dosyasının realtime takip edilebilmesini sağlar.

which ruby

komutu konsolda çalıştırılan komutların(ruby gibi) hangi dizinden çalıştırıldığını gösterir.

grep -i Hasan seed.rb

seed.rb dosyası içerisinde hasan stringini arar ve eşleşen satırları listeler. -i parametresi büyük küçük harf duyarlılık sorununu ortadan kaldırmak için kullanılabilir. Kullanılmadan da arama yapılabilir. Kullanılmadığı takdirde arama yaparken büyük küçük harfe duyarlı bir şekilde arama yapar.

find ~project/ruby -name "*.css"

Arama yapmak için kullanılır. Belirtilen dizindeki tüm css uzantılı dosyaları listeler.

Herhangi bir komutun aldığı parametreleri ve nasıl kullanıldığını görmek için

ls --help

komutu gibi istenilen komutun sonuna –help ekleyerek terminalde çalıştırılır.

Komut hakkında daha detaylı bilg almak için

man ls

komutu gibi istenilen komutun başına man ifadesi eklenip çalıştırılır.

Bu komutun çıktısı uzun olduğu için sayfa sayfa görebilmek için komutun sonuna more ifadesi eklenebilir. Bir sonraki sayfaya geçmek için space tuşuna basarak ilerlenebilir.

Git Flow

Git flow, git deki yeni bir branch oluşturma işlemlerini bir standart haline getirmiş, uygulama geliştirme aşamasında büyük kolaylık sağlayan git tabanlı bir araçtır. Git tabanlı olması git deki komutların aynen kullanılabilmesini sağlar.

Git flowu kurmak için

apt-get install git-flow

komutunu (linux için) terminal üzerinde çalıştırmak gerekir.

Git flowu bir projede kullanabilmek için başalangıçta

git flow init

komutu kullanılır.

Git flowda standartlaştırılmış 5 adet branch mevcut. Bunlar;

  • Master ana branch.

  • Develop uygulama geliştirme branchi.

  • Feature uygulamaya yeni bir özellik eklemek için branch. Her bir yeni özellikiçin yeni bir feature branch oluşturmak ve bitirmek gerekiyor. nasıl yapıldığına birazdan değineceğiz.

  • Hotfix uygulamadaki ataları gidermek için branch.

  • Release uygulamayı yayınlamak için branch.

Yeni bir feature (özellik) oluşturmak için

git flow feature start myfeature

komutu kullanılır. Bu komut uygulamaya yeni bir özellik eklemek için develop brachini temel alan myfeature isimli feature branch ouşturur.

Bir feature tamamlamak için

git flow feature finish myfeature

komutu kullanır. Bu komut kullanılan branchi develop olarak değiştirir. Eklenmiiş olan özellikleri develop branchi ile birleştirir.(merge) Oluşturulmuş olan myfeature feature branchini siler

Bir feature yayınlamak için

git flow feature publish myfeature

komutu kullanılır. Bir ekip olarak çalışılıyorsa ekipdeki diğerleri bu feature a ulaşabilirler.

Yayınlanmış bir feature ı almak için

git flow feature pull myfeature

komutu kullanılır.

Bir uygulamayı yayımlamak için (release)

git flow release start 0.1.0

örnek komutu kullanılır. Bu kumut yeni bir release branch oluşturur.

Yayımlanmış bir release i yayınlamak için

git flow release publish 0.1.0

komutu kullanılır. Bu komut öncesinde local olarak yapılan release barnchi ile beraber yayınlamayı sağlar.

Bir uygulamanın yayımlanmasını bitirmek için

git flow release finish 0.1.0

komutu kullaılır. Bu komut release barnchini master branchine birleştirir. Arka planda develop barnchi ile de birleştirir. Yayınlama için açılmış olan 0.1.0 release branch silinir.

Yeni bir hata düzeltme branchi oluşturmak için

git flow hotfix start version

komutu kullanılır. Yeni bir hotfix branch oluşturur.

Hata düzeltme branchini bitirmek için

git flow hotfix finish version

komutu kullanılır. Bu komut oluşturulmuş olan hotfix branchini develop ve master branchleri ile birleştirir. Hotfix branchi silinir.

Aşağıdaki resimde çeşitli git flow işlemleri gösterilmektedir.

gitflow chart

Aşağıda git flow için komut şablonu gösterilmektedir.

gitflow command chart

Daha detaylı bilgi için git-flow cheatsheet adrsini ziyaret edebilirsiniz.

Semantik Versiyonlama

Versiyonlama işlemi uygulamalar için bir sınıflandırma işlemidir. Geriye yönelik gelişimini takip edebilmek ve hata denetimini yapabilmek gibi bir çok amaca hizmet eder.

Semantik versiyonlama, uygulama versiyonlama işlemi için belirli standartları olan ve yaygın olarak kullanılan versiyonlama sistemidir.

Rails 4.2.6

Rails'ın bir önceki sürümünü örnek olarak verecek olursak;

Rails 4 | 2 | 6

major|minor|patch

versiyon numaralarını bu şekilde ilişkilendirebiliriz.(Semantik Versiyonlamaya uygun olarak)

Major
Uygulamada köklü değişikler yapıldığında değişir. Bu değişiklikler geriye yönelik (önceki sürümler ile) uyumlu olmayabilir. (Geriye Yönelik Uyumlu Değildir)
Minor
Uygulamaya yeni özellikler, fonksiyonellikler eklendiğinde değişir. Bu değişiklikler geriye yönelik uyumludur.
Patch
Uygulamada oluşan hataların giderilmesi gibi durumlarda değişir. Bu değişiklikler geriye yönelik uyumludur.

Major, Minor, Patch nuaralandırılırken dikkat edilmesi gereken hususları özetleyecek olursak;

  • Negatif olmayan sayılar kullanılmalıdır.

  • Bir uygulama 0.1.0 versiyonu ile başlar.

  • Uygulamanın yayınlanması için 1.0.0 versiyonunda olmalıdır.

  • Bir uygulama henüz yayınlanmadıysa yani Major ‘0’ (sıfır) ise uygulama karalı değildir.

  • Her uygulama versiyonunu gösteren API'si olmalıdır.

Versiyon numarası o uygulamanın yaşını, ne kadar geliştiğini ve ona ne kadar emek harcandığını gösterir.

Daha detaylı bilgi için Semantik Versiyoning 2.0 adresini ziyaret edebilir, türkçesi için ise Lab2023 Semver adresini ziyaret edebilirsiniz.

Bir sonraki yazımız Git Flow hakkında olacaktır.

Ruby-Ruby Environment Hakkında...

Ruby bir object oriented programlama dilidir. 1995 yılında Yukihiro Matsumoto tarafından Japonya'da tasarlanmıştır.

Ruby ingilizceye yakın ve anlaşılması kolay bir programa dilidir. Ruby çok çeşitli ve güçlü bir ekosisteme sahiptir. Bu sayede geliştiriciler için bir çok kolaylık sunmaktadır. Ruby, yazmaya başladığınızda anlayabileceğiniz gibi sintax ı kolay ve eğlenceli bir dildir. Şu an Ruby'nin 2.3.1 karalı sürümü mecuttur.

Ruby environment burada devreye giriyor. Ruby environment, birçok proje için farklı ruby versiyonları ile çalışabilme olanağı sunmaktadır. Mesela A projesi 1.9 ruby versiyonu ile çalışırken, B projesi 2.3 versiyonu ile çalışır olsun. Bu iki farklı projeyi ruby environment sayesinde kolaylıkla çalıştırabiliriz. Ruby environmetn ile local ve global olarak ruby versiyonları tanımlayabiliriz. ‘Local’ olarak tanımlanan ruby versiyonu sadece ilgili proje için geçerli olurken, ‘global’ olarak tanımlanan ruby versiyonu ise yeni bir proje için ve local olarak tanımlanmayan projeler için geçerlidir.

Ruby environment için geçerli bazı kodları paylaşalım. Linux terminal için geçerlidir.

rbenv versions

Bu komut ile tanımlamış olduğunuz global ve local tanımlı olan ruby versiyonlarının listesini görebilirsiniz.

rbenv local 2.4.6

Proje kök dizinizde sadece o proje için geçerli ruby versiyonunuzun 2.4.6 olmasını sağlar. Yukarıda da bahsettiğimiz gibi ayrıca proje kök dizinine

.ruby-versiyon

dosyası oluşturup içine 2.4.6 yazıyor.

Ruby environment ile kullanılabilecek komutları ve açıklamalarını

rbenv help

komutu ile terminalde listeleyebilirsiniz.

Ruby ve ruby environment ile ilgili daha detaylı bilgiyi Ruby Programming Language adresinden elde edebilirsiniz.

Ruby environment ile aynı işlevi gören Ruby Versiyon Manager (RVM) da mevcut ancak RuBy ENVironment (rbenv) daha yaygın olarak kullanılmaktadır.

Bir sonraki yazımız Semantik Versiyonlama hakkında olacaktır.