すべてがファイルですか?

すべてがファイルですか?

Linuxでは、すべてのエンティティがファイルとして扱われます。これにより、vim <cd-Name>ファイルvimとディレクトリを区別しないため、ディレクトリの内容がエディタで開きます。

ところで、今日作業をして、本当に気になった点を発見しました。

入れ子になったディレクトリからファイルを開く予定です。

vim a/b/c/d/file

しかし、vim私は入っていません。

 cd a/b/c/d/

ダブルクリックしましたが、TABコマンドはファイルの代わりに「d」ディレクトリの利用可能なディレクトリのみを表示します。

命令の不服従cdすべてがファイルです「? それとも何か抜けましたか?

ベストアンサー1

これ」すべてがファイルです「この文はオペレーティングシステムのアーキテクチャを定義します。これは、システム内のすべてのもの(プロセス、ファイル、ディレクトリ、ソケット、パイプ...)が抽象化されたファイル記述子で表されることを意味します。仮想ファイルシステムカーネルレイヤー。仮想ファイルシステムはカーネルが提供するインタフェースです。したがって、対応するフレーズは「に修正されました。すべてはファイル記述子ですLinus Torvalds自身がこれをより正確に修正しました。すべてはバイトストリームです」。

ただし、各「ファイル」には、通常のファイルとディレクトリからわかる所有者と権限もあります。したがって、cat、ls、psなどの古典的なUnixツールは、これらのすべての「ファイル」を照会することができ、他の特別なメカニズムを開発する必要はなく、システムコールを使用するread()一般的な古いツールだけが必要です。たとえば、Microsoftのオペレーティングシステムスイートには、すべてのファイルread()形式に対して複数のシステムコールがあり(約15個程度)、各システムコールは少し異なります。すべてがファイルの場合は必要ありません。

あなたの質問について:もちろん他のファイルもありますタイプ。 Linuxでは7種類のファイル形式。ディレクトリはその一つです。ただし、ユーティリティはそれらを区別できます。たとえば、cdコマンドの全機能(を押すと)は、システムコール(参照)が名前付きフィールドを持つ構造を返すTABため、ディレクトリのみを一覧表示します。 POSIX標準は、このフィールドに含めることができる内容を定義します。stat()man 2 statst_mode

       S_ISREG(m)  is it a regular file?
       S_ISDIR(m)  directory?
       S_ISCHR(m)  character device?
       S_ISBLK(m)  block device?
       S_ISFIFO(m) FIFO (named pipe)?
       S_ISLNK(m)  symbolic link? (Not in POSIX.1-1996.)
       S_ISSOCK(m) socket? (Not in POSIX.1-1996.)

コマンドcd補完機能は、フラグが設定されている「ファイル」のみを表示しますS_ISDIR

おすすめ記事