O que é produzido após o uso de gato em uma imagem?


9

Digamos que se crie um arquivo assim:

touch myFile

Você insere algum texto nele com o vim ou qualquer outra coisa e depois usa cat myFilepara cuspir o conteúdo no terminal.

Agora, o que acontece quando eu uso gato em qualquer imagem? Dizer,

cat myPNG.png

Eu só peguei um monte de lixo. Isso me fez pensar no que o catcomando está tentando fazer e de onde vem todo esse "lixo". Apenas curioso.

Respostas:


22

Pode ser útil explicar como os arquivos funcionam no nível mais baixo:

Um arquivo é um fluxo de bytes, com zero ou mais de comprimento. Um byte é de 8 bits. Como existem 256 combinações de 8 bits, isso significa que um byte é qualquer número de 0 a 255. Portanto, todo arquivo é, no nível mais baixo, um grande número de números que variam de 0 a 255.

Depende completamente dos programas e usuários decidirem o que os números "significam". Se queremos armazenar texto, provavelmente é uma boa ideia usar os números como código, onde cada número recebe uma letra. É o que ASCII e Unicode fazem. Se quisermos exibir texto, provavelmente é uma boa ideia criar um dispositivo ou escrever um programa que possa receber esses números e exibir um bitmap parecido com o código ASCII / Unicode correspondente. É isso que os terminais e emuladores de terminal fazem.

Obviamente, para gráficos, provavelmente queremos que os números representem pixels e suas cores. Em seguida, precisaremos de um programa que analise o arquivo, leia todos os bytes e renderize a imagem adequadamente. Um emulador de terminal espera que os bytes sejam números ASCII / Unicode e se comportará de maneira diferente, para o mesmo pedaço de bytes (ou arquivo).


Excelente explicação! Que bom que você desceu ao nível mais baixo.
QCOM

2
@ Boss eu jogaria na definição de um pouco. Um bit é um DIgit binário ou um número que pode ser um ou zero. Um bit tem duas possibilidades ou 2 ^ 1 = 2. Dois bits podem ter quatro combinações ou 2 × 2 = 4. Mais corretamente, é 2² = 4 para 2 dígitos. 8 DIgits ou bits binários podem ter 2 ^ 8 = 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 256 combinações possíveis.
penguin359

2
Nitpick / pediatria menores: um byte é de tamanho arbitrário. Você pode encontrar situações em que não tem 8 bits de largura. "Octeto" é a terminologia preferida.
Chris Baixo

9

O Cat despeja o conteúdo do arquivo de entrada na saída padrão, que neste caso é um dispositivo de texto: a janela do seu terminal. Como uma imagem consiste em dados binários, o que você está vendo são os dados binários brutos interpretados como se fossem texto ASCII. Por exemplo, um byte com o valor 65 seria exibido como A maiúsculo, 66 é B maiúsculo, etc. Se você abrir o arquivo com um aplicativo capaz de interpretar o arquivo de imagem corretamente, o conteúdo binário do arquivo será exibido. como uma imagem.


OK legal. Obrigado pela resposta. Você mencionou um "modo de texto". Existem outros modos para um terminal padrão? Ou, é a única outra maneira de interpretá-lo como você disse, por meio de um aplicativo que pode renderizar adequadamente esse tipo de arquivo?
QCOM

4
@ Boss, não, acredito que gordoco quis dizer que um terminal é um dispositivo de texto. O objetivo original caté reunir arquivos como emcat filea fileb > filec , se você não transitar pelo terminal (como neste exemplo), não importa se o arquivo é texto ou binário. No mundo unix, os arquivos binários e de texto são armazenados da mesma forma, apenas os arquivos de texto contêm um conjunto de bytes um tanto restrito. Um uso comum do gato é direcionar o conteúdo do arquivo para comandos que não tomam nomes de arquivos como parâmetros, mas aceitam entrada da entrada padrão.
asoundmove

O @BOSS, dizendo que um arquivo é um arquivo de texto em vez de binário, significa apenas que o conteúdo binário do arquivo pode ser interpretado como texto. As coisas costumavam ser simples, ou o arquivo era ASCII ou não. Atualmente, o arquivo pode ter vários formatos de texto diferentes, incluindo ASCII, UTF8, UTF16 ... No disco rígido, todos são binários.
precisa saber é o seguinte

@asoundmove: Você está correto, eu deveria ter dito dispositivo de texto, em vez do termo ambíguo "modo de texto". Eu editei minha resposta.
malabarista

Eu usei cat em um bitmap agora e ele imprimiu no terminal não apenas símbolos ASCII, mas também caracteres unicode (como "ڣ" e "漥"). Alguma ideia de por que é assim?
Magnus
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.