Linux `dos2unix` Komutu: Dosyalardan Gizli Windows Karakterlerini Kaldırma
Windows ve Linux sistemleri arasında metin dosyaları aktarırken, görünmez biçimlendirme karakterleri betiklerinizi, yapılandırma dosyalarınızı ve veri işlem hatlarınızı sessizce bozabilir. Temel neden, her işletim sisteminin satır sonunu işaretleme biçimindeki temel farklılıktır: Windows bir satır başı + satır besleme dizisi (rn, CRLF olarak da bilinir) kullanırken, Linux yalnızca bir satır besleme (n veya LF) bekler. Çoğu düzenleyicide görünmez olan bu fazladan r karakteri, kabuk betiklerinin şifreli hatalarla başarısız olmasına, yapılandırma ayrıştırıcılarının bozulmasına ve awk, sed ve grep gibi metin işleme araçlarında beklenmedik çıktılara neden olabilir.
dos2unix yardımcı programı özellikle bu sorunu çözmek için geliştirilmiştir. Metin dosyalarından Windows tarzı CRLF satır sonlarını kaldırır ve bunları Unix tarzı LF sonlarıyla değiştirerek dosyalarınızı Linux araç zincirleriyle tam uyumlu hale getirir. Bu kılavuz, bilmeniz gereken her şeyi kapsar: dos2unix‘nin arka planda ne yaptığını, başlıca Linux dağıtımlarına nasıl kurulacağını, tam sözdizimini ve seçeneklerini ve pratik gerçek dünya örneklerini.
dos2unix Nedir ve Neden Önemlidir?
dos2unix, metin dosyalarını DOS/Windows biçiminden (CRLF satır sonları) Unix/Linux biçimine (LF satır sonları) dönüştüren hafif, açık kaynaklı bir komut satırı yardımcı programıdır. Ayrıca ters dönüşümü (unix2dos), klasik Mac satır sonlarını (yalnızca CR) ve ikili güvenli dosya işlemlerini de gerçekleştirebilir.
Gizli r Karakterlerinin Neden Gerçek Sorunlara Yol Açtığı
Bir Windows makinesinde oluşturulmuş veya düzenlenmiş bir Bash betiği düşünün. Linux’ta çalıştırdığınızda şu gibi hatalar görebilirsiniz:
bash: ./deploy.sh: /bin/bash^M: bad interpreter: No such file or directory^M, r‘nin görsel temsilidir. Kabuk, shebang satırı gizli bir satır başı içerdiğinden yorumlayıcıyı bulamaz. Benzer şekilde, Python betikleri, cron işleri, .env dosyaları ve Nginx veya Apache yapılandırma dosyaları, Windows satır sonları içerdiklerinde öngörülemeyen şekillerde davranabilir.
Bu, sunucu ortamlarında özellikle kritiktir. Bir VPS Hosting ortamı veya bir Dedicated Server yönetiyorsanız, yanlış yapılandırılmış betikler veya bozuk yapılandırma dosyaları dağıtmak servisleri çökertebilir. Satır sonu sorunlarını nasıl tespit edip düzelteceğinizi bilmek, temel bir sistem yöneticisi becerisidir.
Linux’a dos2unix Nasıl Kurulur
Başlıca Linux dağıtımlarının çoğu, dos2unix‘yi varsayılan paket depolarına dahil eder. Dağıtımınız için uygun komutu kullanın:
Debian / Ubuntu
sudo apt-get update && sudo apt-get install dos2unixCentOS / RHEL / AlmaLinux / Rocky Linux
sudo yum install dos2unixFedora
sudo dnf install dos2unixArch Linux
sudo pacman -S dos2unixopenSUSE
sudo zypper install dos2unixKurulumdan sonra mevcut olduğunu doğrulayın:
dos2unix --versionDönüştürmeden Önce Windows Satır Sonlarını Tespit Etme
dos2unix çalıştırmadan önce, bir dosyanın gerçekten CRLF satır sonları içerdiğini doğrulamak iyi bir uygulamadır. Birkaç yöntem iyi çalışır:
file kullanarak:
file filename.txtWindows biçimli bir dosyanın çıktısı CRLF line terminators içerecektir.
cat -A kullanarak:
cat -A filename.txtWindows satır sonları her satırın sonunda ^M$ olarak görünür. Unix satır sonları yalnızca $ gösterir.
hexdump kullanarak:
hexdump -C filename.txt | grep -i "0d 0a"0d 0a bayt dizisi, rn‘nin onaltılık temsilidir.
Tam dos2unix Komut Sözdizimi
dos2unix [options] [input_file] [output_file]Yalnızca bir giriş dosyasıyla çağrıldığında, dos2unix dosyayı yerinde dönüştürür ve orijinalin üzerine yazar. Hem giriş hem de çıkış dosyası belirtildiğinde, orijinal korunur ve dönüştürülen içerik yeni dosyaya yazılır.
dos2unix Seçenekler Referansı
| Seçenek | Uzun Form | Açıklama |
|---|---|---|
-o | --oldfile | Dosyaları eski (yerinde) modda dönüştür — varsayılan davranış |
-n | --newfile | Orijinali koruyarak yeni bir dosyaya dönüştür |
-c | --convmode | Dönüştürme modunu ayarla: unix, dos veya mac |
-k | --keep-timestamp | Orijinal dosyanın değiştirilme zaman damgasını koru |
-q | --quiet | Tüm çıktı mesajlarını ve uyarıları bastır |
-v | --verbose | Ayrıntılı dönüştürme bilgilerini yazdır |
-l | --newline | Ek bir yeni satır karakteri ekle |
-s | --safe | İkili dosyaları otomatik olarak atla |
-f | --force | İkili dosyaların dönüştürülmesini zorla |
-b | --keep-bom | Varsa Bayt Sırası İşaretini (BOM) koru |
-r | --remove-bom | Bayt Sırası İşaretini (BOM) kaldır |
-V | --version | Sürüm numarasını göster ve çık |
-h | --help | Yardım bilgilerini göster |
dos2unix Kullanımının Pratik Örnekleri
1. Tek Bir Dosyayı Yerinde Dönüştürme
En yaygın kullanım durumu — bir dosyayı dönüştürün ve Unix biçimli sürümle üzerine yazın:
dos2unix filename.txtDosya doğrudan değiştirilir. Varsayılan olarak yedek oluşturulmaz, bu nedenle gerekirse bir kopyaya sahip olduğunuzdan emin olun.
2. Bir Dosyayı Dönüştürme ve Yeni Bir Dosyaya Kaydetme
Orijinal dosyayı korumak ve dönüştürülmüş çıktıyı ayrı bir dosyaya yazmak için -n bayrağını (yeni dosya modu) kullanın:
dos2unix -n filename.txt converted_filename.txtBu, filename.txt‘yi okur, dönüştürür ve sonucu converted_filename.txt‘ya yazar. Orijinal dokunulmadan kalır.
3. Birden Fazla Dosyayı Aynı Anda Dönüştürme
Tek bir komutta birden fazla dosya adı geçirebilirsiniz:
dos2unix file1.txt file2.txt file3.txtListelenen tüm dosyalar yerinde dönüştürülür. Bu, bilinen küçük bir dosya kümesinde toplu işlemler için verimlidir.
4. Bir Dizindeki Tüm .txt Dosyalarını Dönüştürme
Tüm dizinleri işlemek için kabuk genişletmesi veya find kullanın:
dos2unix *.txtYa da alt dizinler genelinde yinelemeli olarak:
find /path/to/directory -type f -name "*.txt" -exec dos2unix {} ;Bu, özellikle bir Windows makinesinde paketlenmiş web uygulaması dosyaları veya yapılandırma kümeleri dağıtırken kullanışlıdır.
5. Tüm Kabuk Betiklerini Yinelemeli Olarak Dönüştürme
Yaygın bir sistem yöneticisi görevi — bir proje dizinindeki tüm Bash betiklerini düzeltme:
find /var/www/myapp -type f -name "*.sh" -exec dos2unix {} ;6. Orijinal Dosya Zaman Damgasını Koruma
Varsayılan olarak, dos2unix dosyanın değiştirilme zamanını günceller. Orijinal zaman damgasını korumak için (dağıtım işlem hatlarında veya make‘nin zaman damgalarına bağlı olduğu durumlarda kullanışlıdır):
dos2unix -k filename.txt7. Sessiz Mod — Tüm Çıktıyı Bastırma
Dönüştürme mesajlarının günlükleri karıştırmasını istemediğiniz kabuk betikleri ve otomasyon için idealdir:
dos2unix -q filename.txt8. Mac Satır Sonlarına Dönüştürme (Yalnızca CR)
Bugün nadiren gerekli olsa da, -c dönüştürme modu bayrağını kullanarak bir dosyayı klasik Mac OS 9 biçimine (yalnızca satır başı, r) dönüştürebilirsiniz:
dos2unix -c mac filename.txt9. Unix’ten DOS Biçimine Geri Dönüştürme
dos2unix, ters işlemi gerçekleştiren unix2dos ile birlikte gelir — Windows uyumluluğu için CRLF sonları ekler:
unix2dos filename.txt10. Bayt Sırası İşaretini (BOM) Kaldırma
Windows uygulamaları tarafından kaydedilen dosyalar bazen başında bir UTF-8 BOM içerir; bu, Linux’ta betikleri ve ayrıştırıcıları bozabilir. Şununla kaldırın:
dos2unix -r filename.txtKabuk Betiklerinde ve Otomasyonda dos2unix Kullanımı
dos2unix, dağıtım betiklerine ve CI/CD işlem hatlarına temiz bir şekilde entegre olur. İşte tüm yapılandırma ve betik dosyalarını yayına girmeden önce temizleyen bir ön dağıtım betiği örneği:
#!/bin/bash
# pre-deploy-sanitize.sh
# Converts all text files to Unix format before deployment
TARGET_DIR="/var/www/myapp"
echo "Sanitizing line endings in $TARGET_DIR..."
find "$TARGET_DIR" -type f ( -name "*.sh" -o -name "*.conf" -o -name "*.php" -o -name "*.py" ) | while read -r file; do
dos2unix -q -k "$file"
echo "Converted: $file"
done
echo "Done. All files converted to Unix format."Betiği çalıştırılabilir yapın ve dağıtım iş akışınızın bir parçası olarak çalıştırın:
chmod +x pre-deploy-sanitize.sh
./pre-deploy-sanitize.shYaygın Hatalar ve Sorun Giderme
dos2unix: command not found
Yardımcı program kurulu değil. Dağıtımınız için uygun kurulum komutunu çalıştırın (yukarıdaki kurulum bölümüne bakın).
dos2unix: Binary file ... is skipped
dos2unix, bunun ikili bir dosya olduğunu düşündüğünü tespit etti ve atladı. Dosyanın metin olduğundan eminseniz, dönüştürmeyi şununla zorlayın:
dos2unix -f filenameDönüştürmeden Sonra Betik Hâlâ Başarısız Oluyor
Dönüştürmenin çalıştığını doğrulayın:
file filename.shArtık ASCII text veya UTF-8 Unicode text raporlamalı, CRLF‘den bahsetmemelidir. Sorunlar devam ederse, hexdump kullanarak diğer kodlama sorunlarını kontrol edin.
İzin Reddedildi
Belirli sistem dosyalarını değiştirmek için yükseltilmiş ayrıcalıklara ihtiyacınız olabilir:
sudo dos2unix /etc/nginx/nginx.confdos2unix ve Alternatif Yöntemler
dos2unix en temiz çözüm olsa da, deneyimli Linux yöneticileri bazen hızlı tek seferlik dönüştürmeler için başka araçlar kullanır:
sed kullanarak:
sed -i 's/r//' filename.txttr kullanarak:
tr -d 'r' < input.txt > output.txtawk kullanarak:
awk '{ sub("r$", ""); print }' filename.txt > output.txtvim kullanarak:
:set ff=unix
:wqBu alternatifler işe yarar, ancak dos2unix bu görev için özel olarak geliştirilmiştir, uç durumları (BOM kaldırma ve ikili dosya tespiti gibi) daha zarif bir şekilde ele alır ve üretim kullanımı için önerilen araçtır.
Web Hosting ve Sunucu Yönetimi İçin Önemi
Satır sonu sorunları yalnızca bir geliştirici rahatsızlığı değil — barındırılan ortamlarda gerçek bir operasyonel endişedir. CRLF sonlarına sahip PHP betikleri, HTTP başlıklarında beklenmedik boşluk üretebilir ve oturum ile çerez hatalarına neden olabilir. Python WSGI uygulamaları sözdizimi hataları fırlatabilir. Gizli r karakterleri içeren Nginx ve Apache yapılandırma dosyaları, servislerin tamamen başlamasını engelleyebilir.
Bir Shared Web Hosting planında web siteleri veya uygulamalar barındırıyorsanız ya da kendi VPS with cPanel‘inizi yönetiyorsanız, dos2unix‘yi dosya yükleme ve dağıtım iş akışınıza dahil etmek basit, yüksek değerli bir uygulamadır. Dedicated Servers üzerinde otomatik dağıtımlar çalıştıran ekipler için, CI/CD işlem hattınıza dos2unix eklemek, üretime ulaşmadan önce ortama özgü hataların tüm bir sınıfını ortadan kaldırır.
Ayrıca, altyapınız posta işleme veya filtreleme için özel betikler içeren Email Hosting içeriyorsa, bu betiklerin doğru Unix satır sonlarını kullandığından emin olmak güvenilir çalışma için önemlidir.
Hızlı Referans Özeti
| Görev | Komut |
|---|---|
| Dosyayı yerinde dönüştür | dos2unix filename.txt |
| Dönüştür ve yeni dosyaya kaydet | dos2unix -n input.txt output.txt |
| Birden fazla dosyayı dönüştür | dos2unix file1.txt file2.txt file3.txt |
Tüm .sh dosyalarını yinelemeli olarak dönüştür | find . -name "*.sh" -exec dos2unix {} ; |
| Orijinal zaman damgasını koru | dos2unix -k filename.txt |
| Sessiz mod (çıktı yok) | dos2unix -q filename.txt |
| BOM’u kaldır | dos2unix -r filename.txt |
| Mac biçimine dönüştür | dos2unix -c mac filename.txt |
| Ters: Unix’ten DOS’a | unix2dos filename.txt |
| Satır sonlarını kontrol et | file filename.txt veya cat -A filename.txt |
Sonuç
dos2unix komutu, platformlar arası geliştirme ve sunucu yönetiminde orantısız bir etkiye sahip küçük bir yardımcı programdır. Gizli r karakterleri, dosyalar Windows ve Linux ortamları arasında geçiş yaptığında “benim makinemde çalışıyor” hatalarının en yaygın nedenlerinden biridir — ve dos2unix bunları temiz, güvenli ve verimli bir şekilde ortadan kaldırır.
Sözdizimini ve seçeneklerini öğrenerek dağıtım hatalarını önleyebilir, betik uyumluluğunu sağlayabilir ve tüm altyapınızdaki yapılandırma dosyalarının bütünlüğünü koruyabilirsiniz. İster bir Linux sunucusuna kod ileten bir geliştirici, ister bir makine filosunu yöneten bir sistem yöneticisi, ister bir barındırma ortamına dosya yükleyen bir site sahibi olun, dos2unix‘yi standart araç setinizin bir parçası haline getirmek, dosyaların işletim sistemi sınırlarını her geçişinde karşılığını veren basit bir en iyi uygulamadır.
