Linux’ta Dosya ve Dizin İşlemleri
Dosya ve dizin işlemleri, Linux kullanırken sıklıkla ihtiyaç duyduğumuz işlemlerdir. Bu yazıda; Linux komut satırını kullanarak yeni dosya oluşturma, dosya ve dizinleri taşıma, kopyalama, yeniden adlandırma komutlarını inceleyeceğiz.
Linux’ta Dosya Oluşturma
Linux’ta “touch” komutu, yeni dosya oluşturmak için sıklıkla kullanılır. Ancak touch komutunun esas işlevi, dosyanın erişim ve değiştirme zamanlarını değiştirmektir.
touch komutunun man sayfasında da bu bilgiyi görebiliriz:
Update the access and modification times of each FILE to the current time.
A FILE argument that does not exist is created empty, unless -c or -h is supplied.
touch komutunu kullanırken, herhangi bir opsiyon belirtmezseniz, parametre olarak gönderdiğiniz dosya(lar)ın erişim ve değiştirme zamanları güncellenecektir. Ancak bu dosya(lar) yoksa, oluşturulacaktır:
[root@gnuadmin ~]# touch dosya1 dosya2
[root@gnuadmin ~]# ll
toplam 0
-rw-r--r--. 1 root root 0 Oca 10 16:57 dosya1
-rw-r--r--. 1 root root 0 Oca 10 16:57 dosya2
Var olan bir dosyaya “touch” çalıştırmak, o dosyanın içeriğini değiştirmez.
Linux’ta Dosya Silme
Linux’ta dosya(ları) silmek için “rm” komutu kullanılır. “rm” komutuna ekleyeceğiniz opsiyonlar ile, davranışını değiştirebilirsiniz.
Bu opsiyonları incelerken şöyle bir senaryoyu deneyelim. Bulunduğumuz dizinde “dosya1”, “dosya2” isimli 2 dosya var. “dizin1” isimli bir dizin var, içinde 2 dosya var. Son olarak “bos_dizin” isimli bir dizin var ve içi boş:
[root@gnuadmin ~]# ll
toplam 8
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 16:57 dosya1
-rw-r--r--. 1 root root 0 Oca 10 16:57 dosya2

rm Komutu Örnekleri
Bir dosyayı silmek için “rm dosyaadi” komutunu kullanabilirsiniz:
[root@gnuadmin ~]# rm dosya1
[root@gnuadmin ~]# ll
toplam 8
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 16:57 dosya2
Birden fazla dosyayı silmek için; dosya isimlerini, aralarında boşluk bırakarak ekleyebilirsiniz:
[root@gnuadmin ~]# rm dosya1 dosya2
[root@gnuadmin ~]# ll
toplam 8
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
Olmayan bir dosyayı silmeye çalışırsanız, uyarı alırsınız:
[root@gnuadmin ~]# ll
toplam 8
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:05 dosya1
-rw-r--r--. 1 root root 0 Oca 10 17:05 dosya2
[root@gnuadmin ~]# rm dosya1 dosya2 dosya3
rm: `dosya3' silinemedi: Böyle bir dosya ya da dizin yok
[root@gnuadmin ~]# ll
toplam 8
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
“dosya3” isimli bir dosya olmadığı için silemediğini belirtti. Ancak “dosya1” ve “dosya2” başarıyla silindi.
Silme işleminden önce bir uyarı almak için “-i” opsiyonu kullanılır:
[root@gnuadmin ~]# ll
toplam 8
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
[root@gnuadmin ~]# rm -i dosya1 dosya2
rm: normal boş dosya `dosya1' silinsin mi?e
rm: normal boş dosya `dosya2' silinsin mi?h
[root@gnuadmin ~]# ll
toplam 8
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
Gördüğünüz gibi, “dosya1″in silinmesi sorusuna “evet”, “dosya2” için ise “hayır” dedim ve “dosya2” silinmedi.
rm komutu ile dizin silmeyi denediğinizde bu işlemi gerçekleştiremediğinizi göreceksiniz. Dizinleri silmek için “-r, -R, –recursive” opsiyonlarından birini kullanmalısınız:
[root@gnuadmin ~]# rm bos_dizin/
rm: `bos_dizin/' silinemedi: Bir dizin
[root@gnuadmin ~]# rm -r bos_dizin/
[root@gnuadmin ~]# ll
toplam 4
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:08 dosya1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
rm komutu ile sadece boş dizinleri silmek istediğiniz bir senaryo düşünelim. Birden fazla dizini parametre olarak gönderdiniz ancak bunlardan hangisinin ya da hangilerinin dolu olduğunu kontrol etmek istemiyorsunuz. Burada yardımınıza “-d” opsiyonu koşar. Bu opsiyon, verilen dizinlerden yalnızca boş olanları siler:
[root@gnuadmin ~]# rm -d bos_dizin/ dizin1/
rm: `dizin1/' silinemedi: Dizin boş değil
[root@gnuadmin ~]# ll
toplam 4
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:08 dosya1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
Linux’ta Dizin Oluşturma / Boş Dizini Silme
Linux’ta dizin(ler) oluşturmak için “mkdir“, boş dizinleri silmek için ise “rmdir” komutu kullanılır.
Dizin oluşturmak için:
[root@gnuadmin ~]# mkdir bos_dizin yeni_dizin
[root@gnuadmin ~]# ll
toplam 12
drwxr-xr-x. 2 root root 4096 Oca 10 17:12 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:08 dosya1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
drwxr-xr-x. 2 root root 4096 Oca 10 17:12 yeni_dizin
Boş dizinleri silmek için:
[root@gnuadmin ~]# rmdir bos_dizin/ yeni_dizin/ dizin1/
rmdir: failed to remove `dizin1/': Dizin boş değil
[root@gnuadmin ~]# ll
toplam 4
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:08 dosya1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
Çıktıda görüldüğü üzere, “dizin1” dolu olduğu için silinemedi. Dolu bir dizini, içeriğiyle beraber silmek için “rm -r” kullanabilirsiniz. (-R ve –recursive de aynı işi yapar)
Linux’ta Dosya ve Dizin Kopyalama
Linux’ta dosya ve dizin kopyalamak için “cp” komutu kullanılır. “cp [opsiyonlar] kaynak hedef” şeklinde kullanılır.
“dosya1” dosyasının, “kopya” isimli yeni bir kopyasını oluşturma:
[root@gnuadmin ~]# cp dosya1 kopya
[root@gnuadmin ~]# ll
toplam 8
drwxr-xr-x. 2 root root 4096 Oca 10 17:39 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:08 dosya1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
-rw-r--r--. 1 root root 0 Oca 10 17:42 kopya
Birden fazla dosyayı, bir dizine kopyalama:
[root@gnuadmin ~]# ll bos_dizin/
toplam 0
[root@gnuadmin ~]# cp dosya1 dosya2 kopya bos_dizin/
[root@gnuadmin ~]# ll bos_dizin/
toplam 0
-rw-r--r--. 1 root root 0 Oca 10 17:43 dosya1
-rw-r--r--. 1 root root 0 Oca 10 17:43 dosya2
-rw-r--r--. 1 root root 0 Oca 10 17:43 kopya
Bir dizini, içeriğiyle beraber kopyalama:
[root@gnuadmin ~]# cp dizin1/ kopya_dizin
cp: `dizin1/' dizini atlanıyor
[root@gnuadmin ~]# cp -r dizin1/ kopya_dizin
[root@gnuadmin ~]# ls kopya_dizin/
dosya1 dosya2
İlk denemenin başarısız olduğunu fark etmişsinizdir. “cp” komutu ile dizinleri kopyalarken, “-r” opsiyonunu kullanmalısınız. rm’de de olduğu gibi “-R” ve “–recursive” de işinizi görecektir.
Linux’ta Dosya ve Dizin Taşıma / Yeniden Adlandırma
Bu iki konuyu tek başlık altına aldım. Çünkü iki iş için de “mv” komutu kullanılır.
Bir dosyayı yeniden adlandırma:
[root@gnuadmin ~]# ll
toplam 12
drwxr-xr-x. 2 root root 4096 Oca 10 17:43 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:08 dosya1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
-rw-r--r--. 1 root root 0 Oca 10 17:42 kopya
drwxr-xr-x. 2 root root 4096 Oca 10 17:44 kopya_dizin
[root@gnuadmin ~]# mv dosya1 yeni_dosya
[root@gnuadmin ~]# ll
toplam 12
drwxr-xr-x. 2 root root 4096 Oca 10 17:43 bos_dizin
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
-rw-r--r--. 1 root root 0 Oca 10 17:42 kopya
drwxr-xr-x. 2 root root 4096 Oca 10 17:44 kopya_dizin
-rw-r--r--. 1 root root 0 Oca 10 17:08 yeni_dosya
Bir dosyayı, farklı bir dizine taşıma:
[root@gnuadmin ~]# mv yeni_dosya kopya_dizin/
[root@gnuadmin ~]# ls kopya_dizin/
dosya1 dosya2 yeni_dosya
Bir dizini yeniden adlandırma:
[root@gnuadmin ~]# mv bos_dizin/ dolu_dizin
[root@gnuadmin ~]# ll
toplam 12
drwxr-xr-x. 2 root root 4096 Oca 10 17:01 dizin1
drwxr-xr-x. 2 root root 4096 Oca 10 17:43 dolu_dizin
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
-rw-r--r--. 1 root root 0 Oca 10 17:42 kopya
drwxr-xr-x. 2 root root 4096 Oca 10 17:47 kopya_dizin
Bir dizini, başka bir dizinin altına taşıma:
[root@gnuadmin ~]# mv dolu_dizin/ dizin1/
[root@gnuadmin ~]# ll
toplam 8
drwxr-xr-x. 3 root root 4096 Oca 10 17:48 dizin1
-rw-r--r--. 1 root root 0 Oca 10 17:06 dosya2
-rw-r--r--. 1 root root 0 Oca 10 17:42 kopya
drwxr-xr-x. 2 root root 4096 Oca 10 17:47 kopya_dizin
[root@gnuadmin ~]# ls dizin1/
dolu_dizin dosya1 dosya2
Özetle; bir dosya ya da dizini mv komutu kullanarak “aynı konumda” tutmayı denersiniz ismini değiştirecektir. Şayet kaynak ve hedef dizininiz farklı olursa, bu sefer taşıma işini yapacaktır.