1753832 メンバー
8808 オンライン
108806 解決策
新規ポスト

lnとlinkの違い

 
りま
アドバイザー

lnとlinkの違い

お世話になっております。

lnで作成したハードリンクとlinkで作成したリンクでは何が異なるのでしょうか?

ネットで調べてみたところ、linkの中でlnをコールしているという書込みを見たので、動作は同じものなのかと思ったのですが、dfで表示したところlnでは作成されたリンク情報が表示されますがlinkで作成された情報が表示されませんでした。

また、ハードリンクは元を複製して作成されるということですが、lnで作成した場合もlinkで作成した場合もディスク内の容量を使用するのでしょうか?

よろしくお願いいたします。
7件の返信7
hazelwood
信頼あるコントリビューター

lnとlinkの違い

ln(1)とlink(2)の違いですか?

ln(1)はコマンドですが、link(2)はシステムコールです。ln(1)の中でlink(2)を使っているはずです。

> dfで表示したところlnでは作成されたリンク情報が

> 表示されますがlinkで作成された情報が表示されま

> せんでした。

この部分ですが、どのようなことをやって、どのような結果になったか、具体的に記述してもらえるともっとフォローがつくと思います。

なお、ハードリンクは、ファイルを複製しません。別のファイル名で同じi-nodeをさすように構成されます。

これは、link(2)でも、ln(1)でも同じです。
りま
アドバイザー

lnとlinkの違い

hazelwood様

お世話になっております。

ご回答ありがとうございました。

>どのようなことをやって、どのような結果になったか、具体的に記述してもらえるともっとフォローがつくと思います。

下記のようなlinkを実行するプログラムを作成しました。

--

int main( int argc, char *argv[] )

{

char link_src1[] = "/home/user/aaaa/aaa.jpg";

char link_dept1[] = "/home/user/aaaa/test_link_dept.jpg";

if( link( link_src1, link_dept1 ) != 0 )

{

/* 失敗 */

perror( "link error\n" );

}

/*! 処理終了 */

exit(0);

}

--

その後、

1.df /home/user/aaaa/ を実行します。

2.プログラムを実行します。

3.df /home/user/aaaa/ を実行します。

4.「ln aaa.jpg test_link_dept.jpg」 を実行します。

5.df /home/user/aaaa/ を実行します。

--

・1の実行後

22062704 blocks 347395 i-nodes

・2の実行後

22062688 blocks 347395 i-nodes

・3の実行後

22062688 blocks 347395 i-nodes

というような結果になり、lnとlinkを使用した場合にブロック数が変わっていました。

lnとlinkが同じならブロック数が変更になっているのがなぜなのか調べたのですが自分では解決に至りませんでした・・。
nt
貴重なコントリビューター

lnとlinkの違い

4 のときに

ln: aaa.jpg dand test_link_dept.jpg are identical

というメッセージが出ませんか?

3 と 4 の間に

$ rm test_link_dept.jpg

$ df /home/user/aaaa/

をしたらどうなりますか?

りま
アドバイザー

lnとlinkの違い

nt様

いつもお世話になっております。

4の実行時ですが、特にメッセージは出ていませんでせした。

以下、3と4の間に処理を入れた結果です。

--

df /home/user/aaaa

22301232 blocks 351153 i-nodes

./a.out

df /home/user/aaaa

22301344 blocks 351153 i-nodes

rm test_link_dept

df /home/user/aaaa/

22301344 blocks 351153 i-nodes

ln aaa.jpg test_link_dept2

df /home/user/aaaa

22301344 blocks 351153 i-nodes

--

nt様の回答を見て、シェルにて操作を実行してみたのですが(今までは手動で行っていました)、シェルで実行した場合には1.3.5のdfで同じ結果が出力されました。

nt
貴重なコントリビューター

lnとlinkの違い

> ln: aaa.jpg dand test_link_dept.jpg are identical

すみません、 Linux での話ですよね。これは HP-UX

の ln でした。

nt
貴重なコントリビューター

lnとlinkの違い

> 22062704 blocks 347395 i-nodes

> 22062688 blocks 347395 i-nodes

> 22062688 blocks 347395 i-nodes

> 22301232 blocks 351153 i-nodes

> 22301344 blocks 351153 i-nodes

> 22301344 blocks 351153 i-nodes

> 22301344 blocks 351153 i-nodes

最初の例では free block が減っていて、次の例では増えています。

何か実験の方法が悪いのではないでしょうか。

Hard link の場合 free block, free i-node 共に変わらないはずです。

りま
アドバイザー

lnとlinkの違い

nt様

いつもお世話になっております。

シェルでの実行時にはln、linkとも結果が変わらなかったので、実行時に他の要因などでブロック数などに変化があったのかな・・と思います。

色々とありがとうございました!