file (command)
Developer(s) | AT&T Bell Laboratories |
---|---|
Initial release | 1973Unix Research Version 4; 1986 open-source reimplementation | as part of
Repository | github |
Written in | C |
Operating system | Unix, Unix-like, Plan 9, IBM i |
Platform | Cross-platform |
Type | File type detector |
License | BSD license, CDDL |
Website | darwinsys |
file
명령은 컴퓨터 파일에 포함된 데이터의 유형을 인식하기 위한 유닉스와 유닉스-계열 운영 시스템의 표준 프로그램입니다.
History
file
의 원래 버전은 1973년 Unix Research 버전 4에서 시작되었습니다.[1] System V는 파일 형식 정보를 바이너리 자체로 컴파일하는 대신 외부 텍스트 파일로 몇 가지 중요한 변경 사항, 가장 주목할만한 이동을 포함하는 주요 업데이트를 가져왔습니다.
대부분의 주요 BSD와 리눅스 배포판은 1986–87년에 Ian Darwin에 의해 처음부터 작성된 자유, 오픈-소스 재구현을 사용합니다.[2] 그것은 1989년 Geoff Collyer에 의해 확장되었고 그 이후로 Guy Harris, Chris Lowth 및 Eric Fischer를 포함하는 많은 다른 사람들의 코드를 포함합니다; 1993년 후반부터 그것의 유지 보수는 Christos Zoulas에 의해 조직되었습니다. OpenBSD 시스템은 처음부터 작성된 자체 부분집합 구현을 가지지만, 여전히 매직 파일 형식화된 정보의 Darwin/Zoulas 모음을 사용합니다.
file
명령은 역시 IBM i 운영 시스템으로 이식되었습니다.[3]
Specification
단일 유닉스 사용 (SUS)은 명령줄에 지정된 파일에 대해 일련의 테스트가 수행되도록 지정합니다:
- 만약 파일이 읽힐 수 없거나, 그것의 유닉스 파일 형식이 결정되지 않으면,
file
프로그램은 파일이 처리되었지만 형식이 결정되지 않았다고 표시할 것입니다. file
은 디렉토리, FIFO, 소켓, 블록 특수 파일, 및 문자 특수 파일 유형을 결정할 수 있어야 합니다.- 영-길이 파일은 그대로 식별됩니다.
- 파일의 초기 부분이 고려되고
file
위치-감지 테스트를 사용하는 것입니다. - 전체 파일이 고려되고
file
은 컨텍스트-감지 테스트를 사용하는 것입니다. - 파일이
data
파일로 식별됩니다.
file
의 위치-감지 테스트는 통상적으로 매직 넘버의 텍스트 데이터베이스에 대해 파일 내의 다양한 위치를 일치시킴으로써 구현됩니다 (Usage 섹션을 참조하십시오). 이것은 파일 확장자 및 MIME과 같은 체계와 같은 다른 간단한 방법과 다릅니다.
대부분의 구현에서, file
명령은 선행 바이트의 탐구 질문을 구동하기 위해 데이터베이스를 사용합니다. 해당 데이터베이스는, 그것의 위치가 보통 /etc/magic
, /usr/share/file/magic
또는 이와 유사한 위치에 있는 magic
이라고 불리는 파일에 구현됩니다.
Usage
SUS는 다음 옵션을 요구합니다:[4]
- -M file
- 위치-감지 테스트를 포함하는 특별히 형식화된 파일을 지정합니다; 기본 위치-감지 테스트 및 컨텍스트-감지 테스트는 수행되지 않을 것입니다.
- -m file
- -M과 같지만, 기본 테스트는
file
에 포함된 테스트 후에 수행될 것입니다. - -d
- 주어진 파일에 대해 기본 위치-감지 및 컨텍스트-감지 테스트를 수행합니다; 이것은 -M 또는 -m이 지정되지 않은 한 기본 동작입니다.
- -h
- 기존 파일 또는 디렉토리를 가리키는 심볼릭 링크를 역참조하지 않습니다.
- -L
- 기존 파일 또는 디렉토리를 가리키는 심볼릭 링크를 역참조합니다.
- -i
- 파일을 존재하지 않음, 블록 특수 파일, 문자 특수 파일, 디렉토리, FIFO, 소켓, 심볼릭 링크 또는 정규 파일로 식별하는 것 이상으로 파일을 분류하지 않습니다. 리눅스[5] 및 BSD[6] 시스템은 이 옵션과 다르게 작동하고 대신 인식된 파일 형식을 식별하는 인터넷 미디어 유형 ("MIME 유형")을 출력합니다.
다른 유닉스와 유닉스-계열 운영 시스템은 -s '특수 파일', -k '계속 진행' 또는 -r '원시' (아래 예제)와 같은 여분의 옵션을 추가할 수 있습니다.
그 명령은 파일이 무엇인지가 아니라 파일이 어떻게 생겼는지 알려줍니다 (파일이 내용을 보는 경우). 내용이 일치하지 않는 파일의 내용에 매직 넘버를 넣음으로써 프로그램을 속이는 것은 쉽습니다. 따라서 그 명령은 특정 상황 외에는 보안 도구로 사용할 수 없습니다.
Examples
$ file file.c file.c: C program text
$ file program program: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
$ file /dev/hda1 /dev/hda1: block special (0/0)
$ file -s /dev/hda1 /dev/hda1: Linux/i386 ext2 filesystem
-s는 오직 일부 플랫폼에서 사용할 수 있는 비-표준 옵션으로, 이것은 file
에 디바이스 파일을 읽고 단순히 그것들을 디바이스 파일로 식별하는 대신 해당 내용을 식별하기를 시도하도록 지시함을 주목하십시오. 통상적으로 file
은 디바이스 파일을 읽으려고 시도하지 않는데, 왜냐하면 그런 파일을 읽는 것은 바람직하지 않은 부작용을 가질 수 있기 때문입니다.
$ file -k -r libmagic-dev_5.35-4_armhf.deb # (on Linux) libmagic-dev_5.35-4_armhf.deb: Debian binary package (format 2.0) - current ar archive - data
비표준 옵션 -k를 통해, 그 프로그램은 첫 번째 히트가 발견된 후 중지되지 않지만, 다른 일치 패턴을 찾습니다. 일부 버전에서 사용할 수 있는 -r 옵션은 인쇄할 수 없는 줄 바꿈 문자를 팔진수 표현이 아닌 원시 형식으로 표시되는 원인이 됩니다.
$ file compressed.gz compressed.gz: gzip compressed data, deflated, original filename, `compressed', last modified: Thu Jan 26 14:08:23 2006, os: Unix
$ file -i compressed.gz # (on Linux) compressed.gz: application/x-gzip; charset=binary
$ file data.ppm data.ppm: Netpbm PPM "rawbits" image data
$ file /bin/cat /bin/cat: Mach-O universal binary with 2 architectures /bin/cat (for architecture ppc7400): Mach-O executable ppc /bin/cat (for architecture i386): Mach-O executable i386
$ file /usr/bin/vi /usr/bin/vi: symbolic link to vim
심볼릭 링크 식별은 모든 플랫폼에서 사용할 수 없고 -L이 전달되거나 POSIXLY_CORRECT가 설정되면 역참조될 것입니다.
Libmagic library
Ian Darwin/Christos Zoulas 버전의 file
버전 4.00에서, file
의 기능은 C (및 C-호환) 링킹을 통해 접근할 수 있는 libmagic
라이브러리에 통합되었습니다;[7][8] file
은 해당 라이브러리를 사용하여 구현됩니다.[9][10]
References
- ^ "Source of the UNIX V4 "file" man page".
- ^ The early history of this program is recorded in its private CVS repository; see [1] the log of the main program
- ^ IBM. "IBM System i Version 7.2 Programming Qshell" (PDF). Retrieved 2020-09-05.
- ^ The Open Group Base Specifications Issue 7 — file command
- ^ Linux User's Manual – User Commands –
- ^ NetBSD General Commands Manual –
- ^ Linux Programmer's Manual – Library Functions –
- ^ NetBSD Library Functions Manual –
- ^ Zoulas, Christos (February 27, 2003). "file-3.41 is now available". File (Mailing list). Retrieved January 1, 2013.
- ^ Zoulas, Christos (March 24, 2003). "file-4.00 is now available". File (Mailing list). Retrieved January 1, 2013.
External links
![](https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/40px-Wikibooks-logo-en-noslogan.svg.png)
- The Single UNIX Specification, Issue 7 from The Open Group : determine file type – Commands & Utilities Reference,
- file mailing list
- file releases
Manual pages
- Plan 9 Programmer's Manual, Volume 1 –
- Linux User Commands Manual –
- NetBSD Library Functions Manual –
- Linux Library Functions Manual –
- OpenBSD General Commands Manual –
Other
- Fine Free File Command – homepage for version of
file
used in major BSD and Linux distributions. - File for Windows – webpage of native GnuWin32 port of
file
for 32 bit Windows. - The libmagic-dev package on packages.debian.org
- TrID, an alternative providing ranked answers (instead of just one) based on statistics.