Jump to content

file (command)

This is a fully translated article. Click here for more information.
From DawoumWiki, the free Mathematics self-learning

file
Developer(s)AT&T Bell Laboratories
Initial release1973 (1973) as part of Unix Research Version 4; 1986 (1986) open-source reimplementation
Repositorygithub.com/file/file
Written inC
Operating systemUnix, Unix-like, Plan 9, IBM i
PlatformCross-platform
TypeFile type detector
LicenseBSD license, CDDL
Websitedarwinsys.com/file/

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)은 명령줄에 지정된 파일에 대해 일련의 테스트가 수행되도록 지정합니다:

  1. 만약 파일이 읽힐 수 없거나, 그것의 유닉스 파일 형식이 결정되지 않으면, file 프로그램은 파일이 처리되었지만 형식이 결정되지 않았다고 표시할 것입니다.
  2. file디렉토리, FIFO, 소켓, 블록 특수 파일, 및 문자 특수 파일 유형을 결정할 수 있어야 합니다.
  3. 영-길이 파일은 그대로 식별됩니다.
  4. 파일의 초기 부분이 고려되고 file 위치-감지 테스트를 사용하는 것입니다.
  5. 전체 파일이 고려되고 file은 컨텍스트-감지 테스트를 사용하는 것입니다.
  6. 파일이 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

  1. ^ "Source of the UNIX V4 "file" man page".
  2. ^ The early history of this program is recorded in its private CVS repository; see [1] the log of the main program
  3. ^ IBM. "IBM System i Version 7.2 Programming Qshell" (PDF). Retrieved 2020-09-05.
  4. ^ The Open Group Base Specifications Issue 7 — file command
  5. ^ file(1) – Linux User's Manual – User Commands
  6. ^ file(1) – NetBSD General Commands Manual
  7. ^ libmagic(3) – Linux Programmer's Manual – Library Functions
  8. ^ libmagic(3) – NetBSD Library Functions Manual
  9. ^ Zoulas, Christos (February 27, 2003). "file-3.41 is now available". File (Mailing list). Retrieved January 1, 2013.
  10. ^ Zoulas, Christos (March 24, 2003). "file-4.00 is now available". File (Mailing list). Retrieved January 1, 2013.

External links

Manual pages

Other