ファイル名がドットで始まるのはなぜですか?ドットを最初の文字として使用せずにファイルを非表示にできますか?

ファイル名がドットで始まるのはなぜですか?ドットを最初の文字として使用せずにファイルを非表示にできますか?

最初は偶然だと思ったが、もう見ると偶然でもある。ラベルこの目的のために、隠されたすべてのファイル名はドットで始まります。これが合意なのか?なぜそれを選ぶのですか?変更できますか?あるいは、他の多くの質問に対する答えを示唆する関連質問で@evilsoupが提案したように、名前を変更せずにファイルを隠すことはできます(.名前の最初の文字として使用されます)。

答え1

ウィキペディアによると

前に . が付くファイル名は Unix 初期のソフトウェアのバグ結果を隠すようになっています。 lsコマンドは、ファイルシステムに追加された特別な項目.とディレクトリ項目を..表示しないことにしました。しかし、名前が.正しい名前.または..

...それで、それはエラーで始まりましたが、機能として受け入れられまし...。このファイルを隠す方法は実際にはほとんどの場合十分にうまく機能するため、誰もWindowsスタイルのファイルを隠すことを実装しようとしていないようです。

また、他の動作を実装すると、*nixの世界にさらに断片化が生じるという事実もありますが、これは誰も望まないことです。

ファイルを隠す別の方法がありますいいえ名前の変更は必要ですが、GUIファイルマネージャでのみ機能します。 (それらの中では普遍的ではありません。主要なLinuxで使用されていますが、OSXのFinderはそうではなく、ニッチなLinuxファイルマネージャはこの動作をサポートしていないようです).hidden。できます。lsShell globはそれを尊重しませんが、それでも機能できます。

答え2

ドットで始まるファイルは無視されるデフォルトでは、lsコマンドを介してファイルを隠すのとほぼ同じ効果がありますが、同じではありません(他のコマンドもオプションで同じでも同じでもない場合があります)。ドットで始まるファイルは、「非表示」が属性の1つではないため、「非表示」ではありません。DOS / Windowsとは異なり、 "hidden"はUnixのプロパティではありません。Unixには多くの属性がありますが(「man chattr」を介してこれについてすべて知ることができます)、隠す属性はそのうちの1つではありません。

「ls」がドットファイルを無視する理由は、実際には非常に興味深く、恥ずかしいです。これはデザイン決定ではありません。初期のUnixソフトウェアのバグの結果。特別な時。そして..ディレクトリエントリがファイルシステムに追加され、lsコマンドが邪魔になるエントリを表示しないことにしました。しかしプログラムは「」。または「..」という正確な名前ではありません。文字で終わる名前を除外するように急いで書かれています。そしてそれ以来、Unixが従った先例を築きました。興味深いのは、Unixの人々がPlan 9を作り続けていることです。意図的にドットファイルを入れませんでした。

答え3

ファイルを非表示にできるかどうかと条件は、使用しているファイルシステムとそのドライバによって異なります。既存のUnixファイルシステムには、ファイルの「隠し」属性はありません。

ファイルシステムドライバは、ディレクトリリストを取得するために使用されるシステムコールに結果を提供するときに、ファイル名を省略することで目的のファイルを非表示にできます。 sergutが彼の答えで説明したように、ドットで始まるファイルは実際には隠されません。

(これはルートキットがファイルを隠す方法でもあります。ルートキットはディレクトリリストを生成するシステムコールをリンクし、隠すファイルをフィルタリングします。)

たとえば、Oracle ACFSクラスタ・ファイル・システムでは、ディレクトリが<filesystem mountpoint>/.ACFS/実際に隠されています。を使用してもまったく表示されませんls -a。ただし、そのディレクトリがあることがわかっている場合は、正常にアクセスできます。

.ACFSACFSファイルシステムのスナップショット機能を使用している場合、そのファイルシステムの既存のファイルシステムスナップショットはこのディレクトリを介してアクセスできます。隠されていない場合、バックアッププログラムはファイルシステムの現在の内容と既存のスナップショットの内容をバックアップします。これはしばしば望ましくないかもしれません。特定のスナップショット。

関連情報