file
O file -k
zaman denedos2unix -ih
file
genellikle yeterli olacaktır. Ancak zor vakalar için deneyin file -k
veya dosunix -ih
.
Detaylar aşağıda.
Deneyin file -k
Kısa versiyon: file -k somefile.txt
söyleyecektir.
with CRLF line endings
DOS / Windows satır sonları için çıktı alır .
with LF line endings
MAC satırı sonları için çıktı alır .
- Ve Linux / Unix hattı "CR" için sadece çıktı
text
. (Yani herhangi bir türden açıkça bahsetmezse, line endings
bu dolaylı olarak şu anlama gelir: "CR satır sonları" .)
Uzun versiyon aşağıya bakınız.
Gerçek dünya örneği: Sertifika Kodlaması
Bazen bunu PEM sertifika dosyaları için kontrol etmek zorundayım.
Düzenli ile ilgili sorun file
şudur: Bazen çok akıllı / çok spesifik olmaya çalışıyor.
Biraz bilgi yarışması yapalım: Dosyalarım var. Ve bu dosyalardan birinin satır sonları farklı. Hangisi?
(Bu arada: tipik "sertifika çalışması" dizinlerimden biri böyle görünüyor.)
Düzenli deneyelim file
:
$ file -- *
0.example.end.cer: PEM certificate
0.example.end.key: PEM RSA private key
1.example.int.cer: PEM certificate
2.example.root.cer: PEM certificate
example.opensslconfig.ini: ASCII text
example.req: PEM certificate request
Huh. Bana satır sonlarını söylemiyor. Bunların sertifika dosyaları olduğunu zaten biliyordum . Bunu söylemek için "dosyaya" ihtiyacım yoktu.
Başka ne deneyebilirsin?
Sen deneyebilirsiniz dos2unix
ile --info
böyle anahtarı:
$ dos2unix --info -- *
37 0 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
Bu size şunu söyler: evet, "0.example.end.cer" dışarıdaki tek adam olmalı. Ama ne tür çizgi sonları var? Do Eğer ezbere dos2unix çıktı biçimini biliyor? (Yapmıyorum.)
Ancak neyse ki, --keep-going
(veya -k
kısaca) seçeneği var file
:
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text, with CRLF line terminators\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
Mükemmel! Artık tek dosyamızın DOS ( CRLF
) satır sonları olduğunu biliyoruz . (Ve diğer dosyaların Unix ( LF
) satır sonları vardır. Bu çıktıda bu açık değildir. Örtük. Sadece file
"normal" bir metin dosyasının olmasını beklediği gibi.)
(Anımsatıcımı paylaşmak istiyorsanız: "L", "Linux" ve "LF" içindir.)
Şimdi suçluyu dönüştürelim ve tekrar deneyelim:
$ dos2unix -- 0.example.end.cer
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
İyi. Artık tüm sertifikaların Unix çizgi sonları var.
Deneyin dos2unix -ih
Yukarıdaki örneği yazarken bunu bilmiyordum ama:
Aslında, eğer böyle kullanırsanız -ih
(kısa --info=h
) , dos2unix'in size bir başlık satırı vereceği ortaya çıkıyor :
$ dos2unix -ih -- *
DOS UNIX MAC BOM TXTBIN FILE
0 37 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
Ve bir başka "aslında" an: Başlık formatını hatırlamak gerçekten çok kolay: İşte iki anımsatıcı:
- DUMB (soldan sağa: Dos için d, Unix için u, Mac için m, BOM için b).
- Ve ayrıca: "DUM" sadece D, U ve M'nin alfabetik sıralamasıdır.
daha fazla okuma
man less
.