シンボリックリンクはディレクトリに対して作成できますが,ハードリンクにはなぜできないのでしょうか?

循環ディレクトリができるからと言われてもシンボリックリンクでもできるんじゃないかとおもいます.

よろしくおねがいします.

このQ&Aに関連する最新のQ&A

A 回答 (4件)

多くのUnixだとroot権限があればディレクトリのハードリンクは作れます。


Linuxだと出来ないようですね。おそらくお書きのように循環ディレクトリの問題だと思います。
Unixも一般ユーザに許していない理由も同じ。

シンボリックリンクというのはファイルシステム上では(シンボリックリンク属性の付いた)単なるファイルです。循環ディレクトリは出来ません。
循環ディレクトリが出来て困るのは、ファイルシステムの管理上の理由なので、シンボリックリンクで循環を作っても別にOSは困りません。
    • good
    • 0

ANo.2の者ですが、訂正です。


×df → ○du
    • good
    • 0

実際、"."や".."は内部的にハードリンクで実装されていることから


分かるようにファイルシステム的には実装可能であるはずだと思うのですが、
以下のような理由により禁止されているのだと思います。
(ちなみに参考URLからたどれるスレッドではsolarisでは可能だという記述が見られます。)

(1)利用者の混乱を避けるため

仮にディレクトリに対するハードリンクを作成した場合、
作成者以外の人(作成者がその存在を忘れた場合を含む)が、
その存在を直感的に認識するのは大変だと思います。


(2)コマンドのコーディング負担の軽減のため
ぱっと思いつくものでは、
chroot(サンドボックスの外側のディレクトリとハードリンクされるとchrootの意味がない)
find,df等ディレクトリを再帰検索するコマンド(循環参照の検知が面倒くさそう)
find(ディレクトリのハードリンクの存在を調べたりする様な機能の追加)
などが挙げられます。

シンボリックリンクがほとんどの場合に代替の手段となる以上、
ディレクトリのハードリンクの対応にこだわる必要はないと個人的には思います。

参考URL:http://search.luky.org/linux-users.6/msg05762.html
    • good
    • 0

シンボリックリンクは「たどる回数」が制限されていたはず.


ハードリンクに「たどる回数の制限」はありません.
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWindows のシンボリックリンクを編集する方法はありませんか。

Windows のシンボリックリンクを編集する方法はありませんか。

シンボリックリンクのリンク先を相対パスに編集し直したいのです。
何かよい方法はありませんでしょうか。

現状
Windows 7 64bit
Hardlink ShellExtension
http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html
上記アプリにてシンボリックリンクを作っています。
しかし作られるリンク先は絶対アドレスになります。
このアドレスを相対アドレスに変更したいのです。
ボリューム変更や、バックアップ先でもリンクが機能するようにしたいためです。

Aベストアンサー

win7の mklink ではどうでしょうか。

MKLINK [[/D] | [/H] | [/J]] リンク ターゲット

/D
ディレクトリのシンボリック リンクを作成します。
既定では、ファイルのシンボリック リンクが作成されます。

/H
シンボリック リンクではなく、ハード リンクを作成します。

/J
ディレクトリ ジャンクションを作成します。

リンク
新しいシンボリック リンク名を指定します。

ターゲット
新しいリンクが参照するパス (相対または絶対)を指定します。

QNFS接続+シンボリックリンクを使ったディレクトリの参照先について

2台のLinuxサーバ(いずれもRedHat AS3.0) にて、
NFS接続+シンボリックリンクを使ったディレクトリにファイルをコピーしようとしています。

2台のLinuxサーバはそれぞれ
 ・サーバA(NFSサーバ)
 ・サーバB(NFSクライアント)
と記載しています。


初めに、サーバBの「/home/SAVEDATA」をマウントポイントとして、
サーバAの「/home/SAVEDATA」にNFS接続するよう設定した後、
サーバBにtenletでログインし、NFS接続したサーバAのディレクトリをたどっていくと、
途中で「そのようなディレクトリは無い」と言われてしまいます。
------------------------------------------------------------------------------------
[サーバB] $ vdir /home/SAVEDATA/
lrwxrwxrwx 1 user user 34 10月 3 12:21 /home/SAVEDATA/2005 -> /DSK10/SAVEDATA/2005

[サーバB] $ vdir /home/SAVEDATA/2005/
vdir: /home/SAVEDATA/2005/: そのようなファイルやディレクトリはありません
------------------------------------------------------------------------------------

おそらく、最後のコマンドでは
「サーバB」の「/DSK10/SAVEDATA/2005」を探してしまっているのではないかと思うのですが、
実際見て欲しいのは「サーバA」の「/DSK10/SAVEDATA/2005」です。
(サーバBには「/DSK10」は存在しません。)
この環境で、正しくサーバAの「/DSK10/SAVEDATA/2005」を参照するようにすることは可能でしょうか。

お分かりになる方がいらっしゃいましたら、アドバイスをお願い致します。

2台のLinuxサーバ(いずれもRedHat AS3.0) にて、
NFS接続+シンボリックリンクを使ったディレクトリにファイルをコピーしようとしています。

2台のLinuxサーバはそれぞれ
 ・サーバA(NFSサーバ)
 ・サーバB(NFSクライアント)
と記載しています。


初めに、サーバBの「/home/SAVEDATA」をマウントポイントとして、
サーバAの「/home/SAVEDATA」にNFS接続するよう設定した後、
サーバBにtenletでログインし、NFS接続したサーバAのディレクトリをたどっていくと、
途中で「そのような...続きを読む

Aベストアンサー

現状「サーバB」で「サーバA」の「/DSK10/SAVEDATA/2005(/DSK10、/DSK10/SAVEDATAでもいいけど)」配下はNFSで参照出来るのでしょうか?

参照出来ないのでしたら、NFSで参照出来ない領域にアクセスする事は不可能ですからご希望の事は無理です。

例えば、「サーバA」の「/DSK10/SAVEDATA/2005」を「サーバB」で「/DSK10/SAVEDATA/2005」としてNFSマウントすればいいだけだと思うのだけど。

Qシンボリックリンクをする方法

シンボリックリンクする際にHardlink Shell Extensionというソフトを使用しているのですが
方法がいまいちわからなかったので質問させてください。

AppDataというフォルダをRamdiskにシンボリックリンクしたいのですが
AppDataを右クリック→リンク元として選択
→Ramdisk上で右クリック→リンクを作成
であっているでしょうか?

あとリンク先を作成の次に
「シンボリックリンク」か「シンボリックリンクの一括作成」のどちらを選択すればいいでしょうか?

よろしくお願いします。

Aベストアンサー

%AppData%を揮発性メモリ上に作ったりしたら、アプリケーションが動作しなくなりますがいいのですか?
★つれづれなるままに - つれづれブログ:Windows 7のシンボリックリンクを試す - livedoor Blog(ブログ)
http://blog.livedoor.jp/s_imai_jp/archives/51360129.html

Qvsftpd でホームディレクトリに新しいディレクトリが作成できません

どうしてもわからないので教えて下さい。

Fedora Core 4 にてvsftpd環境を構築しています。
いろいろと設定は終わって、Windowsクライアントから接続できるようにはなっています。

ところが、ユザー「ftpusr」でログオンしたとすると、ホームディレクトリ「/home/ftpusr」は正常に表示されるのですが、そこにディレクトリを作成できません。

ためしに、Fedora上で該当ユーザーでログインし、例えばPublic_htmlというディレクトリを作成した場合、作成可能で、その後Windowsからpublic_htmlへ入ると、そこにはディレクトリが作成可能です。

とりあえず、これで運用はできるのですが、なにか気持ち悪いので原因が知りたいのですが。

よろしくお願いいたします

Aベストアンサー

/etc/vsftpd/vsftpd.confの内容に
anon_mkdir_write_enable=YES
を追加かコメントアウトし、
service vsftpd restart
で再起動してみてはどうでしょうか?

QUnixのシンボリックリンクファイルをWindowsマシンへコピーする際の問題回避方法

UNIXのファイル群をバックアップの為にWindowsからFTPでgetしているのですが、シンボリックリンクファイルをWindowsにFTPするとエラーで途中で転送が停止してしまいます。

リンク状況はなるべく保持した形でバックアップを取りたいのですがどうしたらよいでしょうか?

考えられる方法として、(1)UNIXのシンボリックリンクをaliasに変換しながらGetするようなツールはあるのでしょうか?
また(2)UNIX上で取り合えずシンボリックリンクの一覧を表示させたいのですが、どのようなコマンドがありますでしょうか? (find のオプションをチェックしているのですが良い方法が分からなかったので...)

symbolic linkファイルを元ファイルで置き換え(cp -fpr等でリンク元がコピーされる)更にどのような置き換えをしたかログを残したく思っています。

以上宜しくお願いします。

Aベストアンサー

(2) の方だけですが
find . -type l

Qシンボリックリンクでリンク先にcdしたい

cd
ln -s ./dir1/dir2/dir3 .
とするとdir3へのシンボリックリンクができます。(~/dir3)
しかし、
cd ~/dir3
cd ..
とすると、~/dir1/dir2 ではなくて、home ( ~ ) にcdしてしまいます。
cd ~/dir3 により ~/dir1/dir2/dir3 にcd することはできないのでしょうか?
Linux はRedHatです。以前使っていたUnixではこのようなことができたと思いますが、Linuxでうまくいかないので困っています。

Aベストアンサー

ANo1.です。ごめんなさい。逆です。
質問文に書かれた linuxの動作が、シンボリックリンクの素直な性質ではなく、シェルの機能で便利にしてあるのです。質問者様には、便利なはずの機能が逆に不便になってしまっているようですが。

その機能を抑制するには、次のいずれかです。
1. cd -P .. というように、cdコマンドにPオプションをつける。
2. bash起動時に -Pオプションをつける
3. .profileなどに set -P と書いておく。

Qシンボリックリンクの検索

そのディレクトリ以下のシンボリックリンクを検索してくれるコマンドというのはあるのでしょうか?

/home/usr/以下に存在する全てのシンボリックリンクを調べたいのです。

よろしくお願いいたします。

Aベストアンサー

こんにちは。

> そのディレクトリ以下のシンボリックリンクを検索してくれるコマンドというのはあるのでしょうか?

そのディレクトリに移動し、
find . -type l
と入力すればシンボリックリンクが一覧表示されますよ。
(-type の右の文字は小文字のエルです)

findコマンドのこの他のオプションは↓などを参照ください。
http://www.k-tanaka.net/unix/find.html

参考URL:http://www.k-tanaka.net/unix/find.html

Qシェルスクリプト中でシンボリックリンクのリンク先を比較したい

シェルスクリプト中で2つのシンボリックリンクのリンク先を確実に比較する方法を考えています。
当初ls -lの出力を比較してやろうと思ったのですが、リンク先の情報はls -lの最後のカラムにあるため、
万一ユーザー名やファイル名に空白が混じっていた場合、リンク先ではない他の情報を比較してしまうのです。
そこで、リンク先を確認する専用のコマンドがシェルに用意されているかも知れないと思い、質問に参りました。
もしくはls -lでなく、もっと確実にリンク先情報を確認するための方法を編み出した方は教えてください。

Aベストアンサー

Red Hat Linux 8.0(2002年10月)が出たときには、GNU coreutils(2003年4月)はまだ存在していません。
この頃、fileutils, shellutils, textutilsというのがありましたが、その後一つとなってcoreutilsになっています。
ls、cp、mv等のファイル操作に関するコマンドは、fileutilsに入っていますが、この中にreadlinkは含まれていません。


で、readlinkが含まれるパッケージをRPM Searchで検索したらtetexというTeXのパッケージに含まれているようです。

○RPM Search
 http://rpm.pbone.net/index.php3/stat/4/idpl/2406513/com/tetex-1.0.7-57.i386.rpm.html

Qシンボリックリンクの作成

シンボリックリンクの作成方法を教えてください

Aベストアンサー

がると申します。
ln -s ファイル実態のパス シンボリックリンクのパス
で如何でしょうか?
例えば
ln -s /usr/bin/perl5.6.x /usr/bin/perl
と記述すると
/usr/bin/perl5.6.x という「現在実際にあるファイル」に対して、
/usr/bin/perl という「シンボリックリンク」を作成する
って意味になります。

Qこのケース。シンボリックリンクで実現できますか?

レンタルサーバで定番の
/home/user/public_htmlが
WWWサイトのトップに設定されてます。
しかしこれですといろんなソフトを入れる度に
public_htmlフォルダにファイルが増えたり混ざってしまいます。
とりあえず、
/home/user/testsoft/public_htmlを
サイトのトップにしてみたく、シンボリックリンクをやってみたのですがうまく張れませんでした。リンクで実現することは可能でしょうか?

Aベストアンサー

#1 です。

サーバ管理者でなくて、試してみたけど出来なかったのであれば『出来ない可能性』が高いですね。サーバ管理者がシンボリックリンク(先の参照を)禁止している場合、.htacess を使っても無理です。

何で(デフォルトでは)禁止されているかというと、例えば

% ln -s /etc /home/users/testsoft/public_html

が有効に出来ちゃったら、/etc/passwd などの重要なファイルも見えてしまうからなんです。更に言えば性能面でシンボリックリンクを追いかけるのもあまり良くないから、かな。

サーバの管理者の方に「シンボリックリンク使いたいんですけど...」と尋ねてみると良いでしょう。融通の利く(?)管理者であれば何とかしてくれるかもしれませんよ。

 


人気Q&Aランキング