top of page

Temel bash Kabuk Komutları-5

  • Yazarın fotoğrafı: Huseyin Şahan
    Huseyin Şahan
  • 9 Mar
  • 8 dakikada okunur

Bu blog yazımızda linux terminalde nasıl dosyalarla çalışabileceğinizi göstereceğiz. Yani dosya görüntüleme, dosya filtreleme veya dosya sıkıştırma gibi işlemleri nasıl yapabileceğiniz hakkında komutları ve bu komutların ne anlama geldiğini detaylıca tartışacağız.


Kelime Sıralama


Büyük miktarlarda verileri bazen sıralamak isteyebilirsiniz. Bunun nedenleri arasında belki aradığınızı daha kolay bulmak veya sıralanmış çıktıyı başka bir dosyaya kopyalamak olabilir. Bunun için kullanacağınız basit bir komut var. sort komutu bu gibi durumlar için size avantaj sağlar. Bu komutun nasıl çalıştığını anlamanız için ilk olarak dosyamı cat komutu ile kullanacağım ve çıktıyı size göstereceğim. Ancak aşağıda gösterdiğim gibi bir dosya hazırlayın. Bir metin editörü veya nano gibi basit bir terminal editörü ile işte örnek dosyamız:


ree



















Ben burada nano editör ile bir dosya yazdım. Şimdi bunu cat komutunu kullanarak gösterelim. Aşağıdaki komutu girerek çıktıyı görüntüleyebilirsiniz:

👉 darkside@debian:~$ cat sortdosyasi

Burada çıktı dosyada yazdığımız gibi terminale basılmış oldu.İşte çıktımız:


ree

Olduğu gibi terminalde ancak şimdi sort komutu ile sıralama yapacağım. sort komutunu burada parametresiz kullanacağım. Eğer sort komutunu parametresiz kullanırsanız ve eğer benim yazdığım gibi hepsi kelime ise alfabede a'dan z'ye doğru sıralayacaktır. İşte şu komutu terminalinizde girin:

👉 darkside@debian:~$ sort sortdosyasi

İşte komutumuzun çıktısı. Şimdi bu komutun çıktısını cat komutunun çıktısı ile karşılaştırın.


ree

İşte parametresiz kullanımdan a'dan z'ye doğru sıralanmış hali.


Sayıların Sıralanması

Ancak her zaman dosyanızda bir kelime bulunmayabilir veya kelime ve sayılar karışık bulunabilir. Şimdi bu durumları da ele alalım. Öncelikle eğer dosyanızda sadece sayılar varsa sort komutu nasıl davranır ve hangi parametreyi kullanmanız gereklidir bunları ele alalım.

Yine bir dosya hazırlayın işte benim dosya içeriğim bu olacaktır. Sadece var olan dosyayı düzenleyip içerisine bu sayıları yazabilirsiniz:


ree

Buradaki gibi bir dosya oluşturduğunuzu varsayıyorum işte parametreli bir sort komutu -n parametresini kullanarak sayıları sıralayabilirsiniz.Eğer -n parametresi olmazsa nasıl bir çıktı bizi bekliyor buna da bakacağız.

👉 darkside@debian:~$ sort -n sortdosyasi

Bu parametre sayıları sıralamanız için gerekli bir parametre olacaktır.İşte bu parametre kullanımımız sonucunda sonucu doğru bir şekilde alıyoruz.


ree

Bahsettiğimiz gibi eğer bu parametreyi kullanmazsanız işte çıktı bunun gibi olacaktır:


ree

Burada neden bu şekilde olduğunu sorgulayalım. Bunun nedeni varsayılan sort komutunun string olarak değerleri ele almasıdır. Yani burada 1 değerini string olarak ele alır ve bunun en önce olduğunu görür ve bunların sayı olduğunu anlamadığından buna benzer bir dizilim sağlar. Örneğin 100 ve 12 aslında şu şekilde sıralanır. Birinci karakterler aynı diye düşünür sonra ikinci karaktere bakar ve 12 için 2 ve 100 için 0 değerini görür ve 0 2'den önce geleceğinden dolayı bu şekilde sıralama yapar .Eğer -n parametresi olursa bunlar sayı olarak ele alınır ve sıkıntı olmaz.


Kelime-Sayı Karışık

Tamam şimdi karışık bir örnek üzerinden ele alalım ve size neyin neden olduğunu açıklayayım. İşte şuna benzer bir dosya oluşturun:


ree

Burada karışık bir örnek dosyası gördük.Şimdi sort komutunu kullanarak bir sıralama yapalım ve çıktının neden ve nasıl olduğuna bakalım:

👉 darkside@debian:~$ sort sortdosyasi

Burada aslında değerleri metin olarak değerlendirecek ve sayısal ifadeler harflerden önce gelecektir. Bunun nedeni rakamların ASCII kodları 48-57 arasında, büyük harflerin kodları 65-90 arasında ve küçük harflerin kodları 97'den başlıyor.İşte incelemeniz için bir wiki sayfası burada ASCII karakter tablosunda neden olduğunu inceleyebilirsiniz.


Peki -n komutu ile sıralamayı denesek o zaman neler dönüyor? İşte bunu da deneyelim ve komutumuzun çıktısına bakalım.

darkside@debian:~$ sort -n sortdosyasi

Burada çıktı bu şekilde olacaktır:


ree

Aslında burada kelimeler hiçbir şekilde sıralanmadı. Ancak burada şöyle bir şey oldu kelimeler en başta olsalar veya en sondada olsalar dosya içindeki sayılar alınır sıralanır ve kelimelerin altına atılır. Örneğin ben kelimeleri ve sayıları dağınık halde vereceğim. Örneğin şu dosya üzerinde deneyelim.


ree

Burada yine -n parametresi ile çalıştıralım sort komutunu ve işte çıktı:


ree

Evet geçekten dosya içinden sayıları çekip sıralıyor ve kelimelerin en altına atıyor ve doğal olarak sayılar aralardan çekildiği için kelimeler en üstte kalıyor.


Tarihe Göre Sıralama 📆


Ancak bazen sadece kelime veya sayı değil belki tarih adlarını örneğin ay adlarını sıralamak isteyebilirsiniz.Bu sıralama tarihe göre olacaktır. Yani -M parametresi ile tarih ile sıralayabilirsiniz. İşte bir dosya oluşturun ve şu komutu girin:


ree

Burada düzensiz bir ay listesi yazdık ve şu komutu girerek bunu düzenleyebiliriz:

darkside@debian:~$ sort -M sortdosyasi

Burada sıralamayı tarihe göre yapacak ve size sıralanmış bir ay listesi verecektir.İşte çıktımız:


ree

Parametre Listesi 📜


İşte bütün sort komutları parametresi. Buradan bakarak istediğiniz işlemi yapabilirsiniz.Biz burada sadece işinize her zaman yarayacak komutları vereceğiz.


  • -b, --ignore-leading-blanks → Başındaki boşlukları yoksayar.

  • -C, --check=quiet → Sıralama yapmaz, ancak veri sıralı değilse hata vermez.

  • -c, --check → Sıralama yapmaz, verinin zaten sıralı olup olmadığını kontrol eder ve sıralı değilse bildirir.

  • -d, --dictionary-order → Yalnızca boşlukları ve alfasayısal karakterleri dikkate alır, özel karakterleri yoksayar.

  • -f, --ignore-case → Büyük/küçük harf farkını dikkate almaz. Varsayılan olarak büyük harfleri önce sıralar.

  • -g, --general-numeric-sort → Genel sayısal değere göre sıralar.

  • -i, --ignore-nonprinting → Yazdırılamayan karakterleri yoksayar.

  • -k, --key=POS1[,POS2] → Belirtilen pozisyondan (POS1) başlayarak (POS2'ye kadar) sıralama yapar.

  • -M, --month-sort → Üç harfli ay adlarına (Jan, Feb, Mar vb.) göre sıralama yapar.

  • -m, --merge → Daha önceden sıralanmış iki dosyayı birleştirir.

  • -n, --numeric-sort → Sayısal değere göre sıralama yapar.

  • -o, --output=FILE → Çıktıyı belirtilen dosyaya (FILE) yazar.

  • -R, --random-sort → Rastgele sıralama yapar.

  • --random-source=FILE → -R seçeneği için rastgele baytları alacağı dosyayı belirtir.

  • -r, --reverse → Sıralamayı tersine çevirir (azalan sırayla).

  • -S, --buffer-size=SIZE → Kullanılacak bellek miktarını belirtir.

  • -s, --stable → Son çare karşılaştırmasını devre dışı bırakır.

  • -T, --temporary-directory=DIR → Geçici dosyaların depolanacağı dizini belirtir.

  • -t, --field-separator=SEP → Alan ayırıcı karakteri (SEP) olarak belirler.

  • -u, --unique → -c ile kullanılırsa sıkı sıralamayı kontrol eder, tek başına kullanıldığında yinelenen satırların sadece ilkini gösterir.

  • -z, --zero-terminated → Satırları yeni satır yerine NULL karakteri (\0) ile sonlandırır.


İşe Yarar Komut 💪


Bazen /etc/passwd gibi dosyalarda sort komutunu kullanmak çok faydalıdır. İşinize her zaman yarayabilecek bir komut vereceğiz. İşte şu komutu terminalinize girin:

👉 darkside@debian:~$ sort -t ":" -k 3 -n /etc/passwd

Peki bu komutun çıktısı nedir ?


ree

Peki burada ne yaptık? Yukarıdaki verdiğimiz parametre listesine de bakarak -t parametresi ile bir ayırıcı belirledik.Burada ayırıcı ":" olacaktır.Bu parametreyi görüdikten sonra şu şekilde değerler bölünecektir:

1. root (kullanıcı adı)
2. x (şifre bilgisi)
3. 0 (UID - Kullanıcı ID'si)
4. 0 (GID - Grup ID'si)
5. root (Kullanıcı açıklaması)
6. /root (Ana dizin)
7. /bin/bash (Kabuk)

Daha sonra -k parametresi ile sıralamanın nereye göre yapılacağını belirledik. Burada sıralama UID değerine göre yapılacaktır. Burada UID değerleri sayısal değerler olduğundan -n parametresini kullanmamız gerekir.


Belki bazen dosya boyutlarını sıralamak isteyebilirsiniz.İşte sizin için işe yarar bir komut daha:

👉 darkside@debian:~$ du -sh * | sort -nr

du -sh * → Tüm dosya ve dizinlerin boyutlarını hesaplar.

  • du (disk usage): Diskte kapladıkları alanı gösterir.

  • -s (summary): Sadece dosya/dizinlerin toplam boyutunu gösterir.

  • -h (human-readable): Okunabilir bir formatta (kB, MB, GB gibi) gösterir.

  • * (joker karakteri): Mevcut dizindeki tüm dosya ve dizinleri kapsar.


sort -nr → Dosya boyutunu sayısal olarak ters sıralar yani büyükten küçüğe doğru sıralar. Varsayılanda küçükten büyüğe sıralama vardır.

  • -n sayısal olarak ele alacak.

  • -r reverse (Ters) olarak sıralar.


İşte komutumun çıktısı buna benzer şekilde olacaktır:


ree

Bu komutların işe yarayabileceğini düşünüyoruz.İstediiniz zaman ve gerekli olduğu zaman kullanın.


Grep Komutu

Büyük bir dosya ile çalıştığınızı düşünün ve bu dosya içinde istediğiniz bir değer veya ifade arıyorsunuz. Bunun için grep adı verilen bir komut kullanabilirsiniz.Grep komutu ile basit bir örnek.Bunun için bir Lorem metni hazırladım:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi. Fusce vel ligula at nunc ullamcorper interdum. Sed feugiat, risus ut pellentesque bibendum, odio sem congue metus, at scelerisque nulla quam in orci. Proin vulputate, mauris vel volutpat vestibulum, elit orci laoreet nulla, nec facilisis libero erat nec justo.  

Curabitur dapibus, metus eget convallis facilisis, justo nunc faucibus justo, ut feugiat orci nisl nec eros. Integer id tellus vel ex sagittis tincidunt. Aliquam erat volutpat. Morbi a mi non nisl fermentum auctor.

Komutumuzu girrelim:

👉 darkside@debian:~$ grep Lorem grepdosyasi

İlk olarak grep komutunu yazın arkasına arayacağınız ifadeyi yazın.Burada Lorem benim arayacağım ifade olacaktır. Daha sonra arayacağım dosya ismini gireceğim.Burada grepdosyasi benim dosya adım olacaktır.İşte komut çıktım:


ree

Ancak burada arayacağım kelimeyi tam anlamıyla yazmam gerekli eğer komutu şu şekilde girersem:

👉 darkside@debian:~$ grep lorem grepdosyasi

Herhangi bir çıktı vermeyecektir.Bunun nedeni grep komutunun varsayılan olarak büyük-küçük harfe duyarlı olmasıdır.İlk olarak çıktımıza bakalım:


ree

Bu durumu aşmak için şu parametreyi kullanabilirsiniz:

👉 darkside@debian:~$ grep -i lorem grepdosyasi

-i parametresi büyük küçük harf duyarlılığını kaldıracak ve çıktıyı size verecektir.

Kullanabilmeniz için işte diğer komutlar:


Eğer birden fazla kelime ile arama yapmak isterseniz:

👉 darkside@debian:~$ grep -i -E  "Lorem|İpsum" grepdosyasi

Bu komut -E parametresi ile birden fazla kelime aramanıza olanak sağlar. "|" burada ayraç olarak kullanıldı.İşte başka bir komut:

👉 darkside@debian:~$ grep -i -w "lorem" grepdosyasi

"lorem" kelimesini tam olarak eşleştirir, "loremazazdf" gibi kelimeleri eşleştirmez.


Grep Parametre Listesi

İşte grep komutunun tüm parametreleri:


  • -i Büyük/küçük harf duyarlılığını kaldırır.

  • -v Eşleşmeyen satırları gösterir (tersine arama).

  • -w Tam kelime eşleşmesi yapar.

  • -x Satırın tamamıyla eşleşenleri gösterir.

  • -o Sadece eşleşen kelimeyi/sözcüğü gösterir.

  • -E Genişletilmiş regex kullanır (egrep ile aynıdır).

  • -P Perl tarzı regex kullanır (tüm sistemlerde çalışmayabilir).

  • -F Normal metin olarak arar, regex kullanmaz (fgrep ile aynıdır).

  • -c Kaç satır eşleştiğini gösterir, içeriği göstermez.

  • -n Eşleşen satırların satır numaralarını da gösterir.

  • -l İçinde eşleşme olan dosya isimlerini listeler.

  • -L İçinde eşleşme olmayan dosya isimlerini listeler.

  • -q Sessiz mod, sadece başarılı olup olmadığını döndürür (çıktı vermez).

  • -m N En fazla N adet eşleşme bulunca durur.

  • -r Alt dizinleri de tarayarak arama yapar.

  • -R Alt dizinleri de tarayarak arama yapar.

  • --exclude=PATTERN Belirtilen dosya veya dizinleri hariç tutar.

  • --include=PATTERN Sadece belirli dosya türlerinde arama yapar.

  • --exclude-dir=DIR Belirli dizinleri taramadan hariç tutar.

  • --color=auto Eşleşmeleri renkli gösterir (çoğu terminalde varsayılan).

  • -B N Eşleşmeden önce gelen N satırı da gösterir.

  • -A N Eşleşmeden sonra gelen N satırı da gösterir.

  • -C N Hem öncesindeki hem de sonrasındaki N satırı gösterir.



Verileri Sıkıştırma

Birçoğumuz daha önce dosya sıkıştırmış veya sıkıştırılmış dosyaları açmışızdır. Burada sıkıştırılmış dosya türlerini verip içinden sadece gzip ile uygulama yapabileceğiz. Genellikle linux sistemlerde daha yaygın bir sıkıştırılmış dosya türüdür.

Araç

Dosya Uzantısı

Açıklama

bzip2

.bz2

Burrows-Wheeler blok sıralama metodu ve Huffman kodlama algoritmasını kullanır.

compress

.Z

Orijinal Unix dosya sıkıştırma aracıdır, ancak günümüzde pek kullanılmaz.

gzip

.gz

GNU Projesi'nin sıkıştırma aracıdır; Lempel-Ziv kodlamasını kullanır.

zip

.zip

Windows'taki PKZIP programının Unix versiyonudur.

compress: compress aracı, Linux sistemlerinde genellikle bulunmaz. .Z uzantılı bir dosya indirdiğinizde, genellikle compress paketini (birçok Linux dağıtımında ncompress olarak adlandırılır) yükleyip, uncompress komutunu kullanarak dosyayı açabilirsiniz.


gzip Linux'ta en popüler sıkıştırma aracıdır. Verimliliği ve kolay kullanımı nedeniyle yaygın olarak tercih edilir.Biz burada gzip dosyalarını nasıl açacağınızı ve nasıl sıkıştırma yapabileceğinizi göstereceğiz.


1. Dosya Sıkıştırma:

Bir dosyayı sıkıştırmak için gzip komutunu kullanabilirsiniz. Örneğin, dosya.txt dosyasını sıkıştırmak için şu komutu yazabilirsiniz:

👉 darkside@debian:~$ gzip new.txt

Bu komut, dosya.txt dosyasını sıkıştırarak dosya.txt.gz adlı yeni bir dosya oluşturur. Orijinal dosya (dosya.txt) sıkıştırıldıktan sonra silinir.


2. Sıkıştırılmış Dosyayı Açma:

Bir .gz dosyasını açmak için gzip komutunun -d (decompress) seçeneğini kullanabilirsiniz:

👉 darkside@debian:~$ gzip -d new.txt.gz

Bu komut, dosya.txt.gz dosyasını açar ve orijinal dosya.txt dosyasını geri getirir.

Sıkıştırılmış dosya (dosya.txt.gz) açıldıktan sonra silinir.

Alternatif olarak, gunzip komutunu da kullanabilirsiniz; bu, gzip -d ile aynı işlemi yapar:

👉 darkside@debian:~$ gunzip new.txt.gz
3. Sıkıştırmadan Sonra Dosyayı Saklama:

Eğer sıkıştırılan dosyanın orijinalini korumak istiyorsanız, -k (keep) seçeneğini kullanabilirsiniz:

👉 darkside@debian:~$ gzip -k new.txt

Bu komut, dosya.txt dosyasını sıkıştırarak dosya.txt.gz dosyasını oluşturur ve orijinal dosyayı (dosya.txt) korur.


4. Birden Fazla Dosya Sıkıştırma:

Birden fazla dosyayı aynı anda sıkıştırmak için dosyaların adlarını aralarına boşluk koyarak yazabilirsiniz:

👉 darkside@debian:~$ gzip new1 new2

Bu komut, üç dosyayı (dosya1.txt, dosya2.txt, dosya3.txt) sırasıyla sıkıştırarak her birine .gz uzantısını ekler.


5. Sıkıştırma Oranını Belirleme:

Sıkıştırma oranını -# (0-9 arasında bir değer) ile belirleyebilirsiniz. Burada 1, hızlı sıkıştırma, 9 ise en yüksek sıkıştırma oranını ifade eder. Örneğin:

👉 darkside@debian:~$ gzip -9 new.txt

Bu, dosyayı en yüksek sıkıştırma oranı ile sıkıştırır.


6. Sıkıştırma Durumunu Görüntüleme:

Sıkıştırma işleminden sonra dosyanın boyutunu görmek için -l seçeneğini kullanabilirsiniz:

👉 darkside@debian:~$ gzip -l new.txt.gz

Bu, sıkıştırılmış dosyanın orijinal boyutunu ve sıkıştırılmış boyutunu gösterir.

Bu komutlar, gzip aracının temel kullanımı ile ilgili önemli işlevleri kapsar. Sıkıştırma işlemi genellikle büyük dosyaları taşımak veya depolamak için kullanılır ve gzip oldukça verimli bir araçtır.


Dosya Arşivleme


tar komutu, Linux ve Unix sistemlerinde kullanılan bir dosya arşivleme aracıdır. tar, birden fazla dosyayı veya dizini tek bir arşiv dosyasında toplamak için kullanılır. Ayrıca, arşivlenen dosyaları sıkıştırmak, çıkartmak ve taşımak için de kullanılır.Şimdi birkaç önemli komutu ve parametreleri ele alacağız:


Dosya ve Dizin Arşivleme(sıkıştırma Olmadan)

Dosyaları tar ile arşivlemek için:

👉 darkside@debian:~$ tar -cvf tararsiv.tar tar1file tar2file tar3file
  • -c: Arşiv oluşturma (create).

  • -v: Arşivleme sırasında ayrıntılı bilgi göster (verbose).

  • -f: Çıktı dosyasını belirtir (bu durumda tararsiv.tar).


Arşiv Dosyasını Çıkartma

Dosyayı tar arşivinden çıkarmak için:

👉 darkside@debian:~$ tar -xvf tararsiv.tar

Arşiv Dosyasını Sıkıştırarak Oluşturma

Tar arşivini gzip kullanarak sıkıştırmak istiyorsanız:

👉 darkside@debian:~$ tar -czvf tararsiv.tar.gz tar1file tar2file tar3file

-z: gzip sıkıştırmasını kullanma.


Eğer sıkıştırdığınız dosyayı açmak istiyorsanız:

👉 darkside@debian:~$ tar -xzvf tararsiv.tar.gz

olarak komutları kullanabilirsiniz.


Bu blog yazımızda sort komutu dosyadaki verileri nasıl sıralayacağınızı, grep komutu ile nasıl verileri arayacağınızı, gzip komutu ile nasıl dosyaları sıkıştıracağınızı ve tar komutu ile nasıl arşiv oluşturacağımızı öğrendik.


Sonraki blog yazılarımızda görüşmek üzere...

Comments


bottom of page