Попробуйте "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
Отлично!Теперь мы знаем, что наш нечетный файл имеет DOS (CRLF
) окончания строк.(И другие файлы имеют окончание строк Unix (LF
). Это не явно в этом выводе. Это неявное. Это просто способ, которым 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.
Дальнейшее чтение