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

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

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

내가 이렇게해야합니까?

backup_part2_random

또는

backup-part2-random

또는

backup.part2.random

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



답변

.파일 형식 확장자를 구분하는 데 사용됩니다 (예 🙂 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


답변

훨씬 더 중요한 특정 규칙은 일관되고 있음. 스타일을 고르십시오.


답변

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

  • 유닉스 / 리눅스 파일 시스템은 기본적으로 확장 개념을 지원하지 않습니다. 뭔가 같은 유틸리티가 지원하는 파일 확장자의 개념은 완전히 존재 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는 압축 을 의미하지만 이런 식으로 명명 된 다른 파일은 본 적이 없습니다.

답변

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

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


답변

두 가지 생각 :

  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”


답변

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

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

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

_-. :

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


답변

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

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