LinuxServer ファイル管理について ファイルのリンク、圧縮、伸長、アーカイブ
ファイルのリンク
Linuxでは、ファイルやディレクトリを作成すると、ユニークなiノード番号が割り当てられます。
iノードとは、ファイルにまつわる属性情報が格納されており、ディレクトリも特殊なファイルとして扱われる為、
iノード情報を持ちます。
このファイル実体に別名を設定し、アクセスを可能にするのが、リンクという仕組みであり、ハードリンクとシンボリックリンクの2種類があります。
ハードリンクとは、ファイルの実体を直接参照するリンクのことで、実体のファイルとリンクのiノード番号が同じ値になる為、
ハードリンクを複数作成可能ですが、ファイルを新規作成した場合はファイル実体とハードリンクが1つある状態になります。
$ ls -li lnfile01
1831489 -rw-rw-r– 1 test test 0 11月 20 10:55 lnfile01
行頭の数字がiノード番号、アクセス権と所有者名の間にある数字「1」がハードリンクの数になります。
ハードリンクが複数ある場合(リンク数が1以上の場合)、元のリンク(ファイルを作成した時のリンク)を削除しても、
別のハードリンクがファイル実体とリンクしている為、実体が残ります。
ハードリンクには次の制限があります。
・無限にディレクトリが作成できないよう、ディレクトリのハードリンクは作成できません。
・iノードの管理が異なる為、別のファイルシステムへのハードリンクは作成できません。
シンボリックリンクはハードリンクと異なり、ファイル実体を参照せず、ファイル実体へのパスを指し示すリンクのことです。
シンボリックリンクではファイル実体とiノード番号が異なり、「元ファイルやディレクトリがどこにあるのか」というパス情報を持ちます。
ファイル実体と直接リンクがされていない為、シンボリックリンクを残したままファイル実体の削除が可能で、ファイル実体を削除した上で
シンボリックリンクにアクセスすると、ファイル実体が見つけられずにエラーとなります。
ディレクトリや異なるファイルシステムへのリンクも可能です。
$ ls -li slnfile0*
1831490 -rw-rw-r– 1 test test 0 11月 20 11:09 slnfile01
1831491 lrwxrwxrwx 1 test test 9 11月 20 11:18 slnfile02 -> slnfile01
シンボリックシンクのアクセス権表記は左端に「l」が付加されて、「lrwxrwxrwx」となりますが、実際はリンク元のアクセス権が適用されます。
ハードリンクとシンボリックの違いは次のとおりです。
ハードリンク | シンボリックリンク | |
---|---|---|
管理情報 | inode番号 | ファイルパス |
ファイルの種類 | 元ファイルと同じ | シンボリックリンク |
元ファイル削除時のリンクファイル | 影響なし | アクセスできなくなる |
リンクファイル削除時の元ファイル | 影響なし | 影響なし |
ディレクトリへの作成 | できない | できる |
別ファイルシステムへの作成 | できない | できる |
リンクの作成にはlnコマンドを使用します。
[コマンド書式]
ln -オプション リンク元 リンク先
オプションなしで実行すると、ハードリンクが作成され、シンボリックリンクを作成するには、-sオプションを使用します。
[コマンド実行例]ハードリンクを作成
$ ls -li hlnfile0*
1831489 -rw-rw-r– 1 test test 0 11月 20 11:40 hlnfile01
$ ln hlnfile01 hlnfile02
$ ls -li hlnfile0*
1831489 -rw-rw-r– 2 test test 0 11月 20 11:40 hlnfile01
1831489 -rw-rw-r– 2 test test 0 11月 20 11:40 hlnfile02
[コマンド実行例]シンボリックリンクを作成
$ ls -li slnfile01
1831490 -rw-rw-r– 1 test test 0 11月 20 11:09 slnfile01
$ ln -s slnfile01 slnfile02
$ ls -li slnfile0*
1831490 -rw-rw-r– 1 test test 0 11月 20 11:09 slnfile01
1831491 lrwxrwxrwx 1 test test 9 11月 20 11:18 slnfile02 -> slnfile01