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 stat
st_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
。
答え2
cd
あなたのシェルはファイル引数で動作しないことがわかるほど賢いです。したがって、クリックするとtab
その内容のみが表示されますcd
。
答え3
cd
コンプリートbash
はTAB
bashオプションによって制御され、/usr/share/bash-completion/bash_completion
でさまざまなコンプリートスクリプトを見つけることができます/etc/bash_completion.d
。cd
完了方法は前の方法で定義した。ディレクトリに対してのみ機能するため、cd
利用可能なディレクトリのみを一覧表示するのは当然です。Linuxのすべてはファイルです。