---
title: 'Oluşturma, Kopyalama ve Taşıma'
source: 'https://academia.sh/tr/kurslar/linuxa-giris/olusturma-kopyalama-tasima'
course: "Linux'a Giriş"
language: tr
updated: '2026-08-17T18:09:55+00:00'
license: 'CC BY-SA 4.0'
---

# Oluşturma, Kopyalama ve Taşıma

Dosya oluşturma ve zaman damgası ayarlama, kopyalamanın üstüne yazma davranışı, hedefin dizin olması durumu ve taşımanın dosya sistemi düzeyindeki anlamı.

Önceki ders ağacı okunabilir kıldı ama `veri/ham` dizini boştu. Bu ders ağacı doldurur:
ölçüm dosyaları oluşturulur, işlenmiş kopyaları üretilir ve bir yedek dizini kurulur.

Üç komut kullanılacak — `touch`, `cp`, `mv` — ve üçünün de sessizce veri kaybettirdiği
durumlar vardır. Bu durumların hangi kurallardan doğduğu, komutların kendisinden daha
önemlidir.

## Dosya Oluşturma ve Zaman Damgaları

`touch` komutunun asıl işi zaman damgası ayarlamaktır; var olmayan bir dosya adı
verildiğinde onu boş olarak oluşturması ikincil bir davranıştır.

```
$ touch veri/ham/olcum-01.csv
$ ls -l veri/ham
total 0
-rw-r--r-- 1 ogrenci ogrenci 0 Jul 26 19:02 olcum-01.csv
```

Boyut sıfırdır: dosya vardır ama içeriği yoktur. Dosyanın var olması ile içeriğinin olması
ayrı şeylerdir; bir dizin girdisi ve bir düğüm oluşturulmuştur, veri bloğu ayrılmamıştır.

İçerik yazmak için çıktı yönlendirme kullanılır:

```
$ printf 'zaman,sicaklik,nem\n08:00,21.4,55\n12:00,24.9,49\n' > veri/ham/olcum-01.csv
$ cat veri/ham/olcum-01.csv
zaman,sicaklik,nem
08:00,21.4,55
12:00,24.9,49
```

`>` işareti komutun çıktısını terminale değil dosyaya yazdırır. Yönlendirmenin dilbilgisi
Kabuk Programlama kursunun konusudur; burada yalnızca dosya üretmek için kullanılmıştır.
Dikkat edilecek nokta şudur: `>` hedef dosyayı **uyarmadan boşaltır**. Var olan bir dosyaya
`>` ile yazmak, eski içeriği geri alınamaz biçimde siler.

Aynı biçimde iki ölçüm dosyası daha oluşturulur:

```
$ printf 'zaman,sicaklik,nem\n08:00,19.8,61\n12:00,23.1,52\n' > veri/ham/olcum-02.csv
$ printf 'zaman,sicaklik,nem\n08:00,22.6,58\n12:00,26.3,44\n' > veri/ham/olcum-03.csv
$ ls -l veri/ham
total 12
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:02 olcum-01.csv
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 olcum-02.csv
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 olcum-03.csv
```

Var olan bir dosyada `touch` içeriğe dokunmaz, yalnızca zaman damgalarını o ana ayarlar.
Belirli bir zamana ayarlamak için `-t` seçeneği kullanılır:

```
$ touch /tmp/ornek.txt
$ ls -l /tmp/ornek.txt
-rw-r--r-- 1 ogrenci ogrenci 0 Jul 26 19:03 /tmp/ornek.txt
$ touch -t 202603110930 /tmp/ornek.txt
$ ls -l /tmp/ornek.txt
-rw-r--r-- 1 ogrenci ogrenci 0 Mar 11 09:30 /tmp/ornek.txt
```

`-t` değeri `YYYYMMDDhhmm` biçimindedir ve POSIX'te tanımlıdır. GNU araçlarındaki `-d`
seçeneği okunabilir tarih dizeleri kabul eder ama taşınabilir değildir; betiklerde `-t`
tercih edilir.

Zaman damgası ayarlamak yalnızca bir düzen işi değildir: yedekleme ve derleme araçlarının
çoğu "kaynak hedeften yeni mi" karşılaştırması yapar ve bu karşılaştırma değişiklik
zamanına dayanır.

## Kopyalama

`cp` komutu iki argüman alır: kaynak ve hedef. Hedefin ne olduğuna göre iki farklı kural
işler.

**Hedef var olan bir dizinse**, kaynak o dizinin içine, **aynı adla** kopyalanır:

```
$ cp veri/ham/olcum-01.csv veri/islenmis/
$ ls -l veri/islenmis
total 4
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 olcum-01.csv
```

**Hedef bir dizin değilse**, kaynak o adla kopyalanır:

```
$ cp veri/ham/olcum-01.csv veri/islenmis/ozet-01.csv
$ ls -l veri/islenmis
total 8
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 olcum-01.csv
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 ozet-01.csv
```

Bu iki kural, en sık yapılan hatanın kaynağıdır: hedef dizinin adı yanlış yazılırsa dizin
bulunamaz ve komut, kopyayı **o yanlış adla bir dosya** olarak oluşturur. Hata iletisi
gelmez. Hedefin sonuna eğik çizgi koymak bu hatayı yakalar: `hedefdizin/` yazıldığında ve
böyle bir dizin yoksa komut hata verir.

## Üstüne Yazma Sessizdir

`cp` varsayılan olarak hedefin üzerine sormadan yazar:

```
$ cat veri/islenmis/ozet-01.csv
zaman,sicaklik,nem
08:00,21.4,55
12:00,24.9,49
$ cp veri/ham/olcum-02.csv veri/islenmis/ozet-01.csv
$ cat veri/islenmis/ozet-01.csv
zaman,sicaklik,nem
08:00,19.8,61
12:00,23.1,52
```

Eski içerik gitmiştir ve geri getirilemez. Uyarı yoktur, çıkış durumu sıfırdır.

`-i` seçeneği üstüne yazmadan önce sorar:

```
$ cp -i veri/ham/olcum-03.csv veri/islenmis/ozet-01.csv
cp: overwrite 'veri/islenmis/ozet-01.csv'? n
```

Olumsuz yanıtta dosya değişmez ve komut sıfırdan farklı bir çıkış durumu döndürür. `-i`
POSIX'te tanımlıdır ve etkileşimli kullanımda önerilen alışkanlıktır.

Var olan hedefi hiç sormadan koruma seçeneği de vardır, ancak taşınabilir değildir; GNU
araçlarında `-n` verildiğinde bu seçeneğin davranışının değişebileceğine dair bir uyarı
yazdırılır. Betiklerde hedefin varlığı önce sınanır, seçeneğe güvenilmez.

## Dizin Kopyalama

Dizinler varsayılan olarak kopyalanmaz; özyinelemeli kopyalama için `-r` gerekir.

```
$ cp -r veri/ham arsiv/ham-yedek
$ ls -l arsiv/ham-yedek
total 12
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:04 olcum-01.csv
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:04 olcum-02.csv
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:04 olcum-03.csv
```

Kopyalar yeni dosyalardır: yeni düğüm, yeni zaman damgası. Zaman damgalarının korunması
isteniyorsa `-p` eklenir:

```
$ cp -rp veri/ham arsiv/ham-p
$ ls -l arsiv/ham-p
total 12
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:02 olcum-01.csv
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 olcum-02.csv
-rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 olcum-03.csv
```

İki listeleme karşılaştırıldığında fark açıktır: `-p` olmadan tüm dosyalar kopyalama anını
taşır, `-p` ile özgün zamanlarını korurlar. `-p` ayrıca izinleri ve sahipliği de
korumaya çalışır. Yedeklemede bu ayrıntı belirleyicidir; zaman damgası kaybolan bir yedek,
"hangi sürüm daha yeni" sorusuna yanıt veremez.

Dizin kopyalamada hedef kuralı bir tuzağa dönüşür:

```
$ cp -r /tmp/dnm/kaynak /tmp/dnm/hedef
$ find /tmp/dnm | sort
/tmp/dnm
/tmp/dnm/hedef
/tmp/dnm/hedef/kaynak
/tmp/dnm/hedef/kaynak/a.txt
/tmp/dnm/kaynak
/tmp/dnm/kaynak/a.txt
```

Hedef dizin **zaten varsa** kaynak onun içine yerleşir. Aynı komut ikinci kez
çalıştırıldığında sonuç değişmez, çünkü `hedef/kaynak` de artık vardır ve içerik üzerine
yazılır. Ancak hedef yokken çalıştırılırsa hedef, kaynağın kopyası olarak oluşturulur. Aynı
komutun iki farklı sonuç vermesi, hedefin önceden var olup olmamasına bağlıdır.

## Taşıma

`mv` yüzeyde kopyalama gibi görünür ama dosya sistemi düzeyinde bambaşka bir işlemdir.

```
$ ls -li veri/islenmis
total 8
22212 -rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 olcum-01.csv
22545 -rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 ozet-01.csv
$ mv veri/islenmis/ozet-01.csv veri/islenmis/gunluk-ozet.csv
$ ls -li veri/islenmis
total 8
22545 -rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 gunluk-ozet.csv
22212 -rw-r--r-- 1 ogrenci ogrenci 47 Jul 26 19:03 olcum-01.csv
```

Düğüm numarası değişmemiştir: `22545` hem eski hem yeni adda aynıdır. Değişen tek şey
**dizin girdisidir**. Ad, dosyanın bir özelliği değil, dizinde tutulan bir eşlemedir; adı
değiştirmek dosyaya dokunmaz.

Bunun ölçülebilir sonucu şudur: aynı dosya sistemi içinde taşıma, dosya boyutundan
bağımsız olarak sabit maliyetlidir. Bir baytlık dosya ile bir gigabaytlık dosyayı yeniden
adlandırmak aynı süreyi alır, çünkü hiçbir veri okunmaz veya yazılmaz.

Aynı işlem farklı dosya sistemleri arasında yapıldığında bu geçerli değildir. Düğüm
numaraları yalnızca kendi dosya sistemi içinde anlamlıdır; bir aygıttan diğerine girdi
taşınamaz. Bu durumda `mv` içeriği kopyalar ve kaynağı siler — süre dosya boyutuyla
orantılıdır ve işlem yarıda kesilirse hedef eksik kalabilir.

Hedef bir dizinse `mv` de aynı adlandırma kuralını izler:

```
$ mv veri/islenmis/olcum-01.csv belge/
$ ls belge
olcum-01.csv
$ ls veri/islenmis
gunluk-ozet.csv
```

`mv` de üstüne sessizce yazar ve `-i` seçeneğiyle sorması sağlanır. Kopyalamadan farklı
olarak burada iki dosya birden kaybedilir: hedefin eski içeriği silinir ve kaynak da
ortadan kalkar.

## Özet

- `touch` zaman damgası ayarlar; var olmayan dosyayı boş olarak oluşturması ikincil bir
  davranıştır ve `-t` ile belirli bir zaman verilebilir.
- Kopyalamada hedef var olan bir dizinse kaynak aynı adla içine, değilse verilen adla
  kopyalanır; yanlış yazılmış dizin adı sessizce bir dosya oluşturur.
- `cp` ve `mv` hedefin üzerine sormadan yazar; `-i` sormayı sağlar.
- Dizin kopyalama `-r` ister; `-p` zaman damgalarını, izinleri ve sahipliği korur.
- Aynı dosya sistemi içinde taşıma yalnızca dizin girdisini değiştirir: düğüm numarası
  korunur ve maliyet dosya boyutundan bağımsızdır.
- Farklı dosya sistemleri arasında taşıma kopyala-ve-sil işlemine dönüşür; maliyet boyutla
  orantılıdır ve yarıda kesilme riski taşır.

## Sonraki Adım

Bu dersin üç komutu da veri kaybettirebilir, ama hepsi bir şeyin üzerine yazarak yapar.
Silme komutu ise doğrudan yok eder ve dosya sisteminde bir "geri al" işlemi yoktur. Sonraki
ders silmenin çekirdek düzeyinde ne anlama geldiğini, hangi durumda silinen bir dosyanın
hâlâ yaşadığını ve yıkıcı komutları çalıştırmadan önce doğrulamanın nasıl alışkanlık
hâline getirileceğini ele alır.
