Versuchen Sie es file
dann file -k
danndos2unix -ih
file
wird in der Regel genug sein. Aber für schwierige Fälle versuchen Sie es file -k
oder dosunix -ih
.
Details unten.
Versuchen file -k
Kurzfassung: file -k somefile.txt
wird es Ihnen sagen.
- Es wird
with CRLF line endings
für DOS / Windows-Zeilenenden ausgegeben .
- Es wird
with LF line endings
für MAC-Leitungsenden ausgegeben .
- Und für die Linux / Unix-Zeile "CR" wird nur ausgegeben
text
. (Wenn also keine Art von explizit erwähnt wird, line endings
bedeutet dies implizit: "CR-Zeilenenden" .)
Langfassung siehe unten.
Beispiel aus der Praxis: Zertifikatcodierung
Ich muss dies manchmal auf PEM-Zertifikatdateien überprüfen.
Das Problem mit regulären file
ist folgendes: Manchmal wird versucht, zu klug / zu spezifisch zu sein.
Versuchen wir ein kleines Quiz: Ich habe einige Dateien. Und eine dieser Dateien hat unterschiedliche Zeilenenden. Welcher?
(Übrigens: So sieht eines meiner typischen "Certificate Work" -Verzeichnisse aus.)
Versuchen wir es regelmäßig 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. Es sagt mir nicht die Zeilenenden. Und ich wusste bereits , dass dies Zertifizierungsdateien waren. Ich brauchte keine "Datei", um mir das zu sagen.
Was können Sie noch versuchen?
Sie können es dos2unix
mit dem --info
Schalter folgendermaßen versuchen :
$ 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
Das sagt dir also: yup, "0.example.end.cer" muss der seltsame Mann sein. Aber welche Art von Zeilenenden gibt es? Kennen Sie das dos2unix-Ausgabeformat auswendig? (Ich nicht.)
Aber zum Glück gibt es die --keep-going
(oder -k
kurz gesagt) Option in 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
Ausgezeichnet! Jetzt wissen wir, dass unsere ungerade Datei DOS ( CRLF
) -Zeilenenden hat. (Und die anderen Dateien haben Unix ( LF
) -Zeilenenden. Dies ist in dieser Ausgabe nicht explizit. Es ist implizit. Es ist genau so, wie es file
eine "normale" Textdatei erwartet.)
(Wenn Sie meine Mnemonik teilen möchten: "L" steht für "Linux" und für "LF".)
Lassen Sie uns nun den Täter bekehren und es erneut versuchen:
$ 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
Gut. Jetzt haben alle Zertifikate Unix-Zeilenenden.
Versuchen dos2unix -ih
Ich wusste das nicht, als ich das obige Beispiel schrieb, aber:
Tatsächlich stellt sich heraus, dass dos2unix Ihnen eine Kopfzeile gibt, wenn Sie -ih
(kurz für --info=h
) wie folgt verwenden :
$ 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
Und noch ein "tatsächlicher" Moment: Das Header-Format ist wirklich leicht zu merken: Hier sind zwei Mnemoniken:
- Es ist DUMB (von links nach rechts: d für Dos, u für Unix, m für Mac, b für BOM).
- Und außerdem: "DUM" ist nur die alphabetische Reihenfolge von D, U und M.
Weiterführende Literatur
man less
.