
私は「すべてがファイルです」とは、デバイスでさえUnixとUnix系のシステムにファイル名とパスがあることを意味することを理解しています。これにより、人格に関係なく、さまざまなリソースで汎用ツールを使用できます。しかし、私が使った唯一のオペレーティングシステムであるWindowsとは比較できません。この概念についていくつかの記事を読んでいますが、開発者ではない人にとっては理解するのが少し難しいと思います。人々に必要なのは一般人の説明です!
たとえば、カードリーダーに接続されているCFカードにファイルをコピーするには、次の方法を使用します。
zcat name_of_file > /dev/sdb
Windowsでは、カードリーダーがドライバとして提供されると思いますが、同様のことを行うと思います。それでは、ここで「すべてがファイルです」という概念はどういう意味ですか?
答え1
「すべてが文書である」という言葉は少し横説説です。 「すべてのことはどこかで起こる。ファイルシステム”が目標に近い、さらにはシステム設計の法則よりも理想に近い。
例えば、Unixドメインソケットファイルではありませんが、ファイルシステムには表示されます。ls -l
ドメインソケットを使用してアクセス制御を変更してその属性を公開することができ、chmod
一部のUnix型システム(LinuxではなくmacOSなど)ではcat
データを送受信することもできます。
しかし、頻繁にTCP/IP ネットワークソケット同じ方法で作成して操作するBSDソケットUnixドメインソケット、TCP / IPソケットなどのシステムコールいいえファイルシステムに現れますが、これが本当である特別な理由はありません。
ファイルシステムに存在するファイルではないオブジェクトの別の例は次のとおりです。Linux/proc
ファイルシステム。この機能は、カーネルのランタイム操作に関する豊富な詳細をユーザーに公開します。ユーザースペース、主に仮想プレーンテキストファイルとして使用されます。多くの/proc
項目は読み取り専用ですが、ほとんどは書き込み/proc
可能なので、ファイルを変更できるすべてのプログラムを使用してシステムの実行方法を変更できます。残念ながら、別の非理想的な状況があります:BSD Unix/proc
デフォルトでは実行されませんSystem V Unixは、Linuxよりはるかに少ない数のviaを公開します/proc
。
MSウィンドウと比較できません。
まず、UnixはファイルI / Oに関するもので、Windowsはこの点で「壊れた」という古い概念をオンラインと本で見つけることができます。Windowsシステムこの問題はたくさん解決されました。
最新バージョンのWindowsにはUnixと同様に統合I / Oシステムがあるため、TCP / IPソケットからネットワークデータを読み取ることができます。ReadFile()
Windowsソケット固有のAPIではありませんWSARecv()
、あなたが望むなら。これはまさに平行です。Unix方式、通常のネットワークソケットを使用して読み取ることができます。read(2)
Unixシステムコールまたはソケット別recv(2)
通貨.²
それにもかかわらず、2021年にもWindowsはまだこの概念をUnixと同じレベルに引き上げることができませんでした。 Windowsアーキテクチャの多くの領域は、ファイルシステムを介してアクセスできないか、クラスファイルとして処理できません。いくつかの例:
ドライバー。
WindowsのドライバサブシステムはUnixほど豊富で強力ですが、ドライバを操作するプログラムを書くには通常、次のものを使用する必要があります。Windowsドライバスイート、これはCまたは.NETコードを書くことを意味します。
Unixタイプのオペレーティングシステムでは、コマンドラインを使用してドライバに対してさまざまなタスクを実行できます。不要な出力を
/dev/null
ほぼ確実にすでに行った.³にリダイレクトするだけです。プログラム間通信。
Windowsプログラムは、Unixコマンドラインプログラムと同じくらい簡単にテキストストリームとパイプを介して互いに通信しません。 Unix GUIは通常、コマンドラインプログラムの上に構築またはテキストコマンドインタフェースをエクスポートするため、GUIプログラムにも同じ単純なテキストベースの通信メカニズムが適用されます。
記載。
UnixにはWindowsレジストリと直接同等のものはありません。同じ情報は
/etc
、主に、/proc
およびにあるファイルシステム全体に分散されています/sys
。
Windowsレジストリへのドライバ、パイプ、およびUnixの応答が「すべてがファイルです」に関連していることがわからない場合は、読み続けてください。
「すべてがファイルです」という考えはここでどのように機能しますか?
上記の3つの点を拡張して詳しく説明します。
長い答え、パート1:ドライブとデバイスファイル
E:
CFカードリーダーがWindowsと/dev/sdc
Linuxに表示されているとします。どのような実質的な違いがありますか?
これはほんのわずかな構文の違いではありません。
dd if=/dev/zero of=/dev/sdc
Linuxでは、コンテンツをゼロで上書きすると言うことができます/dev/sdc
。
これが何を意味するのか考えてみてください。これには一般的なユーザースペースプログラムがあります(dd(1)
)、統合Unixファイルシステムを介して仮想デバイス()からデータを読み取り、/dev/zero
読み取ったデータを実際の物理デバイス()に書き込む必要があります。特殊なデバイスを読み書きするのか分からなかった。また、以下のように通常のファイルやミキシングデバイスやファイルでも機能します。/dev/sdc
dd
E:
Windowsはファイルとドライブを区別するため、同じコマンドを使用して動作できないため、Windowsでドライブをゼロにする簡単な方法はありません。最も近い方法は、高速フォーマットオプションなしでディスクをフォーマットすることです。最大内容をドライブに保存し、その上に新しいファイルシステムを書き込みます。私がそうでなければどうしますか?考える新しいファイルシステム?ディスクをゼロだけで埋めるにはどうすればよいですか?
WindowsのプログラムでこれE:
を行うには、特別な書式設定APIを呼び出す必要があります。 ⁴Linuxでは、オペレーティングシステムの「ディスクフォーマット」機能にアクセスするためにプログラムを作成する必要はありません。mkfs.ext4
、mkfs.xfs
、またはあなたは何を持っていますか?これらのプログラムは、/dev
転送したすべてのファイルまたはノードのファイルシステムに書き込みます。
mkfs
Unixyシステムの型プログラムはデバイスと一般ファイルを人為的に区別しないためext4ファイルシステム私のLinuxコンピュータの一般的なファイルから:
$ dd if=/dev/zero of=myfs bs=1k count=1k
$ mkfs.ext4 -F myfs
myfs
これにより、現在のディレクトリに呼び出される1MiBディスクイメージが作成されます。その後、他の外部ファイルシステムのようにマウントできます。
$ mkdir mountpoint
$ sudo mount -o loop myfs mountpoint
$ grep $USER /etc/passwd > mountpoint/my-passwd-entry
$ sudo umount mountpoint
my-passwd-entry
これで、私のユーザーエントリを含むファイルを含むext4ディスクイメージが作成されました/etc/passwd
。
必要に応じて、この画像をマイCFカードに送信できます。
$ sudo dd if=myfs of=/dev/sdc1
または、ディスクイメージをパッケージ化してメールで送信し、メディアに書き込むこともできます。あなたのたとえば、USBスティックを選択します。
$ gzip myfs
$ echo "Here's the disk image I promised to send you." |
mutt -a myfs.gz -s "Password file disk image" \
[email protected]
ファイル、ファイルシステム、デバイス間に人為的な区別がないため、これはすべてLinux⁵で可能です。 Unixシステムにはたくさんのものがありますはいファイルを使用するか、ファイルシステムを介してアクセスするのように見えるファイルと見なすことができるほど、ファイルと十分に似ているようです。
Windowsのファイルシステムの概念はパクパクです。ディレクトリ、ドライブ、およびネットワークリソースを区別します。 Windowsには、Unixなどの..\FOO\BAR
パスシステム、ドライブ文字(たとえばC:
)、およびUNCパス(たとえば)の3つの構文がすべて混在しています。\\SERVER\PATH\FILE.TXT
これはUnixのアイデアの蓄積だからです。CP/M、オペレーティングシステムとLANマネージャ一貫したデザインではなく。だからこそWindowsファイル名に違法文字が多すぎます。。
Unixには統合されたファイルシステムがあり、共通のスキームを介してすべてにアクセスできます。 Linuxシステムで実行されているプログラムの場合/etc/passwd
、、、と/media/CF_CARD/etc/passwd
の間に機能的な違いはありません/mnt/server/etc/passwd
。ローカルファイル、外部メディア、およびネットワーク共有はすべて同じ方法で処理されます。 ⁶
Windowsは上記のディスクイメージの例と同様の目標を達成できますが、非常に才能のあるプログラマーによって書かれた特別なプログラムを使用する必要があります。だからこそWindows用の「仮想DVD」タイプのプログラムがたくさんあります。。コアオペレーティングシステムの機能の欠如により、これらのギャップを埋めるプログラムの人為的な市場が生まれました。これは、最高の仮想DVDタイププログラムを作成するための競争があることを意味します。 *ixシステムではそのようなプログラムは必要ありません。循環装置。
次のような他のツールも同様です。ディスクの消去プログラム、Unixシステムでもこれらのプログラムは必要ありません。 CFカードの内容をゼロにリセットするのではなく、回復不能にシャッフルしたいですか?わかりました。使用してください/dev/random
次の代わりにデータソースとして使用します/dev/zero
。
$ sudo dd if=/dev/random of=/dev/sdc
Linuxでは、コアオペレーティングシステムの機能が十分に機能するだけでなく、うまく機能して広く使用されているため、このように常にホイールを再発明することはありません。いくつかの方法の一つLinuxマシンを起動するには、上記の技術を使用して仮想ディスクイメージを作成する必要があります。
Unixが最初からTCP / IP I / Oをファイルシステムに統合した場合は、対対対の状況が発生しなかったことを指摘するのが妥当だとnetcat
思いsocat
ますncat
。nc
錯乱その理由は、Windows上でディスクイメージングおよび削除ツールの普及をもたらしたのと同じ設計上の欠陥、すなわち許容可能なオペレーティングシステム機能が不足しているためです。
長い答え、パート2:仮想ファイルとしてのパイプ
WindowsはMS-DOSで起動されましたが、豊富なコマンドラインの伝統を持っていません。
これは、Windowsがそうでないことを意味しません。持つコマンドラインまたは多くのコマンドラインプログラムが不足しています。今日、Windowsには非常に強力なコマンドシェルもあります。電源装置ハウジング。
ただし、コマンドラインの伝統が不足すると連鎖効果が発生します。こういうツールが手に入ります。DISKPART
ほとんどの人がコンピュータ管理MMCスナップインを介してディスクパーティション化などのタスクを実行するため、これはWindowsの世界ではほとんど知られていません。その後、パーティションの作成をスクリプト化する必要があるとき、DISKPART
実際には他のプログラムによって駆動されないことがわかります。はい、一連のコマンドをスクリプトファイルに書き込んでから実行することはできますが、DISKPART /S scriptfile
すべてでなければ専任です。あなたは何ですか本物この場合、必要なものは次のとおりです。牛に似た一種の栄養parted
、これは単一のコマンドを受け入れます。たとえば、parted /dev/sdb mklabel gpt
スクリプトはエラー処理を段階的に実行できます。
これらすべてが「すべてがファイルです」と何が関係していますか?単純な:管路コマンドラインプログラムI / Oを一種の「ファイル」に入れます。パイプは一方向です。小川、いいえランダムアクセス通常のディスクファイルに似ていますが、ほとんどの場合、違いは重要ではありません。重要なことは、2つの独立して開発されたプログラムをリンクして、簡単なテキストで通信できることです。この意味では、Unix方式精神的にコミュニケーションできます。
ファイルが必要な場合は、プログラムの出力をファイルに簡単に変換できます。
$ some-program --some --args > myfile
$ vi myfile
しかし、「すべてがファイルです」という哲学は、より良い方法を提供しますが、なぜ一時ファイルに出力を書きますか?コマンドの出力をvi
エディタバッファに読み込むには、vi
「通常」モードで直接実行できます。
:r !some-program --some --args
プログラムの出力を現在のカーソル位置のアクティブエディタバッファに挿入します。その後、vi
パイプは、プログラムの出力をファイルから読み取るために使用されるのと同じオペレーティングシステム呼び出しを使用するいくつかのコードに接続するために使用されます。どちらの場合も:r
(yesとnoなど!
)が含まれている場合、vi
これを行わない理由はありません。
これは最新の機能でもありませんvi
。古代 ed(1)
テキストエディタ。
この強力なアイデアはUnixで引き続き登場します。
2番目の例では、mutt
上記のemailコマンドを思い出してください。私がこれを2つの別々のコマンドで書かなければならなかった唯一の理由*.gz
は、電子メールの添付ファイルの名前が正しく指定されるように一時ファイルの名前を指定したかったからです。ファイル名を気にしない場合は、次のものを使用できます。プロセスの交換一時ファイルの生成を避けてください。
$ echo "Here's the disk image I promised to send you." |
mutt -a <(gzip -c myfs) -s "Password file disk image" \
[email protected]
これは出力をgzip -c
FIFO(ファイルなど)または/dev/fd
オブジェクト(ファイルなど)に変換します。 7
この強力なアイデアがUnixに登場する3番目の方法として、次のことを考えてみましょう。gdb
Linuxシステムで。これはCとC ++で書かれたすべてのソフトウェアのデバッガです。他のシステムからUnixに切り替えるプログラマは、gdb
ほとんどいつも「ああ、あまりにも原始的だ!」と文句を言うだろう。その後、彼らはGUIデバッガを探して、存在する数少ないデバッガの1つを見つけて幸せになります。 GUIがすぐgdb
下で実行され、その上に素晴らしいシェルを提供していることに気づきます。プログラムがそのレベルで競合する必要がないため、競合する低レベルデバッガはほとんどのUnixシステムには存在しません。私たちに必要なのは、良い下位レベルのツールだけです。その下位レベルのツールがパイプを介して簡単に通信できる場合、すべての人はその下位のツールの上に高レベルのツールを構築できます。
これは、私たちが直接置き換えることができる文書化されたデバッガインターフェースを持っていることを意味しますgdb
。残念ながら主な競合会社です。gdb
摩擦の少ない経路を選ばないしかし、その主張を除くとlldb
同様にスクリプトが可能ですgdb
。
Windowsシステムで同じ機能を達成するには、代替ツールの作成者が一種の公式プラグインまたは自動化APIを定義する必要があります。これは、一般的なコマンドラインユーザーインターフェイスと完全なプログラミングAPIを構築するために多くの作業が必要であるため、最も広く使用されているプログラムを除くすべてのプログラムでこれが起こらないことを意味します。
この魔法はユビキタステキストベースの恵みを通して起こります。産業用コンピュータ。
Windows カーネルUnixスタイルの匿名パイプ、一般ユーザープログラムでこれを使用することはほとんどありません。産業用コンピュータコマンドシェルの外側では、Windowsは最初にコマンドラインバージョンですべてのコアサービスを作成し、それに別々にGUIを構築する伝統がないためです。これにより、GUIがなければ不可能なことが起こります。これは、GUIが多すぎる理由の1つです。リモートデスクトップシステムWindowsの場合、Linuxと比較されます。これが、Linuxがすべてをリモートで管理するクラウドオペレーティングシステムになった理由の1つです。コマンドラインインターフェイスは「すべてがファイル」なので、GUIよりも自動化するのは簡単です。
SSHを考えてみましょう。どのように動作するか尋ねることができますか? SSHはネットワークソケット(ファイルと同様)を次に接続します。擬似端末at /dev/pty*
(ファイルに似ています)。これで、リモートシステムはUnix方式と完全に一致する接続を介してローカルシステムに接続されます。SSH接続を介してデータを転送できます、必要に応じて。
今、この概念がどれほど強力であるかを知っていますか?
プログラムの観点から、パイプで連結されたテキストストリームは一方向であることを除いて、ファイルと変わりません。プログラムは、ファイルからデータを読み取るのと同じ方法でパイプからデータを読み込みます。ファイル記述子。 FDは確かにUnixの中核です。ファイル、パイプ、ネットワークソケットがすべて同じI / O抽象化を使用しているという事実があなたに示唆されています。
Windowsの世界では、これらの単純なテキスト通信の伝統が欠けており、重い通信を使用する必要があります。オブジェクト指向プログラミングインターフェース経由シリアル通信または。ネット。これらのプログラムを自動化する必要がある場合は、COMまたは.NETプログラムも作成する必要があります。これはUnixシステムでパイプを設定するよりも少し難しいです。
これらの高度なプログラミングAPIを持たないWindowsプログラムは、クリップボード、ファイル/保存、ファイル/開くなどの基本的なインターフェイスを介してのみ通信できます。
長い答え、パート3:レジストリと設定ファイル
WindowsレジストリとUnixシステムの構成方法の間の実質的な違いは、「すべてがファイルです」という哲学の利点を示しています。
Unixタイプのシステムでは、単にファイルをスキャンしてコマンドラインからシステム構成情報を表示できます。同じファイルを変更してシステムの動作を変更できます。ほとんどの場合、これらの設定ファイルはプレーンテキストファイルであるため、プレーンテキストファイルを処理できるUnixのすべてのツールを使用して設定ファイルを操作できます。
スクリプトWindowsのレジストリはそれほど簡単ではありません。
最も簡単な方法は、1台のコンピュータでレジストリエディタのGUIを介して変更してからregedit
ファイルを介して*.reg
これらの変更を他のコンピュータに盲目的に適用する。これは、条件に応じて何もできないようにする「スクリプト」ではありません。全部または専務です。
レジストリの変更にある程度のロジックが必要な場合、次の最も簡単なオプションは次のことを学ぶことです。電源装置ハウジング.NETシステムプログラミングを学ぶのと同じです。 UnixにはPerlだけがあり、すべてのことを行う必要があるのと同じです。アドホックこれによりシステム管理が行われます。私はPerlファンですが、誰もがそうではありません。 Unixでは、プレーンテキストファイルで動作できるツールであれば何でも使用できます。
脚注:
計画9ネットワークI / Oを公開してこの設計エラーを修正しました。仮想
/net
ファイルシステム。バッシュ
/dev/tcp
一般的なファイルシステム機能を使用してネットワークI / Oを許可します。カーネル機能ではなく Bash 機能なので、 Bash の外部やシステムでは表示されません。Bashをまったく使用しないシステム。これは、ファイルシステムを介してすべてのデータリソースを表示するのが良い理由を示しています。「最新のWindows」とは、Windows NTおよびWindows 2000、Windows ServerおよびXPのすべてのバージョンで始まるすべてのデスクトップ指向のWindowsバージョンを含む、すべての直系の子孫を意味します。私はこの用語を使用して、WindowsのMS-DOSベースのバージョン、つまりWindows 95とその直系の子孫、Windows 98とWindows ME、および16ビット以前のバージョンを除外しました。
後者のオペレーティングシステムでは、統合I / Oシステムがないという点で違いを確認できます。
ReadFile()
Windows 95ではTCP / IPソケットを渡すことはできず、WindowsソケットAPIにのみソケットを渡すことができます。 Andrew Schulmanの主な記事を参照してください。Windows 95:そうでないことこのトピックをさらに詳しく見てください。/dev/null
これが単なる特殊なケースの表面的に同等のファイル名ではなく、Unix型システムの実際のカーネルデバイスであるという点には疑いの余地はありません。NUL
Windowsで。Windows ではファイルの生成をブロックしようとしますが、
NUL
この保護をバイパスできます。ただトリックで、Windowsのファイル名の解析ロジックをだますために。 CygwinまたはExplorerを使用してファイルにアクセスcmd.exe
しようとすると、Windowsはファイルを開くことを拒否しますが、サンプルプログラムと同様の方法でファイルを開いて削除できるため、Cygwinを介して書き込むことができます。同様のゲームで。対照的に、Unixは、
rm /dev/null
書き込み権限を持っている限り、/dev
その場所に新しいファイルを再生成することを許可します。開発ノード別のファイルです。開発ノードが失われても、カーネルの空のデバイスはまだ存在し、次の方法で開発ノードを再作成するまでアクセスできません。mknod
。他の場所に空のデバイス開発ノードを追加作成することもできます。呼び出しの有無にかかわらず、
/home/grandma/Recycle Bin
空のデバイスの開発ノードであるかのように機能します/dev/null
。実際にはあります二つWindowsの高度な「ディスクフォーマット」API:
SHFormatDrive()
そしてWin32_Volume.Format()
。2つありますが、とても...まあ...Windowsいくつかの理由。最初の方法では、Windowsエクスプローラで一般的な「ディスクフォーマット」ダイアログボックスを表示する必要があります。つまり、すべての最新バージョンのWindowsで動作しますが、ユーザーがインタラクティブにログインしている場合にのみ機能します。他のものはユーザー入力なしでバックグラウンドで呼び出すことができますが、Windows Server 2003まではWindowsに追加されませんでした。そうですね。 2003年まで、Unixリリースの世界では、コアオペレーティングシステムの動作はGUIの背後に隠されていました。
mkfs
初日から。/etc/mkfs
私のUnix V5のコピー1974年から4136バイトの静的リンクが始まりました。プラズマ11実行可能。 (Unixは動的接続を取得しません。1980年代後半までしたがって、1つの大きな図書館がすべての実際の作業を行う他の場所とは異なります。 )対応するソースコード - 以下のようにV5システムイメージに含まれています。/usr/source/s2/mkfs.c
- 完全に独立した457ラインCプログラムです。いかなる表明もありません#include
!mkfs
これは、高レベルの機能を確認できるだけでなく、Unixの作成に使用したのと同じツールセットを試すこともできます。ケン・トンプソン、40年前。 Windowsでお試しください。今日入手できる最も近いのはダウンロードすることです。MS-DOSソースコード、に初公開2014年、あなたはそれだけの群れであることがわかります集会源泉。おそらくあなたが持っていない古いツールで構築され、最終的には1974年よりもはるかに強力なオペレーティングシステムであるMS-DOS 2.0のコピーを持つでしょう。Unix V5、ほぼ10年後に発売されたが。(Unix V5について話す理由は、存在する最初の完全なUnixシステムだからです。きっと時間に追われた。持つプロジェクトこれはUnixのV1/V2時代をひとつにまとめたが消えたようです。
mkfs
上記のリンクされたV1マニュアルページの存在は、それがいつかどこかに存在したことに違いありません。このプロジェクトを一緒に行った人が含める既存のコピーを見つけることができない、またはmkfs
私にはfind(1)
存在しないこのシステムに存在しないファイルを見つけるのが困難です。:)
)今、「ただ直接呼び出すべきではないか
format.com
?Windowsで呼び出すのがUnixで呼び出すのと同じではないかmkfs
?」と考えることもできます。いいえ、いくつかの理由で同じではありません。まず、
format.com
スクリプトを書くようには設計されていません。 「準備ができたらEnterキーを押してください」というメッセージが表示されます。これは、Enterキーを入力として送信する必要があることを意味します。それ以外の場合は動作が中断されます。その後、成功/失敗ステータスコード以上のものが必要な場合は、読み取るために標準出力を開く必要があります。Windowsの状況は実際よりもはるかに複雑です。。 (Unixでは、このリンクされた記事のすべての内容に簡単なコマンドでアクセスできます。
popen(3)
呼ぶ)このすべての複雑さのため、
format.com
出力は出力よりも解析するのがはるかに難しく、主に人が使用することを目的としてmkfs
います。内容を追跡すると、
format.com
複雑な一連の呼び出しを実行することがわかります。DeviceIoControl()
、、ufat.dll
など。単にデバイスファイルを開き、そのデバイスに新しいファイルシステムを書き込むだけではありません。これがあなたが得るデザインです世界中で221,000人の従業員を持つ会社そして必要維持するそれらを雇う。コアオペレーティングシステムツールがボランティアによってレジャーに作成されたときに何が起こるのかを見てみましょう。彼らは自分の問題に対する一時的な方法、最小限の解決策を提示し、残りの人に単純さの配当を提供します。
ループデバイスについて話すときは、通常はUnixではなくLinuxについてのみ話します。なぜなら、ループデバイスはUnix型システム間で移植可能ではないからです。 macOS、BSDなどはメカニズムは似ていますが、構文は異なります。少し違う。
ディスクドライブが洗濯機サイズであり、部署役員の高級車よりも高価な時代に、大型コンピュータルームは現代のコンピューティング環境よりも大きなディスクスペース全体を共有しました。リモートディスクをローカルファイルシステムに透過的に移行する機能により、この分散システムをより簡単に使用できます。
/usr/share
たとえば、これが私たちが得る場所です。ドライブ文字がシンボル表現の選択肢をほとんど提供しないWindowsの場合、これは
P:
BigServerの「パブリック」スペースを意味しますか、それともソフトウェアミラーサーバーの「パッケージ」ディレクトリを意味しますか? UNC代替を使用するには、リモートファイルを含むサーバーを覚えておく必要があります。これは、数百または数千のファイルサーバーを持つ大規模な組織では困難です。Windowsは、2007年にVistaがリリースされるまでシンボリックリンクを取得できませんでした。NTFSシンボリックリンクであり、製造されていません。書くことができる 10年後まで。 WindowsシンボリックリンクはUnixシンボリックリンクよりも強力です。これはUnix機能です。1977年から- ローカルパスだけでなく、リモートファイル共有も指すことができるからです。 Unixでは、次のように異なる方法を実行します。1984年 NFS、これはUnixの既存に基づいて構築されました。マウントポイント機能、これは最初からあったものです。
したがって、Windowsは見る観点に応じて、Unixより約20、30、40年遅れています。あなたは「しかしそれはUnixスタイルのシンボリックリンクを持っています」と反対するかもしれません。今!「しかし、これは何十年も経った伝統がないという意味なので、要点を逃しています。使用Windows上で動作するため、Unixシステムが一般的に使用している世界では、人々はそれを認識しません。シンボリックリンクがわからない場合、長い間Unixシステムを使用することはできません。
Windowsは役に立ちません。
MKLINK
プログラムはい戻る、まだWindowsエクスプローラでは作成できませんが、Windowsエクスプローラに対応するUnixは通常するシンボリックリンクを作成できます。/dev/fd
Bashは、どこでも利用できないシステム機能に基づいて方法を選択します。
答え2
まあ、単純化自体として、「すべてがファイルです」という単純な特徴付けが必要です。
Ken ThompsonとDennis Ritchieは、1969年にUNIXシステムを構築し始めたとき、コンピュータと人間の間の相互作用のいくつかの側面を単純化する構造を発見しました。 ThompsonとRitchieは、システムを単純に保つことを目的としており、ごく少数の基本要素で多くの作業を実行できる基本要素のセットを見つけました。
「すべてがファイルです」という考えは、すべてのユーザー操作によってオペレーティングシステムが制御するアドレスでビットが読み書きされることを反映しています。これは、システムコール、割り当てられたメモリ、およびハードウェアデバイスのアドレスです。 UNIXシェルを介してこれらのアドレスを公開すると、ユーザーは追加のソフトウェアなしでさまざまな操作を実行できます。
ファイルを読み取り、書き込み、実行してUNIXシェルと対話します。ここで「ファイル」とは、文字通り書いて、読み、実行できることを意味します。これにより、スクリプトとユーザーはまったく同じ方法でシステムと対話することができ、対話のいくつかの側面が簡素化されます。
Windowsにはそのような哲学はありません。多くの状況で同じ機能を提供しますが、原則が不足しています。たとえば、Windows Shellは視覚的です。エンドユーザーの場合、各ワークセットには独自のツールセットがあることが多く、これらのツールセットをバインドするために他のツールセットが必要になることがよくあります。
答え3
思っLinux
たら英語、file systems
それぞれアルファベットこれは基本的に基本ブロックです。英語。
~からウィキペディアファイルシステムページ、
コンピューティングでは、ファイルシステム(またはファイルシステム)を使用してデータの保存と取得方法を制御します。ファイルシステムがないと、ストレージ内の情報は、ある情報がどこで停止し、次の情報が開始されるかを区別できないデータの塊になります。
したがって、一般人の観点から見ると、英語の正しい言語構造(文字で構成されている)がなければ、人間の相互作用は意味がありません。同様に、ファイルシステムがなければ、基本記憶装置の全てのデータは実際の意味を持たない。