En Çok Kullanılan Terminal Komutları (Linux / macOS)

En Çok Kullanılan Terminal Komutları (Linux / macOS)
Photo by Gabriel Heinzer / Unsplash

Unix temelli işletim sistemlerinde onlarca komut bulunur. Bu yazıda günlük hayatta en çok ihtiyaç duyacağınız komutlara değinmeğe çalıştım. Her ne kadar konuyu çok kullanılan komutlar olarak indirgesem de takdir edersiniz ki bir yazıda komutları tüm özellikleri ile anlatmak mümkün değil. Yine de terminal komutlarına yeni başlayan ve öğrenenler için iyi bir rehber olacağına inanıyorum.

Öncelikle, temel bir kaç husus...

Devam eden başlıklarda açıklamaları ve örnekleri Linux referans alarak yapacağım. Ancak burada kullanılan terminal komutları hem Linux hem de macOS işletim sistemi için geçerlidir. Kimi zaman bazı komutların kullanımı işletim sistemine göre farklılık gösterse de her ikisi de unix tabanlı olduğu için çoğu komutun kullanımı aynıdır.

Geçerli Klasör (Working Directory)

Bu kavram içinde bulunduğunuz klasörü kasteder ve working directory ya da current directory olarak adlandırılır. Mesela Windows işletim sisteminde Belgelerim ve onun içinde Resimler klasörüne tıklarsanız sizin working directory niz "Resimlerim" klasörü olur. Tıpkı bunun gibi Linux içinde o anda işlem yaptığınız ya da bulunduğunuz klasör de bu şekilde adlandırılır.

Flags (Etiket)

Linux'ta birçok komut ek özellikler ile kullanılır. Bu özellikler ile o komutun çalışma şekli zenginleşir ya da değişir. Komutlara ek özellikler vermek için FLAG kullanılır (Buradaki anlamını etiket olarak çevirebiliriz). Flag' lar genellikle önlerinde tire (-) işareti ile kullanılır. Mesela ls komutu tek başına kullanılabildiği gibi ls -a şeklinde "a" flag ile de kullanılır ve -a flag tüm dosyaları, gizli dosyalar dahil listeler. Komutları sırası geldikçe açıklayacağım şimdilik flag' ın bir komuta ek özellik kazandırdığını bilelim yeter.

(*) wildcards

"*" işareti çoğu zaman komutlarla birlikte kullanılır. Bu joker bir karakterdir ve bir ya da birden çok karakter yerine kullanılabilir. Örneğin *.txt sonu .txt ile biten tüm dosyaları kasdeder. Sadece "*" kullanır isek bir klasör altındaki gizli dosyalar hariç tüm klasör ve dosyaları belirtir.

/ - Root Path (Kök-Ana Yol)

Windows işletim sisteminde varsayılan olarak ana klasör "C:\" klasörüdür. Aksine bir ayar yapılmadıkça bu hep böyledir. Windows dosyaları "C:\Windows" altında bulunur. Windows bilgisayarınıza yeni bir sürücü eklerseniz muhtemelen başka bir harfle mesela "D:\"  harfi ile görürsünüz.

Linux'ta ise bu şekilde bir harf sistemi yoktur. Bunun yerine bir root (kök) dizin vardır ve diğer klasörler de bu dizine göre konumlanır. Root dizin "/" ile gösterilir. Root dizin altında "/home", "/var", "/bin" gibi dizinler bulunur.

home (~) dizini

Linux işletim sisteminde kullanıcı yetkileri ve kullanıcı ağacı geniş bir konudur ve hatta ayrı bir yazının konusu olabilir. Bu nedenle şimdilik genel olarak iki tür kullanıcı bulunur diyebiliriz. Biri admin diğeri kullanıcı.

Her kullanıcının varsayılan olarak root dizini /home klasörü altında kullanıcı ismiyle kendi klasörleri bulunur. /home/<kullanıcıAdı>

Örneğin linux bilgisayarımızda biri izleogrenkodla diğeri kodman isminde iki kullanıcı olsun diyelim. Bu durumda ilk kullanıcı linux komut satırını açtığında varsayılan olarak /home/izleogrenkodla dizini altında kendini bulur. Aynı şekilde ikinci kullanıcı da bilgisayarı kullandığında /home/kodman dizini altında olduğunu görecektir. Her kullanıcının home dizini altındaki kendi klasörüne okuma ve yazma yetkisi vardır.

home klasörü tilde karakteri (~) ile gösterilir. Yukarıdaki izleogrenkodla kullanıcısı linux bilgisayarı kullanıcı adı ve parolası ile açıp komut satırına (terminal) gittiğinde aşağıdaki gibi bir ekranla karşılaşır.

myPc:~$

Relative Path(Referans Adres)

Sözlük anlamına baktığımızda relative yakın path ise yol anlamında kullanıldığını görürüz. Path işletim sisteminde dosya ve klasörün yolu ya da adresi olarak kullanılır. Relative Path ise içinde bulunduğumuz klasöre (Working Directory) göre başka bir klasörü tarif etmek için kullanılır. Örneğin aşağıdaki şemaya bakalım.

/home/izleogrenkodla/depom

/home/izleogrenkodla/depom/filmler
   |--Avatar.mp4
   |--StarWars.mp4
   
/home/izleogrenkodla/depom/resimler
   |--cicek.jpg
   |--rozet.jpg

Depom klasörü altında "filmler" ve "resimler" olmak üzere iki tane klasör var. Her klasörün altında da dosyalar bulunuyor.

Diyelim ki "filmler" klasörü içindeyiz. bu durumda bulunduğumuz klasörü /home/izleogrenkodla/depom/filmler şeklinde tam yoluyla (absolute path) gösterebileceğimiz gibi ./ şeklinde referans ile de gösterebiliriz. Linux'ta . bulunulan klasör ya da working directory 'yi belirtir.

Yine filmler klasörü içindeyiz. Bu defa bir yerine iki nokta kullanır isek yani ../ şeklinde gösterir isek bu da bulunulan klasörün bir üst klasörünü simgeler. Bu durumda bir üst klasör /depom klasörüdür. Yani filmler klasörü içinde ../ yazmak açık olarak /home/izleogrenkodla/depom yazmakla aynı şeydir. Eğer
../resimler yazarsanız bu da tahmin edebileceğiniz gibi /home/izleogrenkodla/depom/resimler ile aynı adresi belirtir. İşte bulunduğumuz klasöre göre başka klasörleri bu ./ ve ../ şeklinde göstermeye Relative Path ya da referans adres gösterimi denir. Bu husus aşağıda örneklerle incelendiğinde daha iyi anlaşılacaktır.

echo

Bir vadiye gidip bağırarak bir şey söylerseniz, size sesiniz geri döner ve yankı yaptı dersiniz ya da eko yaptı dersiniz. Zaten ingilizce de echo yankı anlamına gelir.

Linux komutu olarak da echo benzer şekilde davranır ve ekrana bir metin yazdırmak için kullanılır. echo komutundan sonra bir iki kelime yazıp enter tuşuna basarsanız, kelimelerin ekranınıza yazdırıldığını görürsünüz.

myPc:~$ echo Merhaba!
Merhaba!

echo komutu genelde bir çevresel değişkeni (environmental variable) ekrana yazdırmak için kullanılır. Environmental variable konusuna daha sonra değineceğiz.

echo komutu ayrıca komut satırı kodlama (bash script) içinde bir ifadeyi yazdırmak için de kullanılır.

pwd

pwd komutu "print working directory" (yazdır geçerli klasör) kelimelerinin baş harflerinden oluşmuştur ve o anda bulunduğunuz klasörün tam adresini verir.

myPc:~$ pwd
/home/izleogrenkodla

ls

list kelimesi liste yada listelemek anlamlarına sahiptir. Linux komutu olarak "list" kısaltılmış hali ile ls olarak kullanılır ve bir klasör içeriğini ekranda listelemek için kullanılır.

myPc:~$ ls
depom liste.pdf video.mp4  

Yukarıda gördüğünüz gibi home klasöründe (~) biri ".mp4" biri de ".pdf" olmak üzere iki dosya ve "depom" adında da bir klasörümüz var.

ls komutu ile kullanabileceğiniz birkaç pratik flag bilmek işinizi kolaylaştırır. örneğin ls -l, dosya ve klasörleri alt alta sıralar ve daha okunaklıdır. Ayrıca dosya izin ve boyut bilgileri de görülür.

ls -a gizli dosyalar dahil bütün dosyaları listeler.

Flagları birleştirmek de mümkündür. Örneğin ls -la hem bütün dosyaları listeler hem de tek sütun alt alta listeler.

cd

change directory (değiştir dizin) kelimelerin baş harflerinden oluşan cd komutu adından da anlaşılacağı gibi bulunulan dizini değiştirir. cd hem relative path (referans adres) hem de absolute path (açık adres) ile çalışır. Yukarıdaki /depom klasör ağacına geri dönelim diyelim ki depom dizini working directory 'miz ve resimler dizinine gitmek istiyorsak cd kullanırız. Aşağıda relative path kullandık çünkü direkt resimler yazdık. Linux bu durumda geçerli dizinin içinde resimler klasörünü arar ve böyle bir dizin varsa dizini değiştirir. Yoksa "böyle bir dosya ya da klasör yok" uyarı mesajı verir.

myPc:~/depom$ cd resimler
myPc:~/depom/resimler$

Bulunulan dizinden bir üst dizine çıkmak için cd .. kullanırız. Hatırlayın yukarıda relative path' den bahsedeerken iki noktanın .. bir üst dizin olduğunu belirtmiştik.

myPc:~/depom/resimler$ cd ..
myPc:~/depom$

İsterseniz doğrudan tam adresi yazarak başka bir dizine de gidebilirsiniz.

myPc:~/depom$ cd /home/izleogrenkodla/depom/filmler
myPc:~/depom/filmler$

mkdir

make directory (yap dizin) kelimelerinin baş harflerinden oluşan mkdir komutu dizin oluşturmak için kullanılır. Örneğin depom dizini altında projeler isimli yeni bir dizin oluşturmak istersem mkdir projeler yazmam yeterli.

myPc:~/depom$ mkdir projeler 

Eğer depom dizininde dosya ve klasörleri listelersek projeler klasörünün oluşturulduğunu göreceğiz.

myPc:~/depom$ ls -l
drwxrwxr-x 2 izleogrenkodla izleogrenkodla 4096 Sep  9 21:19 filmler
drwxrwxr-x 2 izleogrenkodla izleogrenkodla 4096 Sep  9 21:31 projeler
drwxrwxr-x 2 izleogrenkodla izleogrenkodla 4096 Sep  9 21:11 resimler

touch

touch komutu yeni bir dosya oluşturmak için kullanılır. bu komuttan hemen sonra yeni dosyanın ismi ne olacaksa o yazılır.

myPc:~/depom$ touch yenidosya.txt
myPc:~/depom$ ls
filmler projeler resimler yenidosya.txt

cat

cat bir dosya içeriğini görüntülemek için kullanılır. Yukarıda yeni oluşturduğumuz yenidosya.txt dosyasını cat ile görüntülersek boş bir ekran elde ederiz. Çünkü henüz içeriği boş bir dosya. Ancak içi dolu bir dosyada cat komutu içeriği ekranda gösterecektir.

myPc:~/depom$ cat siir.txt
Ne içindeyim zamanın,

Ne de büsbütün dışında;

Yekpare, geniş bir anın

Parçalanmaz akışında.

> ve >>

> ve >> bir dosya içeriğini değiştirmek için kullanılır. Bu iki işaretten önce bir komut çalıştırılır ve komutun çıktısı bir dosya içeriğine kaydedilebilir. Örneğin echo komutu ile bir ifade yazdırılır ve bu ifade bir dosya içerisine kaydedilebilir. > her seferinde dosya içeriğini siler ve baştan yazar (overwrite). >> işareti ise doya içeriğini korur ve yeni verilen içeriği dosya sonuna ekler (edit).

myPc:~/depom$ echo "Nasılsın?" > yenidosya.txt
myPc:~/depom$ cat yenidosya.txt
Nasılsın?

myPc:~/depom$ echo "Merhaba Dünya!" > yenidosya.txt
myPc:~/depom$ cat yenidosya.txt
Merhaba Dünya!

Gördüğünüz gibi > işareti içeriği her seferinde sildi ve yeniden yazdı. Şu anda dosya içeriği "Merhaba Dünya!" Eğer bu içeriği tutarak sonuna bir şey eklemek ister isek >> işaretini kullanırız.

myPc:~/depom$ echo "Beni hatırla!" >> yenidosya.txt
myPc:~/depom$ cat yenidosya.txt
Merhaba Dünya!
Beni hatırla!

mv

ingilizce move (hareket et, ettir) kelimesinin kısa hali olan mv komutu dizin ve dosyaları kaynak (source) adresten hedef (target) adrese hareket ettirmek için kullanılır. Kullanımı mv <source> <target> şeklindedir. Aşağıdaki örnekleri inceleyelim.

# önce backups adında yeni dizin oluştur
myPc:~/depom$ mkdir backups
# projeler klasörünü backups klasörü altına taşı
myPc:~/depom$ mv projeler /backups/

# yenidosya.txt dosyasını filmler klasörü altına taşı.
myPc:~/depom$ mv yenidosya.txt filmler/

mv komutunu kes yapıştır gibi düşünebilirsiniz. Kaynaktaki dosya ve klasörleri kesip hedefe yapıştırır ya da taşır. Eğer aynı dizin içinde bir dosyayı yine aynı dizin içinde başka bir isimle taşırsak, mv komutu varolan dosyayı keser ve yeni isimle yapıştırır. Aslında bu dosyayı yeniden adlandırır (rename). Yani mv komutunu dosyaları yeniden adlandırmak için kullanabiliriz.

# geçerli klasörü filmler klasörü olarak değiştir.
myPc:~/depom$ cd filmler

# yenidosya.txt dosyası ismini değiştir.
myPc:~/depom/filmler$ mv yenidosya.txt benimdosyam.txt

cp

cp komutunun kullanımı mv komutuna çok benzer. cp adından da anlaşılacağı gibi dizin ve dosyaları kaynak adresten hedef adrese kopyalar. cp kaynak ve hedef olmak üzere iki parametre alır ve cp [flag] <kaynak hedef> şeklinde kullanılır. Flag' lar daha önce belirttiğim gibi değişik opsiyonlardır. Örneklerle birkaç senaryoyu inceleyelim.

  • Aynı dizin içinde bir dosyayı kopyalamak
# cicek.jpg dosyasını kopyala ve aynı dizine başka isimle yapıştır.
myPc:~/depom/resimler$ cp cicek.jpg cicek_copy.jpg
  • Dosyayı başka bir dizine kopyalamak
# Relative path ile dosyayı filmler dizinine kopyalamak
myPc:~/depom/resimler$ cp cickek.jpg ../filmler

# Absolute path ile dosyayı kopyalamak
myPc:~/depom$ cp resimler/cickek.jpg /home/izleogrenkodla/depom/backups
  • Bir dizini başka bir dizine kopyalamak
# filmler klasörü ve tüm içeriğini kopyala
myPc:~/depom$ cp -R filmler filmler_copy

Yukarıdaki komut, depom dizini altında filmler_copy adlı yeni bir dizin oluşturur ardından filmler dizini içindeki tüm alt dizin ve dosyaları filmler_copy dizinine kopyalar.-R ya da -r opsiyonu recursive yani iç içe tüm klasör ve dosyalar demektir.

rm

rm ya da remove dizin ve dosyaları silmek için kullanılır. UYARI! tehlikeli bir komuttur ve dikkatli kullanılması gerekir. Önce depom klasörü altında beni_sil.txt isimli bir dosya oluşturalım. Daha sonra da o dosyayı silelim.

myPc:~/depom$ touch beni_sil.txt
myPc:~/depom$ ls


myPc:~/depom$ rm beni_sil.txt

rm komutu ile "*" wildcards' ı (joker karakterler) sıklıkla kullanılır. Örneğin depom klasörü içinde sonu .pdf ile biten tüm dosyaları silmek için aşağıdaki komutu kullanırız.

myPc:~/depom$ rm *.pdf

rm komutu dizinleri silmek için de kullanılır. Bu durumda -R ya da -r flag' ı kullanmak gerekir.

# backups dizinini ve tüm içeriğini sil.
myPc:~/depom$ rm -R backups

grep

Bir metin ya da bir komut sonucu içerisinde arama veya filtreleme yapmak için grep kullanılır. grep komutundan sonra aranmak isteden ifade belirtilir ve grep eşleşen tüm ifadeleri geri döndürür.

# siir.txt dosyası içerisinde "ma" kelimesini arama
myPc:~/depom$ grep ma siir.txt
Ne içindeyim zamanın,
Parçalanmaz akışında.

Yukarıda da görüldüğü gibi ilk satırdaki zamanın ve ikinci satırdaki Parçalanmaz kelimeleri "ma" kelimesini barındırdığı için grep komutu ile görüntülendi.

man

manual (kullanım klavuzu) kelimesine atıfta bulunan man komutu kendisinden sonra yazılacak komutun nasıl kullanıldığını gösterir. Ancak man çok detaylı ve uzun bir liste verebilir. Aşağıda komuttan sonra muhtemel elde edeceğiniz çıktının ilk birkaç satırı verilmiştir.

myPc:~/depom$ man ls
LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List information about the FILEs (the current directory by default).  Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

       Mandatory arguments to long options are mandatory for short options too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..

       --author
              with -l, print the author of each file

       . . .

history

history daha önce kullandığımız komutların listesini satır numaraları ile birlikte verir. Listedeki bir komutu yeniden kullanmak istediğinizde ünlem işareti ve satır numarasını yazmanız yeterlidir.

myPc:~/depom$ history
  640  echo "Beni Hatırla" >> yenidosya.txt
  641  cat yenidosya.txt
  642  ls
  643  mv yenidosya.txt resimler/
  644  cd depom
  645  copy -R * backups

myPc:~/depom$ !642
ls
filmler  filmler_copy  resimler  siir_copy.txt  siir.txt

Bir bakışta tablosu

Komut Açıklama
echo ekrana yazdır
pwd bulunulan dizini göster
ls klasör ve dosyaları listele
cd bulunulan dizini değiştir
mkdir yeni dizin oluştur
touch yeni boş dosya oluştur
cat dosa içeriğini ekrana yazdır
> >> bir komut sonucunu dosyaya yaz yada ekle
mv dizin veya dosyaları kaynaktan hedefe taşı
cp dizin veya dosyaları kaynaktan hedefe kopyala
rm dizin veya dosyaları sil
grep bir metin içerisnde belirtilen ifadeden eşleşenleri bul
man bir komut hakkında klavuz bilgi ver
history komut geçmişini listele