Prova file
allora file -k
poidos2unix -ih
file
sarà di solito abbastanza. Ma per i casi difficili provare file -k
o dosunix -ih
.
Dettagli sotto.
Provare file -k
Versione breve: te file -k somefile.txt
lo dirò.
- Verrà emesso
with CRLF line endings
per terminazioni di riga DOS / Windows.
- Verrà emesso
with LF line endings
per terminazioni di linea MAC.
- E per la linea Linux / Unix "CR" verrà semplicemente emesso
text
. (Quindi, se non menziona esplicitamente alcun tipo di line endings
ciò, ciò significa implicitamente: "terminazioni di riga CR" .)
Versione lunga vedi sotto.
Esempio reale: codifica certificati
A volte devo controllare questo per i file di certificato PEM.
Il problema con i regolari file
è questo: a volte sta cercando di essere troppo intelligente / troppo specifico.
Proviamo un piccolo quiz: ho alcuni file. E uno di questi file ha terminazioni di linea diverse. Quale?
(A proposito: ecco come appare una delle mie tipiche directory "lavoro certificato".)
Proviamo regolarmente 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. Non mi sta dicendo i finali. E sapevo già che quelli erano file di certificati. Non avevo bisogno di "file" per dirmelo.
Cos'altro puoi provare?
Potresti provare dos2unix
con l' --info
interruttore in questo modo:
$ 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
Quindi questo ti dice che: yup, "0.example.end.cer" deve essere l'uomo strano. Ma che tipo di terminazioni di linea ci sono? Non si conosce il formato di output dos2unix dal cuore? (Io non.)
Ma per fortuna c'è l' opzione --keep-going
(o -k
in breve) 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
Eccellente! Ora sappiamo che il nostro file dispari ha CRLF
terminazioni di riga DOS ( ). (E gli altri file hanno LF
terminazioni di riga Unix ( ). Questo non è esplicito in questo output. È implicito. È solo il modo in cui si file
aspetta un file di testo "normale".)
(Se vuoi condividere il mio mnemonico: "L" è per "Linux" e per "LF".)
Ora convertiamo il colpevole e riproviamo:
$ 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
Buona. Ora tutte le certs hanno terminazioni di linea Unix.
Provare dos2unix -ih
Non lo sapevo quando stavo scrivendo l'esempio sopra ma:
In realtà risulta che dos2unix ti darà una riga di intestazione se usi -ih
(abbreviazione di --info=h
) in questo modo:
$ 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
E un altro momento "reale": il formato dell'intestazione è davvero facile da ricordare: ecco due mnemonici:
- È DUMB (da sinistra a destra: d per Dos, u per Unix, m per Mac, b per BOM).
- E anche: "DUM" è solo l'ordinamento alfabetico di D, U e M.
Ulteriori letture
man less
.