---
title: 'Dosya Aktarımı'
source: 'https://academia.sh/tr/kurslar/linuxa-giris/dosya-aktarimi'
course: "Linux'a Giriş"
language: tr
updated: '2026-08-17T18:09:55+00:00'
license: 'CC BY-SA 4.0'
---

# Dosya Aktarımı

Şifreli kabuk üzerinden uzak kopyalama, sunucu kimliğinin doğrulanması, artımlı eşitlemenin yalnızca değişeni göndermesi ve kaynak yolundaki eğik çizginin anlamı.

Önceki ders proje verisini tek bir arşiv dosyasına indirdi. Bu dosya artık başka bir
makineye gönderilebilir — ancak her seferinde tüm ağacı arşivleyip göndermek, ağacın küçük
bir bölümü değiştiğinde gereksiz veri taşır.

Bu ders iki yaklaşımı karşılaştırır: dosyayı olduğu gibi kopyalayan araç ile yalnızca farkı
gönderen araç. Her ikisinden önce, ikisinin de üzerine kurulduğu taşıma katmanı tanıtılır.

Aşağıdaki örneklerde uzak makine `sunucu` adıyla, uzak hesap `yedek` adıyla anılır.

## Şifreli Kabuk

Uzak makinede komut çalıştırmanın standart yolu **şifreli kabuktur (ssh)**. Sağladığı üç
şey vardır: bağlantı şifrelenir, kullanıcı kimliği doğrulanır ve **sunucunun kimliği**
doğrulanır. Üçüncüsü sık atlanır ama en önemlisidir; şifreleme, karşı tarafın kim olduğu
bilinmiyorsa bir şey ifade etmez.

Bir sunucuya ilk bağlanışta kimliği sorulur:

```
$ ssh yedek@sunucu pwd
The authenticity of host 'sunucu (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:BXO0kZ7GJ+yv/Idqx3h4fOdWRWCgAH6QbY4y0M/YuHk.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'sunucu' (ED25519) to the list of known hosts.
/home/yedek
```

Sunucunun kendine ait bir anahtar çifti vardır ve açık anahtarının özeti **parmak izi**
olarak gösterilir. Onaylandığında bu parmak izi yerel bir dosyaya kaydedilir. Sonraki
bağlantılarda soru sorulmaz:

```
$ ssh yedek@sunucu pwd
/home/yedek
```

Kaydedilen parmak izi bir sonraki bağlantıda uyuşmazsa araç bağlantıyı reddeder ve uyarı
verir. Bu, araya girme girişimini yakalayan mekanizmadır. Uyarı, sunucu yeniden kurulduğunda
da çıkar; her iki durumda da doğru davranış, uyarıyı bastırmak değil parmak izini bağımsız
bir kanaldan doğrulamaktır.

Çıktıdaki `/home/yedek` yolu, komutun uzak makinede ve `yedek` hesabının ev dizininde
çalıştığını gösterir.

Kullanıcı kimliği iki yolla doğrulanır: parola veya anahtar çifti. Anahtar çiftinde özel
anahtar yerel makinede kalır, açık anahtar sunucudaki hesaba yetkilendirilir; parola ağa
hiç çıkmaz. Anahtar yönetimi ve sunucu yapılandırması Sistem Yönetimi kursunun konusudur.

## Uzak Kopyalama

`scp`, yerel kopyalamanın uzak karşılığıdır ve aynı taşıma katmanını kullanır. Uzak yol
`kullanıcı@makine:yol` biçiminde yazılır:

```
$ scp arsiv/veri.tar.xz yedek@sunucu:gelen/
$ ssh yedek@sunucu ls -l gelen
total 8
-rw-r--r-- 1 yedek yedek 4416 Jul 26 19:16 veri.tar.xz
```

İki nokta üst üste ayıracı belirleyicidir: `yedek@sunucu:gelen/` uzak bir yolu,
`yedek@sunucu` ise `yedek@sunucu` adında yerel bir dosyayı belirtir. Ayıraç unutulduğunda
komut hata vermez, yerel bir dosya oluşturur.

Uzak yollarda göreli yol, oturum açan kullanıcının ev dizinine göredir. `gelen/` yolu
`/home/yedek/gelen/` anlamına gelir.

`scp` dosyayı bütün olarak gönderir; hedefte aynı içerik varsa bile yeniden aktarır. Dizin
göndermek için `-r` gerekir, tıpkı yerel kopyalamada olduğu gibi.

## Aktarımın Doğrulanması

Aktarımın eksiksiz olduğu, içeriğin özetiyle sınanır:

```
$ sha256sum arsiv/veri.tar.xz
6608712cb484f9629dcdf1cbaa3bced3cb87ff00b24d6d32646775ccff3b5443  arsiv/veri.tar.xz
$ ssh yedek@sunucu sha256sum gelen/veri.tar.xz
6608712cb484f9629dcdf1cbaa3bced3cb87ff00b24d6d32646775ccff3b5443  gelen/veri.tar.xz
```

İki özet aynıysa iki dosyanın içeriği aynıdır. Boyut karşılaştırması bu güvenceyi vermez:
aynı boyutlu iki farklı içerik olabilir, ama aynı özetli iki farklı içerik pratikte
bulunamaz.

Özet doğrulaması yalnızca aktarım hatalarına karşı değildir; arşivin kaynağında
değiştirilip değiştirilmediğini de sınar. Bu nedenle yazılım dağıtımlarında paketlerin
yanında özet dosyaları yayımlanır — depo yapılandırması dersinde aynı ilke imza zinciriyle
birlikte ele alınacaktır.

## Eşitleme

`rsync` kopyalamaz, **eşitler**: kaynakla hedefi karşılaştırır ve yalnızca farkı gönderir.
Karşılaştırma varsayılan olarak boyut ve değişiklik zamanı üzerinden yapılır.

Çalıştırmadan önce ne yapacağını göstermesi istenebilir:

```
$ rsync -avn veri/ yedek@sunucu:gelen/veri/
sending incremental file list
created directory gelen/veri
./
guncel.csv -> ham/olcum-03.csv
ham/
ham/olcum-01.csv
ham/olcum-02.csv
ham/olcum-03.csv
ham/olcum-04.csv
islenmis/
islenmis/gunluk-ozet.csv
islenmis/olcum-01.csv

sent 351 bytes  received 81 bytes  864.00 bytes/sec
total size is 42,270  speedup is 97.85 (DRY RUN)
```

`-n` **kuru çalışma** yapar: hiçbir şey aktarılmaz, yalnızca yapılacaklar listelenir. Son
satırdaki `(DRY RUN)` bunu doğrular. `-a` üstveriyi koruyan bir seçenek kümesidir — izinler,
zaman damgaları ve sembolik bağlar korunur; listede `guncel.csv -> ham/olcum-03.csv`
satırının bağ olarak görünmesi bunun sonucudur. `-v` işlenen dosyaları yazdırır.

Kuru çalışma onaylandıktan sonra aynı komut `-n` olmadan çalıştırılır. Asıl fark, ikinci
çalıştırmada görünür:

```
$ rsync -av veri/ yedek@sunucu:gelen/veri/
sending incremental file list
ham/olcum-01.csv

sent 430 bytes  received 43 bytes  946.00 bytes/sec
total size is 42,284  speedup is 89.40
```

Arada yalnızca bir ölçüm dosyası değiştirilmişti. Listede yalnızca o dosya var; gönderilen
veri 430 bayt, ağacın toplam büyüklüğü 42 kilobayttan fazla. Aynı işi `scp -r` ile yapmak
her seferinde ağacın tamamını göndermek olurdu.

Değişmeyen dosyaların hiç açılmaması, eşitlemeyi düzenli yedeklerin standart aracı yapar:
maliyet ağacın büyüklüğüyle değil, değişimin büyüklüğüyle orantılıdır.

## Eğik Çizgi Kaynağın Anlamını Değiştirir

Eşitleme aracının en sık yanlış kullanılan ayrıntısı, **kaynak yolunun sonundaki eğik
çizgidir**.

Yukarıdaki komutlarda kaynak `veri/` biçiminde yazılmıştı: sondaki eğik çizgi "bu dizinin
**içindekiler**" anlamına gelir ve içerik doğrudan hedefe yerleşir. Eğik çizgi
kaldırıldığında anlam değişir:

```
$ rsync -avn veri yedek@sunucu:gelen/deneme/
sending incremental file list
created directory gelen/deneme
veri/
veri/guncel.csv -> ham/olcum-03.csv
veri/ham/
veri/ham/olcum-01.csv
veri/ham/olcum-02.csv
veri/ham/olcum-03.csv
veri/ham/olcum-04.csv
veri/islenmis/
veri/islenmis/gunluk-ozet.csv
veri/islenmis/olcum-01.csv

sent 370 bytes  received 84 bytes  908.00 bytes/sec
total size is 42,284  speedup is 93.14 (DRY RUN)
```

Yollar artık `veri/` önekiyle listeleniyor: dizinin kendisi hedefin içine yerleşiyor ve
sonuç `gelen/deneme/veri/...` oluyor. Aynı komutun iki biçimi, bir düzey farkla iki ayrı
ağaç üretir.

Hedef yolundaki eğik çizginin böyle bir etkisi yoktur. Kural yalnızca kaynak için geçerlidir
ve kuru çalışma bu farkı her seferinde görünür kılar.

## Hedefteki Fazlalıklar

Eşitleme varsayılan olarak hedefteki fazladan dosyaları silmez. Kaynakta olmayan bir dosya
hedefte duruyorsa orada kalır:

```
$ rsync -av veri/ yedek@sunucu:gelen/veri/
sending incremental file list
./

sent 329 bytes  received 21 bytes  700.00 bytes/sec
total size is 42,284  speedup is 120.81
$ ssh yedek@sunucu ls gelen/veri
eski-olcum.csv
guncel.csv
ham
islenmis
```

Hedefi kaynağın birebir yansıması yapmak için `--delete` gerekir:

```
$ rsync -avn --delete veri/ yedek@sunucu:gelen/veri/
sending incremental file list
deleting eski-olcum.csv

sent 326 bytes  received 39 bytes  730.00 bytes/sec
total size is 42,284  speedup is 115.85 (DRY RUN)
```

Bu seçenek yıkıcıdır ve silme dersindeki uyarı burada birebir geçerlidir: kaynak yolu
yanlış yazılırsa veya boş bir dizini gösterirse, hedefteki her şey silinir. `--delete`
kullanılan her komut önce `-n` ile çalıştırılmalıdır; kuru çalışma listesindeki `deleting`
satırları, silinecek dosyaların tam listesidir.

## Araç Seçimi

| Ölçüt | `scp` | `rsync` |
|---|---|---|
| Gönderilen veri | Dosyanın tamamı | Yalnızca fark |
| Yinelenen çalıştırma | Aynı maliyet | Değişim kadar maliyet |
| Üstveri koruma | Sınırlı | `-a` ile tam |
| Kuru çalışma | Yok | `-n` ile var |
| Hedefte silme | Yok | `--delete` ile var |
| Karşı tarafta gereksinim | Yok | Aracın kurulu olması |

Tek seferlik ve tek dosyalık aktarımlarda kopyalama yeterlidir; yinelenen ağaç
aktarımlarında eşitleme tercih edilir. Etkileşimli gezinme ve seçerek indirme gerekiyorsa
`sftp` aracı aynı taşıma katmanı üzerinde dosya sistemi benzeri bir oturum sağlar.

## Özet

- Şifreli kabuk hem kullanıcıyı hem sunucuyu doğrular; sunucunun parmak izi ilk bağlantıda
  onaylanır ve sonraki bağlantılarda karşılaştırılır.
- Uzak yollar `kullanıcı@makine:yol` biçiminde yazılır; iki nokta üst üste unutulduğunda
  komut sessizce yerel bir dosya oluşturur.
- Aktarım, içerik özetlerinin karşılaştırılmasıyla doğrulanır; boyut eşitliği güvence
  vermez.
- Eşitleme yalnızca değişen dosyaları gönderir; maliyet ağacın değil değişimin
  büyüklüğüyle orantılıdır.
- Kaynak yolundaki sondaki eğik çizgi "dizinin içindekiler", çizgisiz biçim "dizinin
  kendisi" anlamına gelir.
- `--delete` hedefi kaynağın birebir yansıması yapar ve yıkıcıdır; kuru çalışmayla önce
  denetlenmelidir.

## Sonraki Adım

Uzak makinedeki dosyalar `yedek` hesabına ait çıktı; yerel dosyalar ise başka bir hesaba.
Bu ayrımın nasıl kurulduğu — kullanıcı kimliğinin sistemde ne olarak saklandığı, grupların
ne işe yaradığı ve bir dosyanın kime ait olduğunun ne anlama geldiği — henüz açıklanmadı.
Sonraki konu hesap modelini kurar ve buradan izin bitlerine geçer.
