İçerik Menüsü

9.Doküman

Dosya İşlemleri

Konu Etiketleri

touch , cat , tac , rev , echo , more , less , head , tail , nl , sort , paste , tee , cmp , grep , find , xargs , cp , mv , rm , shred

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.

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.

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

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

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

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

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.

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.

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.

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.

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.

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.

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.

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.

Çı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 artık bu komutun varlığından haberdarsınız, eğer hatırlamak için bakmanız 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.

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

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.

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

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

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.

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.

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.

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.

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

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.

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.

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

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

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

nl

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

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

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.

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

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.

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.

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

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

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.

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.

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.

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

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.

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.

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

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

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

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

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.

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.

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

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 -min.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 -min.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 -min.jpg uzantılı dosyaları araştıralım ve silelim.

Çıktıda da görüldüğü gibi -min.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 *-min.jpg komutu ile root dizini altındaki tüm -min.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.

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.

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

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.

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

rm

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

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.

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.

Alıştırmalar Hakkında

Öğrendiğiniz bilgilerin kalıcı olması için mutlaka bolca alıştırma yapmalısınız.Burada belirtilen alıştırmalar dışında da kendi kendinize özellikle de zorlandığınız konularda bol bol alıştırmalar yapın. Aksi halde öğrendiğiniz bilgiler kısa sürede unutulup gidecektir. Yani gerçekten öğrenmek istiyorsanız lütfen öğrendiğinizi hissede kadar alıştırmalar yapın.

 "a", "b", "c","d" adlarında 4 klasörü tek seferde oluşturun ve 4 klasörü tek seferde kontrollü yani tek tek onay isteyecek şekilde silin.

cat  komutu ile dosya oluşturup içerisine "deneme metni" şeklinde bir ifade yazın.

cat  komutu yardımıyla içerisinde ifadelerin yer aldığı dosyayı silerek yeni ifadeler ekleyin.

İçerisinde ifadelerin yer aldığı dosyaya cat  komutu ile ekleme yapın.

Bulunduğun konumdaki dosya ve dizinlerin bilgilerini "bilgiler" isimli bir dosyaya kaydet.

Mevcut bir dosya içeriğini "kopya" isimli bir dosya oluşturarak aktar.

Oluşturmuş olduğun kopya isimli dosyayı cat  komutu ile konsoldan oku.

Herhangi bir dosya içeriğini ters şekilde konsola bastır.

Herhangi bir dosya içeriğini dizeleri sondan başa doğru çevirerek ters şekilde konsola bastır.

Konsola "Selamlar" ifadesini bastır. 

echo  komutu yardımıyla "örnek" isminde bir dosya oluştur ve aynı zamanda dosyaya "örnek metin" şeklinde bir ifade ekle. 

more  komutu ile /etc  dizini içerisindeki profile  isimli dosyayı okuyun.

/etc  dizini içerisindeki profile  isimli dosyanın ilk 10 satırını ekrana bastırın.

/etc  dizini içerisindeki profile  isimli dosyanın son 10 satırını ekrana bastırın.

/etc  dizini içerisindeki profile  isimli dosyanın ilk 8 satırını ekrana bastırın.

/etc  dizini içerisindeki profile  isimli dosyanın son 5 satırını ekrana bastırın.

/etc  dizini içerisindeki profile  isimli dosyanın içeriğini satır numaraları ile birlikte görüntüleyin.

Herhangi bir dosya içeriğini a' dan z' ye alfabetik sıralanmış şekilde konsola bastırın.

Herhangi bir dosya içeriğini z' den a' ya ters alfabetik sıralanmış şekilde konsola bastırın.

Herhangi iki dosyayı aynı anda yan yana olacak şekilde konsola bastırın.

cmp  komutunu kullanarak benzer iki dosya arasındaki farkları sorgulayın.

grep  komutu ile /etc  dizini içerisindeki profile  isimli dosyada "if" ifadesinin geçip geçmediğini sorgulayın.

grep  komutunu kullanarak elde ettiğiniz arama sonuçlarının sonrasındaki yer alan 2 satırın daha basılmasını sağlayın.

grep  komutunu kullanarak elde ettiğiniz arama sonuçlarının öncesindeki yer alan 3 satırın daha basılmasını sağlayın.

grep  komutunu kullanarak elde ettiğiniz arama sonuçlarının öncesinde ve sonrasında yer alan 1 satırın daha basılmasını sağlayın.

/root  konumundayken bulunduğunuz dizindeki içerikleri listeleyip grep  komutu yardımıyla "D" ifadesi ile başlayanları filtreleyerek konsola bastırın

find  komutunu kullanarak /etc  dizini içerisindeki "doc" ifadesiyle başlayan tüm klasör ve dosyaları bularak listeleyin.

find  komutunu kullanarak /etc  dizini içerisindeki "doc" ifadesiyle başlayan tüm dosyaları(yani yalnızca dosyaları) bularak listeleyin.

find  komutunu kullanarak /etc  dizini içerisindeki "doc" ifadesiyle başlayan tüm klasörleri(yani yalnızca klasörleri) bularak listeleyin.

find  komutunu kullanarak /etc  dizini içerisindeki tam olarak 5 gün önce değişikliğe uğramış tüm dosya ve dizinleri bularak listeleyin.

find  komutunu kullanarak /etc  dizini içerisindeki 5 günden daha kısa bir süre önce değişikliğe uğramış tüm dosya ve dizinleri bularak listeleyin.

find  komutunu kullanarak /etc  dizini içerisindeki 5 günden daha uzun bir süre önce değişikliğe uğramış tüm dosya ve dizinleri bularak listeleyin.

find  komutunu kullanarak /etc  dizini içerisindeki 50 günden daha kısa bir süre önce değişikliğe uğramış olan tüm dosyaları(yani yalnızca dosyaları)  bularak listeleyin.

root  dizini içerisinde sonu .png ile biten tüm resim dosyalarını bulup xargs  komutu yardımıyla bu dosyaların bulundukları konum bilgilerini bir dosyaya aktarın.

Masaüstü konumuna bir dosya oluşturun ve daha sonra bu dosyayı Documents(Dokümanlar) dizinine kopyalayın.

Documents(Dokümanlar) dizinine kopyalamış olduğunuz dosyayı Downloads(İndirilenler) dizinine taşıyın.

Downloads(İndirilenler) dizinine taşımış olduğunuz dosyayı silin.

Bir dosya oluşturun ve içerisine birkaç ifade ekleyip kaydedin. Daha sonra dosya içeriğini shred  komutu yardımıyla 7 kez rastgele bit eklemek suretiyle okunamaz hale getirip silin. Bu işlemleri de konsoldan takip edebilecek şekilde yerine getirin.(hepsini tek seferde bir komut ile yapın)

Geri Bildirimde Bulunun

Sizlere daha verimli bir kaynak sunabilmemiz için, uygulamada veya dokümantasyonlarda yer alan tüm hata ve eksiklerimizi bize bildirebilirsiniz.