Почему nano отображает символы при просмотре изображения с ним? [dубликат]

Что означает выход, когда вы делаете cat image.png? Это то, из чего на самом деле сделан образ? Имеет ли значение, какое расширение файла имеет изображение?

3
задан 21 June 2017 в 08:48

6 ответов

cat выведет содержимое файла (нуль и единицы, которые будут отображаться на невоспроизводимые символы, потому что они не являются правильными символами?) в stdout, который по умолчанию является вашим терминалом.

Расширение файла для нас (людей), чтобы легко определить, какой тип файла, однако некоторые программы используют его для его открытия, но в основном программы определяют тип файла, используя его заголовок.

Используйте file file.png, чтобы получить тип файла, или xxd file.png:

00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR 00000010: 0000 0002 0000 0002 0800 0000 0057 dd52 .............W.R 00000020: f800 0000 0e49 4441 5478 9c63 6c60 6062 .....IDATx.cl``b 00000030: 6000 0002 9200 84f7 7ca3 5800 0000 0049 `.......|.X....I 00000040: 454e 44ae 4260 82 END.B`.

, чтобы получить шестнадцатеричный дамп содержимого файла, обратите внимание на «PNG» в первом line.

Также здесь мы видим, что PNG-подпись:

PNG 89 50 4E 47 0D 0A 1A 0A PNG image
10
ответ дан 18 July 2018 в 11:03

cat выведет содержимое файла (нуль и единицы, которые будут отображаться на невоспроизводимые символы, потому что они не являются правильными символами?) в stdout, который по умолчанию является вашим терминалом.

Расширение файла для нас (людей), чтобы легко определить, какой тип файла, однако некоторые программы используют его для его открытия, но в основном программы определяют тип файла, используя его заголовок.

Используйте file file.png, чтобы получить тип файла, или xxd file.png:

00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR 00000010: 0000 0002 0000 0002 0800 0000 0057 dd52 .............W.R 00000020: f800 0000 0e49 4441 5478 9c63 6c60 6062 .....IDATx.cl``b 00000030: 6000 0002 9200 84f7 7ca3 5800 0000 0049 `.......|.X....I 00000040: 454e 44ae 4260 82 END.B`.

, чтобы получить шестнадцатеричный дамп содержимого файла, обратите внимание на «PNG» в первом line.

Также здесь мы видим, что PNG-подпись:

PNG 89 50 4E 47 0D 0A 1A 0A PNG image
10
ответ дан 24 July 2018 в 19:42

cat просто выводит содержимое файла в поток stdout, который в вашем случае является терминальным. Что происходит с последовательностью 0 и 1, которые содержат файл, зависит от терминала. В случае двоичного файла последовательности битов, которые не являются текстом, не будут распознаваться как текст.

Рассмотрим, например, cat файл с символами UTF, например, китайский, на двух разных терминалах - тот, который поддерживает символы UTF (terminator на скриншоте ниже) и тот, t имеют хорошую поддержку (xterm на скриншоте ниже). Как видите, некоторые символы не интерпретируются. cat выводит содержимое в любом случае, но как интерпретировать это содержимое - это зависит от каждого терминала.

stream

Теперь, если вы перенаправляете stdout в файл, вы фактически создаете копию, почти такую ​​же, как cp original copy или mv old new. В некоторых редких случаях вам может понадобиться сращивание двух файлов - двоичных или текстовых - что также возможно с cat. Идея такая же. В соответствии с определением POSIX «[t] входные файлы могут быть любыми типами файлов», что означает, что cat может читать любой файл. Однако есть случаи, когда cat будет использовать текстовый режим. В случае cat Ubuntu (который предоставляется пакетом GNU coreutils) информация, представленная в info cat, гласит:

«cat» читается в текстовом режиме, если используется один из вариантов «-bensAE» или если «cat» читается со стандартного ввода, а стандартный вход - это терминал. Аналогично, «cat» записывает в текстовом режиме, если используется один из вариантов «-bensAE» или стандартный вывод - это терминал.

Конечно, если мы действительно хотим просмотреть содержимое двоичного файла в читаемом формате, мы можем использовать шестнадцатеричные редакторы или любой тип «дампа», сращивать два файла файловый менеджер , или даже vi текстовый редактор. Есть довольно хороший список этих POSIX-определений и здесь уже.

8
ответ дан 18 July 2018 в 11:03

Изображения сделаны из байтов. Так что текстовые файлы

Когда прикладное приложение, например cat хочет читать текстовые файлы, оно начинает считывать байты и ищет эти байты в кодировке символов, таких как ascii или unicode. Он находит персонажа в таблице и отображает его.

Но изображения не имеют символов (они могут, но это не то, что создает изображение), и вы можете догадываться, что происходит, когда вы пытаетесь обрабатывать отформатированные изображения байтов, например они были символами. вы получаете случайные символы для каждого файла.

Если вы хотите, чтобы строки в файле использовали команду strings.

3
ответ дан 18 July 2018 в 11:03

cat просто выводит содержимое файла в поток stdout, который в вашем случае является терминальным. Что происходит с последовательностью 0 и 1, которые содержат файл, зависит от терминала. В случае двоичного файла последовательности битов, которые не являются текстом, не будут распознаваться как текст.

Рассмотрим, например, cat файл с символами UTF, например, китайский, на двух разных терминалах - тот, который поддерживает символы UTF (terminator на скриншоте ниже) и тот, t имеют хорошую поддержку (xterm на скриншоте ниже). Как видите, некоторые символы не интерпретируются. cat выводит содержимое в любом случае, но как интерпретировать это содержимое - это зависит от каждого терминала.

stream

Теперь, если вы перенаправляете stdout в файл, вы фактически создаете копию, почти такую ​​же, как cp original copy или mv old new. В некоторых редких случаях вам может понадобиться сращивание двух файлов - двоичных или текстовых - что также возможно с cat. Идея такая же. В соответствии с определением POSIX «[t] входные файлы могут быть любыми типами файлов», что означает, что cat может читать любой файл. Однако есть случаи, когда cat будет использовать текстовый режим. В случае cat Ubuntu (который предоставляется пакетом GNU coreutils) информация, представленная в info cat, гласит:

«cat» читается в текстовом режиме, если используется один из вариантов «-bensAE» или если «cat» читается со стандартного ввода, а стандартный вход - это терминал. Аналогично, «cat» записывает в текстовом режиме, если используется один из вариантов «-bensAE» или стандартный вывод - это терминал.

Конечно, если мы действительно хотим просмотреть содержимое двоичного файла в читаемом формате, мы можем использовать шестнадцатеричные редакторы или любой тип «дампа», сращивать два файла файловый менеджер , или даже vi текстовый редактор. Есть довольно хороший список этих POSIX-определений и здесь уже.

8
ответ дан 24 July 2018 в 19:42
  • 1
    cat не пытается ничего интерпретировать. Он просто считывает последовательность файлов, заданных в командной строке, и записывает их в stdout один за другим. – Ruslan 21 June 2017 в 13:19
  • 2
    @Ruslan Я отредактировал ответ. Теперь все исправлено, плюс добавлено несколько лишних бит здесь и там. – Sergiy Kolodyazhnyy 26 November 2017 в 15:38

Изображения сделаны из байтов. Так что текстовые файлы

Когда прикладное приложение, например cat хочет читать текстовые файлы, оно начинает считывать байты и ищет эти байты в кодировке символов, таких как ascii или unicode. Он находит персонажа в таблице и отображает его.

Но изображения не имеют символов (они могут, но это не то, что создает изображение), и вы можете догадываться, что происходит, когда вы пытаетесь обрабатывать отформатированные изображения байтов, например они были символами. вы получаете случайные символы для каждого файла.

Если вы хотите, чтобы строки в файле использовали команду strings.

3
ответ дан 24 July 2018 в 19:42
  • 1
    Также хорошая информация – NerdOfCode 20 June 2017 в 23:10
  • 2
    кот ничего не делает. это работа вашей оболочки вместе с терминалом, в котором он работает. – ohno 21 June 2017 в 11:20
  • 3
    @ohno оболочка также не участвует в рендеринге. Речь идет только о работе терминала, чтобы отобразить консольный вывод программы. – Ruslan 21 June 2017 в 13:18

Другие вопросы по тегам:

Похожие вопросы: