안녕 모두들!
매우 모호한 질문처럼 들리겠지만, 관련성이 있다고 생각합니다. 먼저 몇 가지 용어를 정의하겠습니다.
바이너리
이 질문에서 의미하는 바는 컴퓨터 자체에서 볼 수 있는 문자 그대로의 1과 0, 즉 전기 스위치를 열고 닫는 것입니다. 이진수를 표현하는 방법에는 여러 가지가 있다는 것을 알고 있지만 여기서는 1과 0을 언급하고 있습니다. 결코 Linux 실행 파일을 의미하는 것은 아니지만, 내가 이해하는 바에 따르면 Linux 실행 파일은 실제로 바이너리 파일입니다. 단지 cat
이를 사용할 때 다른 출력 "형식"을 얻게 된다는 것입니다. 다시 말하지만, 01010101
.
비트, 바이트 및 문자
제가 이런 말을 하는 것을 보신다면 저의 전문성 부족을 용서해 주십시오. 표준 ASCII 문자는 8
비트 또는 바이트 라는 것을 알고 있지만 때로는 비트 1
에 맞을 수도 있습니다 . 또한 UTF-8 문자의 범위는 비트에서 비트 , 바이트에서 바이트로 7
다양할 수 있다는 것도 배웠습니다 . 이것이 기본적으로 캐릭터에 대한 나의 이해입니다. 이 이름을 서로 바꿔 사용해도 상관하지 마시고, 이것이 이 분야에 대한 저의 이해의 한계라는 점을 이해해 주시기 바랍니다. 또한, 캐릭터를 8비트라고 부르는 것은 위에서 언급한 다른 모든 진부한 매개변수와 함께 32비트일 수 있다는 것을 이해한다는 의미입니다.8
32
1
4
"컴퓨터"
나중에 "컴퓨터"라는 단어를 언급하겠습니다. 내가 정말로 의미하는 것은 CPU와 출력을 가져오고 얻는 다른 모든 것입니다. 나는 컴퓨터에 수백만 개의 부품이 있을 수 있다는 것을 알고 있으며 전원 공급 장치가 아래 언급된 데이터와 아무 관련이 없다는 것을 알고 있습니다. 그러나 제가 "컴퓨터"라고 말할 때 실제로 말하는 것은 CPU와 그 회사입니다.
질문
이제 질문이 해결되었으므로 처음으로 답변을 드리고 싶습니다.
stdout
원본 바이너리에 동등한 것이 있습니까?
예를 들어 문자 "A"를 이진수로 변경하면 01000001
컴퓨터가 이를 볼 때 "A"가 표시될 것이라고 가정합니다. 전체 알파벳, 10개의 숫자, 이진 표현이 포함된 많은 수의 문자가 있습니다. 이것은 실제로 약 8 1s
과 0s
.
이제 나는 이진 파일이 실제로 "컴퓨터"에 대한 명령 집합이라는 것을 알고 있습니다. 나는 이것을 10살 때 깨달았습니다. 내가 알고 싶은 것은 이러한 지침을 어떻게 표현하는가입니다. 그것을 가져 01000001
와서 변환하면 "A"가 됩니다. 그렇다면 "stdout"에 대한 바이너리 파일은 무엇입니까?
편집: 내 생각에 이를 표현하는 좋은 방법은 "컴퓨터에 xxx(예: 01000001
)를 출력하도록 지시하는 1과 0의 조합은 무엇입니까?"입니다.
솔직히 내가 말이 되는 것인지, 너무 많이 생각하고 있는 것인지 잘 모르겠습니다. 바이너리가 컴퓨터 언어라는 것에 대해 이야기하는 것은 어리석은 일처럼 느껴지지만… 그 생각을 떨칠 수는 없습니다.
어쨌든 내 스트레스 해소에 도움을 주실 수 있는 분이라면 누구나 환영합니다. 미리 감사드립니다!
답변1
2진수, 16진수, ASCII, 심지어 UTF16 및 EBCDIC도 모두 상태를 나타냅니다. 10진수 65(2진수 01000001)을 쓰면표준 출력이는 그렇게 표시되도록 하는 유일한 규칙입니다 A
. 시각적 표현이 편리합니다. 디스크 어디에도 저장된 것을 찾을 수 없습니다 A
. 구현에 더 적합한 방식으로 저장되므로 이진 표현을 찾지 못할 수도 있습니다.
cat /bin/ls > /tmp/myls
chmod a+x /tmp/myls
/tmp/myls
나는 이것이 /bin/ls
바이너리이고 cat
위의 명령이 다음과 같다는 것에 동의할 것이라고 생각합니다.표준 출력. 생성된 파일은 /tmp/myls
완벽하게 교체가 가능합니다 ls
.표준 출력실제로 바이너리입니다.