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
Linux'ta dosya ve dizin işlemleri
Linux’ta dosya ve dizin işlemleri

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.