目次
まえがき
inode
软链接
对比
文件重命名或文件移动
文件删除
链接文件和文件夹
不同文件系统创建链接
应用场景
硬链接
总结
ホームページ 運用・保守 Linuxの運用と保守 Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)

Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)

Feb 21, 2022 pm 05:50 PM
linux

この記事では、Linux のハード リンクとソフト リンク、および i ノード関連の問題に関する関連知識を提供します。皆様のお役に立てれば幸いです。

Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)

まえがき

フロントエンド パッケージ マネージャー pnpm は最近非常に人気があり、多数の記事で pnpm の原理が分析されています。理解したところ、pnpm のアーキテクチャ全体がハードリンクとソフトリンクに基づいて構成されていることがわかりましたが、この 2 つの概念について漠然としているので、勉強したいと思います。

ご存知のとおり、Unix/Linux システムではすべてがファイルです。 Linux システムではファイルが非常に重要であることがわかります。ファイルに関して私たちが通常より直観的に感じているのは、間違いなくファイル名とファイルの内容です。しかし、Linux ファイル システムには、ファイル名とファイルの内容に加えて、inode という非常に重要な概念もあります。

Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)

inode

Wikipedia では、inode について次のように説明しています。

inode (インデックス ノード) は、Unix のデータ構造です。ファイルやディレクトリなどのファイル システム オブジェクトを記述するスタイルのファイル システム。各 i ノードには、オブジェクトのデータの属性とディスク ブロックの場所が格納されます。ファイル システム オブジェクトの属性には、メタデータ (最終変更、アクセス、修正の時刻) が含まれる場合があります。

#ディレクトリは、割り当てられた名前を持つ i ノードのリストです。リストには、それ自体、その親、およびそのそれぞれの子のエントリが含まれます。

意味: inode は、Unix のようなファイル システムでファイル システム オブジェクト (ファイルやフォルダーなど) を記述するために使用されるデータ構造です。ファイルのさまざまな属性 (最後の i ノード変更時刻、最終アクセス時刻、最終変更時刻、許可情報などのメタ情報) が格納されます。フォルダーは、それ自体のエントリ、その親ノードのエントリ、およびすべての子ノードを含む i ノードのグループです。

実際には、inode には上記以外のものが含まれます。特に:

  • ファイルのバイト数

  • ファイルのバイト数 ユーザー ID

  • ファイルのグループ ID

  • ファイルの読み取り、書き込み、実行権限

  • タイムスタンプ: ctime、inode が最後に変更された時刻、mtime、ファイルの内容が最後に変更された時刻、atime、ファイルが最後に開かれた時刻

  • #リンクの数、つまり、存在するファイルの数。名前は、この i ノードの場所を指します。

  • ファイル データ ブロック

Linux で使用される ext2/ext3 ファイル システムでは、異なる種類のデータが異なる領域に格納されます。 i ノードで構成される i ノード テーブルは 1 つの場所に保存され、ファイル データ ブロックは別の場所に保存されます。

inode にはファイル名が含まれていません。ファイル名はフォルダー情報構造に格納されています。ファイル名は i ノードのエイリアスに相当するため、管理し覚えておくのに便利です。 Linux システムは i ノードを通じてファイルを操作し、ファイルを変更するとき、システムはフォルダーの情報構造からファイル名に対応する i ノードを検索し、その i ノードに格納されているファイル データ ブロック アドレスから対応する i ノードを検索します。読み取りおよび書き込み操作は、ハードディスクの場所で実行されます。

Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)

ハードリンク

一般に、inode はファイル名およびファイルデータと 1 対 1 の関係を持ちますが、シェルコマンドを使用して次のことを行うことができます。複数のファイル名は、ハード リンクである同じ i ノードを指します。

ln コマンドを使用して、nodejs の fs.link メソッドに対応する

ln test.txt test_hard.txt
ログイン後にコピー

などのハード リンクを作成します。

#ハード リンクを作成する前、test.txt は次のように表すことができます:

Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)#ハード リンクを作成した後:

# test_hard.txt の i ノードはソース ファイル test.txt と同じですが、リンク数が 2 になっていることがわかります。 Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)

ls -li を実行して確認できます。

最初の列は i ノード番号です。どちらも 13029546 であることがわかり、2 つのファイルは同じ i ノードを使用します。 2 列目は権限情報、4 列目は所有者、6 列目はファイルのコンテンツのサイズです。ご覧のとおり、ファイル名が異なることを除いて、ハード リンクによって作成されたファイルには、ソース ファイルとまったく同じメタ情報が含まれています。 3 列目はリンク数を示しており、現在のリンク数は 2 であることがわかります。 Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)

ハード リンク ファイルとソース ファイルは同じ i ノードを使用し、ファイル データの同じブロックを指すため、ファイル名を除くすべての情報は同じです。したがって、これら 2 つのファイルは同等であり、相互にハード リンク ファイルであると言えます。いずれかのファイルを変更すると、他のファイルの内容も同時に変更されることがわかります。

软链接

准确来说叫符号链接(symbolic link),一般又叫软链接(soft link)。与硬链接共用一个inode不同,软链接会创建新的inode,并指向源文件。可以理解软链接就是windows系统中的桌面快捷方式。

创建软链接的命令和硬链接很像,多了-s参数:ln -s

ln -s test.txt test_symbolic.txt
ログイン後にコピー

对应的nodejs的fs.symlink方法。

创建软链接之后:

Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)

源文件inode的链接数还是1,创建了新的inode,软链接指向源文件。

执行ls -li看一下:

Linuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)

可以看到,软链接的inode number跟源文件的不一样,权限一列开头为小写L,表示软链,链接数为1,大小为8个字节。没错,软链文件也有大小,不过一般很小,毕竟只是一个快捷方式。

对比

文件重命名或文件移动

文件重命名和文件移动对于Linux系统来说都是文件绝对路径的更改。对硬链接来说,文件重命名或文件移动不会改变链接指向,而对软链接来说,文件重命名或文件移动则使链接断开,这时通过软链接修改文件内容时会重新创建一个新的inode,跟原文件名和文件数据块关联。

文件删除

rm命令或者nodejs的unlink其实是将inode的链接数减1。对于前文的硬链接,删除test_hard.txt使得inode1的链接数变成1,当链接数变成0时,系统就会释放掉这个inode,之后再创建的新文件就可以使用该inode的inode number了。这时没有inode指向文件数据block,所以文件找不到了。但实际上文件数据还存在硬盘中,所以经常能看到网上有一些帮助恢复误删的文件的工具。软链接inode链接数为1,删除软链接则系统释放该inode。

链接文件和文件夹

软链接可以链接文件和文件夹,但硬链接只能链接文件。

不同文件系统创建链接

软链接可以跨不同的文件系统创建,但是硬链接不行,因为硬链接是共用一个inode,而不同的文件系统有不同的inode table。

应用场景

硬链接

  • 文件备份:为了防止重要的文件被误删,文件备份是一种好的办法,但拷贝文件会带来磁盘空间的消耗。硬链接能不占用磁盘空间实现文件备份。

  • 文件共享:多人共同维护同一份文件时,可以通过硬链接的方式,在私人目录里创建硬链接,每个人的修改都能同步到源文件,但又避免某个人误删就丢掉了文件的问题。

  • 文件分类:不同的文件资源需要分类,比如某个电影即是的分类是外国、悬疑,那我们可以在外国的文件夹和悬疑的文件夹里分别创建硬链接,这样可以避免重复拷贝电影浪费磁盘空间。有人可能说,使用软链接不也可以吗?是的,但不太好。因为一旦源文件移动位置或者重命名,软链接就失效了。

软链接

  • 快捷方式:对于路径很深的文件,查找起来不太方便。利用软链接在桌面创建快捷方式,可以迅速打开并编辑文件。

  • 灵活切换程序版本:对于机器上同时存在多个版本的程序,可以通过更改软链接的指向,从而迅速切换程序版本。这里提到了python版本的切换可以这么做。

  • 动态库版本管理:不是很懂,具体可以看这里。

总结

Linux系统通过inode管理文件,inode存储着文件字节数、文件权限、链接数、数据block位置等信息。

硬链接与源文件共用inode,除了文件名不同,其他与源文件一样。不能对文件夹创建硬链接,不能对不同的文件系统的文件创建硬链接。

软链接类似于windows的快捷方式,有独立的inode。可以对文件夹或不同文件系统的文件创建软链接。

硬链接和软链接修改文件内容都会同步到源文件,因为本质上它们都是指向源文件的数据block。

相关推荐:《Linux视频教程

以上がLinuxのハードリンクとソフトリンクがわかる(画像と文章で詳しく解説)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

rootとしてmysqlにログインできません rootとしてmysqlにログインできません Apr 08, 2025 pm 04:54 PM

ルートとしてMySQLにログインできない主な理由は、許可の問題、構成ファイルエラー、一貫性のないパスワード、ソケットファイルの問題、またはファイアウォール傍受です。解決策には、構成ファイルのBind-Addressパラメーターが正しく構成されているかどうかを確認します。ルートユーザー許可が変更されているか削除されてリセットされているかを確認します。ケースや特殊文字を含むパスワードが正確であることを確認します。ソケットファイルの許可設定とパスを確認します。ファイアウォールがMySQLサーバーへの接続をブロックすることを確認します。

c言語条件付き編集:初心者向けの詳細なガイドへの実践的なアプリケーション c言語条件付き編集:初心者向けの詳細なガイドへの実践的なアプリケーション Apr 04, 2025 am 10:48 AM

c言語条件付きコンパイルは、コンパイル時間条件に基づいてコードブロックを選択的にコンパイルするメカニズムです。導入方法には、#IFおよび#ELSEディレクティブを使用して、条件に基づいてコードブロックを選択します。一般的に使用される条件付き式には、STDC、_WIN32、Linuxが含まれます。実用的なケース:オペレーティングシステムに従って異なるメッセージを印刷します。システムの数字数に応じて異なるデータ型を使用します。コンパイラに応じて、異なるヘッダーファイルがサポートされています。条件付きコンパイルにより、コードの移植性と柔軟性が向上し、コンパイラ、オペレーティングシステム、CPUアーキテクチャの変更に適応できます。

rust錆自明】はじめに rust錆自明】はじめに Apr 04, 2025 am 08:03 AM

1.0.1序文このプロジェクト(コードとコメントを含む)は、私の独学の錆の間に記録されました。不正確または不明確な声明があるかもしれませんが、謝罪してください。あなたがそれから利益を得るなら、それはさらに良いです。 1.0.2なぜRustrustは信頼性が高く効率的ですか? Rustは、CとCを同様のパフォーマンスであり、セキュリティが高くなり、CやCのようなエラーを確認するために頻繁な再コンパイルを必要としません。主な利点には、メモリセキュリティ(nullポインターの防止、ぶら下がりポインター、およびデータ競合の防止)が含まれます。スレッドセーフ(実行前にマルチスレッドコードが安全であることを確認してください)。未定義の動作を避けてください(例:境界のない配列、未知の変数、または解放されたメモリへのアクセス)。 Rustは、ジェネリックなどの最新の言語機能を提供します

Linuxの5つの基本コンポーネントは何ですか? Linuxの5つの基本コンポーネントは何ですか? Apr 06, 2025 am 12:05 AM

Linuxの5つの基本コンポーネントは次のとおりです。1。カーネル、ハードウェアリソースの管理。 2。機能とサービスを提供するシステムライブラリ。 3.シェル、ユーザーがシステムと対話するインターフェイス。 4.ファイルシステム、データの保存と整理。 5。アプリケーション、システムリソースを使用して機能を実装します。

MySQLを解決する方法は開始できません MySQLを解決する方法は開始できません Apr 08, 2025 pm 02:21 PM

MySQLの起動が失敗する理由はたくさんあり、エラーログをチェックすることで診断できます。一般的な原因には、ポートの競合(ポート占有率をチェックして構成の変更)、許可の問題(ユーザー許可を実行するサービスを確認)、構成ファイルエラー(パラメーター設定のチェック)、データディレクトリの破損(テーブルスペースの復元)、INNODBテーブルスペースの問題(IBDATA1ファイルのチェック)、プラグインロード障害(エラーログのチェック)が含まれます。問題を解決するときは、エラーログに基づいてそれらを分析し、問題の根本原因を見つけ、問題を防ぐために定期的にデータをバックアップする習慣を開発する必要があります。

MySQLはAndroidで実行できますか MySQLはAndroidで実行できますか Apr 08, 2025 pm 05:03 PM

MySQLはAndroidで直接実行できませんが、次の方法を使用して間接的に実装できます。Androidシステムに構築されたLightWeight Database SQLiteを使用して、別のサーバーを必要とせず、モバイルデバイスアプリケーションに非常に適したリソース使用量が少ない。 MySQLサーバーにリモートで接続し、データの読み取りと書き込みのためにネットワークを介してリモートサーバー上のMySQLデータベースに接続しますが、強力なネットワーク依存関係、セキュリティの問題、サーバーコストなどの短所があります。

C言語関数ライブラリはどこにありますか? C言語関数ライブラリを追加する方法は? C言語関数ライブラリはどこにありますか? C言語関数ライブラリを追加する方法は? Apr 03, 2025 pm 11:39 PM

C Language Functionライブラリは、さまざまな機能を含むツールボックスであり、さまざまなライブラリファイルに編成されています。ライブラリを追加するには、コンパイラのコマンドラインオプションを介して指定する必要があります。たとえば、GCCコンパイラは-Lオプションを使用して、ライブラリ名の略語が続きます。ライブラリファイルがデフォルトの検索パスの下にない場合は、-Lオプションを使用してライブラリファイルパスを指定する必要があります。ライブラリは、静的ライブラリと動的ライブラリに分けることができます。静的ライブラリはコンパイル時にプログラムに直接リンクされ、動的ライブラリは実行時にロードされます。

特定のシステムバージョンでMySQLが報告したエラーのソリューション 特定のシステムバージョンでMySQLが報告したエラーのソリューション Apr 08, 2025 am 11:54 AM

MySQLのインストールエラーのソリューションは次のとおりです。1。システム環境を慎重に確認して、MySQL依存関係ライブラリの要件が満たされていることを確認します。異なるオペレーティングシステムとバージョンの要件は異なります。 2.エラーメッセージを慎重に読み取り、依存関係のインストールやSUDOコマンドの使用など、プロンプト(ライブラリファイルの欠落やアクセス許可など)に従って対応する測定値を取得します。 3.必要に応じて、ソースコードをインストールし、コンパイルログを慎重に確認してみてください。これには、一定量のLinuxの知識と経験が必要です。最終的に問題を解決する鍵は、システム環境とエラー情報を慎重に確認し、公式の文書を参照することです。

See all articles