다음과 같이 파일을 생성한다고 가정합니다.
touch myFile
vim 등을 사용하여 텍스트를 넣은 다음 vim을 사용하여 cat myFile
내용을 터미널에 내보낼 수 있습니다.
이제 이미지에 cat을 사용하면 어떻게 되나요? 설명하다,
cat myPNG.png
방금 쓰레기가 잔뜩 생겼어요. cat
그 명령이 무엇을 하려고 하는지, 그리고 이 모든 "정크"가 어디서 오는지 생각하게 만들었습니다 . 그냥 궁금해서요.
답변1
가장 낮은 수준에서 파일이 작동하는 방식을 설명하는 것이 유용할 수 있습니다.
파일은 길이가 0 이상인 바이트 스트림입니다. 1바이트는 8비트입니다. 8비트의 조합은 256개이므로 1바이트는 0에서 255 사이의 임의의 숫자임을 의미합니다. 따라서 가장 낮은 수준에서 각 파일은 0에서 255까지의 숫자 묶음입니다.
숫자의 "의미"를 결정하는 것은 전적으로 프로그램과 사용자에게 달려 있습니다. 텍스트를 저장하려면 숫자를 코드로 사용하여 각 숫자에 문자가 할당되는 것이 좋습니다. 이것이 ASCII와 유니코드가 하는 일입니다. 텍스트를 표시하려면 이 숫자를 가져와 해당 ASCII/유니코드 코드와 유사한 비트맵을 표시하는 장치를 만들거나 프로그램을 작성하는 것이 좋습니다. 이것이 바로 터미널과 터미널 에뮬레이터의 목적입니다.
물론 그래픽의 경우 픽셀과 색상을 숫자로 표현하고 싶을 수도 있습니다. 그런 다음 파일을 반복하고 모든 바이트를 읽고 그에 따라 이미지를 렌더링하는 프로그램이 필요합니다. 터미널 에뮬레이터는 바이트가 ASCII/유니코드 숫자일 것으로 예상하며 동일한 바이트 블록(또는 파일)에 대해 다르게 동작합니다.
답변2
Cat은 입력 파일의 내용을 표준 출력(이 경우 텍스트 장치: 터미널 창)으로 덤프합니다. 이미지는 이진 데이터로 구성되어 있으므로 표시되는 것은 ASCII 텍스트로 해석된 원시 이진 데이터입니다. 예를 들어, 값이 65인 바이트는 대문자 A로 표시되고, 66은 대문자 B로 표시됩니다. 이미지 파일을 올바르게 해석하는 응용 프로그램으로 파일을 열면 파일의 바이너리 내용이 이미지로 표시됩니다.