유닉스 파일 명명 규칙 [닫힘]


61

유닉스에서 파일의 명명 규칙이 무엇인지 궁금합니다. 나는 이것에 대해 확실하지 않지만, 반드시 따라야 할 보편적 인 명명 규칙이 있다고 생각합니까?

예를 들어, 파일 이름을 다음 backup과 같이 지정 part 2하고 싶습니다.random

내가 이렇게해야합니까?

backup_part2_random

또는

backup-part2-random

또는

backup.part2.random

질문이 명확하기를 바랍니다. 기본적으로 유닉스 철학에 맞는 형식을 선택하고 싶습니다.


4
"협약"에 대한 일반적인 의견으로 ... 지금까지 모든 답변을 읽었으며 시스템에서 하나의 사례 만 사용하는 데 거의 방해가 없다는 것이 얼마나 이상할까요? 강점 중 하나가 의미 두 경우 모두를 사용할 수있는 기능입니다 ... 원래 디자인 디자인 이상 (대소 문자 구분)를이)이었다 ... 그냥 생각 만
Peter.O

내 의견 : 컨벤션이 없습니다. 파일 이름은 문자열입니다. 좋아하는 스타일을 선택하십시오.
glenn jackman 13:14에

1
아무도 명령의 대문자를 기억하고 싶지 않기 때문에 모두 동일하게 사용하기 때문입니다.
LtWorf

답변:


57

.파일 형식 확장자를 구분하는 데 사용됩니다 (예 :) foo.txt.

-또는 _논리적 단어를 분리하는 데 사용됩니다 (예 : my-big-file.txt또는 때때로) my_big_file.txt. -Shift 키 (적어도 표준 미국 영어 PC 키보드 사용)를 누를 필요가 없기 때문에 더 좋습니다. 다른 사람들은 _공간처럼 보이기 때문에 선호 합니다.

따라서 귀하의 예를 이해 backup-part2-random하거나 backup_part2_random일반적인 유닉스 관습에 가장 가까운 경우.


CamelCase는 일반적으로 Linux / Unix 시스템에서 사용되지 않습니다. /bin및의 파일 이름을 살펴보십시오 /usr/bin. CamelCase는 Unix 및 Linux 시스템의 규칙이 아니라 예외입니다.

( NetworkManager내가 생각할 수있는 유일한 예는 CamelCase를 사용하며 Mac 개발자가 작성한 것입니다. 많은 사람들 이이 이름 선택에 대해 불평했습니다. 우분투에서는 실제로 스크립트의 이름을로 변경했습니다 network-manager.)

예를 들어 /usr/bin내 시스템에서 :

$ ls -d [A-Z]* | wc -w    # files starting with a capital
6
$ ls -d *_* | wc -w       # files containing an underscore
178
$ ls -d *-* | wc -w       # files containing a minus/dash
409

그럼에도 자본으로 시작하는 파일은 CamelCase를 사용하지 않습니다.

$ ls -d [A-Z]*
GET  HEAD  POST  X11  Xvnc  Xvnc4

.문자는 확장을 지정할뿐만 아니라, 물건을 회전 할 수 있습니다. 예를 들면 my.log my.log.1 my.log.2.gz.
Depado

따라서 하이픈 / 빼기 / 대시는 밑줄보다 일반적입니다.
Hugo

@ 휴고 예. 위의 마이너스 (409) 대 밑줄 (178)을 보여줍니다.
Mikel

감사. 이 협약에 대한 언급이 있습니까?
프롤레타리아

3
참조를 위해 +1 (@Proletariat,의 ls결과 /usr/bin 참조입니다. 이것은 규칙에 대한 질문 입니다. )
Wildcard


19

유닉스 / 리눅스 파일 이름 규약에 대한 나의 견해 :

  • 유닉스 / 리눅스 파일 시스템은 기본적으로 확장 개념을 지원하지 않습니다. 뭔가 같은 유틸리티가 지원하는 파일 확장자의 개념은 완전히 존재 cp, ls또는 당신이 사용하는 쉘. NTFS 에서도이 방법이라고 생각하지만 잘못되었을 수 있습니다.

  • 쉘 스크립트를 포함한 실행 파일은 일반적으로 어떤 유형의 확장명도 갖지 않습니다. 스크립트에는 #!/bin/bash해석해야 할 프로그램을 식별 하는 해시 뱅 라인 (예 :)이 있습니다 .

  • 두 글자 길이의 실행 파일은 매우 중요합니다. 따라서 실행 파일 이름을 두 글자로 된 파일 이름으로 지정하지 마십시오. 에있는 모든 파일 /etc의 끝은 tab또한 다음과 같은, 매우 중요하다 fstab, mtab, inittab.
  • 때때로 .d디렉토리 이름에 추가되는 경우 가 /etc있지만 특히 널리 퍼져 있지는 않습니다 (UPDATE : https://serverfault.com/questions/240181/what-does-the-suffix-d-mean-in-linux )
  • rc접두사 (예 rc.local:) 또는 접미사 ( .vimrc) 와 같은 구성 스크립트 또는 파일에 널리 사용됩니다.
  • 유닉스 / 리눅스 커뮤니티는 확장 기능에 대해 3 자로 제한하지 않았으며 잘 알려진 확장 기능을 줄이면 눈살을 찌푸립니다. 예를 들어, .htm유닉스 / 리눅스에서 HTML 파일의 끝에는 사용하지 마십시오 .html.
  • 파일 세트에서 파일 이름은 대문자 또는 대문자로 표시되기 때문에 디렉토리 목록 헤드에 나타납니다. 고전적인 예는 Makefile소스 패키지에 있습니다. 같은 것들에 대해서만이 작업을 수행하십시오 README.
  • ~같이 백업 파일이나 디렉토리를 식별하는 데 사용됩니다 important_stuff~, 또는 /etc~. 많은 껍질이 고독 ~으로 확장 됩니다 $HOME.
  • 라이브러리 파일은 거의 항상로 시작합니다 lib. 예외는 zlib아마도 몇 가지 일 것입니다.
  • inetd에 의해 호출 된 스크립트는 때때로과 같이 선행으로 태그가 지정 in.됩니다 in.tftpd.
  • 끝나는 z vmlinuz는 압축 을 의미하지만 이런 식으로 명명 된 다른 파일은 본 적이 없습니다.

2
나는 종종 .sh"확장자" 가있는 쉘 스크립트를 본다 . 개인적으로 다소 성가신 것으로 생각하지만을 사용하는 좋은 이유가 무엇인지 알지 못합니다 .sh.
Dan Molding

4
바이너리가 아닌 텍스트 기반 스크립트라는 사실을 강조하는 것이 유용하다는 사실이 떠 오릅니다.
LawrenceC

1
@DanMoulding은 개인적 .sh으로 (1) 대화 형으로 실행되지 않지만 다른 스크립트 / 프로그램에서만 실행되거나 (2) 실행이 아닌 소싱을 위해 설계된 스크립트에서 사용합니다. 전자의 경우 실행 가능해야합니다. 후자를 위해 실행 가능한 비트를 남겨두고 함수가 작성된 쉘에 대한 문서화에만 shebang 행을 사용하십시오.
와일드 카드

3
@Wildcard (6 년 전)이 같은 습관에 들어갔다. 확장은 실제로 스크립트 비트를 소싱하는 데 의미가 있습니다. 예를 들어, zsh 용으로 작성된 실행 스크립트 (예 : #!/bin/zsh맨 위)에서 .zsh 확장자를 가진 다른 파일을 안전하게 소스 할 수 있으며 올바른 zsh 코드가 포함되어 있는지 확인하십시오. 실행 가능한 스크립트가 Bourne Shell과 엄격하게 호환되는 경우 (예 : #!/bin/sh맨 위) 해당 .zsh 파일을 소싱하는 데 문제가 있음을 알게됩니다.
Dan Molding

4
".sh", ".py", ".pl"등을 사용하는 것이 편리하며 일부 텍스트 편집기 (예 : Geany)는 적절한 구문 강조 표시 체계를 처음 추측하기 위해 이러한 텍스트 편집기를 사용합니다.
bgvaughan 2016 년

7

유닉스에서 파일 이름은 DOS와 달리 문자열이며 파일 이름은 이름과 확장명으로 구성됩니다. 따라서 주어진 파일 이름 중 어느 것이 든 허용됩니다.

그러나 많은 프로그램은 여전히 ​​점으로 시작하는 파일 접미사를 사용하여 다른 파일 형식을 구별합니다. 즉, Apache Web Server는 접미사를 사용하여 응답 헤더에 올바른 MIME 유형을 설정합니다.


5
gelraen은 100 % 정확하지만 유닉스 / 리눅스는 파일 확장자를 신경 쓰지 않지만, 일부 쉘 확장자는 특정 파일 유형의 특별한 식별 (컬러 또는 기타)을 제공하고 파일 관리자는 자동 연결을 제공하는 한, 최신 Linux 버전은주의를 기울입니다. 프로그램과 함께. 그러나 인간 사용자가 어떤 파일이 어떤 유형인지 알고 있어야합니다. 이를 위해 표준 체계를 따르는 것이 편리 할뿐만 아니라 다른 사람들과 일관성을 유지하는 것이 편리합니다. 이런 점에서 MS Windows (또는 MIME)와는 크게 달라서는 안됩니다.
asoundmove

그것은 때로는 여러 가지 다른 확장 스타일이 동일한 목적에 부합 할 수 있다고 말했습니다. 따라서 .tar.gz는 .tgz와 동일합니다. .tar.bz2 = .tbz, .ps.gz는 종종 .ps (혼란스럽게)로 단축되며 더 많은 것이 있다고 확신합니다.
asoundmove

@asoundmove .ps.gz는 압축 된 .ps 파일임을 의미합니다. .tar.gz와 마찬가지로 압축 된 .tar 파일을 의미합니다.
jonescb

1
물론 @jonescb입니다. 혼란스러워하는 요점은 .ps를 볼 때 압축되지 않은 파일 (cat 이하)을 기대하지만 종종 .ps 파일이 압축되어 있고 명확성을 위해 실제로 .ps.gz이어야한다는 것입니다. 소스 코드를 보려면 zcat 또는 zless가 필요하므로). 어쨌든 일부 ps 뷰어는 실제로 압축 여부에 상관하지 않기 때문에 어떤 사람들은 어쨌든 .ps로 압축 된 PostScript 파일에 접미사를 붙이기로 결정했습니다.
asoundmove

6

두 가지 생각 :

  1. 에서 Naming Variables, Functions, and Files의 섹션 GNU 코딩 표준 이 찾을 수 있습니다 :

    밑줄을 사용하여 이름에서 단어를 분리하면 Emacs 단어 명령이 그 안에 유용 할 수 있습니다. 소문자를 고수하십시오;

    IMO가 " _emacs 때문에 사용해야한다"고 말하는 것은 다소 오래된 것으로 보이지만 그럼에도 불구하고 '표준'문서에 있습니다.

  2. 우리가 모두 리눅스 커널이 리눅스 프로젝트의 가장 중요한 *이고, 사용 된 규약이 '표준'규약으로 간주 될 수 있다는 것에 우리 모두가 동의한다고 가정하자.

    grep-ing 리눅스 커널의 소스를 다음을 찾을 수 있습니다 :

    • 대시 만 사용 된 시간의 44.6 %
    • 시간의 54.1 % 가 밑줄 만
    • 파일이 둘 다 사용하는 시간의 1.2 %

흥미롭게도, 자식에 대한 소스 의 무게 는 85 % 대시를 들어, 3.8 %, 밑줄, 및 11.1 % 모두.

선택은 분명하고 논쟁입니다. ;)

개인적 견해 : 나는 미적 요소와 변화의 주요 이유 때문에 대시를 사용합니다. 팀에서 일하고 있다면 투표하십시오. 그러나 말한 내용을 되풀이하려면 일관성을 유지하십시오 .

* 또는 원하는 경우 "be_all and end_all"


4

파일 이름에 사용해서는 안되는 문자 :

| ; ,! @ # $ () <> / \ " '`~ {} [] = + & ^

이름을보다 쉽게 ​​읽을 수 있도록하는 문자 분리 문자 :

_-. :

(어떤 경우에는 ":"에 특별한 의미가 있습니다)


5
물론 파일 이름에 "/"를 사용할 수도 없습니다 . 다른 모든 것이 가능합니다. 그리고 접근하기 어렵게 만들고 싶다면 ;-)
Jürgen A. Erhard

제어 및 비 ASCII 문자를 포함하여 목록이 실제로 훨씬 더 깁니다. 예. * nix 파일 이름의 일부로 백 스페이스를 사용할 수 있습니다.
l0b0

1
또한 대부분의 * nix 시스템은 파일 이름에 /경로 구분 기호와 \ 0 (ASCII 0) 문자열 종료 문자라는 두 가지 특정 문자 만 허용하지 않습니다 .
CVn

4

다른 사람들의 말을 더하기 위해, 악센트 부호 문자와 많은 특수 문자가 파일 이름에 합법적이지만 다음 시나리오 중 하나에서 문제를 일으킬 수 있다고 말하고 싶습니다.

  • 파일 시스템을 다른 컴퓨터, 특히 다른 운영 체제와 공유합니다.
  • 다른 사용자와 파일을 공유합니다 (이메일은 변환에 상당히 도움이 되더라도 작동하지 않는 경우가 있습니다).
  • 쉘 스크립트를 사용하여 일부 작업을 자동화합니다 (공백은 처리 방법이 많지만 공간이 특히 문제가됩니다).
  • 다른 컴퓨터에서 파일 공유를 사용합니다.

...


3

영숫자 파일 이름을 고수하십시오. 공백을 피하거나 공백을 밑줄 (_)로 바꾸십시오. 파일 이름의 구두점을 마침표 (.), 밑줄 (_) 및 하이픈 (-)으로 제한하십시오. 일반적으로 파일 이름은 소문자이지만 파일 이름에 여러 단어가 있으면 CamelCase를 사용합니다.

파일 형식을 나타내는 확장명을 사용하십시오. 실행 비트는 프로그램을 나타내는 데 사용되므로 프로그램은 확장이 필요하지 않으며 쉘은 다양한 유형의 프로그램을 실행하는 방법을 알고 있습니다. 쉘 스크립트의 경우 (.sh) 및 펄 스크립트의 경우 (.pl)이 일반적이지만 필수는 아닙니다. Windows 실행 파일 확장명 .bat, .com, .scr 및 .exe는 Unix의 Windows 실행 파일을 나타냅니다.

표준을 선택하고 준수하십시오. 그러나 피하지 않아도 문제가 발생하지 않습니다.

숨겨진 파일 (또는 점)은 마침표로 시작하는 이름을 갖습니다. 이들은 일반적으로 디렉토리 목록에 표시되지 않습니다. 점에 파일을 포함 시키려면 'ls -a'를 사용하십시오.


5
CamelCase는 Unix의 안티 패턴입니다. OP는 협약에 대해 물었다.
Mikel

2
"나쁜"대 "좋은"이 아닙니다. "이것은 일반적으로 수행되는 방법"입니다. OP가 요구 한 협약 입니다. 이유? 유닉스 사람들은 Shift를 누르는 것을 좋아하지 않기 때문일 수 있습니다. 구 시스템에는 대문자가 있거나 다른 이유로 인해있을 수 있습니다. 잘 모르겠습니다.
Mikel

@Mikel 나는 또한 CamelCase가 컨벤션 인 Java를 프로그래밍한다. 때때로 패턴과 규칙이 충돌합니다.
BillThor

.scr은 Windows 실행 파일 확장명입니다.
LawrenceC

1
@ultrasawblade 감사합니다, Windows 스크립팅 빈도를 보여줍니다. cmd, pif, vb *, wsh 및 나머지와 같은 희귀 한 실행 파일 확장명을 건너 뛰려고했습니다.
BillThor

2

한 규칙은 "_"를 사용하여 단어 사이의 공백을 공백으로 대체하는 것입니다. 다른 문자는 공백을 대체하는 데 사용될 수 있지만 "-"및 "."에 대한 일반적인 용도는 약간 더 강력합니다. 경로 이름에서 "_"가 선호됩니다.

공백은 경로 이름에서 유효하지만 경로 이름을 인용 ( "foo bar")하거나 공백을 제거 (foo \ bar)해야하므로 일반적으로 사용하지 않습니다. 적절하게 작성된 쉘 스크립트는 공백, 특히 경로 이름을 포함 할 수있는 변수를 인용하지만, 그렇게하지 않는 것은 일반적인 감독이며, 명령 행에 입력 된 일회성 명령을 수행 할 때 많은 추가 입력이 있습니다.

타임 스탬프 또는 일련 번호와 같이 "-"를 사용하여 숫자 군집을 분리하는 것은 파일 시스템 컨텍스트 외부에서 일반적으로 사용되는 규칙입니다. "."사용 파일 형식을 나타내는 "파일 확장자"를 분리하는 것은 매우 일반적이며 일부 중요한 도구는 파일에 의존합니다. 예를 들어, Red Hat Enterprise Linux와 그 파생물 인 RPM의 패키지 관리 시스템은 패키지 파일이 ".rpm"으로 끝나기를 기대합니다. 기존의 타르볼은 압축 된 tar 파일 ( ".tar") ( ". gz")이므로 ".tar.gz"로 끝납니다.

따라서 이들을 합치면 종종 "home_backup_2017-07-01.tar.gz"와 같은 파일 이름으로 끝납니다.


2

확장 기능의 파일 이름 지정 -또는 사용_
_
.

cat << EOF > foo-bar.sh  
foo_bar() {  
echo baz  
}  
EOF  

0

나는 당신이 무언가로 가야한다는 David Oneill에 동의합니다.

그러나 파일이 동일한 디렉토리에 정렬 가능하면 좋을 것이므로 0 ..10은 아니지만 00 ..10 은 사용하지 마십시오.

이름에 날짜를 사용할 때는 ISO8601 과 같은 표준 날짜 형식을 사용하십시오 .

그리고 여러 문자를 사용하여 이름의 논리 부분을 분리하는 것을 두려워하지 마십시오. 당신이 사용하는 경우 _ 당신은 나중에 파일 이름에 regexps '에를 단순화 할 수 있습니다 (즉 _ 3이었다).

따라서 귀하의 예는 다음과 같습니다.

backup_2011-06-19T114012___part002___random

스크립트로 쉽게 읽고 구문 분석 할 수 있습니다.


0

파일 이름의 단어는 유닉스 규칙에 따라 _또는 -유닉스 규칙에 따라 분리 할 수 ​​있습니다 .

을 사용 -하면 입력하기가 쉬워 SHIFT를 누를 필요가 없습니다. 그러나 -공간이 거의 없기 때문에에 비해 단어 구분을 읽는 것이 약간 어렵습니다 _. 더 많은 공간을 차지 _하므로 단어를 구분하는 데 사용하면 훨씬 깔끔해 보입니다 _.

쉘 스크립팅 및 기타 컴퓨터 프로그래밍 _에서와 같이 여러 단어 변수에 사용됩니다 MY_ENVIRONMENT_FILE. 파일 이름을 그대로 사용하면 파일 이름 _이 일관되게 유지됩니다 MY_ENVIRONMENT_FILE=~/my_environment_file.

웹 개발에서는 -파일 이름 지정이 선호됩니다. 한 가지 이유는 웹 링크의 밑줄이 밑줄을 숨길 수 있고 웹 링크를 직접 입력하는 경우 어려울 수 있기 때문일 수 있습니다.

웹 페이지뿐만 아니라 대부분의 편집자에서는 this_long_word더블 클릭으로 완전히 선택할 수 있지만을 클릭 할 수는 없습니다 this-long-word.


흠, 왜 가변 폭 글꼴로 파일 이름을 읽고 있습니까? 터미널을 열고 -_바로 정확히 같은 공간을 차지합니다! :)
와일드 카드

하하, 네 말이 맞아 SourceCodePro + Powerline + Awesome Regular 패치 글꼴을 사용합니다. 모노 스페이스 글꼴을 사용하더라도와 _동일한 공간을 사용하더라도 깔끔하게 보입니다 -. 나는 "명백하게"라는 단어를 사용해야했습니다. 모노 스페이스 글꼴을 사용 하는 경우 _-그 차이에 대한 차이점은 다음과 같은 유사한 그림으로 가장 잘 설명 할 수 있습니다. evsc.net/v8/wp/wp-content/uploads/2010/09/…
GMaster

-1

리눅스에는 분명히 표준이 있습니다. Linux 시스템에서 파일 이름을 보면 / usr / bin / ssh-keygen과 같이 소문자로 표시됩니다. 이것은 현재 찾을 수없는 Linux Standards Base 문서 중 하나에 지정되어 있습니다. 또한 변수 이름에 밑줄을 사용하고 파일 이름에 대시를 사용하도록 GNU에서 지정합니다.


-2

다른 사람들이 말한 것에 덧붙이려면 :

1- 비록 Linux는 확장에 관심이 없지만 Windows는 확장을 중요하게 생각하므로 다른 사람에게 제공하려는 모든 파일에 적절한 확장명이 있는지 확인하십시오.

2-Camel 캡은 이스케이프 시퀀스에 대해 걱정할 특수 문자가없는 스크립트를 사용하는 것이 가장 쉬운 것 같습니다.


5
-1. CamelCase는 Linux에서 사용되지 않습니다.
Mikel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.