Linux `mv` Komutu: Eksiksiz Teknik Referans ve Gelişmiş Kullanım Kılavuzu
Linux’taki
mvBu 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
mvmv Komutu Arka Planda Gerçekte Ne Yapar
mvAynı dosya sisteminde
mv source destinationrename(2)Kaynak ve hedef farklı dosya sistemlerinde (farklı bölümler, NFS bağlamaları veya bind bağlamaları) bulunduğunda,
mv- 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:
- — Taşınacak veya yeniden adlandırılacak bir veya daha fazla dosya ya da dizin.
SOURCE - — Hedef yol. Mevcut bir dizinse, kaynak onun içine yerleştirilir. Mevcut olmayan bir yolsa, kaynak o yola yeniden adlandırılır.
DESTINATION
Tam Seçenekler Referansı
| Seçenek | Uzun Form | Davranış |
|---|---|---|
-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-Rmvcpmv-rmvKesin Örneklerle Temel İşlemler
Bir Dosyayı Farklı Bir Dizine Taşıma
mv /home/user/report.txt /var/backups/report.txt/var/backups//var/backups//home/user/Bir Dosyayı Yerinde Yeniden Adlandırma
mv old_config.conf new_config.confHer iki yol da aynı üst dizini paylaşır, dolayısıyla bu saf bir
rename(2)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,
mvBir 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.
-rGelişmiş Kullanım Kalıpları
Yanlışlıkla Veri Kaybını Önlemek için--backup Kullanımı
--backup--backupmvmv --backup=numbered config.yml /etc/app/config.ymlBu, art arda yapılan üzerine yazmalar için
/etc/app/config.yml.~1~.~2~Yedek kontrol modları:
- /
none— Yedek yok (offolmadan varsayılan davranış)--backup - /
simple—neversonekiyle her zaman basit bir yedek oluşturur~ - /
numbered— Numaralı yedekler oluşturur (t,.~1~, …).~2~ - /
existing— Zaten mevcutsa numaralı yedekler kullanır; aksi takdirde basitnil
--update ile Koşullu Taşımalar
--updatemv --update /tmp/processed/*.csv /data/archive/Yalnızca
/tmp/processed//data/archive/Betik Dostu Sözdizimi için-t Kullanımı
-t--target-directoryxargsfindfind /var/log -name "*.log.gz" -mtime +30 | xargs mv -t /mnt/cold-storage/logs/-txargs--no-clobber‘i Ayrıntılı Çıktıyla Birleştirme
--no-clobbermv -nv *.conf /etc/app/conf.d/Bu, mevcut olanların üzerine yazmadan tüm
.confDosya 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-filesrsyncmvPratik 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,
logrotateYapılandırma Dosyalarını Atomik Olarak Dağıtma
mv --backup=numbered /tmp/nginx.conf /etc/nginx/nginx.conf
nginx -t && systemctl reload nginxYedek, 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
mvmv --backup=simple /etc/ssl/certs/domain.crt /etc/ssl/certs/domain.crt.bak
mv /tmp/new_domain.crt /etc/ssl/certs/domain.crtOtomatik 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 ilecp +rm ilersync: Hangisini Ne Zaman Kullanmalı
mvcprmrsync| Senaryo | En İyi Araç | Neden |
|---|---|---|
| Aynı dosya sisteminde yeniden adlandırma veya taşıma | mv | Atomikrename(2) |
| 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 |
| Kaynağı koruyarak taşıma | cp | Her iki kopya üzerinde açık kontrol |
| Dönüşümle taşıma (sıkıştırma vb.) | Özel betik | mv |
| Filtrelemeyle toplu taşıma | findmv -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_bdirectory_bdirectory_adirectory_bdirectory_b/directory_a/directory_bdirectory_adirectory_bmv -TEşleşme olmayan joker karakter genişlemesi:
mv *.log /archive/Hiçbir
.log*.log*.logmv*.lognullglobshopt -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
mvmv /spool/job_123.tmp /spool/processing/job_123.workrename(2)Tire ile başlayan adlara sahip dosyaları taşıma:
mv -- -oddfile.txt /destination/---oddfile.txtDosya sistemi arası taşımalardan sonra izinler:
mvls -lZ /destination/file
getfattr -d /destination/fileÜretimdemv‘i Güvenilir Şekilde Betikleştirme
mvÜretim bağlamında
mv#!/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/"- , betiğin herhangi bir hata, tanımsız değişken veya başarısız boru hattında çıkmasını sağlar.
set -euo pipefail - 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ğrumv Seçeneklerini Seçme
mv| 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 |
findxargs | -t /destination/ |
| Bir betiğin hata ayıklaması | -v |
| Özel adlara sahip dosyalar (tireler, boşluklar) | Kaynaktan önce-- |
Temel Teknik Çıkarımlar
- Aynı dosya sistemindeatomiktir ve sıfır disk G/Ç üretir —
mvaracılığıyla yalnızca meta veri işlemidir.rename(2) - Dosya sistemi arasısıralı bir kopyala-sonra-sil işlemidir; güvenilirlik planlaması için
mvgibi ele alın.cp - GNU‘de
mvbayrağı yoktur — dizinler varsayılan olarak özyinelemeli şekilde taşınır.-r - ,
--backup=numbered‘deki en az kullanılan üretim güvenlik özelliğidir.mv - (
--no-clobber) ve-n(--force) birbirini dışlar; belirtilen sonuncusu geçerli olur.-f - Kritik dosya sistemi arası veri geçişleri için,
rsync --remove-source-files‘ın sağlayamadığı sağlama toplamı doğrulaması sunar.mv - Betiklerde değişkenleri her zaman tırnak içine alın ve özel karakterler içeren dosya adlarını işlemek içinkullanı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
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 bilemv
Kaynak ve hedef farklı dosya sistemlerindeyse — NFS bağlamaları, tmpfs veya ayrı bölümler dahil —
mvdf -h source destinationmv
Doğrudan değil. Docker birimleri ayrı dosya sistemi ad alanlarıdır. Tek bir birim içinde
mvcpdocker cpDosya sistemi arası taşımadamv
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ı
mvmv
Evet, cron işinin askıda kalmasına neden olacak istemleri bastırmak için açıkça
-f-n