ln a.txt b.txt と ln -s a.txt b.txt、どっちでも b.txt から a.txt の中身が読めた
何が違うんや
【疑問】ln と ln -s、どっちも「別名」ちゃうの?ハードリンクとシンボリックリンク【LPICレベル1】
>>1
先に inode の話から。Linux のファイルは、中身の場所や権限、所有者などを inode という管理データで持ってて、inode には番号がついてる
ファイル名は「この番号の inode を指す名前」にすぎない
>>2
で、2つのリンクはどう違うん
>>3
ハードリンクは、同じ inode にもう1つ名前をつけるだけ。どっちが元ということはなく、2つとも対等な名前
シンボリックリンクは、「a.txt を見て」というパスを中身に持つ、別の小さいファイル
>>4ls -li で確かめた(日付は省略)132611 -rw-r--r-- 2 user user 6 a.txt132611 -rw-r--r-- 2 user user 6 hard.txt132612 lrwxrwxrwx 1 user user 5 sym.txt -> a.txt
ハードリンクは先頭の inode 番号が同じで、3列目の数が になってる
>>5
その はリンク数。この inode を指してる名前の数
シンボリックリンクのサイズ は、中身の a.txt が5文字やから
じゃあ a.txt を消したらどうなるん
>>7rm a.txt のあとも、hard.txt はふつうに読める。名前が1つ減って、リンク数が になるだけ
sym.txt は cat: sym.txt: No such file or directory になる。書いてあるパスの先がもうないからls -l では sym.txt -> a.txt のまま残ってて、壊れたリンクになる
>>8
ほな中身はいつ消えるん
>>9
リンク数が になって、そのファイルを開いてるプロセスもなくなったときrm は名前を消すコマンドで、中身を直接消してるわけではない
それならハードリンクのほうが壊れんし便利やん
シンボリックリンクいらんやろ
>>11
ハードリンクには制限がある。ディレクトリには作れない(ln d d2 は hard link not allowed for directory になる)
それと、別のファイルシステム(別のパーティションやディスク)にはまたげない。inode 番号はファイルシステムごとの番号やから
シンボリックリンクはパスを書いてるだけやから、どっちもできる
>>12
ディレクトリといえば、mkdir d しただけでリンク数が になってた。何も入れてないのに
>>13
d という名前と、d の中の .(自分自身)で2つ
中にサブディレクトリを作ると、その中の .. も d を指すから1つ増える
シンボリックリンクの権限が lrwxrwxrwx で全部許可になってる
誰でも書き換えられるってこと?
>>15
リンク自体の権限は使われない。読み書きのときは、リンク先のファイルの権限で判断される
リンク先が なら、他人はリンク経由でも読めない
ln -s file.txt sub/link でサブディレクトリにリンクを作ったら壊れてた
>>17
相対パスは、リンクを置いた場所から見たパスとして解釈される。今いる場所からではない
sub/link は sub の中の file.txt を探すから見つからん。ln -s ../file.txt sub/link にするか、絶対パスで書く
>>18
リンク先を確認する方法は?
>>19ls -l で -> の先を見るか、readlink sub/link。たどった先の実体の絶対パスは readlink -f sub/link
シンボリックリンクだけを探すなら find . -type l、同じ inode の名前を探すなら find . -samefile file.txt
ハードリンクとコピーは何が違うん
>>21cp は新しい inode を作って中身を複製する。片方を書き換えても、もう片方は変わらない
ハードリンクは同じ inode やから、echo more >> h2 で追記すると h1 を読んでも more が出てくる
ハードリンクは同じ中身への2つ目の名前、シンボリックリンクはパスを書いた道しるべ
元を消すと、ハードリンクは残って、シンボリックリンクは壊れる
管理人のひとこと
- Linux のファイル名は inode(中身の場所や権限などを持つ管理データ)を指す名前。ハードリンク(
ln)は同じ inode にもう1つ名前をつけ、シンボリックリンク(ln -s)はパスを中身に持つ別のファイルを作る。 - 元の名前を消しても、ハードリンクからは読める(リンク数が減るだけ)。シンボリックリンクは壊れたリンクになる。中身が消えるのは、リンク数が で、開いているプロセスもなくなったとき。
- ハードリンクはディレクトリに作れず、別のファイルシステムをまたげない。シンボリックリンクはどちらもできる。
- シンボリックリンクの相対パスは、リンクを置いた場所から解釈される。アクセス時の権限はリンク先のもので判断される。
- ディレクトリのリンク数は サブディレクトリの数。
cpは新しい inode を作るので、ハードリンクとは違って片方の変更がもう片方に出ない。