FILE(1)

명칭
file - 파일의 종류를 판정한다

서식
file [-bciknsvzL] [-f namefile] [-m magicfiles] file ... file -C [-m magicfile]

해설
이 메뉴얼은, 인수로 지정된 파일의 종류를 판정하는, file 유틸리티의 버젼 3.36 에 대해 기재하고 있습니다. 판정을 위해서(때문에), 파일 시스템 테스트, magic number 테스트, 언어 테스트의 3 개의 테스트를 이 순서에 실행해, 최초로 판정할 수 있던 결과로부터 파일의 종류를 표시합니다.

파일의 종류로서 표시되는 것은, “text” (인자 가능 캐릭터와 소수의 제어 캐릭터만의 파일로, ASCII 단말에 표시했을 경우, 문제가 일어나지 않는 걸), “executable” ( UNIX 커널등에 이해 가능한 형태에 컴파일 된 프로그램을 포함한 파일), 그 외의 것을 의미한다 “data” (data 는, 통상 ‘바이너리’ 인가 표시 불능인 물건) 중 1 개입니다. 예외는, 내부 포맷이 잘 알려진, 바이너리 데이터를 포함한 파일 (코어 파일이나 tar 아카이브(archive))입니다. 파일 /usr/share/misc/magic (이)나 프로그램 그 자체를 변경할 때는, 이러한 키워드를 남겨 주세요 디렉토리내의 모든 가독인 파일은, 단어 “text” (을)를 표시하는 것이 기대되고 있습니다. Berkeley 로 행해진 것처럼, “shell commands text” (을)를 “shell script” (이)라고 변경 하는것 같은 일은하지 마세요. 파일 /usr/share/misc/magic (은)는, file 의 소스 배포중의 Magdir 서브 디렉토리중의 대량의 작은 파일로부터 기계적으로 구축되는 것에 주의해 주세요.

파일 시스템 테스트는, stat(2) 시스템 콜로부터의 반환값을 조사하는 것에 기초를 두고 있습니다. 이 프로그램은, 파일이 하늘인지 어떤지, 어떤 종류의 특수 파일인지 어떤지를 조사합니다. 사용하고 있는 시스템에 맞은 기존의 파일의 종류 (시스템에 실장된 소켓, 기호 연결, 이름 첨부 파이프 (FIFO))는, 시스템 헤더 파일 <sys/stat.h> 그리고 정의되고 있으면 표시됩니다.

magic number 테스트는, 파일이 고정 포맷의 데이터일까 제발을 체크하기 위해서 사용됩니다. 좋은 예가, 실행 가능한 바이너리 실행 형식 (컴파일 된 프로그램) a.out 파일입니다. 이 포맷은 표준 인클루드 디렉토리내의 <a.out.h> (이)나 경우에 의해 <exec.h> 그리고 정의되고 있습니다. 실행 파일은, 파일의 선두 가까이의 특정의 장소에, ‘magic number’ (을)를 가집니다. 이것은 UNIX operating system에 대해, 파일이 바이너리 실행 형식이며, 어느 타입의 실행 가능 파일일까를 알립니다. ‘magic number’ 의 개념은 확장되어 데이터 파일에도 적용되고 있습니다. 파일의 선두에 가까운 고정 위치에 고정 식별자가 있는 파일은, 이와 같이 기술할 수 있습니다. 이러한 파일 식별 정보는, 편입의 매직 파일 /usr/share/misc/magic.mgc 또는 짜넣어 파일이 존재하지 않는 경우는 /usr/share/misc/magic (으)로부터 읽힙니다.

파일이 매직 파일의 어느 엔트리에도 매치 하지 않는 경우, text 파일로 보이는지 어떤지 검사됩니다. ASCII, ISO-8859-x, 비 ISO 8-bit 확장 ASCII 캐릭터 집합 (Macintosh 및 IBM PC 시스템으로 사용), UTF-8-encoded Unicode, UTF-16-encoded Unicode, EBCDIC 의 캐릭터 집합이 구별 가능하고, 이것에는 각 캐릭터 집합에 있어서의 인자 가능 text 를 구성한다 바이트의 범위 및 순차 순서를 사용합니다. 파일이 이러한 테스트의 어느쪽이든을 통과했을 경우, 캐릭터 집합이 보고됩니다. ASCII, ISO-8859-x, UTF-8, extended-ASCII 파일은 “text” (으)로서 식별됩니다. 왜냐하면, 거의 어떠한 단말에 대해도 읽을 수 있기 때문입니다. UTF-16 및 EBCDIC 하 “character data” 그리고 밖에 없습니다. 이것들은 text 를 포함합니다만, 읽기 전에 변환이 필요하기 때문에입니다. 게다가 file (은)는 text 타입 파일의 다른 특성도 판정하려고 합니다. 파일의 행의 종단이, UNIX 표준의 LF 가 아니고, CR, CRLF, NEL 의 언젠가인 경우, 그것이 보고됩니다. 편입의 escape sequence나 겹침 치는 것을 포함한 파일에 대해서도, 식별됩니다.

text 타입 파일로 사용되고 있는 캐릭터 집합을 판정한 후, 그 언어를 추정하려고 합니다. 언어 테스트는, 파일의 초의 수블록에 특정의 캐릭터 라인 ( Inames.h (을)를 참조) (이)가 있는지 어떤지를 찾습니다. 예를 들어 키워드 .br (이)가 있으면 그것은 아마 troff(1) 의 입력 파일이며, struct 그렇다고 하는 키워드는, C 언어의 프로그램인 것을 나타내고 있습니다. 이러한 추정 방법은, 전술의 2 개의 테스트보다 신뢰성이 낮기 때문에, 마지막에 행해집니다. 언어 테스트 routine는 ( tar(1) 아카이브(archive)와 같은) 그 외의 파일도 체크합니다.

상기의 캐릭터 집합의 머지않아로 기술되고 있다고도 식별할 수 없었던 파일은, 단지 “data” (으)로 불립니다.

옵션

-b  출력행의 전에 파일명을 붙이지 않습니다 (단축 모드).

-c  매직 파일을 해석한 형식을, 조사할 수 있도록 표시합니다. 통상, 새로운 magic number 파일을 사용하기 전에 디버그 하기 위해서, -m 옵션과 함께 이용합니다.

-C  magic.mgc 출력 파일을 씁니다. 이것에는 구문 분석 되기 전의 버젼의 파일이 포함됩니다.

-f namefile
    인수의 전에 namefile (으)로부터 조사해야 할 파일명을 (1 행에 1 개) 읽어들입니다. namefile 혹은 인수의 filename 는 적어도 1 개(살)은 지정하지 않으면 안됩니다. 표준 입력의 파일의 종류를 판정시키는 경우는, 파일명으로서 “-” (을)를 지정합니다.

-i  file 에, 전통적인 인간이 읽을 수 있는 형식대신에, mime 타입 캐릭터 라인을 출력시킵니다. 따라서, “ASCII text” 대신에 “text/plain; charset=us-ascii” 됩니다. 본옵션이 동작하도록(듯이) 하기 위해서, file (은)는 파일 인식 방법 (예를 들면, 많은 text 파일 타입이나 디렉토리등 )(을)를 바꾸어 다른 magic 파일을 사용합니다 (후술의 관련 파일 마디를 참조해 주세요).

-k  최초로 매치 해도 정지하지 않고 , 처리를 계속합니다.

-m list
    magic number를 포함한 다른 파일의 list (을)를 지정합니다. 이것은, 1 개의 파일인가, 코론 (:)으로 나눌 수 있었던 파일의 리스트입니다.

-n  각 파일의 체크 후에, 표준 출력을 플래시 합니다. 파일의 일람을 체크하고 있을 때 마셔, 유용합니다. 파일 타입을 파이프로부터 출력하는 프로그램에 대해 사용하는 것을 의도합니다.

-v  프로그램의 버젼을 표시해, 종료합니다.

-z  compress 로 압축된 파일의 내용을 보려고 합니다.

-L  옵션은(시스템이 기호 연결을 제공하고 있으면), ls(1) 명령의 -L 옵션과 같게 기호 연결을 더듬어 실제의 파일안 몸의 종류를 판정합니다.

-s  통상, file 하지만 인수의 파일의 읽기와 타입의 판정을 실시하는 것은, stat(2) 하지만 통상 파일이라고 보고했을 경우만입니다. 이것에 의해 문제를 회피하고 있습니다. 왜냐하면, 특수 파일의 읽기는, 특정의 결과를 발생시키는 경우가 있기 때문입니다. -s 옵션을 지정하면(자), file (은)는, 블록 및 캐릭터의 특수 파일도 읽어들입니다. 이것은, raw 디스크 패티션중의 데이터에 존재한다 파일 시스템 타입의 판정에 유용합니다. 왜냐하면, raw 디스크 패티션은 블록형 특수 파일이기 때문입니다. 본옵션은 또, file 하지만 stat(2) 하지만 보고하는 파일의 크기를 무시하도록(듯이) 시킵니다. 왜냐하면, 시스템에 따라서는, raw 디스크 패티션의 크기는 0 이라고 보고하는 것이 있기 때문입니다.

관련 파일
/usr/share/misc/magic.mgc
    디폴트가 짜넣어진 magic number의 리스트
/usr/share/misc/magic
    디폴트의 magic number의 리스트
/usr/share/misc/magic.mime
    -i 하지만 지정되어 mime 타입을 출력하는 경우에 사용하는, 디폴트의 magic number의 리스트

환경 변수
환경 변수 MAGIC (은)는, 디폴트의 magic number 파일을 지정하기 위해서 사용할 수가 있습니다.

관련 항목
hexdump(1), od(1), strings(1), magic(5)

표준 적합성
FILE(CMD)의 svid4 의 애매한 기술로부터 판단하는 한냄새나서는, 이 프로그램은 이 사양을 넘고 있다고 생각됩니다. 동명의 System V 의 프로그램과 거의 동작은 같습니다. 그러나, 이 버젼은 보다 많은 매직을 알고 있으므로, 많은 경우에 다른 (보다 정확한) 출력을 냅니다.

이 버젼과 System V 의 것과의 큰 차이는, 이 버젼은 모든 공백을 단락지어 캐릭터로서 취급하기 (위해)때문에 패턴내의 공백은 이스케이프 해야 한다고 하는 것입니다. 예를 들어,

    >10	string	language impress 	(imPRESS data)

(와)과 매직 파일에 쓰여져 있었을 경우는, 다음과 같이 변경하지 않으면 되지 않습니다.

    >10	string	language\ impress	(imPRESS data)

또 이 버젼에서는, backslash를 포함하고 있다 패턴도 이스케이프 하지 않으면 안됩니다. 예를 들어,

    0	string		\begindata	Andrew Toolkit document

(와)과 매직 파일에 쓰여져 있었을 경우는, 다음과 같이 변경하지 않으면 되지 않습니다.

    0	string		\\begindata	Andrew Toolkit document

Sun Microsystems 의 SunOS 릴리스 3.2 혹은 그 이후에는, System V 유래의 file(1) 명령이 포함되어 있습니다만, 확장이 이루어지고 있습니다. 이 버젼은 SUN 의 것이란, 세세한 점으로 밖에 다르지 않습니다. 이 버젼에는 ‘&’ 연산자의 확장이 포함되어 있습니다. 사용법은, 다음과 같은 것입니다.

    >16	long&0x7fffffff	>0		not stripped

매직 디렉토리
매직 파일의 엔트리는 여러가지 소스 (주로 USENET) (으)로부터 모아지거나 여러가지 저자로부터 제공되었습니다. Chirstos Zoulas (아래와 같은 주소)(이)가, 매직 파일 엔트리를 한층 더 모으거나 정정하겠지요. 통합한 매직 파일 엔트리는, 정기적으로 배포되겠지요.

매직 파일에 있어서의 엔트리의 순서는 중요합니다. 사용하고 있는 시스템에 의해, 엔트리의 순서가 올바르지 않게 되는 것이 있습니다. 만약, 당신의 낡다 file 명령이 매직 파일을 사용하고 있다면, 비교를 위해 낡은 매직 파일을 보존해 주세요 (예를 들어, /usr/share/misc/magic.orig (이)라는 이름으로 변경합니다).

사용예

    $ file file.c file /dev/hda
    file.c:   C program text
    file:     ELF 32-bit LSB executable, Intel 80386, version 1,
              dynamically linked, not stripped
    /dev/hda: block special
    $ file -s /dev/hda{, 1,2,3,4,5,6,7,8,9,10}
    /dev/hda:   x86 boot sector
    /dev/hda1:  Linux/i386 ext2 filesystem
    /dev/hda2:  x86 boot sector
    /dev/hda3:  x86 boot sector, extended partition table
    /dev/hda4:  Linux/i386 ext2 filesystem
    /dev/hda5:  Linux/i386 swap file
    /dev/hda6:  Linux/i386 swap file
    /dev/hda7:  Linux/i386 swap file
    /dev/hda8:  Linux/i386 swap file
    /dev/hda9:  empty
    /dev/hda10: empty
    $ file -i file.c file /dev/hda
    file.c:      text/x-c
    file:        application/x-executable, dynamically linked (uses shared libs),
                 not stripped
    /dev/hda:    application/x-not-regular-file

역사
file 명령은, 적어도 Research Version 6 (메뉴얼 페이지의 일자는, 1975 년 1 월 16 일) (으)로부터는 어느 UNIX 에도 있었습니다. System V 버젼은 있는 중요한 변경, 즉 외부 magic number 리스트를 도입했습니다. 이것에 의해 프로그램의 스피드는 조금 저하했습니다만, 더욱 또 유연하게 되었습니다.

이 프로그램은, System V 버젼을 기초를 두고 있어 Ian Darwin <ian@darwinsys.com> 에 의해, 다른 누군가의 원시 코드를 보는 일 없이 쓰여졌습니다.

John Gilmore (은)는, 코드를 확장해, 최초의 판보다 좋은 것으로 했습니다. Geoff Collyer (은)는, 부적당한 곳이수개소 있는 것을 발견해, 몇개인가 매직 파일 엔트리를 제공했습니다. Rob McMahon <cudcv@warwick.ac.uk> (은)는, 1989 년에, ‘&’ 연산자를 기증했습니다.

Guy Harris <guy@netapp.com> (은)는, 1993 년부터 현재에 이르러, 많은 변경을 실시하고 있습니다.

기본 개발과 1990 년부터 현재에 이르는 메인트넌스를, Christos Zoulas <christos@astron.com> 하지만 가고 있습니다.

2000 년에 Chris Lowth <chris@lowth.com> 하지만 수정을 실시해, -i 옵션이 mime 타입 캐릭터 라인을 출력해, 다른 매직 파일과 내부 논리를 사용하게 되었습니다.

2000 년 7 월에 Eric Fischer <enf@pobox.com> 하지만 수정을 실시해, 문자 코드를 식별해, 비 ASCII 파일의 원어를 식별하려고 하게 되었습니다.

Magdir 디렉토리 ( /usr/share/misc/magic 파일의 소스)에 대한 기증자는, 여기에 포함하기에는 너무 깁니다. 양해 바랍니다.

법률상의 주의
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. Covered by the standard Berkeley Software Distribution copyright; see the file LEGAL.NOTICE in the source distribution.

The files tar.h and is_tar.c were written by John Gilmore from his public-domain tar program, and are not covered by the above license.

버그
Magdir (으)로부터 Magic 파일을 자동적으로 작성하는 것보다 좋은 방법이 있을 것입니다. 그것은 무엇일까요. 보다 기동을 빠르게하기 위해(때문에) 매직 파일을 바이너리에 컴파일 하면(자) 좋을 것입니다. (예를 들어 ndbm(3) 혹은, 이기종 네트워크 환경에서는 고정장의 ASCII 캐릭터). 그러면, 동명의 버젼 7 의 프로그램과 같은 정도의 속도로 System V 버젼의 유연성을 가진 프로그램이 되겠지요.

file 유틸리티에는, 정확함보다 속도를 중시한 알고리즘이 몇개인가 있으므로 text 파일의 내용에 대해서는 잘못하는 일이 있습니다.

text 파일의 서포트 (원래는 프로그램 언어이기 때문에)는 단순해, 불충분하고, 갱신에는 재컴파일이 필요합니다.

복수의 행에 건너는 것을 서포트하기 위해(때문에) else 항이 있어야 합니다.

매직 파일과 키워드의 정규 표현을 서포트해야 합니다. ASCII TAB (을)를 필드의 식별자로 하는 것은 추악하고, 파일의 편집을 어렵게 하고 있습니다만, 남아 있습니다.

키워드에 대문자를 허락하는 것이 권유받습니다. 예를 들어, troff(1) 명령와 man page 매크로의 구별입니다. 정규 표현의 서포트로, 이것은 간단하게 되겠지요.

FORTRAN 에 대해서 프로그램이 일하지 않습니다. 행의 선두에 인덴트 되고 있는 키워드를 보는 것으로 FORTRAN (이)라면 판별해야 합니다. 정규 표현의 서포트에 의해 이것은 간단하게 되겠지요.

ascmagic 에 들어가 있다 키워드의 리스트는, 아마 Magic 파일에 넣어야 할 것입니다. 이것은 오프셋(offset)의 값으로 해서 ‘*’ (와)과 같은 키워드를 사용하는 것으로 가능하겠지요.

최초의 캐릭터, 최초의 말, 최초의 long 등에 관한 테스트를 최초로 읽어들였을 때에 모두 실시할 수가 있는 듯 매직 파일을 다시 늘어놓는 최적화법은 없을까. 매직 파일의 모순에 대해 말하도록(듯이) 안 되는가. 엔트리의 순서를 매직 파일상의 위치가 아니고, 파일 오프셋(offset)순서로 하는 것은 할 수 없을까.

프로그램은, 추정이 “어느 정도야 있고” 의 것인지를 아는 방법을 제공해야 합니다. 파일의 최초의 5 캐릭터가 “From ” 일 때 추측을 해도, “Newsgroups:” (이)나 “Return-Path:” 그렇다고 하는 캐릭터에 의한 추측(정도)만큼 자주(잘)은 없기 때문에, 추측 결과를 버리게 됩니다. 그러나, 만약 그렇게 말한 캐릭터가 나타나지 않으면 최초의 추정을 사용하지 않으면 안됩니다.

이 프로그램은, 몇개의 상용의 file 명령보다 늦습니다. 복수의 문자 코드의 서포트에 의해, 보다 늦어지고 있습니다.

이 메뉴얼 페이지, 특히 이 마디가 너무 깁니다.

입수성
오리지날 저자의 최신의 버젼을 anonymous FTP 로, ftp.deshaw.com 의 /pub/file/file-X.YY.tar.gz (으)로부터 손에 넣을 수가 있습니다.