Каков вывод `cat image.png`?

Если вы начинаете тире с помощью суперкниты, у вас есть именно то поведение, которое вы хотели. Если вы нажмете Enter, он запустит первую программу. Поэтому, пока вы набираете достаточно букв, чтобы точно указать программу, которую вы хотите открыть, все сделано. BTW Спасибо, я раньше этого не знал.

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

9 ответов

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
ответ дан 22 May 2018 в 21:20

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:19

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:46

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
ответ дан 22 May 2018 в 21:20
  • 1
    cat не пытается ничего интерпретировать. Он просто считывает последовательность файлов, заданных в командной строке, и записывает их в stdout один за другим. – Ruslan 21 June 2017 в 13:19
  • 2
    @Ruslan Я отредактировал ответ. Теперь все исправлено, плюс добавлено несколько лишних бит здесь и там. – Sergiy Kolodyazhnyy 26 November 2017 в 15:38

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

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

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

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

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

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:19

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

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

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

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

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

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:46
  • 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:46
  • 1
    Также хорошая информация – NerdOfCode 20 June 2017 в 23:10
  • 2
    кот ничего не делает. это работа вашей оболочки вместе с терминалом, в котором он работает. – ohno 21 June 2017 в 11:20
  • 3
    @ohno оболочка также не участвует в рендеринге. Речь идет только о работе терминала, чтобы отобразить консольный вывод программы. – Ruslan 21 June 2017 в 13:18

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

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