방금 의사 무작위 콘텐츠 파일을 생성했습니다.
dd if=/dev/urandom bs=1M count=1 of=./filetone.txt
그럼 고양이 해
cat ./fileone.txt
문제는 이 명령을 완료한 후 내 터미널이 엉망이 된다는 것입니다(새 줄을 시작하지 않고 새 프롬프트를 인쇄하지 않는 등...).
여기서 내가 이해하지 못하는 것은 이것이 나에 관한 것이라는 것이다터미널 에뮬레이터, 또는 일부 누락됨메타데이터?
답변1
이것은 터미널 에뮬레이터에 관한 것입니다.
바이너리 파일에는 다양한 제어 코드와 이스케이프 코드가 포함될 수 있으며 터미널 에뮬레이터는 화면 지우기( Ctrl-L
), 벨 울리기( Ctrl-G
), 전경색을 빨간색으로 설정( Esc[31m
) 과 같은 다양한 작업을 수행하기 위한 명령으로 해석할 수 있습니다. 터미널 에뮬레이터 구성 방법(예: 시각적인 "링"(화면 깜박임) 또는 가청 벨소리 또는 전혀 울리지 않음) 및 에뮬레이트하려는 터미널 유형(VT100 또는 ANSI 기반 터미널은 이제 거의 기본값/"표준") ...그러나 이해하는 매우 다른 제어 코드 세트를 갖는 다른 터미널이 존재했고 여전히 사용되고 있다는 점을 기억할 가치가 있습니다.
이러한 코드는 응용 프로그램이 터미널에 이러한 작업을 수행하도록 지시하는 방법입니다. 의도적으로 이러한 명령을 터미널에 보내는 응용 프로그램과 우연히 이러한 코드를 포함하는 임의의 이진 문자열을 구별할 방법이 없습니다.
그건 그렇고, 일부 (대부분의) 버전에는 cat
제어 코드를 다음과 같이 변환하는 (GNU cat 에서 해당 옵션의 긴 형식)과 같은 옵션이 있습니다.-v
--show-nonprinting
에 익숙해터미널 명령으로 해석됩니다.
^M
이 옵션은 캐리지 리턴( ), 탭( ^I
) 또는 ESC( ) 와 같은 특정 제어 문자가 ^[
특정 파일에 포함되어 있는지 여부를 사람들이 아는 데도 유용합니다. ESC 문자를 변환하면 vt100/ansi 또는 유사한 ESC 코드가 터미널에 영향을 미치는 것도 방지할 수 있습니다.