15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
02.01.2024

Linux `mv` Komutu: Eksiksiz Teknik Referans ve Gelişmiş Kullanım Kılavuzu

Linux’taki

mv
komutu, aynı dosya sistemi içinde çalışırken veri kopyalamadan — özellikle dizin girişini — dosya sistemi meta verilerini güncelleyerek dosya ve dizinleri taşır veya yeniden adlandırır. Bu, dosya boyutundan bağımsız olarak aynı bölüm içindeki taşıma işlemlerini atomik ve neredeyse anlık bir işlem haline getirir.

Bu ayrımı anlamak, sıradan kullanıcıları; iki bağlama noktası arasındaki taşıma işleminin tek bir bölüm içindekinden neden farklı davrandığını, belirli

mv
işlemlerinin neden disk G/Ç’sini tetiklediğini diğerlerinin neden tetiklemediğini ve veri bütünlüğünün tartışmasız olduğu üretim ortamlarında komutu nasıl güvenli kullanacağını teşhis edebilen yöneticilerden ayırır.

mv
Komutu Arka Planda Gerçekte Ne Yapar

Aynı dosya sisteminde

mv source destination
komutunu çalıştırdığınızda, çekirdek dizin girişini atomik olarak yeniden atayan tek bir sistem çağrısı olan
rename(2)
‘ı çağırır. Diske hiçbir veri okunmaz veya yazılmaz. İnode numarası aynı kalır; yalnızca yol değişir.

Kaynak ve hedef farklı dosya sistemlerinde (farklı bölümler, NFS bağlamaları veya bind bağlamaları) bulunduğunda,

mv
kopyala-sonra-sil dizisine geri döner: kaynak verileri okur, hedefe yazar ve yalnızca başarılı bir yazma işleminden sonra kaynağın bağlantısını keser. Bunun kritik sonuçları vardır:

  • Kesintiye uğrayan dosya sistemi arası taşımalar, hedefte kısmi bir kopya ve kaynakta orijinal bırakabilir ya da — en kötü senaryolarda — yazma tamamlanmadan önce kaynağı silebilir.
  • Dosya sistemleri arasındaki büyük dosya taşımaları, dosya boyutuyla orantılı G/Ç bant genişliği ve zaman tüketir.
  • İzinler ve sahiplik, hedef dosya sistemi aynı izin modelini desteklemiyorsa (örn. FAT32, bazı ağ paylaşımları) doğru şekilde aktarılamayabilir.

Bu davranış farkı, komut sözdiziminden görünmez ancak birden fazla bağlama noktasına sahip VPS Hosting veya Dedicated Servers çalıştıran sunuculardaki sistem yönetimi kararları için temeldir.

Sözdizimi ve Temel Seçenekler

mv [OPTIONS] SOURCE DESTINATION mv [OPTIONS] SOURCE... DIRECTORY

Argümanlar:

  • SOURCE
    — Taşınacak veya yeniden adlandırılacak bir veya daha fazla dosya ya da dizin.
  • DESTINATION
    — Hedef yol. Mevcut bir dizinse, kaynak onun içine yerleştirilir. Mevcut olmayan bir yolsa, kaynak o yola yeniden adlandırılır.

Tam Seçenekler Referansı

SeçenekUzun FormDavranış
-i
--interactive
Mevcut bir dosyanın üzerine yazmadan önce onay ister
-f
--force
Tüm onay istemlerini bastırır; onay olmadan üzerine yazar
-n
--no-clobber
Mevcut bir dosyanın üzerine hiçbir zaman yazmaz; sessizce atlar
-u
--update
Yalnızca kaynak hedeften daha yeniyse veya hedef yoksa taşır
-v
--verbose
İşlenen her dosya adını yazdırır
-b
--backup
Üzerine yazılacak her dosyanın yedeğini oluşturur
--suffix=SUFFIX
--suffix
Yedek sonekini tanımlar (varsayılan
~
)
--strip-trailing-slashes
Kaynak argümanlarından sondaki eğik çizgileri kaldırır
-t DIR
--target-directory
Tüm kaynakları belirtilen dizine taşır
-T
--no-target-directory
Hedefi dizin değil, normal bir dosya olarak ele alır

Not: Birçok eğitimde listelenen

-r
/
-R
bayrağı GNU
mv
‘de mevcut değildir.
cp
‘den farklı olarak,
mv
komutu dizinleri varsayılan olarak özyinelemeli şekilde taşır çünkü dosya içerikleri üzerinde değil, dizin girişleri üzerinde çalışır. Çoğu Linux dağıtımında
-r
‘yi
mv
‘e geçirmek, uygulamaya bağlı olarak bir hata üretir veya sessizce yok sayılır.

Kesin Örneklerle Temel İşlemler

Bir Dosyayı Farklı Bir Dizine Taşıma

mv /home/user/report.txt /var/backups/

report.txt
dosyası
/var/backups/
‘e taşınır.
/var/backups/
,
/home/user/
ile aynı dosya sistemindeyse bu işlem anlıktır. Değilse, veriler fiziksel olarak kopyalanır.

Bir Dosyayı Yerinde Yeniden Adlandırma

mv old_config.conf new_config.conf

Her iki yol da aynı üst dizini paylaşır, dolayısıyla bu saf bir

rename(2)
çağrısıdır — veri hareketi yok, G/Ç yok.

Birden Fazla Dosyayı Bir Dizine Taşıma

mv file1.txt file2.txt file3.txt /var/www/html/assets/

Birden fazla kaynak belirtildiğinde, hedef mutlaka mevcut bir dizin olmalıdır. Mevcut değilse,

mv
bir hata döndürür.

Bir Dizini Taşıma

mv /home/user/project /opt/projects/

İç içe geçmiş tüm dosyalar ve alt dizinler dahil olmak üzere tüm dizin ağacı, aynı dosya sisteminde tek bir atomik işlem olarak taşınır.

-r
bayrağı gerekli değildir ve kabul edilmez.

Gelişmiş Kullanım Kalıpları

Yanlışlıkla Veri Kaybını Önlemek için
--backup
Kullanımı

--backup
seçeneği,
mv
‘deki en az kullanılan güvenlik mekanizmalarından biridir. Üzerine yazılacak herhangi bir dosyanın sürümlü yedeğini oluşturur:

mv --backup=numbered config.yml /etc/app/config.yml

Bu, art arda yapılan üzerine yazmalar için

/etc/app/config.yml.~1~
,
.~2~
ve benzeri dosyalar üretir. Otomatik dağıtım betiklerinde bu kalıp, özel bir yedekleme aracı olmadan hafif bir geri alma mekanizması sağlar.

Yedek kontrol modları:

  • none
    /
    off
    — Yedek yok (
    --backup
    olmadan varsayılan davranış)
  • simple
    /
    never
    ~
    sonekiyle her zaman basit bir yedek oluşturur
  • numbered
    /
    t
    — Numaralı yedekler oluşturur (
    .~1~
    ,
    .~2~
    , …)
  • existing
    /
    nil
    — Zaten mevcutsa numaralı yedekler kullanır; aksi takdirde basit

--update
ile Koşullu Taşımalar

mv --update /tmp/processed/*.csv /data/archive/

Yalnızca

/tmp/processed/
‘deki
/data/archive/
‘deki karşılıklarından daha yeni olan dosyalar taşınır. Aynı veya daha eski zaman damgasına sahip dosyalar dokunulmadan bırakılır. Bu, özellikle idempotency’nin önemli olduğu ETL boru hatlarında ve log rotasyon betiklerinde kullanışlıdır.

Betik Dostu Sözdizimi için
-t
Kullanımı

--target-directory
seçeneği argüman sırasını tersine çevirerek
xargs
ve
find
boru hatlarıyla uyumlu hale getirir:

find /var/log -name "*.log.gz" -mtime +30 | xargs mv -t /mnt/cold-storage/logs/

-t
olmadan,
xargs
argüman listesini farklı şekilde oluşturması gerekirdi. Bu kalıp, üretim otomasyonunda çok daha güvenilirdir.

--no-clobber
‘i Ayrıntılı Çıktıyla Birleştirme

mv -nv *.conf /etc/app/conf.d/

Bu, mevcut olanların üzerine yazmadan tüm

.conf
dosyalarını taşır ve her başarılı taşımayı stdout’a yazdırır. Bu kombinasyon, güvenli ve denetlenebilir toplu işlemler için idealdir.

Dosya Sistemleri Arasında Güvenli Dosya Taşıma

Büyük dosyaları veya dizinleri bağlama noktaları arasında taşırken bütünlüğü sağlamak için şu kalıbı göz önünde bulundurun:

rsync -a --remove-source-files /source/path/ /destination/path/ && 
find /source/path -type d -empty -delete

--remove-source-files
ile
rsync
,
mv
‘ın dosya sistemi arası işlemler için sağlamadığı sağlama toplamı doğrulamasıyla doğrulanmış kopyala-sonra-sil işlemi gerçekleştirir. Üretim sunucularındaki kritik veri geçişleri için bu yaklaşımı kullanın.

Pratik Sistem Yönetimi Kullanım Senaryoları

Uygulama Loglarını Döndürme

mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d)
kill -USR1 $(cat /var/run/nginx.pid)

Bu, aktif log dosyasını yeniden adlandırır ve Nginx’e log dosyası tanımlayıcısını yeniden açması için sinyal gönderir. Bu kombinasyon,

logrotate
‘ın otomatik olarak halletmesinden önce manuel log rotasyonunun temelidir.

Yapılandırma Dosyalarını Atomik Olarak Dağıtma

mv --backup=numbered /tmp/nginx.conf /etc/nginx/nginx.conf
nginx -t && systemctl reload nginx

Yedek, yeni yapılandırma doğrulamayı geçemezse önceki yapılandırmanın korunmasını sağlar.

Web Sunucusu Varlıklarını Düzenleme

Bir web uygulaması çalıştıran sunucuda, yüklenen dosyaları türe göre toplu olarak düzenleme:

mv /var/www/uploads/*.jpg /var/www/uploads/images/
mv /var/www/uploads/*.pdf /var/www/uploads/documents/
mv /var/www/uploads/*.mp4 /var/www/uploads/video/

Bu tür yapılandırılmış varlık yönetimi, Shared Web Hosting veya yönetilen VPS with cPanel ortamları aracılığıyla site barındıran sunucularda yaygındır.

SSL Sertifikası Yenilemelerini Hazırlama

Manuel olarak yenilenen sertifikaları yönetirken, yedekli

mv
güvenli bir dağıtım kalıbıdır:

mv --backup=simple /etc/ssl/certs/domain.crt /etc/ssl/certs/domain.crt.bak
mv /tmp/new_domain.crt /etc/ssl/certs/domain.crt

Otomatik sertifika yönetimi için bunu düzgün yapılandırılmış bir SSL Certificates hizmetiyle eşleştirmek, manuel rotasyon ihtiyacını tamamen ortadan kaldırır.

Bir Posta Sunucusunda E-posta Verilerini Arşivleme

Posta hizmetleri çalıştıran bir sunucuda, işlenmiş posta kutularını soğuk depolamaya taşıma:

mv --update /var/mail/processed/ /mnt/archive/mail/$(date +%Y-%m)/

Bu, posta kutusu yönetiminin dosya sistemi düzeyinde gerçekleştirildiği özel Email Hosting altyapısı kullanan ortamlara doğrudan uygulanabilir.

mv
ile
cp
+
rm
ile
rsync
: Hangisini Ne Zaman Kullanmalı

SenaryoEn İyi AraçNeden
Aynı dosya sisteminde yeniden adlandırma veya taşıma
mv
Atomik
rename(2)
sistem çağrısı; sıfır G/Ç
Dosya sistemi arası taşıma, küçük dosyalar
mv
Kabul edilebilir; kopyala-sonra-sil otomatiktir
Dosya sistemi arası taşıma, büyük veya kritik veriler
rsync --remove-source-files
Sağlama toplamı doğrulaması; devam ettirilebilir
Tekilleştirme veya bant genişliği kontrolüyle taşıma
rsync
--bwlimit
,
--checksum
, delta aktarımını destekler
Kaynağı koruyarak taşıma
cp
sonra doğrula
Her iki kopya üzerinde açık kontrol
Dönüşümle taşıma (sıkıştırma vb.)Özel betik
mv
veri dönüştürmez
Filtrelemeyle toplu taşıma
find
+
mv -t
Seçim kriterleri üzerinde hassas kontrol

Yaygın Tuzaklar ve Bunlardan Kaçınma Yolları

Dizinlerde sondaki eğik çizgi belirsizliği:

mv directory_a/ directory_b

directory_b
mevcutsa,
directory_a
directory_b
‘ın *içine* yerleştirilir ve sonuç
directory_b/directory_a/
olur.
directory_b
mevcut değilse,
directory_a
directory_b
olarak yeniden adlandırılır. Bu davranış birçok yöneticiyi şaşırtır. Hedefin bir kapsayıcı dizin değil, bir dosya yolu olarak ele alınmasını zorlamak için
mv -T
kullanın.

Eşleşme olmayan joker karakter genişlemesi:

mv *.log /archive/

Hiçbir

.log
dosyası mevcut değilse, kabuk
*.log
‘ı
*.log
değişmez dizesine genişletir ve
mv
tam anlamıyla
*.log
adlı bir dosyayı taşımaya çalışır; bu da kafa karıştırıcı bir hatayla başarısız olur. Bash betiklerinde
nullglob
kullanın:

shopt -s nullglob
files=(*.log)
[[ ${#files[@]} -gt 0 ]] && mv "${files[@]}" /archive/

Eşzamanlı ortamlarda yarış koşulları:

Paylaşılan bir spool dizininden dosya taşıyan birden fazla işlem çakışmalara neden olabilir. Benzersiz geçici bir adla

mv
kullanın ve ardından atomik olarak yeniden adlandırın:

mv /spool/job_123.tmp /spool/processing/job_123.work

rename(2)
atomik olduğundan, bu kalıp tek dosya sistemli iş kuyrukları için güvenlidir.

Tire ile başlayan adlara sahip dosyaları taşıma:

mv -- -oddfile.txt /destination/

--
, seçeneklerin sonunu işaret ederek
-oddfile.txt
‘ın bir bayrak olarak yorumlanmasını engeller.

Dosya sistemi arası taşımalardan sonra izinler:

mv
, tüm dosya sistemi türlerinde genişletilmiş öznitelikleri (xattrs), ACL’leri veya SELinux bağlamlarını korumaz. Dosya sistemi arası taşımadan sonra şununla doğrulayın:

ls -lZ /destination/file
getfattr -d /destination/file

Üretimde
mv
‘i Güvenilir Şekilde Betikleştirme

Üretim bağlamında

mv
kullanan herhangi bir betik için şu uygulamaları koşulsuz olarak uygulayın:

#!/usr/bin/env bash
set -euo pipefail

SOURCE="/var/data/export"
DEST="/mnt/nas/backup/$(date +%Y%m%d)"

# Verify source exists
[[ -e "$SOURCE" ]] || { echo "Source not found: $SOURCE" >&2; exit 1; }

# Verify destination is writable
mkdir -p "$DEST"
[[ -w "$DEST" ]] || { echo "Destination not writable: $DEST" >&2; exit 1; }

# Perform move with verbose output for logging
mv -v "$SOURCE" "$DEST/"
  • set -euo pipefail
    , betiğin herhangi bir hata, tanımsız değişken veya başarısız boru hattında çıkmasını sağlar.
  • Açık varlık ve yazılabilirlik kontrolleri sessiz hataları önler.
  • Ayrıntılı çıktı, sistem günlüklerinde bir denetim izi oluşturur.

Karar Matrisi: Doğru
mv
Seçeneklerini Seçme

DurumÖnerilen Bayraklar
Etkileşimli, tek dosya, bilinmeyen hedef durumu
-i -v
Otomatik betik, hedefin üzerine yazılmamalı
-n
Otomatik betik, her zaman üzerine yaz
-f
Geri alma özellikli dağıtım
--backup=numbered
Eşitleme tarzı taşıma, yalnızca daha yeni dosyalar
-u
find
veya
xargs
aracılığıyla toplu taşıma
-t /destination/
Bir betiğin hata ayıklaması
-v
Özel adlara sahip dosyalar (tireler, boşluklar)Kaynaktan önce
--

Temel Teknik Çıkarımlar

  • Aynı dosya sisteminde
    mv
    atomiktir ve sıfır disk G/Ç üretir —
    rename(2)
    aracılığıyla yalnızca meta veri işlemidir.
  • Dosya sistemi arası
    mv
    sıralı bir kopyala-sonra-sil işlemidir; güvenilirlik planlaması için
    cp
    gibi ele alın.
  • GNU
    mv
    ‘de
    -r
    bayrağı yoktur — dizinler varsayılan olarak özyinelemeli şekilde taşınır.
  • --backup=numbered
    ,
    mv
    ‘deki en az kullanılan üretim güvenlik özelliğidir.
  • --no-clobber
    (
    -n
    ) ve
    --force
    (
    -f
    ) birbirini dışlar; belirtilen sonuncusu geçerli olur.
  • Kritik dosya sistemi arası veri geçişleri için
    rsync --remove-source-files
    ,
    mv
    ‘ın sağlayamadığı sağlama toplamı doğrulaması sunar.
  • Betiklerde değişkenleri her zaman tırnak içine alın ve özel karakterler içeren dosya adlarını işlemek için
    --
    kullanın.
  • Güvenlik açısından sertleştirilmiş ortamlarda herhangi bir dosya sistemi arası taşımadan sonra SELinux bağlamlarını ve ACL’leri doğrulayın.

Sıkça Sorulan Sorular

mv
SSD’lerde HDD’lere kıyasla farklı mı çalışır?

Aynı dosya sistemi içindeki taşımalar için hayır — işlem, depolama donanımından bağımsız olarak bir meta veri güncellemesidir. Dosya sistemi arası taşımalar için SSD’ler kopyalama aşamasının duvar saati süresini azaltır, ancak mantıksal davranış ve riskler aynıdır.

Küçük bir dosya için bile

mv
neden bazen uzun sürer?

Kaynak ve hedef farklı dosya sistemlerindeyse — NFS bağlamaları, tmpfs veya ayrı bölümler dahil —

mv
tam bir kopyalama gerçekleştirir. Yavaş bir ağ bağlaması üzerinden taşınan küçük bir dosya bile yavaş olacaktır. Aynı dosya sistemini paylaşıp paylaşmadıklarını doğrulamak için
df -h source destination
ile kontrol edin.

mv
Docker konteynerleri veya birimleri arasında dosya taşımak için kullanılabilir mi?

Doğrudan değil. Docker birimleri ayrı dosya sistemi ad alanlarıdır. Tek bir birim içinde

mv
normal şekilde çalışır, ancak birimler arasında veri taşımak için
cp
tarzı işlemler gerekir; bunlar genellikle
docker cp
veya paylaşılan bir bind bağlaması aracılığıyla yapılır.

Dosya sistemi arası taşımada

mv
işlem ortasında kesilirse ne olur?

Kaynak dosya, kopyalama tamamlanana ve bağlantı kesme başarılı olana kadar sağlam kalır. İşlem kopyalamadan sonra ancak bağlantı kesmeden önce sonlandırılırsa, her iki kopya da mevcuttur. Kopyalama sırasında sonlandırılırsa, kısmi hedef dosyası kalır ve kaynak dokunulmamış olur. Kesintiye uğrayan bir dosya sistemi arası

mv
işleminden sonra her iki yolu da doğrulayın.

mv
etkileşimli bayraklar olmadan cron işlerinde kullanmak güvenli midir?

Evet, cron işinin askıda kalmasına neden olacak istemleri bastırmak için açıkça

-f
veya
-n
kullandığınız, çalıştırmadan önce yolları doğruladığınız ve denetlenebilirlik için hem stdout’u hem de stderr’i bir log dosyasına yönlendirdiğiniz sürece.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın