Spróbuj file
wtedy file -k
następniedos2unix -ih
file
zwykle wystarczy. Ale w trudnych przypadkach spróbuj file -k
lub dosunix -ih
.
Szczegóły poniżej.
Próbować file -k
Krótka wersja: file -k somefile.txt
powie ci.
- Będzie wyświetlać
with CRLF line endings
dla zakończeń linii DOS / Windows.
- Będzie wyświetlać
with LF line endings
dla zakończeń linii MAC.
- A dla linii CR / Linux / Unix zostanie po prostu wyprowadzony
text
. (Jeśli więc nie wspomina o żadnym rodzaju, line endings
oznacza to domyślnie: „Zakończenia linii CR” .)
Wersja długa patrz poniżej.
Przykład ze świata rzeczywistego: kodowanie certyfikatów
Czasami muszę to sprawdzić w przypadku plików certyfikatów PEM.
Problem ze zwykłym file
jest taki: Czasami stara się być zbyt mądry / zbyt konkretny.
Spróbujmy małego quizu: Mam trochę plików. Jeden z tych plików ma różne zakończenia linii. Który?
(Przy okazji: tak wygląda jeden z moich typowych katalogów „praca z certyfikatami”).
Spróbujmy regularnie 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 To nie mówi mi o zakończeniu linii. I już wiedziałem, że to były pliki cert. Nie potrzebowałem „pliku”, żeby mi to powiedzieć.
Co jeszcze możesz spróbować?
Możesz spróbować dos2unix
z takim --info
przełącznikiem:
$ 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
To mówi ci, że: tak, „0.example.end.cer” musi być dziwnym mężczyzną. Ale jakie są zakończenia linii? Czy ty wiesz, format wyjściowy dos2unix na pamięć? (Ja nie.)
Ale na szczęście jest opcja --keep-going
(lub -k
w skrócie) w 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
Świetny! Teraz wiemy, że nasz nieparzysty plik ma CRLF
zakończenia linii DOS ( ). (A inne pliki mają LF
końcówki wiersza Unix ( ). Nie jest to jednoznaczne na tym wyjściu. Jest niejawne. Po prostu file
oczekuje się, że będzie to „zwykły” plik tekstowy.)
(Jeśli chcesz podzielić się moim mnemonikiem: „L” oznacza „Linux” i „LF”.)
Teraz przekonwertujmy winowajcę i spróbuj ponownie:
$ 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
Dobrze. Teraz wszystkie certyfikaty mają zakończenia linii Uniksa.
Próbować dos2unix -ih
Nie wiedziałem tego, pisząc powyższy przykład, ale:
Okazuje się, że dos2unix da ci nagłówek, jeśli użyjesz -ih
(skrót od --info=h
):
$ 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
I jeszcze jeden „faktyczny” moment: format nagłówka jest naprawdę łatwy do zapamiętania: oto dwie mnemoniki:
- To DUMB (od lewej do prawej: d dla Dos, u dla Unix, m dla Mac, b dla BOM).
- A także: „DUM” to kolejność alfabetyczna liter D, U i M.
Dalsza lektura
man less
.