GNU/Linux >> Linux の 問題 >  >> Linux

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

Linuxでは、すべてのエンティティがFILEと見なされます。 vim <cd-Name>を実行した場合 次に、vim ファイルとディレクトリを区別しないため、ディレクトリのコンテンツをエディタで開きます。

しかし、今日、仕事をしているときに、知りたいことがありました。

ネストされたディレクトリからファイルを開く予定でした

vim a/b/c/d/file

ただし、vimの代わりに 、入力しました

 cd a/b/c/d/

TABを押します 2回ですが、コマンドはファイルではなく「d」ディレクトリの使用可能なディレクトリのみを表示していました。

cdはしないでください コマンド名誉「すべてがファイルです 「?それとも何かが足りないのですか?

承認された回答:

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

ただし、すべての「ファイル」には、通常のファイルとディレクトリから知っている所有者と権限もあります。したがって、cat、ls、ps、…などの従来のUnixツールは、これらすべての「ファイル」をクエリできます。すべてread()を使用する単純な古いツール以外に、他の特別なメカニズムを考案する必要はありません。 システムコール。たとえば、Microsoft OSファミリには、複数の異なるread()があります。 任意のファイルタイプに対するシステムコール(15について聞いた)であり、それらはすべて少し異なります。すべてがファイルの場合、それは必要ありません。

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

       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が存在する「ファイル」を表示するだけです。 フラグが設定されています。

関連:Linux – vboxサービスを無効にして起動時間を短縮しますか?
Linux
  1. Linuxでファイルを移動する方法

  2. Linuxファイルパーミッションの基本

  3. Linuxでファイルの名前を変更するにはどうすればよいですか?

  1. Linuxファイルのアクセス許可について

  2. Linuxテールコマンド

  3. Linuxタッチコマンド

  1. LinuxでのCatコマンド

  2. Linuxファイルコマンド

  3. Linuxでファイルを作成する方法