Intenta file
entonces file -k
entoncesdos2unix -ih
file
Por lo general, será suficiente. Pero para casos difíciles intente file -k
o dosunix -ih
.
Detalles abajo.
Tratar file -k
Versión corta: file -k somefile.txt
te lo diré.
- Saldrá
with CRLF line endings
para las terminaciones de línea de DOS / Windows.
- Saldrá
with LF line endings
para las terminaciones de línea MAC.
- Y para la línea "CR" de Linux / Unix solo saldrá
text
. (Entonces, si no menciona explícitamente ningún tipo de line endings
esto, esto significa implícitamente: "terminaciones de línea CR" ).
Versión larga ver abajo.
Ejemplo del mundo real: codificación de certificados
A veces tengo que verificar esto para archivos de certificado PEM.
El problema con regular file
es este: a veces está tratando de ser demasiado inteligente / demasiado específico.
Probemos un pequeño cuestionario: tengo algunos archivos. Y uno de estos archivos tiene diferentes finales de línea. ¿Cúal?
(Por cierto: así es como se ve uno de mis directorios típicos de "trabajo de certificado").
Probemos con regularidad 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 No me dice los finales de línea. Y ya sabía que esos eran archivos cert. No necesitaba "archivo" para decirme eso.
¿Qué más puedes probar?
Puede intentar dos2unix
con el --info
interruptor de esta manera:
$ 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
Eso te dice que: sí, "0.example.end.cer" debe ser el hombre extraño. Pero, ¿qué tipo de terminaciones de línea hay? Qué se conoce el formato de salida dos2unix de memoria? (Yo no.)
Pero afortunadamente existe la opción --keep-going
(o -k
para abreviar) en 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
¡Excelente! Ahora sabemos que nuestro archivo impar tiene CRLF
terminaciones de línea DOS ( ). (Y los otros archivos tienen LF
terminaciones de línea Unix ( ). Esto no es explícito en esta salida. Es implícito. Es justo como se file
espera que sea un archivo de texto "normal").
(Si quieres compartir mi mnemotécnico: "L" es para "Linux" y para "LF").
Ahora convierta al culpable e intente nuevamente:
$ 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
Bueno. Ahora todos los certs tienen terminaciones de línea Unix.
Tratar dos2unix -ih
No sabía esto cuando estaba escribiendo el ejemplo anterior, pero:
En realidad, resulta que dos2unix le dará una línea de encabezado si usa -ih
(abreviatura de --info=h
) así:
$ 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
Y otro momento "en realidad": el formato del encabezado es realmente fácil de recordar: aquí hay dos mnemotécnicos:
- Es DUMB (de izquierda a derecha: d para Dos, u para Unix, m para Mac, b para BOM).
- Y también: "DUM" es solo el orden alfabético de D, U y M.
Otras lecturas
man less
.