Qual é a saída de 'cat image.png'?

3

O que significa a saída quando você faz cat image.png ? É disso que a imagem realmente é feita? Importa qual extensão de arquivo a imagem possui?

    
por NerdOfCode 20.06.2017 / 22:00

3 respostas

10

cat imprimirá o conteúdo do arquivo (zero e aqueles que serão mapeados para os caracteres sem significado, porque eles não são realmente certos)? em stdout , que por padrão é o seu terminal.

A extensão do arquivo é para nós (humanos), para descobrir facilmente qual é o tipo de arquivo, no entanto, alguns programas o usam para abri-lo também, mas principalmente programas detectam o tipo de arquivo usando seu cabeçalho.

Use file file.png para obter o tipo de arquivo ou 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'.

para obter um dump hexadecimal do conteúdo do arquivo, observe o "PNG" na primeira linha.

Também em aqui , podemos ver que a assinatura do PNG é:

PNG     89 50 4E 47 0D 0A 1A 0A     PNG image
    
por Ravexina 20.06.2017 / 22:03
8

cat simplesmente exibe o conteúdo do arquivo no stdout stream , que, no seu caso, é terminal . O que acontece com a sequência de 0s e 1s que compõem o arquivo é do terminal. No caso de arquivo binário, seqüências de bits que não são texto não serão reconhecidas como texto.

Considere, por exemplo, cat ing um arquivo que tenha caracteres UTF, como chinês, em dois terminais diferentes - um que tenha suporte para caracteres UTF ( terminator na captura de tela abaixo) e um que não tenha uma boa suporte ( xterm na imagem abaixo). Como você pode ver, alguns personagens não são interpretados. cat produzirá conteúdo em ambos os casos, mas como interpretar esses conteúdos - depende de cada terminal.

Agora, se você redirecionar stdout stream para um arquivo, estará efetivamente criando uma cópia, praticamente igual a cp original copy ou mv old new . Em alguns casos raros, você pode querer juntar dois arquivos - binário ou texto - o que também é possível com cat . A ideia é a mesma. De acordo com a definição POSIX , "[os arquivos de entrada podem ser qualquer tipo de arquivo", o que significa cat pode ler qualquer arquivo. No entanto, existem alguns casos em que cat assumirá o modo de texto. No caso do cat do Ubuntu (que é fornecido pelo pacote GNU coreutils), as informações fornecidas em info cat declaram:

  

"gato" é lido no modo de texto se uma das opções "-bensAE" for usada ou se "gato"   está lendo da entrada padrão e a entrada padrão é um terminal.   Da mesma forma, "cat" escreve no modo de texto se uma das opções "-bensAE" for   usado ou se a saída padrão é um terminal.

É claro que, se realmente quisermos visualizar o conteúdo do arquivo binário em formato legível, podemos usar editores hexadecimais ou qualquer tipo de programa "dump", Midnight Commander gerenciador de arquivos, ou mesmo vi editor de texto . Há uma boa lista desses aqui e aqui já.

    
por Sergiy Kolodyazhnyy 20.06.2017 / 22:11
3

Imagens são feitas de bytes. Então são arquivos de texto

Quando um aplicativo de software, por exemplo cat , deseja ler arquivos de texto, ele começa a ler bytes e pesquisa esses bytes em codificações de caracteres, como ascii ou unicode. Ele encontra o caractere na tabela e o renderiza.

Mas as imagens não têm caracteres (podem ser, mas não é isso que cria imagem) e você pode adivinhar o que acontece quando você tenta tratar bytes formatados em imagens como se fossem charcters. você recebe caracteres aleatórios para cada arquivo.

Se você quiser ver as seqüências de caracteres de um arquivo, use o comando strings .

    
por A.Esm.T 20.06.2017 / 22:09