web-dev-qa-db-ja.com

Unixファイルの命名規則

Unixでのファイルの命名規則は何ですか?私はこれについてはわかりませんが、おそらく従うべき普遍的な命名規則があると思いますか?

たとえば、ファイルに名前を付けたい:backup with part 2およびrandom

私はそれをこのようにすべきですか:

backup_part2_random

OR

backup-part2-random

OR

backup.part2.random

質問が明確であることを願っています。基本的には、Unixの哲学に準拠した形式を選択したいと思います。

67
user4740

_._は、ファイルタイプ拡張子を区切るために使用されます。 _foo.txt_。

_-_または___は、論理語を区切るために使用されます。 _my-big-file.txt_または時々_my_big_file.txt_。 _-_はShiftキーを押す必要がないので(少なくとも標準的な米国英語のPCキーボードでは)、より良いです。他の人は___を好みます。

したがって、私があなたの例を理解していれば、_backup-part2-random_または_backup_part2_random_が通常のUnixの規則に最も近いでしょう。


CamelCaseは通常、Linux/Unixシステムでは使用されません。 _/bin_および_/usr/bin_のファイル名を確認してください。 CamelCaseは、UnixおよびLinuxシステムの規則ではなく、例外です。

NetworkManagerはCamelCaseを使用していると考えることができる唯一の例であり、Mac開発者によって記述されました。多くの人がこの名前の選択について不満を言っています。Ubuntuでは、実際にスクリプトの名前を_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
_

そしてそれでも、大文字で始まるファイルはどれもキャメルケースを使用していません:

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

Far特定の規則が一貫していることがより重要です。スタイルを選び、それに固執する。

38
David Oneill

Unix/Linuxのファイル名規則についての私の見解:

  • Unix/Linuxファイルシステムは、本質的に拡張機能の概念をサポートしていません。ファイル拡張子の概念は、cpls、または使用しているシェルなどのユーティリティによってサポートされるものとして完全に存在します。 NTFSでも同様だと思いますが、間違いかもしれません。

  • シェルスクリプトを含む実行可能ファイルには、通常、いかなるタイプの拡張子もありません。スクリプトには、どのプログラムがそれを解釈する必要があるかを識別するハッシュバング行(つまり、#!/bin/bash)があります。

  • 2文字の実行可能ファイルは非常に重要です。したがって、実行可能ファイルに2文字のファイル名を付けないでください。 tabfstabmtabのように、inittabで終わる/etcのファイルも非常に重要です。
  • 特に.dでは、/etcがディレクトリ名に追加されることがありますが、これは広く普及していません(UPDATE: https://serverfault.com/questions/240181/what-does-the-suffix-d-mean-in -linux
  • rcは、構成スクリプトまたはファイルの前に追加する(rc.localなど)かサフィックス(.vimrc)に広く使用されます
  • Unix/Linuxコミュニティでは、拡張機能に3文字の制限がありませんでした。また、よく知られている拡張機能に合わせて短縮すると、眉をひそめました。たとえば、Unix/LinuxのHTMLファイルの最後に.htmを使用しないでください。.htmlを使用してください。
  • ファイルのセットでは、ファイル名が大文字、またはすべて大文字の場合があるため、ディレクトリリストの先頭に表示されます。古典的な例は、ソースパッケージのMakefileです。これは、READMEのようなものに対してのみ実行してください。
  • ~は、important_stuff~または/etc~のように、バックアップファイルまたはディレクトリを識別するために使用されます。多くのシェルは、単一の~$HOMEに拡張します。
  • ライブラリファイルは、ほとんど常にlibで始まります。例外はzlibで、おそらく他にもいくつかあります。
  • Inetdによって呼び出されるスクリプトは、in.などの先頭のin.tftpdでタグ付けされることがあります。
  • vmlinuzの末尾のzは圧縮されていることを意味しますが、この方法で名前が付けられた他のファイルを見たことはありません。
19
LawrenceC

UNIXでは、ファイル名は名前と拡張子から構成されるDOSとは異なり、ファイル名は単なる文字列です。したがって、任意のファイル名は完全に受け入れられます。

ただし、多くのプログラムは依然としてドットで始まるファイルサフィックスを使用してさまざまなファイルタイプを区別しています。つまり、Apache Web Serverはサフィックスを使用して応答ヘッダーに正しいMIMEタイプを設定しています。

7
gelraen

2つの考え:

  1. の中に Naming Variables, Functions, and FilesGNUコーディング基準 のセクション==

    アンダースコアを使用して名前の単語を区切り、EmacsのWordコマンドがその中で役立つようにします。小文字に固執する。

    IMOが「_ emacs "は少し古くなっているように見えるので、それでも彼らの「標準」文書にはあります。

  2. 少しの間、LinuxカーネルがLinuxプロジェクトのすべてで終わりのすべての*であり、そこで使用されている規則が「標準」の規則と見なすことができるものであることに全員が同意すると仮定します。

    grep- ing Linuxカーネルのソース 以下が見つかります:

    • 44.6%ダッシュのみが使用される時間
    • 54.1%アンダースコアのみ
    • 1.2%ファイルが両方を使用する時間。

興味深いことに、 source for git85%の場合はダッシュ、3.8%の場合アンダースコア、11.1%両方。

選択は明確で、議論されています。 ;)

個人的な意見:私は美的理由とシフトの主な理由のためにダッシュを使用します。チームで作業している場合は、投票してください。しかし、言われたことを繰り返すために、一貫している

*または「be_all and end_all」(必要な場合)

6
Roy Truelove

ファイル名に使用してはいけない文字:

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

名前を読みやすくするために使用する必要がある文字区切り文字:

_-。 :

(ただし、「:」は特別な意味を持つ場合があります)

4
Istvan

他の人が言ったことに加えて、アクセント付きの文字と多くの特殊文字はファイル名で合法であるが、次のシナリオのいずれかで問題を引き起こす可能性があると私は言うだけだ:

  • ファイルシステムを他のコンピューター、特に異なるオペレーティングシステムと共有します。
  • あなたは他の人とファイルを共有します(そして、電子メールは変換に関して非常に優れている傾向がありますが、時にはそれは単に機能しません);
  • シェルスクリプトを使用して、いくつかのタスクを自動化します(スペースには特に問題がありますが、スペースを処理する方法はたくさんあります)。
  • 別のコンピューターからファイル共有を使用します。

...

4
asoundmove

英数字のファイル名に固執する。スペースを使用しないか、スペースをアンダースコア(_)に置き換えます。ファイル名の句読点をピリオド(。)、下線(_)、およびハイフン(-)に制限します。通常、ファイル名は小文字ですが、ファイル名に複数の単語がある場合はキャメルケースを使用します。

ファイルのタイプを示す拡張子を使用します。実行ビットはプログラムを示すために使用され、シェルはさまざまなタイプのプログラムの実行方法を知っているため、プログラムは拡張機能を必要としません。シェルスクリプトの場合は(.sh)、Perlスクリプトの場合は(.pl)が一般的ですが、必須ではありません。 Windows実行可能拡張子.bat、.com、.scr、および.exeは、UNIX上のWindows実行可能ファイルを示します。

標準を選択し、それに固執します。しかし、それを避けても問題はありません。

非表示(またはドット)ファイルには、ピリオドで始まる名前があります。これらは通常、ディレクトリリストには表示されません。リストにドットファイルを含めるには、「ls -a」を使用します。

3
BillThor

使用する -または_ファイルに名前を付ける
_関数用
.拡張機能用

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

規則の1つは、単語間の区切り文字としてスペースを置き換えるために "_"を使用することです。スペースの代わりに他の文字を使用することもできますが、「-」と「。」の従来の使用法はやや強力です。パス名では、「_」が通常推奨されます。

パス名ではスペースは有効ですが、パス名を引用符で囲む( "foo bar")かスペースをエスケープする(foo\bar)必要があるため、従来は回避されています。適切に記述されたシェルスクリプトは、スペース、特にパス名を含む可能性のある変数を引用しますが、そうしないとよく見落とされ、コマンドラインで1回限りのコマンドを入力すると、余分な入力が多くなります。

タイムスタンプやシリアル番号のように、 "-"を使用して数値のクラスターを分離することは、ファイルシステムのコンテキスト外で一般的に使用される規則です。 「。」を使用するファイルの種類を示す「ファイル拡張子」を分離することは非常に一般的であり、いくつかの重要なツールはそれに依存しています。たとえば、Red Hat Enterprise Linuxとその派生物であるRPMのパッケージ管理システムは、パッケージファイルが「.rpm」で終わることを想定しています。従来のtarballは、gzip( ".gz")されたtarファイル( ".tar")であり、 "。tar.gz"で終わります。

これらをまとめると、「home_backup_2017-07-01.tar.gz」のようなファイル名になることがよくあります。

2
bgvaughan

デビッド・オニールにも同意します。

しかし、ファイルが同じディレクトリでソート可能であればいいので、番号.. 10を使用しないでください。ただし、番号を使用してください。 00.. 10。

名前に日付を使用する場合は、 ISO8601 のような標準の日付形式を使用してください。

また、名前の論理部分を区切るために複数の文字を使用することを恐れないでください。 _(これは3 _でした)を使用すると、後でファイル名の正規表現を簡略化できます。

だからあなたの例は次のようなものになるでしょう:

backup_2011-06-19T114012___part002___random

読みやすく、スクリプトで簡単に解析できます。

0
Johan

ファイル名に含まれる単語は、UNIXの規則に従って_または-で区切ることができます。

-を使用すると、入力が簡単になり、Shiftキーを押す手間が省けます。ただし、-はスペースをほとんどとらないため、_と比較して単語の区切りを読み取るのは少し困難です。 _を使用して単語を区切ると、_がより多くのスペースを占めるため、見栄えがよくなります。

シェルスクリプトおよびその他のコンピュータプログラミングでは、_MY_ENVIRONMENT_FILEのようなマルチワード変数に使用されます。ファイル名に_を使用することで、ファイル名の一貫性が保たれます:MY_ENVIRONMENT_FILE=~/my_environment_file

Web開発では、-がファイルの命名に適しています。理由の1つは、Webリンクの下線がアンダースコアを隠す可能性があり、Webリンクを手で入力している場合に困難になる可能性があるためです。

ほとんどのエディターとWebページでは、this_long_Wordはダブルクリックで完全に選択できますが、this-long-Wordは選択できません。

0
GMaster