Unixファイルの命名規則[非公開]


61

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

たとえば、次のようにファイルに名前を付けたい:backupwith part 2andrandom

このようにする必要があります:

backup_part2_random

または

backup-part2-random

または

backup.part2.random

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


4
一般的なコメントとして「慣習」について...私はこれまでにすべての答えを読んだばかりで、システムで1つのケースのみを使用することにほとんど執着があることは奇妙だと思いましたその強みの一つは...意味の両方のケースを使用する能力であるオリジナルのデザイン(大文字と小文字を区別)デザインオーバーAN)だった...ちょうど物思いにふけっ
Peter.O

私の意見:慣習はありません。ファイル名は単なる文字列です。お気に入りのスタイルを選んでください。
グレンジャックマン

1
これは、コマンドの大文字化を覚えている人がいないため、すべて同じコマンドを使用しているためです。
LtWorf

回答:


57

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

-または_論理的な言葉、例えば分離するために使用されるmy-big-file.txt時々かをmy_big_file.txt-Shiftキーを押す必要がないため(少なくとも標準的な英語(US)のPCキーボードでは)、_スペースのように見えるため他の人が好むためです。

したがって、私があなたの例を理解しているbackup-part2-randombackup_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

.チャーはまた、拡張子を指定するだけではなく、物事を回転させるために使用することができます。たとえばmy.log my.log.1 my.log.2.gz
デパド

したがって、ハイフン/マイナス/ダッシュはアンダースコアよりも一般的です。
ヒューゴ

@Hugoはい。上記はマイナス(409)対アンダースコア(178)を示しています。
ミケル

ありがとう。これらの規則の参照はありますか?
プロレタリアート

3
参照については+1。(@Proletariat、lsからの出力/usr/bin 参照です。これは慣習に関する質問です。
ワイルドカード


19

Unix / Linuxファイル名の規則に関する私の見解:

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

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

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

2
シェルスクリプトに.sh「拡張子」が付いていることがよくあります。個人的にはやや面倒ですが、を使用する正当な理由を知らない可能性があることを認めなければなりません.sh
ダンモールディング

4
バイナリではなくテキストベースのスクリプトであるという事実を強調することが有用であるということが思い浮かびます。
ローレンス

1
個人的に、@ DanMouldingは、.sh(1)対話的に実行することを意図しておらず、他のスクリプト/プログラムからのみ実行するスクリプト、または(2)実行ではなくソース用に設計されたスクリプトで使用します。前者については、実行可能でなければなりません。後者については、実行可能ビットをオフのままにして、関数が記述されているシェルのドキュメント化のためにのみshebang行を使用します。
ワイルドカード

3
@Wildcard以来(6年前)この習慣を身につけました。この拡張機能は、実際にはスクリプトビットのソースとして非常に有効です。たとえば、zsh用に記述された実行可能スクリプト(つまり#!/bin/zsh最上部)から、.zsh拡張子を持つ別のファイルを安全に取得でき、有効なzshコードが含まれていることを確認できます。実行可能スクリプトがBourne Shellに厳密に準拠している場合(つまり#!/bin/sh最上部)、その.zshファイルを入手することには問題があることをご存じでしょう。
ダンモールディング

4
「.sh」、「。py」、「。pl」などを使用すると便利で、一部のテキストエディター(Geanyなど)は、これらを使用して適切な構文強調表示スキームを最初に推測します。
-bgvaughan

7

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

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


5
gelraenは100%正しいですが、Unix / Linux自体はファイル拡張子を気にしませんが、一部のシェル拡張子が特定のファイルタイプの特別な識別(色など)を提供し、ファイルマネージャーが自動関連付けを提供する限り、Linuxの現代のフレーバーは気にしますプログラムで。しかし、同様に重要なことは、人間のユーザーがどのファイルがどのタイプであるかを知ることです。そのためには、自分だけでなく他の人との一貫した標準スキームに固執するのが便利です。この点で、物事はMS Windows(またはMIME)と過度に異なるものであってはなりません。
asoundmove

ただし、いくつかの異なる拡張スタイルが同じ目的に一致する場合があります。したがって、.tar.gzは.tgzと同等です。.tar.bz2= .tbz。
asoundmove

@asoundmove .ps.gzは、圧縮された.psファイルであることを意味します。.tar.gzが圧縮された.tarファイルを意味するように。
jonescb

1
@jonescb、もちろんはい。紛らわしいのは、.psが表示されたときに非圧縮ファイル(cat以下にできるはずです)を期待していることですが、多くの場合、.psファイルは圧縮されており、実際には明確にするために.ps.gzにする必要があります(ソースコードを表示するにはzcatまたはzlessが必要です)。一部の人々は、圧縮されたPostScriptファイルを.psで単にサフィックスすることに決めました。一部の一般的なpsビューアーは、実際にそれらが圧縮されているかどうか気にしないからです。
asoundmove

6

2つの考え:

  1. Naming Variables, Functions, and FilesのセクションGNUコーディング規約あなたは見つけることができます:

    Emacsの単語コマンドがアンダースコア内で役立つように、アンダースコアを使用して名前の単語を区切ってください。小文字に固執します。

    IMOが「_emacs を使用する必要がある」と言っているのは少し時代遅れのようですが、それでも彼らの「標準」ドキュメントにはあります。

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

    grep-ing Linuxカーネルのソースを使用すると、次を見つけることができます:

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

興味深いことに、gitソースは、ダッシュで85 、アンダースコアで3.8 、両方で11.1%です。

選択は明確で、議論があります。;)

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

* または、必要に応じて「be_all and end_all」


4

ファイル名に使用すべきでない文字:

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

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

_-。:

(場合によっては、「:」には特別な意味があります)


5
もちろん、ファイル名に「/」を使用することできません。他のすべてが可能です。アクセスしにくくしたい場合、便利です;-)
ユルゲンA.エアハルト

リストは、制御文字と非ASCII文字を含め、実際にはかなり長くなっています。はい、* nixファイル名の一部としてバックスペースを使用できます。
l0b0

1
さらに言えば、ほとんどの* nixシステムは、ファイル名に/パス区切り文字と\ 0(ASCIIゼロ)文字列ターミネータの2つの特定の文字のみを許可しません。
CVn

4

他の人が言ったことに追加するために、アクセント付き文字と多くの特殊文字はファイル名で合法ですが、以下のシナリオのいずれかで問題を引き起こす可能性があると言います。

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

...


3

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

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

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

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


5
CamelCaseは、Unixのアンチパターンです。OPは規約について尋ねていました。
ミケル

2
「悪い」と「良い」ではありません。「これが通常のやり方です」。これは、OPが求めていたコンベンションです。理由?Unixの人々はShiftキーを押すのが好きではないのかもしれません。古いシステムには大文字しかなかったからかもしれません。よく分かりません。
ミケル

@Mikel CamelCaseが慣習であるJavaもプログラミングします。パターンと規則が矛盾する場合があります。
-BillThor

.scrはWindows実行可能拡張子でもあります。
ローレンス

1
@ultrasawbladeありがとう、Windowsをスクリプトする頻度を示しています。cmd、pif、vb *、wshなどのまれな実行可能拡張子をスキップしようとしました。
-BillThor

2

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

拡張機能用のファイルの使用-または_命名
_
.

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

0

私はあなたが何かと一緒に行くべきだとデビッド・オネイルに同意します。

しかし、ファイルが同じディレクトリでソート可能であればいいので、番号0 ..10で番号00 ..10はいけません。

名前に日付を使用する場合は、ISO8601などの標準の日付形式を使用します。

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

したがって、例は次のようになります。

backup_2011-06-19T114012___part002___random

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


0

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

を使用すると-、入力が簡単になり、Shiftキーを押す手間が省けます。しかし、-スペースが非常に少ないため、に比べて単語の区切りを読むのは少し難しい_です。_単語を区切るために使用すると、_より多くのスペースを占有するため、見た目がずっときれいになります。

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

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

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


うーん、なぜ可変幅フォントでファイル名を読んでいるのですか?あなたのターミナルを開き、-そして_ちょうどまったく同じスペースを取ります!:)
ワイルドカード

ハハ、あなたは正しい。SourceCodePro + Powerline + Awesome Regularパッチを適用したフォントを使用します。等幅フォントで_も、と同じスペースを使用し-ますが、よりきれいに見えます。「見かけ上」という言葉を使うべきでした。モノスペースフォントに関して、_および-その違いは、この類推図で最もよく説明できます:evsc.net/v8/wp/wp-content/uploads/2010/09/…– GMaster
1

-1

Linuxには間違いなく標準があります。Linuxシステムでファイル名を見ると、ダッシュ付きの小文字/ usr / bin / ssh-keygenです。これは、現時点では見つからないLinux Standards Baseドキュメントの1つで指定されています。また、変数名にはアンダースコアを使用し、ファイル名にはダッシュを使用するというGNUによって指定されています。


-2

他の皆が言ったことに追加するには:

1-Linuxは拡張子をあまり気にしませんが、Windowsはそれを考慮します。

2-キャメルキャップは、エスケープシーケンスを心配する特別な文字を持たないスクリプトを使用するのが最も簡単なようです。


5
-1。CamelCaseはLinuxでは使用されません。
ミケル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.