Попробуйте file
затем file -k
затемdos2unix -ih
file
обычно будет достаточно. Но для тяжелых случаев попробуйте file -k
или dosunix -ih
.
Подробности ниже.
Пытаться file -k
Краткая версия: file -k somefile.txt
скажу вам.
- Он будет выводиться
with CRLF line endings
для концов строк DOS / Windows.
- Он выведет
with LF line endings
для концов строки MAC.
- А для Linux / Unix строка "CR" будет просто выводиться
text
. (Так что, если он явно не упоминает какой-либо вид, line endings
то это неявно означает: «Концы строк CR» .)
Длинную версию смотрите ниже.
Пример из реальной жизни: кодировка сертификата
Я иногда должен проверить это для файлов сертификата PEM.
Проблема с обычным file
заключается в следующем: иногда он пытается быть слишком умным / слишком конкретным.
Давайте попробуем небольшой тест: у меня есть несколько файлов. И один из этих файлов имеет разные окончания строк. Который из?
(Кстати: вот так выглядит один из моих типичных каталогов "работы с сертификатами".)
Давайте попробуем регулярно 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
Да. Это не говорит мне об окончаниях строк. И я уже знал, что это сертификаты. Мне не нужно было «файл», чтобы сказать мне это.
Что еще можно попробовать?
Вы можете попробовать dos2unix
с --info
переключателем, как это:
$ 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
Это говорит о том, что: yup, «0.example.end.cer» должен быть нечетным человеком. Но что за концы строк? Как вы знаете , выходной формат dos2unix наизусть? (Я не.)
Но, к счастью, есть опция --keep-going
(или -k
для краткости) 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
Превосходно! Теперь мы знаем, что наш нечетный файл имеет CRLF
окончания строки DOS ( ). (А у других файлов есть LF
окончания строк Unix ( ). Это не явно в этом выводе. Это неявно. Это просто способ, которым file
ожидается «обычный» текстовый файл.)
(Если вы хотите поделиться моей мнемоникой: «L» для «Linux» и «LF».)
Теперь давайте преобразуем преступника и попробуем еще раз:
$ 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
Хорошо. Теперь все сертификаты имеют окончания Unix.
Пытаться dos2unix -ih
Я не знал этого, когда писал пример выше, но:
На самом деле получается, что dos2unix выдаст вам строку заголовка, если вы будете использовать -ih
(сокращение --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
И еще один «настоящий» момент: формат заголовка действительно легко запомнить: вот две мнемоники:
- Это DUMB (слева направо: d для Dos, u для Unix, m для Mac, b для спецификации).
- А также: «DUM» это просто алфавитный порядок D, U и M.
дальнейшее чтение
man less
.