これらの基本的なUnixコマンドの背後で何が起こっていますか?

これらの基本的なUnixコマンドの背後で何が起こっていますか?

私はいくつかの基本的なUnixコマンドと次のように遊んでいました。

  1. "a"ファイルを生成します
  2. 「2」から「1」へのリンクを作成する(ln one two
  3. 「one」ファイルを編集し、単語(one、two、three、four)を別の行に入力します。
  4. 「両方」の内容を確認しました。これまでは内容が同じなのでとても良いです。
  5. 1つのソフトリンクに「3つ」を作成します。 3つも同じ内容です。
  6. 確認リンク数量を使用してくださいls -l
  7. 「one」ファイルを編集し、「five」という単語を別の行に追加します。
  8. ファイル「2」と「3」が同じ内容を持っていることを確認してください。これまでは大丈夫です。
  9. ソフトリンク3(vim three)を編集し、最後に「six」という単語を追加しました。
  10. 確認した結果、3つの文書には1〜6個の単語が含まれています。

質問 - ファイル「1」が「3」ファイルの内容を取得するかどうかを知っています。しかし、なぜファイル「2」もそのファイルをインポートするのですか?

これにより、ls -lファイル 1 とファイル 2 には 28 バイトがあり、ファイル 3 には 3 バイト (可能な 6 バイトのうち) しかないことがわかります。その理由は何ですか?

「1」ファイルを削除すると、3つはまだ1つにリンクされているように見えますが、cat threeファイルが存在しないというエラーは表示されません。しかし、なぜlsコマンドに表示されますか?

答え1

ファイル「2」もなぜインポートされますか?

ln(1)マニュアルページによると、ハードリンクはデフォルトで作成され、「two」は「one」へのハードリンクです。

ファイルへのハードリンクは元のディレクトリエントリと区別できません。ファイルに対するすべての変更は、実際にファイルを参照する名前とは無関係です。


ls -l を実行すると、ファイル 1 と 2 には 28 バイトがあり、ファイル 3 には 3 バイト (可能な 6 バイトのうち) しかないことがわかります。その理由は何ですか?

これは、ファイルの内容が28バイトであるためです。

$ wc -c <<<'one two three four five six'
      28

スペースで置き換えられた改行文字は除外されます。

ファイル「3」の場合はシンボリックリンクである。シンボリックリンクには、リンクされるファイルの名前が含まれます。したがって、「3」のサイズは「1」というファイル名と同じで、3バイトです。


「1つ」ファイルを削除すると、3つはまだ1つにリンクされているように見えますが、3つを認識できず、ファイルが存在しないというエラーが発生します。しかし、なぜlsコマンドに表示されますか?

「one」ファイルを削除すると、「3」ファイルは壊れたシンボリックリンクになります。シンボリックリンクは、明示的に削除しない限り、リンクされたファイルが削除されても消えない特定のファイル形式です。

関連情報