1.                        

9-) Sıfırdan Temel Linux Eğitimi [Dosya İşlemleri]

'Dökümanlar' forumunda Al-Farabi tarafından 8 Temmuz 2018 tarihinde açılan konu

  1. Al-Farabi

    Al-Farabi Albay

    Katılım:
    16 Ocak 2016
    Mesaj:
    1,324
    Beğeniler:
    103
    Ödül Puanları:
    63
    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, vb. 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 touchkomutu 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.

    [​IMG]

    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.

    [​IMG]

    Çı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 dosyların tarih etiketlerini nasıl değiştirebiliriz bunu görelim.

    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. [​IMG]

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

    [​IMG]

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

    [​IMG] [​IMG]

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

    [​IMG]

    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.

    [​IMG]

    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 veri(ler) dosyaya işlenip kayıt oluyor.

    [​IMG]

    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.

    [​IMG]

    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 var olan dosyaya yazılsın istiyorsak o zaman > operatörü yerine >> operatörünü kullanırsak yeni veriler dosyaya eklenmiş olur.

    [​IMG]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 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.

    [​IMG]

    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 ki daha fazla detay için lütfen man kılavuz sayfasına göz atın.
     
    MrX bunu beğendi.
  2. Al-Farabi

    Al-Farabi Albay

    Katılım:
    16 Ocak 2016
    Mesaj:
    1,324
    Beğeniler:
    103
    Ödül Puanları:
    63
    tac
    İsminden de anlamış olacaksınız ki tac komutu önce gördüğümüz cat komutunun tersi şekilde çıktı veriyor. Bu durumu daha iyi anlamak için karşılaştırmalı olarak verilen çıktıyı inceleyiniz.

    [​IMG]

    rev
    Hazır terslikten bahsetmişken rev komutundan da söz etmemek olmaz. Bu komut dizeleri sondan başa doğru çevirerek ters şekilde ekrana basıyor. Bu durum en iyi örnek ile açıklanır. Hatta cat komutu ile de karşılaştırırsak sonuç daha net oraya çıkacaktır.

    [​IMG]

    Çıktılarda görüldüğü gibi dosya içeriğinde yer alan ifadeler rev komutu sayesinde ters şekilde ekrana basılmış oldu.

    Şimdi ben bu komutu nerede kullanacağım neden öğrendim demeyin. Bu konuya daha önce de değinmiştim, şimdi tekrar söylüyorum; burada öğrendiğimiz her komutu her zaman doğrudan kullanmayabilirsiniz ancak yeri geldiğinde böyle bir komutun varlığından haberdar olarak gerektiğinde dokümantasyona bakmak suretiyle komutun kullanımına en kısa sürede ulaşabilirsiniz. Yani bu komutun varlığından haberdarsınız eğer gerekirse burada olacak..

    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.

    [​IMG]

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

    [​IMG]

    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 yazmış 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.

    [​IMG]

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

    [​IMG]

    * (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. (Joker karakter/wildcard konusundan bu karakterler açıklanmıştır.)

    [​IMG]

    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 + , 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 çıkıtlarını echo komutu yardımı ile basalım.

    [​IMG]

    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.

    [​IMG]

    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 lskomutunun çı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.

    [​IMG]
     
    MrX bunu beğendi.
  3. Al-Farabi

    Al-Farabi Albay

    Katılım:
    16 Ocak 2016
    Mesaj:
    1,324
    Beğeniler:
    103
    Ödül Puanları:
    63
    more
    Şimdiye kadar öyle ya da böyle terminal üzerinden dosya okuma işlemi yapmamıza yardımcı olan komutlar gördük. Bu komutumuzda 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 komutu girerek 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.

    [​IMG]

    Çı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 tuşunu, şayet dosya içeriğini görüntüleyen bu ekranı kapatmak istersek ise qtuşunu kullanmamız yeterli.

    less
    Bu komutumuz da üst kısımda açıkladığımız more komutu ile aynı işlevdedir. Ayrıntısını merak ederseniz man sayfasına göz atmanız yeterli olacaktır.

    Ben yine de less komutu ile profile dosyasının içeriğinin okunduğu şeklini aşağıya bırakıyorum. Eğer more komutunda bir problem yaşamadıysanız bu komut kullanımında da kesinlikle yaşamazsınız.

    [​IMG]

    head-tail
    Aslında komutların isimleri yani head(kafa/baş) ve tail(kuyruk) bizlere komut hakkında az çok bilgi veriyor. Şöyleki 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.

    [​IMG]

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

    [​IMG]Ş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ı.

    [​IMG]

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

    [​IMG]

    nl
    Bu komutun işlevi satırları numaralandırarak çıktı vermektir. Hemen görelim.

    [​IMG]

    Çıktıda da görüldüğü üzere dosya içeriğinde yer alan ifadeler satır satır numaralandırılarak ekrana basılmış oldu.

    Ayrıca eğer listelenen içerik uzunsa bir önceki öğrendiğimiz head-tail komutları yardımı ile bu alanı düzenli şekilde sınırlandırabiliriz.
     
    MrX bunu beğendi.
  4. Al-Farabi

    Al-Farabi Albay

    Katılım:
    16 Ocak 2016
    Mesaj:
    1,324
    Beğeniler:
    103
    Ödül Puanları:
    63
    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.

    [​IMG]

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

    [​IMG]

    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ı pastekomutu 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.

    [​IMG]

    tee
    Yazmak istediğimiz ifadeleri hem komut satırına yansıtıp hem de bu ifadelerim bir dosya içerisine kayıt olmasını isterseniz kullanacağınız komut tee komutu olacaktır.

    Örnek üzerinden devam edelim.

    tee metin komutu ile "metin" isminde bir dosya açıyorum ve içerisine birtakım ifadeler ekliyorum daha sonra ekleme işlemim bittiğinde dosyayı kaydederek kapatmak üzere Ctrl + D tuş kombinasyonunu uyguluyorum. En son oluşturmuş olduğum dosya içeriğine bakmak üzere cat komutunu kullanıyorum.

    [​IMG]

    Çı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.

    [​IMG]

    İ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.
     
    MrX bunu beğendi.
  5. Al-Farabi

    Al-Farabi Albay

    Katılım:
    16 Ocak 2016
    Mesaj:
    1,324
    Beğeniler:
    103
    Ödül Puanları:
    63
    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 varmı diye kontrol etmek üzere konsola grep "hasan" isimler.txt komutunu veriyorum.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

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

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    Ş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 lskomutundan 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.

    [​IMG]

    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.
     
    MrX bunu beğendi.
  6. Al-Farabi

    Al-Farabi Albay

    Katılım:
    16 Ocak 2016
    Mesaj:
    1,324
    Beğeniler:
    103
    Ödül Puanları:
    63
    find
    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.

    [​IMG]

    Çı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 Kbyt'dan büyük olan dosyalar.
    • size -500k : 500 Kbyt'dan 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.
    [​IMG]

    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.

    [​IMG]

    Çı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 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.
     
    MrX bunu beğendi.
  7. Al-Farabi

    Al-Farabi Albay

    Katılım:
    16 Ocak 2016
    Mesaj:
    1,324
    Beğeniler:
    103
    Ödül Puanları:
    63
    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.

    [​IMG]

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

    [​IMG]

    Çı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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    Çı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 /rootkonumunu 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.

    [​IMG]

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

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    [​IMG]


    Dokümantasyon Kaynağı
    [​IMG]
    Her türlü soru, öneri veya görüşleriniz için bana bu adresten geri bildirimde bulunabilirsiniz.

    Videolu eğitimi incelemek için buraya tıklayın.
     
    MrX bunu beğendi.

Bu Sayfayı Paylaş

Share