Her Linux kullanıcısının bilmesi gereken Linux dosya ve klasör komutları

Linux dosya sisteminin yapısını incelediğimiz yazının ardından, bu yazımızda da neye göre ve nasıl adlandırıldığını bildiğimiz dosya sistemindeki klasör ve dosyaları, terminal öykünücü üzerinden nasıl görüntüleyeceğimizi, bu dosya ve klasörler üzerinde komutlarla nasıl işlem yapacağımızı anlatmaya çalışalım. Linux dosya ve klasör komutları, bir Linux sistemini sistem içinden ya da uzaktan yönetecek ve Linux’ta kodlama yapacak kullanıcılar başta olmak üzere pek çok kullanıcının bilmesi gereken temel komutlardır.

Yazının ilerleyen bölümlerinde hangi komutları anlatacağımızı da şimdiden listeleyelim. Aşağıdaki komutların kullanımını işleyeceğiz.

Grafik arayüzü ile Linux sistemi kullanırken sanal dizin yapısındaki klasörler arasında farenizi kullanarak dilediğiniz gibi gezinebilirsiniz. Ancak komut satırı arayüzü kullanırken dizin yapısında gezmek istiyorsanız, öncelikle “cd” komutunu nasıl kullanılacağını bilmeniz, fare kullanmayı bildiğiniz gibi şart.

Klasörler arasında gezinme

Bir terminal penceresi açtığınızda, komut girmenizi bekleyen aşağıdakine benzer bir metinle karşılaşırsınız;

Buradaki bilgilerden şunları anlıyoruz; kabuk oturumunu (shell session) açan kişi “taylan” kullanıcısı ve “teknopusula” adlı sistemde oturum açmış. Dolar işareti de bize kullanıcının “root” yetkisi kullanmadan oturum açtığını gösteriyor. Bunları bir önceki yazımızdan biliyoruz.

Kabukta bir oturum açtığımızda, oturum /home/kullanıcı klasöründe başlar diyebiliriz. Yukarıdaki örnekte bu /home/taylan klasörü demek. Bunu kontrol edelim.

present working directory” anlamına gelen “pwd” komutu o an kabuk oturumunun hangi klasörde olduğunu gösterir. Komutu girip sonuçlarına bakalım:

Komut çıktısı beklendiği gibi şu an oturumun açık olduğu klasörü gösterdi.

Klasörler arasında geçiş yapmamızı sağlayan, bir başka ifadeyle, kabuk oturumunu başka bir klasöre taşımamızı sağlayan “cd” komutunu kullanarak bir başka klasöre gidelim.

cd” komutu “change directory” kelimesinden gelir. Kullanımı ise şöyledir:

Şimdi /usr/bin adlı klasöre gitmeyi deneyelim.

Komut girmemizi bekleyen alandaki değişikliğe dikkat edin.  Tilde ( ~ ) işaretinin yerine gelen /usr/bin aslında gittiğimiz klasörü gösteriyor, ama biz yine de pwd komutu ile kontrol edelim;

doğrulamış olduk.

Bazı terminaller -nadir de olsa- kabuk oturumunun o an hangi klasörde olduğunu komut satırında göstermeyebilir, bunu belirtelim. Göstermiyor olsa bile pwd komutu bu sorunu çözecektir.

cd” komutunu kullanarak istediğiniz yolu belirtip anında o klasöre geçiş yapabilirsiniz. Eğer cd komutundan sonra herhangi bir klasör belirtmezseniz (yani boş bırakırsanız), komut sizi /home/kullanıcı klasörüne götürür.

Tilde işaretinden ( ~ ) /home/kullanıcı klasöründe olduğunuzu anlayabilirsiniz.

Alt klasörlere erişme

O an bulunduğumuz klasörün alt klasörlerine nasıl erişeceğimize bakalım.

/home/taylan klasörünün içinde kullanıcı dosyaları olduğunu söylemiştik. “taylan” adlı kullanıcı klasörünün içinde “yazilar” adlı bir klasör olduğu varsayalım ve bu klasöre cd komutu ile gidelim. Normalde cd komutunu şöyle kullanmamız beklenir;

yazilar” adlı klasöre gittik, ama bunu yapmanın daha kolay yolu vardı. Çünkü biz zaten ~$ işaretinden anlaşılacağı üzere /home/taylan klasöründe idik. Dolayısıyla bir alt klasöre gitmek için en baştan kök dizini (/) belirterek adres girmemize gerek yok. Sadece klasör ismini girmemiz yeterli.

Üst klasörlere erişme

Bulunduğumuz klasörün bir üst klasörüne erişmek istediğimizde cd komutundan sonra bir boşluk bırakıp “..” kullanırız. Şöyle ki;

Yukarıdaki örnekte kullanıcı klasöründe iken /usr/bin klasörüne gittik ve akabinde “cd ..” komutu ile bir üst klasör olan /usr klasörüne gittik. Doğrulamak için de pwd komutunu kullandık.

Dosya ve klasörleri listeleme

Klasörler arası geçiş ile alt ve üst klasöre geçişi öğrendik. Peki o an bulunduğumuz klasörün içinde hangi dosya ve klasörlerin olduğunu nasıl görürüz?

Bu şekilde listeleme yapmak için kullanacağımız komut “ls”. Kullanıcı klasörünün içini listeleyelim;

ls komutu ile kullanıcı klasörünü listeledik

/home/taylan klasörünün altında yukarıda gördüğünüz klasörler var. Şimdi “yazilar” klasörüne giderek buradaki alt dosya ve klasörleri listeleyelim;

yazilar” klasörünün içinde hem klasörler hem de .txt ve .doc uzantılı iki dosya olduğunu gördük.

Çoğu terminal öykünücü, dosya, klasör, çoklu ortam dosyası, sistem dosyası vs. gibi farklı yapıları farklı renklerde gösterir. Linux Mint için örneklerdeki renk seçenekleri ile karşılaşıyoruz, sizin dağıtımınınıza göre farklı renkler görebilirsiniz.

Eğer renk yeteneği olmayan bir terminaliniz varsa ya da sanal konsol kullanıyorsanız dosya ve klasörleri birbirinden ayırmak için ls komutuna “-F” parametresi ekleyin. Çıkan sonuçlarda ismin önünde “/” işareti varsa o bir klasördür. Aşağıda örneği görebilirsiniz.

“-F” parametresi klasör ve dosya ayrımını gösterir
Gizli hiçbir şey kalmasın, gizli dosyaları görelim

Eğer mevcut klasörde bulunan gizli klasör ve dosyaları görüntülemek isterseniz, ls komutuna “-a” parametresini ekleyebilirsiniz. Kullanıcı klasöründe sorgu yapalım;

“-a” parametresi gizli dosya ve klasörleri gösterir

Biraz önce aynı sorguyu parametresiz yaptığımız için göremediğimiz birçok dosya ve klasör ortaya çıktı. Linux’ta gizli dosya ve klasörler “.” (nokta) ile başlar. “.” ile başlayan dosyaları bu yüzden görememiştik.

Linux’te detaylı listeleme yapmak

Klasörün içindekileri daha detaylı görmek istiyorsak, ls komutuna “-l” (long) parametresi ekleyebiliriz; bu listelemeyi “yazilar” klasörüne uygulayalım;

“-l” parametresi ile detaylı listeleme yapıyoruz.

Çıkan sonuçlardaki sütunlar sırasıyla şunları ifade eder:

  • Dosya tipi. (d) klasör, (-) dosya… Bizim klasörümüzde sadece klasör ve dosya var. O nedenle ilk sütunda (d) ve (-) gördük.
  • Dosya izinleri (rwxr-x… gibi)
  • Hard link sayısı
  • Dosya sahibi kullanıcı adı
  • Dosya sahibi birincil grubun adı
  • Dosya boyutu (byte cinsinden)
  • Dosyanın son değişme tarihi
  • Dosya ya da klasör adı

ls” komutu ile ilgili kullanılabilecek başka parametreler de var. Bunları öğrenmek için komut satırına

ya da

yazabilirsiniz. “Man” dosyaları Linux dünyasındaki program ve komutların el kitabıdır. Kullanımı az önce verdiğimiz gibi “man [komut]” şeklindedir. Çoğu komut ve program yardım seçeneği için “help” parametresini kullanır.

Linux’te listeleri filtrelemek

Klasörün içindeki tüm dosyaları değil de sadece bazı dosyaları detaylı listelemek isterseniz birkaç seçenek gösterelim.

ls” komutunun ardından -l parametresi ve ardından dosya adını yazabilirsiniz. Tek bir dosya ayrıntısı için kullanılabilir.

sadece bir dosyanın ayrıntısını görüntülemek

Eğer tek bir dosya değil de belli bir karakterle başlayan dosyaları listelemek isterseniz, yıldız (*) karakterini aşağıdaki gibi kullanabilirsiniz. Sadece “t” harfiyle başlayan dosyalar görüntülendi.

sadece “t” ile başlayan dosyaları listeledik.

Eğer dosya adı ne olursa olsun, uzantısıh” ile başlayanları listelemek istersek; aşağıdaki gibi listelenir.

dosya adını ne olursa olsun, uzantısı “h” ile başlayanlar.

Yıldız simgesi, bulunduğu yerdeki karakterler için “her ne olursa olsun” anlamı taşır. Dolayısıyla *.* sorgusu yapsaydık tüm sonuçlar çıkardı. Yıldız karakterini bir ya da birden çok karakter yerine kullanabiliyoruz.

Eğer filtreleyeceğiniz karakter sadece bir tane ise soru işareti (?) simgesi çok kullanışlı olabilir. Örneğin;

sadece bir karakteri farklı dosyaları listeledik.

Yukarıdaki örnek için köşeli parantez ([ ]) kullanarak farklı listelemeler de yapabiliriz. Şöyle ki;

Yıldız (*), soru işareti (?) ve köşeli parantez ([ ]) ile yapılan bu işlemler sadece ls komutu için değil, kabuk ile yapacağımız bir çok işi kolaylaştıracağı için önemli.

Linux’te Dosya İşleme

Linux kabuğu, dosya oluşturma, silme, kopyalama ve taşıma gibi işlemler için pek çok komut sağlar. Şimdi bu komutlarla devam edelim.

Linux’te dosya oluşturmak

Bazı durumlarda log kayıtları almak ya da not tutmak gibi birçok sebepten boş dosyalar oluşturmak gerekebilir. Böyle durumlarda “touch” komutu hızlı bir şekilde boş dosya oluşturmanızı sağlar. Birkaç dosya oluşturursak aşağıdaki gibi olur.

touch komutuyla dosya oluşturma

Her oluşturulan dosyadan sonra ls -l komutuyla dosya durumlarını kontrol ettik. Son oluşturulan dosyanın bir uzantısı yok, Linux’te dosyalar için uzantı eklemek zorunda değilsiniz.

Birden fazla dosyayı aşağıda olduğu gibi aynı komut satırında oluşturabilirsiniz.

Linux’te Dosya ve klasör kopyalamak

Dosya ve klasörleri başka bir alana kopyalamak ya da aynı alanda kopyasını oluşturmak için “cp” komutunu kullanıyoruz. Kullanımı şu şekilde;

Bir dosyanın başka bir klasörde kopyasını oluşturup kontrol edelim;

cp komutuyla bir dosyayı kopyalamak

Yukarıda gerçekten güzel bir örnek var. Kullanıcı klasörünü listeledik (ls), “yazilar” klasörüne girdik (cd yazilar), “notlar.doc” adlı dosyanın ayrıntısına baktık (ls -l notlar.doc), “notlar.doc”u taylan klasöründeki “kopyalar” klasörüne kopyaladık (cp notlar.doc /home/taylan/kopyalar/), bir üst dizine çıkıp “kopyalar” klasörüne girdik ve kopyaladığımız dosyanın detaylarına baktık.

Detaylara bakma sebebimiz şuydu, asıl dosyanın oluşturulma tarih ve saati ile kopyanın tarih ve saati aynı değil, bu detayı buradan görebilmek. Boyut ve diğer detaylar aynı.

Buradaki kopyalama işleminde hedef klasörü uzun yoldan gösterdik (cp notlar.doc /home/taylan/kopyalar/), aslında şöyle de diyebilirdik;

../ ifadesi kafanızı karıştırmasın. Şöyle düşünün, biz işlemi yaparken /home/taylan/yazilar klasöründeydik. cd .. ile hatırlarsanız bir üst klasöre çıkıyorduk, yani “..” ifadesi bir üst klasörü temsil ediyor. Dolayısıyla hedef olarak ../ dediğimiz kısım bizi /home/taylan klasörüne çıkarır, devamındaki ../kopyalar da bizi hedefe ulaştırır. Deneyerek daha iyi anlayabilirsiniz.

Bir de aynı klasörde farklı isimle bir kopya oluşturalım.

Zaman damgasının değiştiğine dikkat edin.

Kopyalarken dosya kaybetmeyin

Oldukça önemli bir noktaya değinelim. Eğer yedek alma amacıyla dosyayı kopyalamaya çalışıyorsak ve yedeklerin farklı zamanlardaki eski hallerinin muhafaza edilmesi gerekiyorsa, cp komutuyla birlikte “-i” parametresini eklemek aynı ada sahip bir dosyayı silinmekten (üzerine yazılmaktan) kurtarabilir.

Böyle durumlarda eğer aynı ada sahip dosya varsa “-i” parametresi bizi uyaracaktır, Parametre kullanmazsak, aynı addaki eski dosya silinir ve yenisi üzerine yazılır.

Aşağıdaki örneği incelersek;

“-i” parametresi ile kopyalama yapmak

Dosyayı yedek_2 olarak kaydetmek istediğimizde “-i” parametresi kullandığımız için kabuk tarafından uyarıldık. İlk denemede üzerine yazmak istemedik ve hayır anlamında “h” karakterini girdik. Zaman damgasından da anlaşılacağı üzere dosya ilk denemede değişmedi.

Ancak ikinci kopyalamada yine uyarı geldi ama bu defa evet anlamında “e” ile kabul ettik. Zaman damgasına bakarsanız dosya eskisinin üzerine yazıldı.

Kopyalama, taşıma gibi işlemlerde “-i” parametresinin kullanılması alışkanlık haline getirilirse vahim sonuçlardan uzak kalınabilir.

Dosyayı kopyalamak için illa o klasörde olmak zorunda değilsiniz. Başka bir klasördeyken farklı klasörlerdeki dosyaları kopyalayabilirsiniz. Örneğin;

başka klasörlerden kopyalama yapmak

/usr/bin klasöründeyken başka bir klasördeki GNU_tool dosyasını “taylan” klasörüne kopyaladık.

Son olarak bir klasörü içindekilerle birlikte kopyalamaya bakalım. Klasör kopyalarken cp komutundan sonra “-R” parametresi kullanılır.

cp -R komutu kullanarak klasörleri içeriğiyle kopyalayabiliriz.

pusula_1” klasörünü “pusula_2” klasörü adıyla içeriğiyle birlikte kopyaladık ve içeriğini de kontrol ettik.

Linux’te dosyaları taşıma ve yeniden adlandırma

Taşıma ve yeniden adlandırma için kullandığımız komut “mv”.

Şöyle bir örnek yapalım, pusula1 adlı klasördeki tp.log dosyasını pusula2 adlı klasöre taşıyalım.

mv komutu ile dosya taşıma

Burada ls komutunu başka bir klasörün içinden vererek kontrol gerçekleştirdiğimize dikkat edin.

mv” komutu bir dosyanın adını değiştirmek için de kullanılır. Mesela pusula2 klasöründeki tp.log dosyasının adını teknopusula.log olarak değiştirelim. Değişim öncesi ve sonrası zaman damgalarına dikkat edin.

mv komutu ile yeniden adlandırma

Yeniden adlandırma işleminde zaman damgası değişmedi, çünkü aynı dosya sadece ad değiştirildi. Başka yeni bir dosya da oluşmadı. Eğer cp komutu ile yapmış olsaydık zaman damgası değişirdi.

Linux’te dosyaları silmek

Dosya silmek için “rm” (removing) komutunu kullanıyoruz.

rm komutuyla dosya silmek

Dosya hiçbir uyarı olmadan silindi. “ls” komutuyla kontrol edince de hiçbir dosya görünmedi.

Dosyaları hatalı silmekten kurtulmak için “-i” parametresini kullanabiliriz.

rm -i komutu dosya silerken uyarı yapar

-i” parametresini kullanarak “dikkatli_sil” adlı dosyayı silerken kabuk tarafından uyarıldık.

Linux’te klasör oluşturmak

Yeni bir klasör oluşturmak için “mkdir” komutunu kullanıyoruz. “yeni_bir_klasor” adlı bir klasör oluşturalım.

mkdir ile klasör oluştuma

İç içe klasörler oluşturmaya çalışalım.

mkdir ile iç içe klasörler oluştururken -p parametresi kullandık

mkdir klasor1/klasor2/klasor3” komutu buna izin vermedi. Ancak mkdir komutu ile birlikte “-p” parametresini kullandığımızda iç içe üç klasör oluşturabildik.

Linux’te klasörleri silmek

Klasör silmek için kullanılan bir komut var “rmdir” adında, ancak beklediğiniz sonuçları vermeyebilir. Beklendiği gibi çalışmamasının güzel bir nedeni de var. Örneğe bakalım. Önce bir klasör oluşturup sileceğiz, ardından başka bir klasör oluşturup içerisinde bir dosya oluşturacağız ve klasörü yeniden silmeye çalışacağız:

bir klasör oluşturup bu boş klasörü rmdir ile sildik
içi dolu bir klasörü rmdir ile silemiyoruz

Birinci durumda “silinecek_klasor” kolaylıkla silindi ama ikinci durumda klasör boş olmadığı gerekçesiyle klasörü silemedik.

Aslında bu iyi bir şey. İçeriğinde yüzlerce dosya varken bir klasörü sildiğinizi düşünün. Peki içinde dosya olsa de klasörü silemeyecek miyiz?

İçeriğinde dosya varken bir klasörü kullanmak için rm komutu ile birlikte “-r” parametresini kullanıyoruz. Bir nevi silmeye zorluyoruz. Aslında bu komut ve parametreyi bir dosyayı silinmeye zorlarken kullanırız. İçi dolu bir klasör de silinmeye zorlanmak zorunda.

rm -r komutu ile klasör silebiliyoruz

Klasör hatasız silindi. Ancak bu tür işlemleri “-i” parametresi ile yapmak gerektiğini hatırlatalım.

rm komutuyla klasör silerken -i parametresini mutlaka kullanmak gerek

-i” ve “-r” parametrelerini birlikte “-ri” şeklinde kullanabildiğimize dikkat edin. Silinecek klasör ve içerik için ayrı ayrı uyarı aldık ve evet anlamında “e” diyerek onayladık.

Linux’te klasörleri ağaç şeklinde listelemek

İç içe klasörlere ve dosyalara sahip bir klasörü silmeden önce bir ağaç yapısında klasör içeriğine göz atmak faydalı olabilir. Bu işlem için “tree” komutunu kullanabiliriz.

yazilar” klasörünün tüm içeriğini ağaç şeklinde listeledik. İçeriğinde 3 klasör ve 13 dosya var. Bu klasörü silerken dikkatli olmak gerek.

Eğer “tree” komutu kullandığınız dağıtımda çalışmazsa, Debian tabanlı sistemler için aşağıdaki komutla bunu kurmanız gerekebilir.

Bu komut sonrasında root yetkiniz varsa şifrenizi girmelisiniz.

Temel Linux dosya ve klasör komutları konusunu bitirmiş olduk. Tekrar değinmekte fayda var, komutların kullanımı ve parametreleri hakkında “man” sayfalarına ve “–help” parametresine başvurmanız faydalı olabilir. Mesela;

gibi.

Bu bölümümün de sonuna geldik. Bir sonraki yazımızın konusu, komut satırı arayüzü kullanarak dosya içeriklerini görüntülemek, içeriğin tamamını ya da bir bölümünü görüntülemek ve bir dosya içeriğinde meydana gelen değişiklikleri takip etmek hakkında olacak.

Tüm Linux yazılarımıza Linux Dersleri bağlantısından ulaşabilirsiniz.

 

7 YORUMLAR

  1. Merhabalar,

    Teknopusula, linux hakkında kafama bir şey takıldığında başvurduğum kaynakların başında yer alıyor.

    Bu konuda ne kadar teşekkür etsem azdır. Çok faydalandığımı söylemek istedim.

    Klasör silme ile ilgili bir sorum olacak. İçerisinde dosya olan bir klasörü silmek istediğimiz de; “rm -ri klasor_adi” komutunu kullanıyoruz. Ancak bu işlem her dosya ve klasör için ayrı ayrı onay istiyor. Klasörün içerisinde çok fazla dosya olduğunda bu işlem can sıkıcı hale geliyor. Onay sormadan yani otomatik onaylı olarak silme işlemini gerçekleştiremiyor muyuz?

    Teşekkürler

    • Merhaba Can, komutu “i” parametresi olmadan “rm -r klasör_adı” şeklinde yazmayı denediniz mi? Çünkü i parametresi onay gerektirir.

      • “i” parametresi olmadan da denedim, sonuç değişmedi her dosya için ayrı onay istiyor. Belki kullandığım “Centos 6” ile alakalı bir durumdur.

        • Centos kabuk olarak “bash” yerine “tcsh” kullanıyor diye biliyorum. Öğrenmek için komut satırına “echo $SHELL” yazın. Kabuk tcsh ise komut farklılığına bakmam gerekir sanal bir Centos kurarak 🙂 ya da siz de araştırabilirsiniz.

          • Centos 6 ve 7’de “bash” varmış. (İyi bilgi 🙂 ). Şöyle deneyebilir misiniz “rm -rf klasor_adı”, buradaki -f parametresi (force) silmeye zorlamak için kullanılıyor. İşe yarayabilir. Eğer olmazsa “bash”i güncellemeyi deneyin. Sırasıyla “yum clean all”, “yum -y update bash”, “yum -y update” komutlarını kullanabilirsiniz.

BİR CEVAP BIRAK