"file" 명령 man 문서에 명명된 "컴파일된 매직 파일"의 용도는 무엇입니까?

"file" 명령 man 문서에 명명된 "컴파일된 매직 파일"의 용도는 무엇입니까?

Linux 파일 명령에 대한 설명서를 읽어보세요. 마법 테스트 설명에서 다음을 발견했습니다.

Any file with some invariant identifier at a small fixed offset into the file
can usually be described in this way. The information identifying these files
is read from /etc/magic and the compiled magic file /usr/share/misc/magic.mgc,
or the files in the directory /usr/share/misc/magic if the compiled file
does not exist. In addition, if $HOME/.magic.mgc or $HOME/.magic exists,
it will be used in preference to the system magic files.

매직 파일이 "MagicNumber -> 파일 종류" 관계의 모음이라고 상상할 수 있습니다. "파일" 프로그램이 실행되어 파일 형식을 찾고 파일 헤더를 얻습니다. 하지만 왜 그런지 이해가 안 돼요.

  • 왜 이 파일을 컴파일해야 합니까?
  • 명령과 함께 사용할 마법의 컴파일 파일을 만드는 방법이 있습니까?
  • 이러한 테스트 및 파일과 관련된 명령 옵션의 사용법은 무엇입니까? 전임자: -C or -m.

답변1

  • 왜 이 파일을 컴파일해야 합니까?

나는 이것이 성능상의 이유라고 생각합니다. 매직 데이터베이스는작지 않음. 파일은 사람이 읽을 수 있는 각각의 마법 같은 소스 파일을 구문 분석하고, 파일 형식을 감지하기 위한 구조를 구축하고, 각 패턴의 강도를 계산하고 그에 따라 모든 것을 정렬해야 합니다. 이 프로세스는 특히 수십 년 전에는 극도로 느릴 수 있습니다(파일은 1970년대부터 사용되었습니다).

나는 파일이 실행 시 데이터베이스를 구축하고 결과를 캐시하도록 할 수 있다고 생각하지만 사용 사례를 고려하면 완전히 불필요하고 복잡해 보이며 많은 다른 문제를 야기합니다.

  • 명령과 함께 사용할 마법의 컴파일 파일을 만드는 방법이 있습니까?
file -m MAGIC_SOURCE -C

그러면 현재 작업 디렉터리와 동일한 기본 이름 MAGIC_SOURCE과 확장자를 가진 컴파일된 매직 파일이 생성됩니다..mgc

파일이나 디렉터리에서 사용할 수 있습니다. 디렉터리에 후행 슬래시를 사용하지 마세요.

예를 들어 file -m ~/.magic -C모든 ~/.magic/*소스 코드를 .magic.mgc컴파일된 파일로 컴파일합니다.

  • 이러한 테스트 및 파일과 관련된 명령 옵션의 사용법은 무엇입니까? 예: -C또는 -m.

-C일부 소스 파일을 컴파일하도록 파일에 지시합니다.

-m사용할 매직 파일(소스 또는 컴파일)을 파일에 알려줍니다. 예 -C를 들어 소스 파일을 포함하여 모든 파일을 사용하여 파일 유형을 감지하는 등 의 작업을 수행할 수도 있습니다 .

man fileman magic이 명령과 매직 소스 파일 구문에 대한 자세한 내용은 참고 자료를 참조하세요.

관련 정보