MAGIC(5)

명칭
magic - file 명령의 매직 번호 파일

해설
이 메뉴얼 페이지에서는 file(1) 코맨드 바 존 3.26 으로 사용되는 매직 파일의 포맷에 대해 설명합니다. file 명령은, 다른 테스트와 함께, 파일이 있다 매직 번호 그리고 시작되어 있는지 어떤지를 테스트해, 파일의 타입을 식별합니다. 파일 /usr/share/misc/magic 그럼, 어느 매직 번호를 테스트하는지, 어느 매직 번호가 발견되었을 때에 어떠한 메세지를 출력하는지, 또, 그 파일로부터 추출해야 할 추가 정보에 대해 지정해 있습니다.

이 파일의 각 행에서는 테스트해야 할 항목에 대해 지정해 있습니다. 테스트는, 파일중이 있는 특정의 오프셋(offset)로 시작되는 데이터를 1 바이트, 2 바이트 혹은 4 바이트의 수치 혹은 캐릭터 라인과 비교해 실시합니다. 만약 테스트가 성공한다고 메세지가 출력됩니다. 각 행은 이하의 필드로부터 구성됩니다.

offset
    테스트하는 파일의 데이터의 오프셋(offset)를 바이트수로 지정하는 숫자입니다.

type
    테스트하는 데이터의 형태입니다. 지정할 수 있는 값은

    byte
        1 바이트의 값.

    short
        (대부분의 시스템에 대해) 2 바이트의 값. 그 머신의 고유의 바이트순서로 지정합니다.

    long
        (대부분의 시스템에 대해) 4 바이트의 값. 그 머신의 고유의 바이트순서로 지정합니다.

    string
        바이트의 캐릭터 라인. 캐릭터 라인 타입의 지정에는, 뒤로 /[Bbc]* 를 붙이는 것이 가능합니다. “B” 플래그는, 타겟의 공백을 압축합니다. 압축 대상에는, 적어도 하나의 공백 캐릭터가 포함되는 것이 필요합니다. 매직에 "n" 개가 연속하는 공백이 있는 경우, 매치 하기 위해서는, 타겟으로는 적어도 "n" 개가 연속하는 공백이 있는 것이 필요합니다. “b” 플래그는, 모든 공백을 생략 가능한 공백으로서 취급합니다. 마지막에 “c” (은)는, 대문자 소문자를 구별하지 않는 매칭을 지정합니다. 즉, 매직중의 소문자는, 타겟중의 소문자와 대문자의 양쪽 모두에 매치 합니다. 한편, 매직중의 대문자는, 타겟중의 대문자에게만 매치 합니다.

    date
        UNIX 일시로서 해석되는 4 바이트의 값.

    beshort
        (대부분의 시스템에 대해) 2 바이트의 값. 빅 endian의 바이트순서입니다.

    belong
        (대부분의 시스템에 대해) 4 바이트의 값. 빅 endian의 바이트순서입니다.

    bedate
        UNIX 일시로서 해석되는 (대부분의 시스템에 대해) 4 바이트의 값. 빅 endian의 바이트순서입니다.

    leshort
        (대부분의 시스템에 대해) 2 바이트의 값. little endian의 바이트순서입니다.

    lelong
        (대부분의 시스템에 대해) 4 바이트의 값. little endian의 바이트순서입니다.

    ledate
        UNIX 일시로서 해석되는 (대부분의 시스템에 대해) 4 바이트의 값. little endian의 바이트순서입니다.

숫자의 형태에는 옵션으로서 & (와)과 수치를 계속할 수가 있어 이것에 의해 비교를 실시하기 전에 AND 를 취하는 수치를 지정합니다. 형태의 전에 u (을)를 부가한다고 비교는 부호없이 행해집니다.

test
    파일중의 값이라고 비교되는 값. 형태가 숫자의 경우, 이 값은 C 언어의 형식에서 지정됩니다. 이것이 캐릭터 라인의 경우, 통상의 이스케이프 기법 (예를 들어 개행에서는 \n)이 가능한 C 언어 캐릭터 라인으로서 지정됩니다.

    수치의 전에는 실행되는 조작을 나타내는 캐릭터를 부가할 수가 있습니다. 그 캐릭터에는 파일의 값이 지정된 값과 등가인 것을 지정한다 = , 파일의 값이 지정된 값보다 작은 일을 지정한다 < , 파일의 값이 지정된 값보다 큰 일을 지정한다 > , 지정된 값 중(안)에서 세트 떠날 수 있어 모든 비트가 파일에서의 값으로 모두 세트 되고 있는 것을 지정한다 & , 지정된 값 중(안)에서 세트 되고 있는 어떤 것인가의 비트가 파일에서의 값으로 오프인 것을 지정한다 ^ , 어떠한 값이 매치 하는 것을 지정한다 x (이)가 있습니다. 이러한 캐릭터가 없는 경우는 = 하지만 지정되어 있는 것으로 간주해집니다.

    수치는 C 언어의 형식에서 지정됩니다. 예를 들면 13 (은)는 10 진수, 013 (은)는 8 진수, 0x13 (은)는 16 진수가 됩니다.

    캐릭터 라인치에 대해서는, 파일중의 바이트 캐릭터 라인은 지정된 아르바이트 캐릭터 라인에 매치 하지 않으면 안됩니다. 오퍼레이터 = (와)과 < (와)과 > ( & (을)를 제외한다) 하지만 캐릭터 라인에 적용할 수 있습니다. 매칭에 사용되는 길이는 매직 파일에서의 캐릭터 라인의 인수의 길이됩니다. 이것은 >\0 (와)과 하는 것으로써, 그 행은 어느 캐릭터 라인에도 매치 하는 것이 가능하고, 아마 그 캐릭터 라인이 출력되는 것을 의미합니다 (모든 캐릭터 라인은 눌 캐릭터 라인보다 길기 때문에).

message
    비교가 성립했을 때에 출력되는 메세지입니다. 캐릭터 라인에 printf(3) 지정 형식이 포함되어 있는 경우는, 파일로부터 얻은 값 (지정된 마스크를 적용한 것)가, 그 메세지를 포맷 캐릭터 라인으로서 이용해 출력함

몇개의 파일 포맷은, 파일 타입과 함께 출력되는 추가 정보 (을)를 포함하고 있습니다. 캐릭터 > 그리고 시작되는 행은 추가 테스트와 출력되는 메세지를 지정합니다. 그 행에서의 > 의 수는 테스트의 레벨을 지정합니다. 줄머리에 > 하지만 없는 행은 레벨 0 으로 간주해집니다. 레벨 n+1 의 각 행은 매직 파일중에서 그 행보다 전에 있는 가장 가까운 레벨 n 의 행의 제어하에 있습니다. 레벨 n 에서의 행의 테스트가 성공했을 경우, 거기에 계속되는 행으로 지정된 모든 레벨 n+1 의 테스트가 실시되어 그러한 테스트가 성공한다고 메세지가 출력됩니다. 다음의 레벨 n 의 행으로 이것이 종료합니다. 마지막 > 에 계속되는 최초의 캐릭터가 ( 이면, 그 괄호의 뒤의 캐릭터 라인은 간접 오프셋(offset)로서 해석됩니다. 이것은 괄호의 뒤의 숫자가 그 파일중의 오프셋(offset)로서 사용되는 것을 의미합니다. 그 오프셋(offset)에서의 값이 읽혀 재차 파일의 오프셋(offset) (으)로서 사용됩니다. 간접 오프셋(offset)는 (x[. [bslBSL]][+-][y]) 의 형식을 취합니다. 치 x (은)는 파일중에서의 오프셋(offset)로서 사용됩니다. 형태 지정자 [bslBSL] 에 의해 각각 바이트, short 혹은 long 로서 읽힙니다. 대문자의 형태는, 값을 빅 endian로서 해석해, 소문자의 형태는, 값을 little endian로서 해석합니다. 그 숫자에 값 y 하지만 가산되어 그 결과는 파일 중(안)에서의 오프셋(offset)로서 사용됩니다. 형 지정자가 없는 경우는 long 가 디폴트의 형태가 됩니다.

오프셋(offset)는, 그 전에 있는 필드의 길이에 의존하기 위해(때문에), 정확한 값을 모르는 경우가 있습니다. 그러한 경우는 마지막 상위 레벨의 필드의 최후로부터의 상대적인 오프셋(offset)를 지정할 수가 있습니다. (물론 이것은 하위 레벨의 테스트, 즉 > 그리고 시작되는 테스트에서만 가능합니다. ) 이 경우의 상대 오프셋(offset)는 & (을)를 오프셋(offset)의 프레픽스로서 사용해 지정합니다.

버그
포맷 long, belong, lelong, short, beshort, leshort, date, bedate, ledate (은)는 시스템에 의존합니다. 테스트되는 파일은 통상 그러한 길이가 불변인 시스템의 것이며, 이것들은 아마 바이트수 (2B 라든지 4B 라든지)로서 지정해야 할.

간접 오프셋(offset)로 사용되는 endian를 지정한 데이터는 (현재는) 서포트되고 있지 않습니다.

관련 항목
file(1)