Linux Dersleri #9 Dosya İşlemleri

'pump

Uzman üye
9 Ara 2022
1,444
3,170
Ağ Kablolarında Geziyor
NOT:
50K KAREKTER SINIRLANMASI OLDUĞUNDAN BAZI DİZİN PAKETLERİNİ YAZMADIM..
logo.png

Dosya İşlemleri

Konumuz itibari ile dosyalarla epeyce haşır neşir olacağız. Yapacağımız işlemleri kısaca tanımlamak gerekirse; dosya kopyalama, taşıma, değiştirme, görüntüleme, düzenleme gibi işlemelerle dosyalar üzerinde hakimiyet kuracağız.

TOUCH

touch komutu bize kolaylıkla metin dosyası oluşturma imkanı tanıyor. İşte bu yüzden dosya işlemleri konumuza touch komutu ile başlamak gayet doğru bir karar olacaktır.

Kendimize touch komutunu kullanarak boş bir dosya oluşturmak için komut satırına touch dosya_ismi şeklinde yazmamız gerekiyor. Burada fark ettiyseniz herhangi bir uzantı girmeme gerek kalmadı.
Çünkü Linux sisteminde uzantı belirtme zorunluluğu bulunmuyor. Bu durumu gözlemlemek için konsola touch yeni komutunu vererek "yeni" adından bir dosya oluşturalım.

enter image description here

Görüldüğü üzere dosyamız bulunduğumuz ana dizinde oluşmuş oldu. Bunu teyit etmek için de çıktıda görüldüğü gibi daha önce öğrenmiş olduğumuz listeleme görevinde olan ls komutunu kullandık.

Peki bir tane değil de birden fazla dosya oluşturmak istersek ? İşte bunun için de komutumuzu touch yeni1 yeni2 yeni3 şeklinde yazmamız yeterli.

enter image description here

Çıktıda görüldüğü gibi aynı andan 3 dosya oluşturmayı başardık.

Aslında touch komutunun çok farklı kullanım yöntemleri de mevcut ancak ben son olarak dosyaların tarih etiketlerini nasıl değiştirebiliriz bunu göstermek istiyorum.

Dosyamızın tarih etiketini düzenlemek için touch komutunun t parametresini kullanacağız. Kullanımı ise touch
-t YYYYAAGGSSDD.SS dosya_adı şeklindedir. Öncelikle dosyamızın mevcut tarih etiketine bakalım.
enter image description here

Şimdi dosyamızın tarih etiketini daha önceki bir tarihe çevirelim. Ben burada örnek olması açısından tarih olarak
2015.01.01 ve saat 22:15:32 zamanlamasını kullanıyorum. Nasıl kullanıldığını daha net anlamak için örneği inceleyebilirsiniz.

enter image description here

Gördüğünüz gibi dosyamın tarih etiketi değişmiş oldu. Bu değişme işlemini ileri veya geri tüm tarihler için kullanabilirsiniz.

CAT

cat komutu temelde dosya içeriğini terminal ekranından okumamıza olanak sağlayan komuttur. Ancak bu komut bizlere temel işlevinin dışında da dosyalar ile ilgili pek çok işlem yapma imkanı sağlıyor. Sırasıyla bunların bazılarına göz atacağız. Ama ilk olarak temel işlevi olan terminal üzerinden dosya okuma işlevini görelim.

Bunun için konsola açmak istediğimiz dosyanın konumundayken
cat açılacak_dosya şeklinde komut vermemiz gerek. Ben masaüstü konumunda yer alan "test.txt" isimli dosyanın içeriğini okumak üzere konsola cat test.txt komutunu veriyorum.(Dosyayı grafik arayüzü aracılığı ile de açarak durumu kıyaslamanızı istedim.)

enter image description here enter image description here

Şimdi ise tıpkı touch komutunda çoklu dosyalar ile ilgili işlem yaptığımız gibi cat komutu ile de çoklu dosya okuma işlemini gerçekleştirelim. Çoklu dosya okuma işlemi için komut satırına
cat dosya1 dosya2 dosya3 şeklinde okumak istediğimiz dosyaların adlarını yazıyoruz.

enter image description here

Dosya içeriğine yazı eklemek istersek cat > dosya_adı şeklinde komut verdiğimizde, komut satırı imleci bir alt satıra geçerek bizden yazmak istediğimiz bilgiyi bekler. Yazma işlemimiz bittikten sonra kaydederek kapatmak için
Ctrl + D tuş kombinasyonunu kullanırız. Ayrıca komutta girdiğimiz isimde bir dosya yoksa o isimde bir dosya oluşur ve girilen veriler içerisine işlenir.

enter image description here

Ancak var olan bir dosyanın adıyla bu komutu kullandıysanız ve dosya içerisinde yazı bulunuyorsa bu işlemin ardından dosyada bulunan eski veriler silinerek yalnızca girilen yeni veriler dosyaya işlenip kayıt oluyor.

enter image description here

Bizler eğer önceki veriler silinmesin ve üzerine yeni veri ekleyebilelim istersek, komutumuzu
cat >> yeni3.txt şeklinde kullanarak; yeni gireceğimiz verileri girdikten sonra Ctrl + D tuş kombinasyonu ile dosyamızı yeni eklenmiş verileriyle birlikte kaydedip kapatabiliriz.

enter image description here

Gördüğünüz gibi yeni eklediğimiz veri dosyamızın içine işlenmiş oldu üstelik eski veriler de yok olmadan.


Ayrıca yeri gelmişken kullanmış olduğumuz > yönlendirme operatörü ile ilgili bir örnek daha yapalım ki kullanım alanının biraz daha farkına varmış olalım. Örneğin ls -ls çıktısının içeriğini "liste" adında bir dosya oluşturarak içerisine aktaralım. Bunun için ls -ls > liste komutunu kullanabiliriz. Şayet yeni dosya oluşturmak istemiyorsak ve gireceğimiz veriler var olan dosyaya yazılsın istiyorsak o zaman > operatörü yerine >> operatörünü kullanırsak yeni veriler dosyaya eklenmiş olur.

enter image description here
Komutta açıklanacak bir durum yok zaten hepsi bildiğimiz komutlar. Burada asıl önemli olan > operatörünün kullanımıydı.
Eğer anladıysak ne âlâ.. devam edelim.

cat komutunun işlevlerine devam ediyoruz; şimdi ise sırada, bir dosyada yer alan verileri başka bir dosyaya kopyalamak var. Bunun için komutumuzu cat veri_alınan_dosya > veri_alan_dosya şeklinde kullanıyoruz.

enter image description here

Komutumuzun kullanım şekilleri elbette bunlar ile sınırlı değil. Belki defalarca söyledim ancak bu komut için de söylemem gerek;
daha fazla detay için lütfen man kılavuz sayfasına göz atın.

ECHO

Bu komutumuzu daha önce defaatle kullanmak durumunda kalmıştık hatırlarsanız. Kullandıkça da işlevinden bahsetmiştik ancak şimdi komutumuzu ele alarak biraz daha yakından bakmaya başlıyoruz.

Temel işlevi terminal ekranına istenilen bilgileri çıktı olarak göndermektir. Komutumuzu kullanırsak daha net anlaşılacaktır. Örneğin komut satırına
"Merhabalar" yazdırmak isteyelim, bunun için komut satırına echo Merhabalar şeklinde komutumuzu girmemiz yeterli.

enter image description here

"Merhabalar" çıktımızı almış olduk. echo komutu sadece ekrana basma işlevine sahip değil. Örneğin bir dosya oluşturup içerisine istediğimiz ifadeyi yazabiliriz. Bunun için komut satırına echo
"yazılacak_ifade"> dosya_adı şeklinde komutu giriyoruz.

enter image description here

Sırasıyla yaptığım işlemleri açıklayayım.

İlk önce cd Desktop komutu ile masaüstü konumuna geldim.


Daha sonra echo "Deneme Metni" > deneme komutunu vererek masaüstü konumuna deneme isimli bir dosya oluşturarak içerisine "Deneme Metni" ifadesini yazmış oldum.

ls komutu ile de bulunduğum konumdaki dosyaları listeleyerek içerisinde oluşturduğum
"deneme" adlı dosyanın bulunup bulunmadığını teyit ettim.

cat deneme ile de catkomutunun en temel kullanım işlevi olan içeriği ekran basma işlevini kullanarak oluşturduğum dosyanın içeriğine baktım.

Sonuç itibari ile her şey sorunsuz ilerledi ve finalde yeni oluşturmuş olduğum deneme isimli dosyanın içerisine "Deneme Metni" ifadesini yazdırmış oldum.

Ancak şöyle bir hatırlatmada bulunayım; eğer var olan bir dosyanın içeriğine yeni içerikler eklemek isterseniz daha önce de kullandığımız şekilde >> parametresini kullanın. Aksi halde dosya içeriğindeki her şey silinir ve yalnızca sizin son yazdığınız ifade kalır.


Var olan dosya içeriğine yeni bir ifade eklemek için komutu echo "Yeni ifade" >> dosya_adı şeklinde girmemiz gerek.

enter image description here

Şimdi echo komutunun ls komutu görevi gördüğü bir kullanıma değineceğiz.

Örneğin bulunduğumuz dizinde yer alan dosyaları görmek istersek komut satırına echo * şeklinde yazmamız halinde çıktı bizlere bulunduğumuz konumda yer alan dosyaları verir. Bu komut kullanımını ls komutu ile karşılaştırdığımızda daha net anlaşılacaktır.

enter image description here

* (yıldız işareti) joker karakteridir ve herhangi dosya dizin isimlerinin yerini tutar. Yani echo komutuna * karakteri eklediğimizde mevcut dizinde yer alan tüm dosya dizinler * parametresi ile kapsanacağı için ne var ne yok listeleniyor. Bu duruma örnek olması açısından bulunduğumuz dizinde yer alan dosyalarda örneğin "list" adı ile başlayanları çıktı olarak almak istersek komut satırına echo liste* şeklinde komut vermemiz yeterlidir. (İleride ele alacağımız Joker karakter/wildcard konusundan bu karakterler açıklanmıştır.)

enter image description here

Son olarak echo komutunun kullanım şekillerinden olan, bir komutun çıktılarının echo komutu ile ekrana basılması var. Ancak doğrudan echo komut şeklinde yazılan komutlar istenmeyen bir sonuç çıkaracaktır. Verdiğimiz komutun çıktılarını alma işlemini gerçekleştirebilmek için echo komutunun bu iş için kullanım özelliklerinden olan iki farklı seçenek bulunuyor. Bunlardan biri ters tırnak ' işaretini diğeri ise $(komut) parametre bütünüdür. Bunları sırayla görelim.


İlk olarak ters tırnak işaretli olan kullanımı ele alalım.

Ters tırnak işaretini oluşturmak için Türkçe klavyede AltGr + , (AltGr ile birlikte virgül tuşuna basmak gerek)tuş kombinasyonunu kullanabiliriz. Komutun kullanımını için ise istediğimiz komutu tırnak içerisinde echo komutunun yanında kullanmak üzere echo 'komut' şeklinde yazıyoruz.

Hemen bu kullanım ile ilgili bir örnek yapalım ve ls komutunun çıktılarını echo komutu yardımı ile basalım.

enter image description here

Ve ikinci yol olan $(komut) parametre bütünü; yine ls komutu için örneklendirilecek olursa, kullanımı echo $(ls) şeklinde komut parantez içine gelecek şekilde olmalıdır.

enter image description here

Sonuç itibari ile ilk echo ls komutunun çıktısı olan "ls" ifadesi bizim almak istediğimiz çıktıyı bizlere vermedi. Yani bu kullanım bizim yapmak istediğimiz iş olan, komutun çıktılarının ekrana bastırılması için doğru bir kullanım değildi. Doğru kullanım şekli ise ikinci ve üçüncü komut olan
echo 'ls', echo $(ls) şeklindedir. Bu komutların çıktısı istediğimiz şekilde, yani ls komutunun çıktısını(bulunduğumuz dizinde yer alan dosyaların bilgisi) ekrana basacak şekilde bizlere verdi. Sözü edilen durumu aşağıdaki çıktıyı inceleyerek bir bütün halinde kavrayabilirsiniz.

enter image description here

MORE

Şimdiye kadar öyle ya da böyle terminal üzerinden dosya okuma işlemi yapmamıza yardımcı olan komutlar gördük. Bu komutumuz da aynı şekilde metin dosyalarını terminal üzerinden okumamıza olanak sağlayan bir komuttur.

Örneğin daha önce de içeriğini okuyup değişiklik yapmış olduğumuz dosya olan profile dosyasının içeriğini more komutu yardımı ile okuyalım.


Bunun için /etc/profile konumunda bulunan dosyamı more komutu ile açmak üzere konsola more /etc/profile şeklinde konsola yazarak profile dosya içeriğini okumaya teşebbüs ediyorum. Komutumuzun ardından terminal ekranında karşımıza profile dosyasının içeriği aşağıdaki gibi geldi.

enter image description here

Çıktıda görüldüğü gibi dosyanın içeriği ancak terminal ekranına sığacak şekilde görüntüleniyor.
Hatta alt kısımda --More--(77%) şeklinde yazan yazı bizlere içeriğin devamı olduğunu belirtiyor. Eğer devamını okumak istersek enter tuşuna basarak adım adım alt satırlara bakabiliriz. Ayrıca space tuşu ile de sayfa sayfa atlayarak içeriğe göz atabiliriz. Eğer atladığınız sayfadan bir önceki sayfaya geri dönmek istersek b(back/geri) tuşunu, şayet dosya içeriğini görüntüleyen bu ekranı kapatmak istersek ise q(quit/çıkış) tuşunu kullanmamız yeterli.

Head-Tail

Aslında komutların isimleri yani head(kafa/baş) ve tail(kuyruk) bizlere komut hakkında az çok bilgi veriyor. Şöyle ki bir dosyanın sadece baş kısmında ilk 10 satırı görüntülemek istersek head şayet son 10 satırı görüntülemek istersek ise tail komutunu kullanırız. Ayrıca bu komutlar özel parametre alarak istenildiği sayıda baştan veya sondan olmak üzere istenilen satırların görüntülenmesine olanak sağlar. Daha iyi anlamak adına hemen kullanımlarına geçelim.

Dosya içeriğinin ilk 10 satırını görüntülemek için head dosya_adı şeklinde komutumuzu kullanıyoruz.

enter image description here

Şimdi burada 10 satır içerik yok gibi gelebilir ancak dosya içerisindeki boş satırlar da bu 10 satıra dahil olduğundan çıktıyı boş satırlar ile saydığınızda tam olarak 10 satırın görüntülendiğini göreceksiniz.


Dosya içeriğinin son 10 satırını görüntülemek için tail dosya_adı şeklinde komutumuzu kullanıyoruz.

enter image description here
Şimdi istediğimiz sayıda baştan veya sondan dizinleri görüntüleyelim. Ben örnek olması açısından baştan 6 sondan 2 satırı görüntülemek üzere komutumu veriyorum. Komutun kullanımı head -n 6 ve tail -n 2 şeklinde.


Baştan 6 satırın çıktıları.

enter image description here

Sondan 2 satırın çıktıları.

enter image description here

SORT

Dosya çıktılarının alfabetik olarak düzenlenmesini sağlar. Örnek üzerinden devam edelim. Ben isimler.txt adında bir dosya oluşturdum ve içerisine karışık olarak isimler ekledim. Ve bu isimleri alfabetik sıraya dizmek için sort isimler.txt komutunu kullandım.

enter image description here

Eğer ters alfabetik şekilde yani z den a ya doğru sıralamak istersek -r parametresi kullanılır.

enter image description here

PASTE

Örneğin iki dosyanın içeriğini aynı anda yan yana olacak şekilde komut satırında listelemek istersek, bu işi yapmamızı paste komutu sağlıyor. Kullanımı paste dosya1 dosya2 şeklindedir.

Ben yaşlar.txt ve isimler.txt adlı dosyaları aynı anda yana yana görüntülemek adına komut satırına paste isimler.txt yaşlar.txt komutunu verdim.

enter image description here


Çıktıda da görüldüğü üzere terminal ekranında yazdığımız her bir satır tekrar ederek konsola basıldı ve sonuçta oluşturmuş olduğumuz "metin" isimli dosyanın içeriği de yazmış olduğumuz ifadeler ile dolmuş oldu.

CMP

Bu komut sayesinde dosyalar arasından karşılaştırma yapmamız mümkün.

Örneğin ben isimler.txt dosyasını kopyaladım ve 5. satırındaki ismi değiştirdim. Ve bu iki dosyayı cmp komutu ile kıyasladım.

enter image description here

İki dosyanın da içeriğini cat komutu ile yazdırdık görüldüğü üzere iki dosya arasındaki fark, bir dosyada mehmet ismi yerine enes isminin yer almasıdır. cmp komutunun çıktısında da bu durum farklı olan satır ve bayt bilgisi verilerek ifade edeliyor.

GREP

Bu komut en çok kullanılan terminal komutları içerisinde bulunuyor. Bu komutumuzu bizler de oldukça sık kullanıyor olacağız. Dosya ya da komut çıktısında bir ifade aramak için yani bir nevi filtreleme işlemi için grep komutunu kullanabiliriz. Komutun kullanım şekillerini örnekler ile açıklamaya devam edelim.

Eğer bir dosya içerisindeki herhangi bir kelimeyi sorgulamak istersek komutumuzu grep
"aranacak_ifade" dosya_adı şeklinde komut satırına giriyoruz. Ben basit bir örnek olması açısından isimler.txt dosyası içerisinde "hasan" ismi var mı diye kontrol etmek üzere konsola grep "hasan" isimler.txt komutunu veriyorum.

enter image description here

Arama işleminde, Linux sistemi gereği büyük küçük harf duyarlılığına sahip olduğundan(Hatırlarsanız daha önce bu durumu test etmiştik.) "hasan" şeklinde arama yaptığımızda diğer büyük küçük haldeki anahtar kelimeler çıktıda basılmayacaktır. Eğer bu küçük büyük harf duyarlılığı dışında arama yapmak istersek -i parametresini kullanabiliriz. Bu durumu gözlemlemek için büyük küçük harflerden oluşan kelimelerin olduğu bir dosya üzerinde grep komutunu kullanalım.

enter image description here

Eğer arama işlemini tek dosya yerine bulunduğumuz dizin içerisindeki tüm dosyaları kapsayacak şekilde gerçekleştirmek istersek wildcard yani
genel kapsama işlevinde olan joker * karakteri yardımıyla bu işlemi gerçekleştirebiliriz.

Hemen örneklere geçelim. hasan ismini masaüstü konumundayken aratıyorum. Bunun için grep
"hasan" * komutunu konsola verdim.

enter image description here

Gördüğünüz gibi çıktı bize içerisinde "hasan" ifadesi geçen tüm dosyaları verdi.

Çıktıda aradığımız ifadenin hangi dosyada yer aldığını bulmuş olduk. Ayrıca yukarıdaki komutu grep
-r "hasan" * şeklinde de yazabilirdik. Genellikle de bu 2. komut kullanılıyor ancak hangi şekilde kullanacağınızı seçmek size kalmış dilediğiniz kullanabilirsiniz.

enter image description here

İkinci kullanım şeklinde ilkinden farklı olarak
"grep: yeni_dizin: Bir dizin" gibi bir çıktı almadık.

Wildcardlardan söz etmişken dosya içerisinde arama işleminin başka bir kullanım şekline de değinelim isterim. Eğer aranacak kelime belirli bir isim ile başlayan dosyalar içerisinde aranacaksa bunu wildcard(joker) yardımıyla özellikle belirtebiliriz.

Kullanımı grep
"aranacak_ifade" dosya_adı_başlangıcı* şeklindedir. Ben ilk önce masaüstünde yer alan dosyaları listeledim daha sonra "hasan" ifadesini aramaya koyuldum. İlk önce "metin" ismi ile başlayan belgelerde grep "hasan" metin* komutunu kullanarak aradım.

enter image description here

Ancak çıktıda da görüleceği gibi
"hasan" ifadesi "metin" ismi ile başlayan belgeler içerisinde yer almıyormuş ki komut çıktısı bize hiç bir sonuç vermedi.

Bende "hasan" ismini bu sefer "isimler" adıyla başlayan belgeler içerisinde aramak için grep
"hasan" isimler* komutunu kullandım. Bunun neticesinde komut satırı bize "hasan" isminin geçtiği belgelerin yerini vermiş oldu.

enter image description here

Buradaki asıl kullanım amacı; komutu, belirli isimlere sahip olan dosyalar içerisinden anahtar kelimeyi aramak üzerine sınırlandırmak.

Bunların dışında arama sonucunun görüntülenmesini de sınırlandırabiliriz; Örnek olması açısından
"filozof" isimli dosyadan "jo" ile başlayan isimleri listeliyorum.

enter image description here

Arama sonucu sonrasında kaç satır gözükeceğini -A parametresi sayesinde grep -A görüntülenecek_satır_sayısı
"aranacak_ifade" dosya_adı şeklinde komut girerek sağlarız.

enter image description here

Sonucun üzerindeki kaç satırın gözükeceğini -B parametresi sayesinde grep -B görüntülenecek_satır_sayısı
"aranacak_ifade" dosya_adı şeklinde komut girerek sağlarız.

enter image description here

Baştan ve sondan kaç satır görüntüleneceğini ise -C parametresi sayesinde grep -C görüntülenecek_satır_sayısı
"aranacak_ifade" dosya_adı şeklinde komut girerek sağlarız.

enter image description here

Şimdi ise sıklıkla kullanılan pipe ile grep kullanımına bakalım. Pipe nedir diyecek olursanız kabaca iki işlemi
(process) birbirine bağlayan | görünümündeki yardımcı argüman diyebiliriz. Zaten daha önce de iki işlemin birbirine bağlanması gereken durumlarla karşılaşmış ve pipe kullanmıştık.

grep ile kullanımına geçecek olursak örneğin masaüstünde yer alan dosyalardan yalnızca "metin" isimli olanları listelemek isteyelim. Bunun için ilk olarak masüstünde yer alan dosyalarımızı listelemek üzere komut satırına ls daha sonra ise ls komutundan gelecek olan çıktıları pipe yardımı ile grep komutuna bağlayarak listelenen bütün bu dosyalar içerisinden sadece "metin" adı geçenleri filtreleyebilelim..


Bu işlemi gerçekleştirmek için ls | grep "metin" komut bütününü kullanıyorum.

enter image description here

grep komutunun kullanım şekli ve alanı elbette bu kadar ile sınırlı değil ancak sizler daha fazla bilgiye nasıl ulaşacağınızı biliyorsunuz.

FİND

find komutu da hemen hemen daha önce görmüş olduğumuz locate komutu ile aynı görevi görüyor. Örneğin, isminin birazını bildiğimiz ama dosya dizinini tam olarak hatırlamadığımız dosyaları bulmamıza yardımcı oluyor.

Komut kullanım kalıbı find dosya_yolu -name aranacak_ifade şeklindedir. Tam kullanım şekli için aşağıdaki örneği inceleyebilirsiniz.

enter image description here

Çıktıda etc konumda yer alan içerisinde
"local" ifadesi geçen dosyalar komutumuz sayesinde listelenmiş oldu. Ancak aradığımız şeyi bulmak adına değiştirilme tarihi, boyut, dosya-dizin gibi ayrıntıları belirterek çıktıları daha spesifik şekilde sınırlandırabiliriz. Bazı özel arama parametreleri açıklayalım hemen.

  • type f : Yalnızca dosyalar.
  • type d : Yalnızca dizinler.
  • size +500k : 500 KB'tan büyük olan dosyalar.
  • size -500k : 500 KB'tan küçük olan dosyalar.
  • ctime 10 : Tam olarak 10 gün önce değişikliğe uğramış dosya/dizinler.
  • ctime -10 : 10 günden daha kısa bir süre önce değişikliğe uğramış dosya/dizinler.
  • ctime +10 : 10 günden daha uzun bir süre önce değişikliğe uğramış dosya/dizinler.
  • perm 755 : Yalnızca erişim izni 755 olan dosya/dizinler. Örnek olması açısından yukarıdaki arama parametrelerinin ilk ikisinin çıktılarını aşağıya ekliyorum.
enter image description here

XARGS

xargs komutunun görevi kabaca kendisinden önce verilen girdi verilerini kendisinden sonrakine tek tek aktarmaktır. Biliyorum böyle denilince hiçbir şey anlaşılmıyor. O yüzden xargs komutunu find komutuyla birlikte kullanarak örnek üzerinden komutumuzu ve kullanım mantığını açıklamış olalım.

Örneğin .jpg uzantılı bir resim dosyasını araştırıp daha sonra bulduğumuz bu dosyayı silelim. Ben duvar kağıdı için daha önce internetten bir .jpg uzantılı bir resim indirmiştim. Bu resim hem indirilenler (downloads) hem de resimler konumunda yer alıyor, söylediğim gibi aslında dosyanın konumunu biliyorum ancak komutun kullanımını denemek üzere dosyanın konumunu bilmiyormuşçasına bir test edelim. Testimizde root dizinindeki .jpg uzantılı dosyaları araştıralım ve silelim.

enter image description here

Çıktıda da görüldüğü gibi .jpg uzantılı resim dosyalarını tek tek bulup silmeden önce, çıktıda belirtilen konumlarda bulunuyorlardı. Ancak arama ve tek tek otomatik olarak silme işlemini gerçekleştirmemiz ile birlikte dosyalar silindi. Silinme durumunu da tekrar arama işlevindeki find komutunu vererek teyit etmiş olduk.


Komutumuzun işleyişi tam olarak şöyle oldu;

find /root -name *.jpg komutu ile root dizini altındaki tüm .jpg uzantılı dosyaları listeledik.

Bu listelenen dosya konum ve varlık bilgilerini xargs komutuna pipe( | ) argümanı sayesinde aktardık.

xargs komutu ise eline geçen bu bilgiler sayesinde dosyanın konumunu saptayarak tek tek silme işlemini gerçekleştirebildi.


xargs komutu exec isimli başka bir komuta benzer şekilde çalışmaktadır. Merak edip öğrenmek isteyen arkadaşlar ayrıca exec komutuna bakabilirler.

Dosya Kopyalama-Taşıma-Silme İşlemleri

Bu kısımda dosyaları kopyalama taşıma ve silme gibi işlemleri ele alacağız. Zaten kullanacağımız komutlar kısa oldukları için kullanımı ve akılda kalması çok kolay. İlk olarak dosya kopyalama işlemi ile anlatıma başlayalım.

CP

cp komutu kopyalama işlevindedir. Kullanımı cp kaynak hedef şeklindedir. Örnek üzerinden açıklayalım.

enter image description here


Komutumuzu açıklayacak olursak;

Desktop dizinindeyken ls komutu ile bulunduğumuz dizindeki dosyaları listeliyoruz. Ve çıktıda da görüldüğü üzere masaüstünde "filazof" isimli bir belge bulunuyor.

cd yeni_dizin komutuyla yeni_dizin konumuna gidiyoruz.

ls komutu ile buradaki dosyaları listeliyoruz. Bu dizinde ise yalnızca "yeni" isimli bir klasör mevcut.("filazof" isimli dosyanın bu konumda bulunmadığını teyit etmiş olduk.)


cd .. komutu ile bir önceki dizine dönüyoruz. "filazof" dosyasını yeni_dizin konumuna taşımak üzere cp filazof yeni_dizin şeklinde komutumuzu kullanıyoruz.

Daha sonrasında ise cd yeni_dizin komutu ile yeni_dizin konumuna gidip ls komutu yazarak "filazof" isimli dosyamızın kopyalandığını teyit etmiş oluyoruz.

Eğer bir dosyayı A dizininden B dizinine taşırsak ve B dizini içerisinde A dizininden taşıdığımız belge ile aynı isimde dosya varsa, taşıdığımız dosya mevcut konumda bulunan aynı isimdeki eski dosyanın üzerine yazılacaktır. Bu da B konumunda var olan eski dosyanın önceki içeriğinin yok olması demek. Böyle talihsiz bir durum yaşamamak için cp komutunu kullanmadan önce -i parametresini de eklememizde fayda var. Bu parametre cp komutunun aynı isimli bir dosya ile karşılaşma durumunda bize onay sormasını sağlayacaktır.

Anlatılanları daha iyi anlamak adına hemen bir örnek yapalım. Daha önceden yeni_dizin konumuna taşımış olduğumuz "filazof" dosyasını -i parametresini kullanarak tekrar cp komutu ile taşımaya çalışalım.

enter image description here

Çıktıda da görüldüğü gibi -i parametresini kullanarak yazdığımız kopyalama komutu bize "***cp: 'Desktop/merhaba''ın üzerine yazılsın mı? ***" şeklinde bir uyarıda bulundu ve bizden onay bekledi.

Elbette bu işlemleri çoklu dosya taşıma için de kullanabiliriz.

enter image description here


Hangi komutu neden kullandık zaten bir önceki örneğe benzer olduğu için tekrar açıklamıyorum. Çıktıları inceleyerek çok rahat şekilde anlayabilirsiniz.

Eğer o anda çalıştığımız dizine başka bir konumdan dosya kopyalamak istersek komutumuzu cp kopyalanacak_dosya_konumu . şeklinde kullanabiliriz. Nokta( . ) bizim o anda bulunduğumuz çalışma konumunu ifade ediyor. Örneği incelediğinizde her şey daha net anlaşılacaktır.



Görüldüğü üzere kopyalanacak olan dosyanın konumunu belirttik ancak bulunduğumuz konuma yani kopyalamak istediğimiz konumun direk adresini belirtmemize gerek kalmadı. Bunun yerine bulunduğumuz konumu temsil eden .(nokta) kullanmamız dosyanın kopyalanmasını sağladı.

Eğer bulunduğumuz konumdan bir üst konuma kopyalamak istersek komutu cp dosya_adresi .. şeklinde kullanmamız yeterli olacaktır.

enter image description here

Çıktıları karşılaştırarak dosyayı bir önceki dizine kopyalamayı (iki nokta) .. ile kolaylıkla yapabildiğimizi görebilirsiniz. (Eğer "deneme" isimli dosyayı kopyalarken kullandığımız komutta yer alan, dosyanın konumunu belirtme kısmı kafanızı karıştırdıysa belirteyim; çıktıda kopyalanan konumda yer alan ~ işareti ana dizin adresini yani root kullanıcısı için
/root konumunu belirtiyor. "deneme" isimli dosya bu konumda olduğu için direk bu şekilde bir kullanımı tercih ettim. Bunun yerine cp /root/deneme .. komutunu da kullanabilirdim.)

MV

Bu komut dosya taşıma ve uzantı değiştirme gibi işlevlere sahiptir. Dosya taşıma işlevi tıpkı cp komutunda olduğu gibidir. Yani komutun kullanımı mv dosya_konumu taşınacak_konum şeklindedir.

enter image description here

RM

Dosya dizin silme işlevinde kullandığımız komuttur. Kullanımı rm silinecek_dosya_dizin şeklindedir.

enter image description here

Dosyalar tekil olarak silinebileceği gibi çoklu silme işlemi de gerçekleştirilebilir. Hatta daha önce gördüğümüz joker karakterleri de kullanırsak isim, uzantı gibi filtrelere göre sınırlandırarak toplu dosya silme işlemi gerçekleştirebiliriz. Örnek olması açısından masaüstünde yer alan 2 adet .py uzantılı dosyayı tek seferde rm *.py komutu ile siliyorum.

enter image description here

Joker karakterlerin kullanım alanları oldukça geniştir. Sizler de ihtiyacınıza göre filtreleme yaparak bu işlemleri istediğiniz doğrultuda gerçekleştirebilirsiniz.(Bu konuyu detaylıca ileride Joker Karakterler kısmında ele alacağız.)

SHRED

Bu komut sayesinde dosyalarımızı daha güvenli şekilde silebiliriz. shred komutu dosyanın içerisine rastgele bitler yazarak dosyanın okunmaz hale gelmesini sağlıyor. Parametresiz kullanımda dosyaya 3 kez rastgele bit eklerken n parametresini kullanarak bu eklenecek olan rastgele bit sayısını istediğimiz doğrultuda düzenleyebiliyoruz. Eğer yapılan işlemi komut satırından takip etmek istersek v parametresini de kullanabiliriz. Ayrıca u parametresini kullanmamız halinde dosya işlem sonrasında silinir.






DERS #9 BİTMİŞTİR.

DERS #10
@'pump

T%C3%BCrkHackTeam_Logo.png
 
Son düzenleme:
5 Eki 2022
76
20
NOT:
50K KAREKTER SINIRLANMASI OLDUĞUNDAN BAZI DİZİN PAKETLERİNİ YAZMADIM..
logo.png

Dosya İşlemleri

Konumuz itibari ile dosyalarla epeyce haşır neşir olacağız. Yapacağımız işlemleri kısaca tanımlamak gerekirse; dosya kopyalama, taşıma, değiştirme, görüntüleme, düzenleme gibi işlemelerle dosyalar üzerinde hakimiyet kuracağız.

TOUCH

touch komutu bize kolaylıkla metin dosyası oluşturma imkanı tanıyor. İşte bu yüzden dosya işlemleri konumuza touch komutu ile başlamak gayet doğru bir karar olacaktır.

Kendimize touch komutunu kullanarak boş bir dosya oluşturmak için komut satırına touch dosya_ismi şeklinde yazmamız gerekiyor. Burada fark ettiyseniz herhangi bir uzantı girmeme gerek kalmadı.
Çünkü Linux sisteminde uzantı belirtme zorunluluğu bulunmuyor. Bu durumu gözlemlemek için konsola touch yeni komutunu vererek "yeni" adından bir dosya oluşturalım.

enter image description here

Görüldüğü üzere dosyamız bulunduğumuz ana dizinde oluşmuş oldu. Bunu teyit etmek için de çıktıda görüldüğü gibi daha önce öğrenmiş olduğumuz listeleme görevinde olan ls komutunu kullandık.

Peki bir tane değil de birden fazla dosya oluşturmak istersek ? İşte bunun için de komutumuzu touch yeni1 yeni2 yeni3 şeklinde yazmamız yeterli.

enter image description here

Çıktıda görüldüğü gibi aynı andan 3 dosya oluşturmayı başardık.

Aslında touch komutunun çok farklı kullanım yöntemleri de mevcut ancak ben son olarak dosyaların tarih etiketlerini nasıl değiştirebiliriz bunu göstermek istiyorum.

Dosyamızın tarih etiketini düzenlemek için touch komutunun t parametresini kullanacağız. Kullanımı ise touch
-t YYYYAAGGSSDD.SS dosya_adı şeklindedir. Öncelikle dosyamızın mevcut tarih etiketine bakalım.
enter image description here

Şimdi dosyamızın tarih etiketini daha önceki bir tarihe çevirelim. Ben burada örnek olması açısından tarih olarak
2015.01.01 ve saat 22:15:32 zamanlamasını kullanıyorum. Nasıl kullanıldığını daha net anlamak için örneği inceleyebilirsiniz.

enter image description here

Gördüğünüz gibi dosyamın tarih etiketi değişmiş oldu. Bu değişme işlemini ileri veya geri tüm tarihler için kullanabilirsiniz.

CAT

cat komutu temelde dosya içeriğini terminal ekranından okumamıza olanak sağlayan komuttur. Ancak bu komut bizlere temel işlevinin dışında da dosyalar ile ilgili pek çok işlem yapma imkanı sağlıyor. Sırasıyla bunların bazılarına göz atacağız. Ama ilk olarak temel işlevi olan terminal üzerinden dosya okuma işlevini görelim.

Bunun için konsola açmak istediğimiz dosyanın konumundayken
cat açılacak_dosya şeklinde komut vermemiz gerek. Ben masaüstü konumunda yer alan "test.txt" isimli dosyanın içeriğini okumak üzere konsola cat test.txt komutunu veriyorum.(Dosyayı grafik arayüzü aracılığı ile de açarak durumu kıyaslamanızı istedim.)

enter image description here enter image description here

Şimdi ise tıpkı touch komutunda çoklu dosyalar ile ilgili işlem yaptığımız gibi cat komutu ile de çoklu dosya okuma işlemini gerçekleştirelim. Çoklu dosya okuma işlemi için komut satırına
cat dosya1 dosya2 dosya3 şeklinde okumak istediğimiz dosyaların adlarını yazıyoruz.

enter image description here

Dosya içeriğine yazı eklemek istersek cat > dosya_adı şeklinde komut verdiğimizde, komut satırı imleci bir alt satıra geçerek bizden yazmak istediğimiz bilgiyi bekler. Yazma işlemimiz bittikten sonra kaydederek kapatmak için
Ctrl + D tuş kombinasyonunu kullanırız. Ayrıca komutta girdiğimiz isimde bir dosya yoksa o isimde bir dosya oluşur ve girilen veriler içerisine işlenir.

enter image description here

Ancak var olan bir dosyanın adıyla bu komutu kullandıysanız ve dosya içerisinde yazı bulunuyorsa bu işlemin ardından dosyada bulunan eski veriler silinerek yalnızca girilen yeni veriler dosyaya işlenip kayıt oluyor.

enter image description here

Bizler eğer önceki veriler silinmesin ve üzerine yeni veri ekleyebilelim istersek, komutumuzu
cat >> yeni3.txt şeklinde kullanarak; yeni gireceğimiz verileri girdikten sonra Ctrl + D tuş kombinasyonu ile dosyamızı yeni eklenmiş verileriyle birlikte kaydedip kapatabiliriz.

enter image description here

Gördüğünüz gibi yeni eklediğimiz veri dosyamızın içine işlenmiş oldu üstelik eski veriler de yok olmadan.


Ayrıca yeri gelmişken kullanmış olduğumuz > yönlendirme operatörü ile ilgili bir örnek daha yapalım ki kullanım alanının biraz daha farkına varmış olalım. Örneğin ls -ls çıktısının içeriğini "liste" adında bir dosya oluşturarak içerisine aktaralım. Bunun için ls -ls > liste komutunu kullanabiliriz. Şayet yeni dosya oluşturmak istemiyorsak ve gireceğimiz veriler var olan dosyaya yazılsın istiyorsak o zaman > operatörü yerine >> operatörünü kullanırsak yeni veriler dosyaya eklenmiş olur.

enter image description here
Komutta açıklanacak bir durum yok zaten hepsi bildiğimiz komutlar. Burada asıl önemli olan > operatörünün kullanımıydı.
Eğer anladıysak ne âlâ.. devam edelim.

cat komutunun işlevlerine devam ediyoruz; şimdi ise sırada, bir dosyada yer alan verileri başka bir dosyaya kopyalamak var. Bunun için komutumuzu cat veri_alınan_dosya > veri_alan_dosya şeklinde kullanıyoruz.

enter image description here

Komutumuzun kullanım şekilleri elbette bunlar ile sınırlı değil. Belki defalarca söyledim ancak bu komut için de söylemem gerek;
daha fazla detay için lütfen man kılavuz sayfasına göz atın.

ECHO

Bu komutumuzu daha önce defaatle kullanmak durumunda kalmıştık hatırlarsanız. Kullandıkça da işlevinden bahsetmiştik ancak şimdi komutumuzu ele alarak biraz daha yakından bakmaya başlıyoruz.

Temel işlevi terminal ekranına istenilen bilgileri çıktı olarak göndermektir. Komutumuzu kullanırsak daha net anlaşılacaktır. Örneğin komut satırına
"Merhabalar" yazdırmak isteyelim, bunun için komut satırına echo Merhabalar şeklinde komutumuzu girmemiz yeterli.

enter image description here

"Merhabalar" çıktımızı almış olduk. echo komutu sadece ekrana basma işlevine sahip değil. Örneğin bir dosya oluşturup içerisine istediğimiz ifadeyi yazabiliriz. Bunun için komut satırına echo
"yazılacak_ifade"> dosya_adı şeklinde komutu giriyoruz.

enter image description here

Sırasıyla yaptığım işlemleri açıklayayım.

İlk önce cd Desktop komutu ile masaüstü konumuna geldim.


Daha sonra echo "Deneme Metni" > deneme komutunu vererek masaüstü konumuna deneme isimli bir dosya oluşturarak içerisine "Deneme Metni" ifadesini yazmış oldum.

ls komutu ile de bulunduğum konumdaki dosyaları listeleyerek içerisinde oluşturduğum
"deneme" adlı dosyanın bulunup bulunmadığını teyit ettim.

cat deneme ile de catkomutunun en temel kullanım işlevi olan içeriği ekran basma işlevini kullanarak oluşturduğum dosyanın içeriğine baktım.

Sonuç itibari ile her şey sorunsuz ilerledi ve finalde yeni oluşturmuş olduğum deneme isimli dosyanın içerisine "Deneme Metni" ifadesini yazdırmış oldum.

Ancak şöyle bir hatırlatmada bulunayım; eğer var olan bir dosyanın içeriğine yeni içerikler eklemek isterseniz daha önce de kullandığımız şekilde >> parametresini kullanın. Aksi halde dosya içeriğindeki her şey silinir ve yalnızca sizin son yazdığınız ifade kalır.


Var olan dosya içeriğine yeni bir ifade eklemek için komutu echo "Yeni ifade" >> dosya_adı şeklinde girmemiz gerek.

enter image description here

Şimdi echo komutunun ls komutu görevi gördüğü bir kullanıma değineceğiz.

Örneğin bulunduğumuz dizinde yer alan dosyaları görmek istersek komut satırına echo * şeklinde yazmamız halinde çıktı bizlere bulunduğumuz konumda yer alan dosyaları verir. Bu komut kullanımını ls komutu ile karşılaştırdığımızda daha net anlaşılacaktır.

enter image description here

* (yıldız işareti) joker karakteridir ve herhangi dosya dizin isimlerinin yerini tutar. Yani echo komutuna * karakteri eklediğimizde mevcut dizinde yer alan tüm dosya dizinler * parametresi ile kapsanacağı için ne var ne yok listeleniyor. Bu duruma örnek olması açısından bulunduğumuz dizinde yer alan dosyalarda örneğin "list" adı ile başlayanları çıktı olarak almak istersek komut satırına echo liste* şeklinde komut vermemiz yeterlidir. (İleride ele alacağımız Joker karakter/wildcard konusundan bu karakterler açıklanmıştır.)

enter image description here

Son olarak echo komutunun kullanım şekillerinden olan, bir komutun çıktılarının echo komutu ile ekrana basılması var. Ancak doğrudan echo komut şeklinde yazılan komutlar istenmeyen bir sonuç çıkaracaktır. Verdiğimiz komutun çıktılarını alma işlemini gerçekleştirebilmek için echo komutunun bu iş için kullanım özelliklerinden olan iki farklı seçenek bulunuyor. Bunlardan biri ters tırnak ' işaretini diğeri ise $(komut) parametre bütünüdür. Bunları sırayla görelim.


İlk olarak ters tırnak işaretli olan kullanımı ele alalım.

Ters tırnak işaretini oluşturmak için Türkçe klavyede AltGr + , (AltGr ile birlikte virgül tuşuna basmak gerek)tuş kombinasyonunu kullanabiliriz. Komutun kullanımını için ise istediğimiz komutu tırnak içerisinde echo komutunun yanında kullanmak üzere echo 'komut' şeklinde yazıyoruz.

Hemen bu kullanım ile ilgili bir örnek yapalım ve ls komutunun çıktılarını echo komutu yardımı ile basalım.

enter image description here

Ve ikinci yol olan $(komut) parametre bütünü; yine ls komutu için örneklendirilecek olursa, kullanımı echo $(ls) şeklinde komut parantez içine gelecek şekilde olmalıdır.

enter image description here

Sonuç itibari ile ilk echo ls komutunun çıktısı olan "ls" ifadesi bizim almak istediğimiz çıktıyı bizlere vermedi. Yani bu kullanım bizim yapmak istediğimiz iş olan, komutun çıktılarının ekrana bastırılması için doğru bir kullanım değildi. Doğru kullanım şekli ise ikinci ve üçüncü komut olan
echo 'ls', echo $(ls) şeklindedir. Bu komutların çıktısı istediğimiz şekilde, yani ls komutunun çıktısını(bulunduğumuz dizinde yer alan dosyaların bilgisi) ekrana basacak şekilde bizlere verdi. Sözü edilen durumu aşağıdaki çıktıyı inceleyerek bir bütün halinde kavrayabilirsiniz.

enter image description here

MORE

Şimdiye kadar öyle ya da böyle terminal üzerinden dosya okuma işlemi yapmamıza yardımcı olan komutlar gördük. Bu komutumuz da aynı şekilde metin dosyalarını terminal üzerinden okumamıza olanak sağlayan bir komuttur.

Örneğin daha önce de içeriğini okuyup değişiklik yapmış olduğumuz dosya olan profile dosyasının içeriğini more komutu yardımı ile okuyalım.


Bunun için /etc/profile konumunda bulunan dosyamı more komutu ile açmak üzere konsola more /etc/profile şeklinde konsola yazarak profile dosya içeriğini okumaya teşebbüs ediyorum. Komutumuzun ardından terminal ekranında karşımıza profile dosyasının içeriği aşağıdaki gibi geldi.

enter image description here

Çıktıda görüldüğü gibi dosyanın içeriği ancak terminal ekranına sığacak şekilde görüntüleniyor.
Hatta alt kısımda --More--(77%) şeklinde yazan yazı bizlere içeriğin devamı olduğunu belirtiyor. Eğer devamını okumak istersek enter tuşuna basarak adım adım alt satırlara bakabiliriz. Ayrıca space tuşu ile de sayfa sayfa atlayarak içeriğe göz atabiliriz. Eğer atladığınız sayfadan bir önceki sayfaya geri dönmek istersek b(back/geri) tuşunu, şayet dosya içeriğini görüntüleyen bu ekranı kapatmak istersek ise q(quit/çıkış) tuşunu kullanmamız yeterli.

Head-Tail

Aslında komutların isimleri yani head(kafa/baş) ve tail(kuyruk) bizlere komut hakkında az çok bilgi veriyor. Şöyle ki bir dosyanın sadece baş kısmında ilk 10 satırı görüntülemek istersek head şayet son 10 satırı görüntülemek istersek ise tail komutunu kullanırız. Ayrıca bu komutlar özel parametre alarak istenildiği sayıda baştan veya sondan olmak üzere istenilen satırların görüntülenmesine olanak sağlar. Daha iyi anlamak adına hemen kullanımlarına geçelim.

Dosya içeriğinin ilk 10 satırını görüntülemek için head dosya_adı şeklinde komutumuzu kullanıyoruz.

enter image description here

Şimdi burada 10 satır içerik yok gibi gelebilir ancak dosya içerisindeki boş satırlar da bu 10 satıra dahil olduğundan çıktıyı boş satırlar ile saydığınızda tam olarak 10 satırın görüntülendiğini göreceksiniz.


Dosya içeriğinin son 10 satırını görüntülemek için tail dosya_adı şeklinde komutumuzu kullanıyoruz.

enter image description here
Şimdi istediğimiz sayıda baştan veya sondan dizinleri görüntüleyelim. Ben örnek olması açısından baştan 6 sondan 2 satırı görüntülemek üzere komutumu veriyorum. Komutun kullanımı head -n 6 ve tail -n 2 şeklinde.


Baştan 6 satırın çıktıları.

enter image description here

Sondan 2 satırın çıktıları.

enter image description here

SORT

Dosya çıktılarının alfabetik olarak düzenlenmesini sağlar. Örnek üzerinden devam edelim. Ben isimler.txt adında bir dosya oluşturdum ve içerisine karışık olarak isimler ekledim. Ve bu isimleri alfabetik sıraya dizmek için sort isimler.txt komutunu kullandım.

enter image description here

Eğer ters alfabetik şekilde yani z den a ya doğru sıralamak istersek -r parametresi kullanılır.

enter image description here

PASTE

Örneğin iki dosyanın içeriğini aynı anda yan yana olacak şekilde komut satırında listelemek istersek, bu işi yapmamızı paste komutu sağlıyor. Kullanımı paste dosya1 dosya2 şeklindedir.

Ben yaşlar.txt ve isimler.txt adlı dosyaları aynı anda yana yana görüntülemek adına komut satırına paste isimler.txt yaşlar.txt komutunu verdim.

enter image description here


Çıktıda da görüldüğü üzere terminal ekranında yazdığımız her bir satır tekrar ederek konsola basıldı ve sonuçta oluşturmuş olduğumuz "metin" isimli dosyanın içeriği de yazmış olduğumuz ifadeler ile dolmuş oldu.

CMP

Bu komut sayesinde dosyalar arasından karşılaştırma yapmamız mümkün.

Örneğin ben isimler.txt dosyasını kopyaladım ve 5. satırındaki ismi değiştirdim. Ve bu iki dosyayı cmp komutu ile kıyasladım.

enter image description here

İki dosyanın da içeriğini cat komutu ile yazdırdık görüldüğü üzere iki dosya arasındaki fark, bir dosyada mehmet ismi yerine enes isminin yer almasıdır. cmp komutunun çıktısında da bu durum farklı olan satır ve bayt bilgisi verilerek ifade edeliyor.

GREP

Bu komut en çok kullanılan terminal komutları içerisinde bulunuyor. Bu komutumuzu bizler de oldukça sık kullanıyor olacağız. Dosya ya da komut çıktısında bir ifade aramak için yani bir nevi filtreleme işlemi için grep komutunu kullanabiliriz. Komutun kullanım şekillerini örnekler ile açıklamaya devam edelim.

Eğer bir dosya içerisindeki herhangi bir kelimeyi sorgulamak istersek komutumuzu grep
"aranacak_ifade" dosya_adı şeklinde komut satırına giriyoruz. Ben basit bir örnek olması açısından isimler.txt dosyası içerisinde "hasan" ismi var mı diye kontrol etmek üzere konsola grep "hasan" isimler.txt komutunu veriyorum.

enter image description here

Arama işleminde, Linux sistemi gereği büyük küçük harf duyarlılığına sahip olduğundan(Hatırlarsanız daha önce bu durumu test etmiştik.) "hasan" şeklinde arama yaptığımızda diğer büyük küçük haldeki anahtar kelimeler çıktıda basılmayacaktır. Eğer bu küçük büyük harf duyarlılığı dışında arama yapmak istersek -i parametresini kullanabiliriz. Bu durumu gözlemlemek için büyük küçük harflerden oluşan kelimelerin olduğu bir dosya üzerinde grep komutunu kullanalım.

enter image description here

Eğer arama işlemini tek dosya yerine bulunduğumuz dizin içerisindeki tüm dosyaları kapsayacak şekilde gerçekleştirmek istersek wildcard yani
genel kapsama işlevinde olan joker * karakteri yardımıyla bu işlemi gerçekleştirebiliriz.

Hemen örneklere geçelim. hasan ismini masaüstü konumundayken aratıyorum. Bunun için grep
"hasan" * komutunu konsola verdim.

enter image description here

Gördüğünüz gibi çıktı bize içerisinde "hasan" ifadesi geçen tüm dosyaları verdi.

Çıktıda aradığımız ifadenin hangi dosyada yer aldığını bulmuş olduk. Ayrıca yukarıdaki komutu grep
-r "hasan" * şeklinde de yazabilirdik. Genellikle de bu 2. komut kullanılıyor ancak hangi şekilde kullanacağınızı seçmek size kalmış dilediğiniz kullanabilirsiniz.

enter image description here

İkinci kullanım şeklinde ilkinden farklı olarak
"grep: yeni_dizin: Bir dizin" gibi bir çıktı almadık.

Wildcardlardan söz etmişken dosya içerisinde arama işleminin başka bir kullanım şekline de değinelim isterim. Eğer aranacak kelime belirli bir isim ile başlayan dosyalar içerisinde aranacaksa bunu wildcard(joker) yardımıyla özellikle belirtebiliriz.

Kullanımı grep
"aranacak_ifade" dosya_adı_başlangıcı* şeklindedir. Ben ilk önce masaüstünde yer alan dosyaları listeledim daha sonra "hasan" ifadesini aramaya koyuldum. İlk önce "metin" ismi ile başlayan belgelerde grep "hasan" metin* komutunu kullanarak aradım.

enter image description here

Ancak çıktıda da görüleceği gibi
"hasan" ifadesi "metin" ismi ile başlayan belgeler içerisinde yer almıyormuş ki komut çıktısı bize hiç bir sonuç vermedi.

Bende "hasan" ismini bu sefer "isimler" adıyla başlayan belgeler içerisinde aramak için grep
"hasan" isimler* komutunu kullandım. Bunun neticesinde komut satırı bize "hasan" isminin geçtiği belgelerin yerini vermiş oldu.

enter image description here

Buradaki asıl kullanım amacı; komutu, belirli isimlere sahip olan dosyalar içerisinden anahtar kelimeyi aramak üzerine sınırlandırmak.

Bunların dışında arama sonucunun görüntülenmesini de sınırlandırabiliriz; Örnek olması açısından
"filozof" isimli dosyadan "jo" ile başlayan isimleri listeliyorum.

enter image description here

Arama sonucu sonrasında kaç satır gözükeceğini -A parametresi sayesinde grep -A görüntülenecek_satır_sayısı
"aranacak_ifade" dosya_adı şeklinde komut girerek sağlarız.

enter image description here

Sonucun üzerindeki kaç satırın gözükeceğini -B parametresi sayesinde grep -B görüntülenecek_satır_sayısı
"aranacak_ifade" dosya_adı şeklinde komut girerek sağlarız.

enter image description here

Baştan ve sondan kaç satır görüntüleneceğini ise -C parametresi sayesinde grep -C görüntülenecek_satır_sayısı
"aranacak_ifade" dosya_adı şeklinde komut girerek sağlarız.

enter image description here

Şimdi ise sıklıkla kullanılan pipe ile grep kullanımına bakalım. Pipe nedir diyecek olursanız kabaca iki işlemi
(process) birbirine bağlayan | görünümündeki yardımcı argüman diyebiliriz. Zaten daha önce de iki işlemin birbirine bağlanması gereken durumlarla karşılaşmış ve pipe kullanmıştık.

grep ile kullanımına geçecek olursak örneğin masaüstünde yer alan dosyalardan yalnızca "metin" isimli olanları listelemek isteyelim. Bunun için ilk olarak masüstünde yer alan dosyalarımızı listelemek üzere komut satırına ls daha sonra ise ls komutundan gelecek olan çıktıları pipe yardımı ile grep komutuna bağlayarak listelenen bütün bu dosyalar içerisinden sadece "metin" adı geçenleri filtreleyebilelim..


Bu işlemi gerçekleştirmek için ls | grep "metin" komut bütününü kullanıyorum.

enter image description here

grep komutunun kullanım şekli ve alanı elbette bu kadar ile sınırlı değil ancak sizler daha fazla bilgiye nasıl ulaşacağınızı biliyorsunuz.

FİND

find komutu da hemen hemen daha önce görmüş olduğumuz locate komutu ile aynı görevi görüyor. Örneğin, isminin birazını bildiğimiz ama dosya dizinini tam olarak hatırlamadığımız dosyaları bulmamıza yardımcı oluyor.

Komut kullanım kalıbı find dosya_yolu -name aranacak_ifade şeklindedir. Tam kullanım şekli için aşağıdaki örneği inceleyebilirsiniz.

enter image description here

Çıktıda etc konumda yer alan içerisinde
"local" ifadesi geçen dosyalar komutumuz sayesinde listelenmiş oldu. Ancak aradığımız şeyi bulmak adına değiştirilme tarihi, boyut, dosya-dizin gibi ayrıntıları belirterek çıktıları daha spesifik şekilde sınırlandırabiliriz. Bazı özel arama parametreleri açıklayalım hemen.

  • type f : Yalnızca dosyalar.
  • type d : Yalnızca dizinler.
  • size +500k : 500 KB'tan büyük olan dosyalar.
  • size -500k : 500 KB'tan küçük olan dosyalar.
  • ctime 10 : Tam olarak 10 gün önce değişikliğe uğramış dosya/dizinler.
  • ctime -10 : 10 günden daha kısa bir süre önce değişikliğe uğramış dosya/dizinler.
  • ctime +10 : 10 günden daha uzun bir süre önce değişikliğe uğramış dosya/dizinler.
  • perm 755 : Yalnızca erişim izni 755 olan dosya/dizinler. Örnek olması açısından yukarıdaki arama parametrelerinin ilk ikisinin çıktılarını aşağıya ekliyorum.
enter image description here

XARGS

xargs komutunun görevi kabaca kendisinden önce verilen girdi verilerini kendisinden sonrakine tek tek aktarmaktır. Biliyorum böyle denilince hiçbir şey anlaşılmıyor. O yüzden xargs komutunu find komutuyla birlikte kullanarak örnek üzerinden komutumuzu ve kullanım mantığını açıklamış olalım.

Örneğin .jpg uzantılı bir resim dosyasını araştırıp daha sonra bulduğumuz bu dosyayı silelim. Ben duvar kağıdı için daha önce internetten bir .jpg uzantılı bir resim indirmiştim. Bu resim hem indirilenler (downloads) hem de resimler konumunda yer alıyor, söylediğim gibi aslında dosyanın konumunu biliyorum ancak komutun kullanımını denemek üzere dosyanın konumunu bilmiyormuşçasına bir test edelim. Testimizde root dizinindeki .jpg uzantılı dosyaları araştıralım ve silelim.

enter image description here

Çıktıda da görüldüğü gibi .jpg uzantılı resim dosyalarını tek tek bulup silmeden önce, çıktıda belirtilen konumlarda bulunuyorlardı. Ancak arama ve tek tek otomatik olarak silme işlemini gerçekleştirmemiz ile birlikte dosyalar silindi. Silinme durumunu da tekrar arama işlevindeki find komutunu vererek teyit etmiş olduk.


Komutumuzun işleyişi tam olarak şöyle oldu;

find /root -name *.jpg komutu ile root dizini altındaki tüm .jpg uzantılı dosyaları listeledik.

Bu listelenen dosya konum ve varlık bilgilerini xargs komutuna pipe( | ) argümanı sayesinde aktardık.

xargs komutu ise eline geçen bu bilgiler sayesinde dosyanın konumunu saptayarak tek tek silme işlemini gerçekleştirebildi.


xargs komutu exec isimli başka bir komuta benzer şekilde çalışmaktadır. Merak edip öğrenmek isteyen arkadaşlar ayrıca exec komutuna bakabilirler.

Dosya Kopyalama-Taşıma-Silme İşlemleri

Bu kısımda dosyaları kopyalama taşıma ve silme gibi işlemleri ele alacağız. Zaten kullanacağımız komutlar kısa oldukları için kullanımı ve akılda kalması çok kolay. İlk olarak dosya kopyalama işlemi ile anlatıma başlayalım.

CP

cp komutu kopyalama işlevindedir. Kullanımı cp kaynak hedef şeklindedir. Örnek üzerinden açıklayalım.

enter image description here


Komutumuzu açıklayacak olursak;

Desktop dizinindeyken ls komutu ile bulunduğumuz dizindeki dosyaları listeliyoruz. Ve çıktıda da görüldüğü üzere masaüstünde "filazof" isimli bir belge bulunuyor.

cd yeni_dizin komutuyla yeni_dizin konumuna gidiyoruz.

ls komutu ile buradaki dosyaları listeliyoruz. Bu dizinde ise yalnızca "yeni" isimli bir klasör mevcut.("filazof" isimli dosyanın bu konumda bulunmadığını teyit etmiş olduk.)


cd .. komutu ile bir önceki dizine dönüyoruz. "filazof" dosyasını yeni_dizin konumuna taşımak üzere cp filazof yeni_dizin şeklinde komutumuzu kullanıyoruz.

Daha sonrasında ise cd yeni_dizin komutu ile yeni_dizin konumuna gidip ls komutu yazarak "filazof" isimli dosyamızın kopyalandığını teyit etmiş oluyoruz.

Eğer bir dosyayı A dizininden B dizinine taşırsak ve B dizini içerisinde A dizininden taşıdığımız belge ile aynı isimde dosya varsa, taşıdığımız dosya mevcut konumda bulunan aynı isimdeki eski dosyanın üzerine yazılacaktır. Bu da B konumunda var olan eski dosyanın önceki içeriğinin yok olması demek. Böyle talihsiz bir durum yaşamamak için cp komutunu kullanmadan önce -i parametresini de eklememizde fayda var. Bu parametre cp komutunun aynı isimli bir dosya ile karşılaşma durumunda bize onay sormasını sağlayacaktır.

Anlatılanları daha iyi anlamak adına hemen bir örnek yapalım. Daha önceden yeni_dizin konumuna taşımış olduğumuz "filazof" dosyasını -i parametresini kullanarak tekrar cp komutu ile taşımaya çalışalım.

enter image description here

Çıktıda da görüldüğü gibi -i parametresini kullanarak yazdığımız kopyalama komutu bize "***cp: 'Desktop/merhaba''ın üzerine yazılsın mı? ***" şeklinde bir uyarıda bulundu ve bizden onay bekledi.

Elbette bu işlemleri çoklu dosya taşıma için de kullanabiliriz.

enter image description here


Hangi komutu neden kullandık zaten bir önceki örneğe benzer olduğu için tekrar açıklamıyorum. Çıktıları inceleyerek çok rahat şekilde anlayabilirsiniz.

Eğer o anda çalıştığımız dizine başka bir konumdan dosya kopyalamak istersek komutumuzu cp kopyalanacak_dosya_konumu . şeklinde kullanabiliriz. Nokta( . ) bizim o anda bulunduğumuz çalışma konumunu ifade ediyor. Örneği incelediğinizde her şey daha net anlaşılacaktır.



Görüldüğü üzere kopyalanacak olan dosyanın konumunu belirttik ancak bulunduğumuz konuma yani kopyalamak istediğimiz konumun direk adresini belirtmemize gerek kalmadı. Bunun yerine bulunduğumuz konumu temsil eden .(nokta) kullanmamız dosyanın kopyalanmasını sağladı.

Eğer bulunduğumuz konumdan bir üst konuma kopyalamak istersek komutu cp dosya_adresi .. şeklinde kullanmamız yeterli olacaktır.

enter image description here

Çıktıları karşılaştırarak dosyayı bir önceki dizine kopyalamayı (iki nokta) .. ile kolaylıkla yapabildiğimizi görebilirsiniz. (Eğer "deneme" isimli dosyayı kopyalarken kullandığımız komutta yer alan, dosyanın konumunu belirtme kısmı kafanızı karıştırdıysa belirteyim; çıktıda kopyalanan konumda yer alan ~ işareti ana dizin adresini yani root kullanıcısı için
/root konumunu belirtiyor. "deneme" isimli dosya bu konumda olduğu için direk bu şekilde bir kullanımı tercih ettim. Bunun yerine cp /root/deneme .. komutunu da kullanabilirdim.)

MV

Bu komut dosya taşıma ve uzantı değiştirme gibi işlevlere sahiptir. Dosya taşıma işlevi tıpkı cp komutunda olduğu gibidir. Yani komutun kullanımı mv dosya_konumu taşınacak_konum şeklindedir.

enter image description here

RM

Dosya dizin silme işlevinde kullandığımız komuttur. Kullanımı rm silinecek_dosya_dizin şeklindedir.

enter image description here

Dosyalar tekil olarak silinebileceği gibi çoklu silme işlemi de gerçekleştirilebilir. Hatta daha önce gördüğümüz joker karakterleri de kullanırsak isim, uzantı gibi filtrelere göre sınırlandırarak toplu dosya silme işlemi gerçekleştirebiliriz. Örnek olması açısından masaüstünde yer alan 2 adet .py uzantılı dosyayı tek seferde rm *.py komutu ile siliyorum.

enter image description here

Joker karakterlerin kullanım alanları oldukça geniştir. Sizler de ihtiyacınıza göre filtreleme yaparak bu işlemleri istediğiniz doğrultuda gerçekleştirebilirsiniz.(Bu konuyu detaylıca ileride Joker Karakterler kısmında ele alacağız.)

SHRED

Bu komut sayesinde dosyalarımızı daha güvenli şekilde silebiliriz. shred komutu dosyanın içerisine rastgele bitler yazarak dosyanın okunmaz hale gelmesini sağlıyor. Parametresiz kullanımda dosyaya 3 kez rastgele bit eklerken n parametresini kullanarak bu eklenecek olan rastgele bit sayısını istediğimiz doğrultuda düzenleyebiliyoruz. Eğer yapılan işlemi komut satırından takip etmek istersek v parametresini de kullanabiliriz. Ayrıca u parametresini kullanmamız halinde dosya işlem sonrasında silinir.






DERS #9 BİTMİŞTİR.

DERS #10
@'pump

T%C3%BCrkHackTeam_Logo.png
Elinie sağlık.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.