파일 이름

윈도우 명령 셸.]] **파일 이름**(filename or **file name**) 또는 **파일명**(file名)은 특별한 종류의 문자열이며 컴퓨터의 파일 시스템에서 저장된 파일을 구별하기 위해 사용된다. 운영 체제에 따라서 그러한 이름이 디렉터리로 인식될 수도 있다. 다른 운영 체제들은 파일 이름에 길이를 제한하거나 어떠한 문자열들을 허용하지 않을 수 있다. 또, 파일 시스템과 운영 체제에 따라 파일 이름의 대소문자를 구분하거나 구분하지 않을 수도 있다. 이를테면, 옛 MS-DOS 버전들은 8글자의 이름과 3글자의 확장자만을 지원하였으나, MS-DOS 7.x 이후부터는 255자의 긴 파일 이름을 지원한다. 파일 이름은 다음과 같이 이루어져 있다. * **프로토콜** - 접근 방식 (이를테면 http, ftp, file 등) * **호스트** (**네트워크 ID**) - 호스트 이름, IP 주소, 도메인 이름, LAN 네트워크 이름 (이를테면 wikipedia.org, 207.142.131.206, backslashbackslashMYCOMPUTER, SYS 등) * **장치** (**노드**) - 포트, 소켓, 드라이브, 루트 마운트지점, 디스크, 볼륨 (이를테면 C:, /, SYSLIB 등) * **파일** - 기본 파일 이름 * **형식**(포맷 또는 **확장자**) - 파일의 내용 형식을 가리키는 것 (이를테면 .txt, .exe, .dir 등) * **버전** - 파일의 버전 번호
# 사용할 수 없는 기호와 문자
수많은 운영 체제는 파일 이름에 들어가는 문자에 제어 문자를 사용할 수 없게 하고 있다. 이를테면 도스와 초기 윈도 시스템은 8.3 파일 이름 변환을 따를 것을 요구한다. 유닉스 계열 운영 체제는 예외인데 파일 이름이 들어갈 수 없는 금칙 제어 문자가 null 문자이다. 이는 C에서 문자열 끝을 알리는 지시자이기 때문이다. 또, 유닉스에서는 파일 이름에 경로를 나타내는 /를 사용할 수 없다. 일부 운영 체제는 파일 이름에 나타나는 다음의 특별한 문자를 사용하지 못하게 하고 있다: {| class="wikitable" |- ! 문자 ! 이름 ! 이유 |- | align="center" | `/` | 슬래시 | 유닉스 계열, 윈도, 아미가 시스템에서 경로 이름을 이루는 요소로 이용하므로 사용할 수 없다. (MS-DOS의 command.com 셸은 스위치 문자로 사용할 수 있지만 윈도 자체는 언제나 이를 구분자로 사용한다.확인날짜=2010-08-20 |- | align="center" | `backslash` | 백슬래시 | 이 또한 MS-DOS, OS/2, 윈도우에서 경로 이름을 이루는 요소로 이용하므로 사용할 수 없다. (슬래시와 백슬래시와의 차이는 없다. 다만 유닉스 파일 이름에서는 이를 사용할 수 있다. 아래의 참고 1을 볼 것.) |- | align="center" | `?` | 물음표 | 유닉스, 윈도, 아미가OS에서 특수 문자로 취급하며 한 글자라는 뜻으로 이용하므로 사용할 수 없다. 유닉스 파일 이름에서는 이를 사용할 수 있다. |- | align="center" | `%` | 퍼센트 기호 | RT-11에서 특수 문자로 취급하며 한 글자라는 뜻으로 이용하므로 사용할 수 없다. |- | align="center" | `*` | 별표 | 유닉스, MS-DOS, RT-11. VMS, 윈도우에서 특수 문자로 취급한다. 유닉스, 윈도, 후반 버전의 MS-DOS에서 연속된 문자임을 나타내거나 기반 이름 및 확장자의 연속된 문자라는 뜻으로 이용한다. (그러므로 초기 버전의 MS-DOS에서 "*.*"는 "모든 파일"을 뜻한다. 유닉스의 파일 이름에서는 사용할 수 있다.) |- | align="center" | `:` | 콜론 | 윈도의 마운트 포인트 / 드라이브를 결정하는 데 사용한다. 아미가OS, RT-11, VMS에서 드라이브와 같은 물리 장치나 가상 장치를 결정하는 데 쓰인다. 고전 맥 OS에서 경로 이름을 구분하는 데 사용한다. VMS의 이름 뒤에 두 개의 콜론이 놓이면 DECnet 노드이름임을 나타낸다. (이는 넷바이오스 (윈도 네트워킹) 호스트 이름의 backslashbackslash와 일치한다.) |- | align="center" | `|` | 수직 막대 | 유닉스와 윈도우에서 소프트웨어 파이프라인화를 가리킨다. 유닉스 파일 이름에는 사용할 수 있다. |- | align="center" | `"` | 인용 부호 | 윈도우에서 파일 이름에 공백을 포함할 때 파일 이름의 시작과 끝을 알려 주는 데 사용한다. |- | align="center" | `` | 보다 크다 기호 | 리디렉션하는 데 사용한다. 유닉스 파일 이름에서는 사용할 수 있다. |- | align="center" | `.` | 온점 | VMS, MS-DOS, 윈도의 확장 구분자로 해석할 수 있다. 다른 운영 체제에서 파일 이름의 일부로 인식할 수도 있으며 이 때 하나 이상의 온점도 허용할 수 있다. |} 참고 1: 대부분의 유닉스 셸은 인용하거나 빠져나가기 위하여 특정한 문자를 요구한다: 공백, , |, backslash, 또 가끔은 :, (, ), &, ;, 및 ?, *와 같은 특수 문자

> fivebackslash andbackslash sixbackslash'five and six 윈도우에서 공백과 온점은 파일 이름의 마지막에 허용하지 않는다. 온점은 파일 이름의 처음에는 허용하지만 윈도우 탐색기와 같은 일부 윈도 응용 프로그램은 이러한 파일의 이름을 만들거나 이름을 바꾸는 것을 금지한다. (유닉스 계열 운영 체제에서는 숨김 파일 및 디렉터리를 기술하는 데 사용하는 변환이기는 하다) 해결책으로 다른 응용 프로그램을 이용하거나 어느 응용 프로그램 안에서 원하는 파일 이름으로 파일을 저장하는 방법이 있다.Naming a file *msdn.microsoft.com* (MSDN), filename restrictions on Windows 일부 운영 체제 파일 시스템(특히 다른 운영 체제에 원래 추가된 파일 시스템)은 해당 운영 체제의 특정한 응용 프로그램들은 더 많은 제한을 받기도 하고 더 많은 해석을 하기도 한다. 유닉스 계열 운영 체제, MS-DOS, 윈도우에서 파일 이름 "."와 ".."는 특별한 의미가 있다. (각각 현재 및 부모 디렉터리). 그뿐 아니라 윈도와 도스에서 일부 글자는 파일 이름으로 금지되어 사용할 수 없다. 이를테면 도스 장치 파일이 그러하다: CON, PRN, AUX, CLOCK$, NUL COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. 이러한 제한이 있는 운영 체제들은 다른 일부 파일 시스템과 호환되지 않는 경향이 있다. 이를테면 윈도는 유효한 유닉스 파일 이름인 aux.c, q"uote"s.txt, NUL.txt와 같은 것들을 다루는 데 실패하거나 오류를 보고하기도 한다.
# 파일 이름의 제한 비교
{| class="wikitable" |- ! rh | MS-DOS FAT | 대소문자 구별 안 함 / 구별된 대소문자 보존 안 함 | 모두 | 0x00-0x1F SPACE DEL " * / : ? backslash | | **장치 이름:** AUX COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 CON LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9 NUL PRN | 11 |- ! rh | 코모도어 64 | 대소문자 구별함 / 구별된 대소문자 보존 | 모두 | :,= | $ | 16 |- ! rh | Win95 VFAT | 대소문자 구별 안 함 | 모두 | |backslash?*+[]/ 제어 문자 | | 255 |- ! rh | NTFS | 선택 사항 (구별된 대소문자 보존) | 모두 (유니코드 문자 포함) | / null (이를테면 0x00) | **루트 디렉터리만:** $AttrDef $BadClus $Bitmap $Boot $LogFile $MFT $MFTMirr pagefile.sys $Secure $UpCase $Volume $Extend $Extendbackslash$ObjId $Extendbackslash$Quota $Extendbackslash$Reparse ($Extend는 디렉터리) | 255 |- ! rh | OS/2 HPFS | 대소문자 구별 안 함 / 구별된 대소문자 보존 | 모두 | |backslash?*/ | | 254 |- ! rh | 맥 OS HFS | 대소문자 구별 안 함 / 구별된 대소문자 보존 | 모두 | : | | 255 |- ! rh | 맥 OS HFS+ | 선택 사항 (구별된 대소문자 보존) | 모두 | : 디스크, 고전 맥 OS, OS X의 카본 계층에서 / OS X 유닉스 계층에서 | | 255 |- ! rh | 대부분의 유닉스 파일 시스템 | 대소문자 구별함 / 구별된 대소문자 보존 | 모두 | / null | | 255 |- ! rh | 초기 UNIX (AT&T;) | 대소문자 구별함 / 구별된 대소문자 보존 | 모두 | / | | 14 |- ! rh | POSIX "완전히 이식 가능한 파일 이름"Lewine, Donald. *POSIX Programmer's Guide: Writing Portable UNIX Programs* 1991 O'Reilly & Associates, Inc. Sebastopol, CA pp63-64 | 대소문자 구별함 / 구별된 대소문자 보존 | A–Za–z0–9._- | / null | 다음을 포함하지 않는 파일 이름: a.out, core, .profile, .history, .cshrc | 14 |- ! rh | 아미가OS | 대소문자 구별 안 함 / 구별된 대소문자 보존 | 모두 | :/" | | 107 |- ! rh | 아미가 OFS | 대소문자 구별 안 함 / 구별된 대소문자 보존 | 모두 | :/" | | 30 |- ! rh | 아미가 FFS | 대소문자 구별 안 함 / 구별된 대소문자 보존 | 모두 | :/" | | 30 |- ! rh | 아미가 PFS | 대소문자 구별 안 함 / 구별된 대소문자 보존 | 모두 | :/" | | 255 |- ! rh | 아미가 SFS | 대소문자 구별 안 함 / 구별된 대소문자 보존 | 모두 | :/" | | 32,000 |- ! rh | 아미가 FFS2 | 대소문자 구별 안 함 / 구별된 대소문자 보존 | 모두 | :/" | | 107 |- ! rh | BeOS BFS | 대소문자 구별함 | UTF-8 | / | | 255 |- ! rh | DEC PDP-11 RT-11 | 대소문자 구별 안 함 | RADIX-50 | | | 6 + 3 |- ! rh | DEC VAX VMS | 대소문자 구별 안 함 | A–Z 0–9 $ - _ | | | 한 요소에 32개. 초기에는 9개로 제한되었으나 나중에는 파일 이름의 경우 255개, 확장자의 경우 32개로 늘어남. |- ! rh | ISO 9660 | 대소문자 구별 안 함 | A–Z 0–9 _ . | | | 255 |}